Card snapshot
api.teardrop.dev
·
2026-09-11 12:57:40 UTC
·
cab6c1d2abe6f6fe1e09de3c3b8fb2831d604ecc626b21940d41e414560bcdc3
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"schema_version": "1.0",
"protocolVersion": "1.0",
"name": "Teardrop",
"description": "A2A-delegable Web3 decision service for counterparty-risk and DeFi yield-opportunity verdicts, with evidence-backed outcomes and metered USDC access.",
"version": "1.6.0",
"url": "https://api.teardrop.dev",
"provider": {
"organization": "Teardrop AI",
"url": "https://api.teardrop.dev"
},
"documentationUrl": "https://api.teardrop.dev/docs",
"supportedInterfaces": [
{
"url": "https://api.teardrop.dev/agent/run",
"protocolBinding": "https://teardrop.ai/bindings/ag-ui-sse/v1",
"protocolVersion": "1.0"
},
{
"url": "https://api.teardrop.dev/message:send",
"protocolBinding": "https://teardrop.ai/bindings/a2a-jsonrpc/v1",
"protocolVersion": "1.0"
}
],
"capabilities": {
"streaming": true,
"pushNotifications": false,
"extendedAgentCard": false,
"a2ui": true,
"mcp_tools": true,
"multi_turn": true,
"human_in_the_loop": true,
"billing": {
"enabled": true,
"scheme": "exact",
"network": "eip155:8453",
"payment_endpoint": "/agent/run",
"pricing_endpoint": "/billing/pricing"
},
"onboarding": {
"enabled": true,
"methods": [
"siwe",
"x402"
],
"token_endpoint": "/token",
"nonce_endpoint": "/auth/siwe/nonce",
"topup_requirements_endpoint": "/billing/topup/usdc/requirements",
"topup_endpoint": "/billing/topup/usdc",
"credential_recovery": "siwe + POST /org/credentials/regenerate",
"x402_grant_type": "x402"
},
"asyncTasks": {
"enabled": true,
"request_header": "Prefer: respond-async",
"status_endpoint": "/message:status/{task_id}",
"max_concurrency": 8,
"queue_size": 100
},
"marketplace": {
"enabled": true,
"catalog_endpoint": "/marketplace/catalog",
"authors_endpoint": "/marketplace/authors",
"agents_endpoint": "/marketplace/agents",
"agent_directory_endpoint": "/marketplace/agents",
"quote_endpoint": "/marketplace/quote?tool={qualified_name}",
"author_catalog_endpoint": "/marketplace/catalog?org_slug={org_slug}",
"self_inventory_endpoint": "/agent/tools",
"agent_registration_endpoint": "/marketplace/agent-registration",
"registration_benefits_endpoint": "/.well-known/registry-benefits.json",
"mcp_gateway_endpoint": "/tools/mcp",
"registration": {
"author_config_endpoint": "/marketplace/author-config",
"tool_registration_endpoint": "/tools",
"auth": "siwe_or_admin",
"wallet_binding": "siwe_self"
}
},
"eventTriggers": {
"enabled": true,
"registration_endpoint": "/agent/event-triggers",
"dispatch_endpoint_template": "/agent/events/{trigger_token}",
"task_endpoint_template": "/agent/event-triggers/{schedule_id}/runs/{run_id}",
"registration_auth": "bearer_jwt",
"dispatch_auth": "X-Teardrop-Trigger-Secret",
"max_event_bytes": 65536,
"max_per_org": 20,
"max_concurrency": 8,
"max_concurrency_per_org": 4
}
},
"protocols": [
"ag-ui",
"a2a",
"mcp"
],
"endpoints": {
"agent_run": "/agent/run",
"health": "/health",
"docs": "/docs",
"mcp_tools": "/tools/mcp",
"a2a_message": "/message:send",
"a2a_message_status": "/message:status/{task_id}",
"marketplace_catalog": "/marketplace/catalog",
"marketplace_authors": "/marketplace/authors",
"marketplace_quote": "/marketplace/quote",
"event_trigger_registration": "/agent/event-triggers",
"event_trigger_dispatch": "/agent/events/{trigger_token}",
"event_trigger_task": "/agent/event-triggers/{schedule_id}/runs/{run_id}"
},
"defaultInputModes": [
"text/plain",
"application/json"
],
"defaultOutputModes": [
"text/plain",
"application/json"
],
"skills": [
{
"id": "task_planning",
"name": "task_planning",
"description": "Break complex tasks into actionable steps."
},
{
"id": "assess_counterparty_risk",
"name": "assess_counterparty_risk",
"description": "Return a decision-ready counterparty-risk verdict for an EVM address before funds or authority are committed. The result branches to high_risk, caution, acceptable, or insufficient_data with the evidence needed for the calling agent to act.",
"tags": [
"risk",
"counterparty",
"security",
"approvals",
"liquidation",
"web3"
],
"version": "1.0.0",
"use_when": "Delegate this check before sending funds, granting approvals, or interacting with an unknown EVM address when the caller needs a bounded risk decision.",
"limitations": "Analytics and heuristic risk assessment; not a credit bureau, fraud guarantee, or legal endorsement. Relies on DeBank indexing and on-chain Aave/Compound contract states.",
"alternatives": [
"get_wallet_approvals",
"get_liquidation_risk",
"get_wallet_positions"
],
"reputation": {
"reputation_score": 0.0,
"success_rate": 0.0,
"sample_size": 0.0,
"confidence": 0.0,
"freshness": 0.0,
"average_latency_ms": 0.0
}
},
{
"id": "delegate_to_agent",
"name": "delegate_to_agent",
"description": "Delegate a task to a remote A2A-compliant agent. Discovers the agent's capabilities via its agent card, sends it a message, and returns the result. Use when a task requires specialist capabilities beyond your own tools.",
"tags": [
"a2a",
"delegation",
"agent"
],
"version": "1.0.0"
},
{
"id": "discover_agents",
"name": "discover_agents",
"description": "Find opt-in remote A2A agents, published tool capabilities, endpoints, and public reputation status.",
"tags": [
"a2a",
"agents",
"marketplace",
"discovery"
],
"version": "1.0.0",
"use_when": "Use before delegate_to_agent when a specialist agent is needed but its URL is unknown.",
"limitations": "Discovery is read-only and does not add an agent to the org allowlist; delegate_to_agent remains authoritative.",
"alternatives": [
"delegate_to_agent"
],
"reputation": {
"reputation_score": 0.0,
"success_rate": 0.0,
"sample_size": 0.0,
"confidence": 0.0,
"freshness": 0.0,
"average_latency_ms": 0.0
}
},
{
"id": "validate_opportunity",
"name": "validate_opportunity",
"description": "Return a decision-ready yield-opportunity verdict before capital is deployed. The result branches to sustainable, caution, unsustainable, or insufficient_data and gives the calling agent the evidence needed to proceed, pause, or reject the opportunity.",
"tags": [
"defi",
"yield",
"risk",
"validation",
"opportunity",
"liquidity"
],
"version": "1.0.0",
"use_when": "Delegate this check before deploying capital into a DeFi yield pool or staking opportunity when the caller needs an independent sustainability and liquidity decision.",
"limitations": "Heuristic economic assessment based on DeFiLlama analytics and CoinGecko pricing. Does not audit smart contract bytecode, protocol governance, or admin key security.",
"alternatives": [
"get_yield_rates",
"get_protocol_tvl",
"get_lending_rates",
"assess_counterparty_risk"
],
"reputation": {
"reputation_score": 0.0,
"success_rate": 0.0,
"sample_size": 0.0,
"confidence": 0.0,
"freshness": 0.0,
"average_latency_ms": 0.0
}
},
{
"id": "a2ui_rendering",
"name": "a2ui_rendering",
"description": "Declarative UI component generation (table, form, text, button, etc.)."
},
{
"id": "event_trigger_ingress",
"name": "event_trigger_ingress",
"description": "Register an authenticated event subscription that starts a bounded agent task and returns an A2A task ID for polling.",
"tags": [
"events",
"webhooks",
"automation",
"scheduling"
],
"examples": [
"Start a task when a deployment fails.",
"Run this workflow when a marketplace payment settles.",
"Notify me when a monitored price changes."
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
}
],
"tools": [
{
"name": "assess_counterparty_risk",
"version": "1.0.0",
"description": "Return a decision-ready counterparty-risk verdict for an EVM address before funds or authority are committed. The result branches to high_risk, caution, acceptable, or insufficient_data with the evidence needed for the calling agent to act.",
"tags": [
"risk",
"counterparty",
"security",
"approvals",
"liquidation",
"web3"
],
"input_schema": {
"properties": {
"wallet_address": {
"description": "EVM wallet address (0x-prefixed)",
"title": "Wallet Address",
"type": "string"
},
"chain_ids": {
"description": "DeBank chain identifiers scoping approvals and history; positions and net worth remain all-chain.",
"items": {
"type": "string"
},
"title": "Chain Ids",
"type": "array"
}
},
"required": [
"wallet_address"
],
"title": "AssessCounterpartyRiskInput",
"type": "object"
},
"use_when": "Delegate this check before sending funds, granting approvals, or interacting with an unknown EVM address when the caller needs a bounded risk decision.",
"limitations": "Analytics and heuristic risk assessment; not a credit bureau, fraud guarantee, or legal endorsement. Relies on DeBank indexing and on-chain Aave/Compound contract states.",
"alternatives": [
"get_wallet_approvals",
"get_liquidation_risk",
"get_wallet_positions"
],
"output_schema": {
"$defs": {
"ActivitySummary": {
"properties": {
"tx_count": {
"default": 0,
"title": "Tx Count",
"type": "integer"
},
"distinct_counterparties": {
"default": 0,
"title": "Distinct Counterparties",
"type": "integer"
},
"cex_names": {
"items": {
"type": "string"
},
"title": "Cex Names",
"type": "array"
}
},
"title": "ActivitySummary",
"type": "object"
},
"ApprovalSummary": {
"properties": {
"total": {
"default": 0,
"title": "Total",
"type": "integer"
},
"unlimited": {
"default": 0,
"title": "Unlimited",
"type": "integer"
},
"sum_exposure_usd": {
"default": 0.0,
"title": "Sum Exposure Usd",
"type": "number"
},
"hacked_spenders": {
"default": 0,
"title": "Hacked Spenders",
"type": "integer"
},
"abandoned_spenders": {
"default": 0,
"title": "Abandoned Spenders",
"type": "integer"
},
"unverified_spenders": {
"default": 0,
"title": "Unverified Spenders",
"type": "integer"
}
},
"title": "ApprovalSummary",
"type": "object"
},
"DataProvenance": {
"description": "Machine-readable source and freshness metadata for a tool response.",
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"source_urls": {
"items": {
"type": "string"
},
"title": "Source Urls",
"type": "array"
},
"retrieved_at": {
"title": "Retrieved At",
"type": "string"
},
"source_fetched_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Fetched At"
},
"cache_hit": {
"default": false,
"title": "Cache Hit",
"type": "boolean"
},
"cache_age_seconds": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cache Age Seconds"
},
"cache_ttl_seconds": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Cache Ttl Seconds"
}
},
"required": [
"provider",
"retrieved_at"
],
"title": "DataProvenance",
"type": "object"
},
"LiquidationSummary": {
"properties": {
"status": {
"default": "no_debt",
"title": "Status",
"type": "string"
},
"worst_health_factor": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Worst Health Factor"
},
"has_borrow_positions": {
"default": false,
"title": "Has Borrow Positions",
"type": "boolean"
}
},
"title": "LiquidationSummary",
"type": "object"
},
"RiskFactor": {
"properties": {
"category": {
"title": "Category",
"type": "string"
},
"severity": {
"enum": [
"high",
"medium",
"low"
],
"title": "Severity",
"type": "string"
},
"detail": {
"title": "Detail",
"type": "string"
}
},
"required": [
"category",
"severity",
"detail"
],
"title": "RiskFactor",
"type": "object"
}
},
"properties": {
"wallet_address": {
"title": "Wallet Address",
"type": "string"
},
"verdict": {
"enum": [
"high_risk",
"caution",
"acceptable",
"insufficient_data"
],
"title": "Verdict",
"type": "string"
},
"risk_factors": {
"items": {
"$ref": "#/$defs/RiskFactor"
},
"title": "Risk Factors",
"type": "array"
},
"approval_summary": {
"$ref": "#/$defs/ApprovalSummary"
},
"liquidation": {
"$ref": "#/$defs/LiquidationSummary"
},
"activity": {
"$ref": "#/$defs/ActivitySummary"
},
"total_net_worth_usd": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Total Net Worth Usd"
},
"partial_errors": {
"items": {
"type": "string"
},
"title": "Partial Errors",
"type": "array"
},
"data_complete": {
"default": true,
"title": "Data Complete",
"type": "boolean"
},
"provenance": {
"$ref": "#/$defs/DataProvenance"
},
"as_of": {
"title": "As Of",
"type": "string"
}
},
"required": [
"wallet_address",
"verdict",
"provenance",
"as_of"
],
"title": "AssessCounterpartyRiskOutput",
"type": "object"
},
"reputation": {
"reputation_score": 0.0,
"success_rate": 0.0,
"sample_size": 0.0,
"confidence": 0.0,
"freshness": 0.0,
"average_latency_ms": 0.0
}
},
{
"name": "delegate_to_agent",
"version": "1.0.0",
"description": "Delegate a task to a remote A2A-compliant agent. Discovers the agent's capabilities via its agent card, sends it a message, and returns the result. Use when a task requires specialist capabilities beyond your own tools.",
"tags": [
"a2a",
"delegation",
"agent"
],
"input_schema": {
"properties": {
"agent_url": {
"description": "Base URL of the remote A2A agent (e.g. https://agent.example.com)",
"maxLength": 2000,
"minLength": 10,
"title": "Agent Url",
"type": "string"
},
"task_description": {
"description": "Natural language description of the task to delegate",
"maxLength": 4096,
"minLength": 1,
"title": "Task Description",
"type": "string"
},
"task_type": {
"default": "general",
"description": "Broad task class for routing telemetry; never include user data or task text.",
"enum": [
"general",
"research",
"analysis",
"data_retrieval",
"coding",
"transaction",
"automation"
],
"title": "Task Type",
"type": "string"
}
},
"required": [
"agent_url",
"task_description"
],
"title": "DelegateToAgentInput",
"type": "object"
},
"output_schema": {
"properties": {
"agent_name": {
"description": "Name of the remote agent (from its agent card)",
"title": "Agent Name",
"type": "string"
},
"status": {
"description": "A2A task state: completed, failed, etc.",
"title": "Status",
"type": "string"
},
"result": {
"description": "Text result extracted from the remote agent's response",
"title": "Result",
"type": "string"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Error message, if any",
"title": "Error"
},
"error_type": {
"anyOf": [
{
"const": "advertised_price_exceeds_cap",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Stable error type for delegation failures that require planner recovery.",
"title": "Error Type"
},
"cost_usdc": {
"default": 0,
"description": "Cost of this delegation in atomic USDC",
"title": "Cost Usdc",
"type": "integer"
}
},
"required": [
"agent_name",
"status",
"result"
],
"title": "DelegateToAgentOutput",
"type": "object"
}
},
{
"name": "discover_agents",
"version": "1.0.0",
"description": "Find opt-in remote A2A agents, published tool capabilities, endpoints, and public reputation status.",
"tags": [
"a2a",
"agents",
"marketplace",
"discovery"
],
"input_schema": {
"properties": {
"q": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional search across agent name, organization slug, or published tool name",
"title": "Q"
},
"limit": {
"default": 20,
"description": "Maximum number of agents to return",
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
}
},
"title": "DiscoverAgentsInput",
"type": "object"
},
"use_when": "Use before delegate_to_agent when a specialist agent is needed but its URL is unknown.",
"limitations": "Discovery is read-only and does not add an agent to the org allowlist; delegate_to_agent remains authoritative.",
"alternatives": [
"delegate_to_agent"
],
"output_schema": {
"$defs": {
"AgentReputation": {
"properties": {
"status": {
"enum": [
"rated",
"unrated"
],
"title": "Status",
"type": "string"
},
"score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Score"
},
"success_rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Success Rate"
},
"sample_size": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Sample Size"
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Confidence"
},
"unique_caller_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Unique Caller Count"
},
"last_event_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Event At"
},
"is_stale": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Stale"
}
},
"required": [
"status"
],
"title": "AgentReputation",
"type": "object"
},
"DiscoveredAgent": {
"properties": {
"org_slug": {
"title": "Org Slug",
"type": "string"
},
"org_name": {
"title": "Org Name",
"type": "string"
},
"agent_url": {
"title": "Agent Url",
"type": "string"
},
"agent_card_url": {
"title": "Agent Card Url",
"type": "string"
},
"message_endpoint": {
"title": "Message Endpoint",
"type": "string"
},
"catalog_endpoint": {
"title": "Catalog Endpoint",
"type": "string"
},
"tool_count": {
"title": "Tool Count",
"type": "integer"
},
"tool_names": {
"description": "Names of up to 20 active published tools exposed by the agent organization",
"items": {
"type": "string"
},
"title": "Tool Names",
"type": "array"
},
"registered_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "UTC timestamp when the organization first registered its A2A endpoint",
"title": "Registered At"
},
"allowlisted": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Whether the caller's org has this endpoint in its allowlist; null when caller context is unavailable",
"title": "Allowlisted"
},
"reputation": {
"$ref": "#/$defs/AgentReputation"
}
},
"required": [
"org_slug",
"org_name",
"agent_url",
"agent_card_url",
"message_endpoint",
"catalog_endpoint",
"tool_count",
"allowlisted",
"reputation"
],
"title": "DiscoveredAgent",
"type": "object"
}
},
"properties": {
"generated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Generated At"
},
"count": {
"title": "Count",
"type": "integer"
},
"agents": {
"items": {
"$ref": "#/$defs/DiscoveredAgent"
},
"title": "Agents",
"type": "array"
},
"registration_endpoint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Endpoint where an organization can publish its own A2A endpoint.",
"title": "Registration Endpoint"
},
"registration_benefits_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Machine-readable registration benefits, requirements, and non-guarantees.",
"title": "Registration Benefits Url"
}
},
"required": [
"generated_at",
"count",
"agents"
],
"title": "DiscoverAgentsOutput",
"type": "object"
},
"reputation": {
"reputation_score": 0.0,
"success_rate": 0.0,
"sample_size": 0.0,
"confidence": 0.0,
"freshness": 0.0,
"average_latency_ms": 0.0
}
},
{
"name": "validate_opportunity",
"version": "1.0.0",
"description": "Return a decision-ready yield-opportunity verdict before capital is deployed. The result branches to sustainable, caution, unsustainable, or insufficient_data and gives the calling agent the evidence needed to proceed, pause, or reject the opportunity.",
"tags": [
"defi",
"yield",
"risk",
"validation",
"opportunity",
"liquidity"
],
"input_schema": {
"properties": {
"pool_id": {
"description": "DeFiLlama yield pool UUID (e.g. '747c1d2a-c668-4682-b9f9-296708a3dd90').",
"title": "Pool Id",
"type": "string"
}
},
"required": [
"pool_id"
],
"title": "ValidateOpportunityInput",
"type": "object"
},
"use_when": "Delegate this check before deploying capital into a DeFi yield pool or staking opportunity when the caller needs an independent sustainability and liquidity decision.",
"limitations": "Heuristic economic assessment based on DeFiLlama analytics and CoinGecko pricing. Does not audit smart contract bytecode, protocol governance, or admin key security.",
"alternatives": [
"get_yield_rates",
"get_protocol_tvl",
"get_lending_rates",
"assess_counterparty_risk"
],
"output_schema": {
"$defs": {
"DataProvenance": {
"description": "Machine-readable source and freshness metadata for a tool response.",
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"source_urls": {
"items": {
"type": "string"
},
"title": "Source Urls",
"type": "array"
},
"retrieved_at": {
"title": "Retrieved At",
"type": "string"
},
"source_fetched_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Fetched At"
},
"cache_hit": {
"default": false,
"title": "Cache Hit",
"type": "boolean"
},
"cache_age_seconds": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Cache Age Seconds"
},
"cache_ttl_seconds": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Cache Ttl Seconds"
}
},
"required": [
"provider",
"retrieved_at"
],
"title": "DataProvenance",
"type": "object"
},
"LiquiditySummary": {
"properties": {
"tvl_usd": {
"default": 0.0,
"title": "Tvl Usd",
"type": "number"
},
"tvl_30d_change_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Tvl 30D Change Pct"
},
"chart_days": {
"default": 0,
"title": "Chart Days",
"type": "integer"
},
"drain_detected": {
"default": false,
"title": "Drain Detected",
"type": "boolean"
}
},
"title": "LiquiditySummary",
"type": "object"
},
"RiskFactor": {
"properties": {
"category": {
"title": "Category",
"type": "string"
},
"severity": {
"enum": [
"high",
"medium",
"low"
],
"title": "Severity",
"type": "string"
},
"detail": {
"title": "Detail",
"type": "string"
}
},
"required": [
"category",
"severity",
"detail"
],
"title": "RiskFactor",
"type": "object"
},
"YieldSummary": {
"properties": {
"apy": {
"default": 0.0,
"title": "Apy",
"type": "number"
},
"apy_base": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Apy Base"
},
"apy_reward": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Apy Reward"
},
"apy_mean_30d": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Apy Mean 30D"
},
"reward_share_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Reward Share Pct"
},
"is_spiking": {
"default": false,
"title": "Is Spiking",
"type": "boolean"
}
},
"title": "YieldSummary",
"type": "object"
}
},
"properties": {
"pool_id": {
"title": "Pool Id",
"type": "string"
},
"project": {
"default": "",
"title": "Project",
"type": "string"
},
"symbol": {
"default": "",
"title": "Symbol",
"type": "string"
},
"chain": {
"default": "",
"title": "Chain",
"type": "string"
},
"verdict": {
"enum": [
"sustainable",
"caution",
"unsustainable",
"insufficient_data"
],
"title": "Verdict",
"type": "string"
},
"sustainability_reason": {
"title": "Sustainability Reason",
"type": "string"
},
"risk_factors": {
"items": {
"$ref": "#/$defs/RiskFactor"
},
"title": "Risk Factors",
"type": "array"
},
"yield_summary": {
"$ref": "#/$defs/YieldSummary"
},
"liquidity_summary": {
"$ref": "#/$defs/LiquiditySummary"
},
"partial_errors": {
"items": {
"type": "string"
},
"title": "Partial Errors",
"type": "array"
},
"data_complete": {
"default": true,
"title": "Data Complete",
"type": "boolean"
},
"provenance": {
"$ref": "#/$defs/DataProvenance"
},
"as_of": {
"title": "As Of",
"type": "string"
}
},
"required": [
"pool_id",
"verdict",
"sustainability_reason",
"provenance",
"as_of"
],
"title": "ValidateOpportunityOutput",
"type": "object"
},
"reputation": {
"reputation_score": 0.0,
"success_rate": 0.0,
"sample_size": 0.0,
"confidence": 0.0,
"freshness": 0.0,
"average_latency_ms": 0.0
}
}
],
"authentication": {
"required": true,
"scheme": "bearer",
"type": "jwt",
"token_endpoint": "/token"
},
"securitySchemes": {
"bearer_jwt": {
"httpAuthSecurityScheme": {
"description": "JWT bearer token issued by Teardrop.",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
},
"security": [
{
"bearer_jwt": []
}
],
"securityRequirements": [
{
"bearer_jwt": []
}
],
"iconUrl": "https://teardrop.dev/teardrop.png"
}