openapi: 3.2.0 info: title: FarmDash Agent Intelligence API version: 2.0.0 description: 'WARNING: Running trade executions and cancellations places real perpetual futures trades and alters active market exposure, carrying significant risk of financial loss. Immediate, explicit manual end-user confirmation and consent is strictly required immediately before placing any execution or cancellation request. Do not allow autonomous agents to auto-run trade execution or cancellation without manual user approval. FarmDash is an intelligence and control layer for DeFi agents and serious airdrop farmers. This API covers swap transaction preparation (Signal Architect), protocol discovery intelligence (Trail Heat), perpetual futures (Futures Strategist), portfolio research, bounded autonomous sessions, x402 payment flows, and agent-readable opportunity intelligence. FarmDash does not request seed phrases or raw wallet private keys. Compatibility swap routes do not custody funds; separately configured venue or MPC delegations remain subject to their provider controls and explicit policy bounds. ## Authentication | Tier | Price | Auth | Rate Limit | Best for | |------|-------|------|------------|----------| | Scout | Free | None | 5 req / 24 h per IP | Keyless discovery and quotes | | Pioneer | $39.99/mo USDC | `Authorization: Bearer ` | 1,500 req / day | Serious farmers, full datasets, sybil audits, wallet analytics | | Syndicate | $199/mo USDC | `Authorization: Bearer ` | 50,000 req / day | Teams, serious agents, high-volume API use, webhooks, unrestricted CORS, advanced control/session tooling | For SDK development without live data, use the deterministic sandbox on the two endpoints that explicitly support it (`/v1/agent/protocols` and `/v1/trail-heat`): `?mock=true`, `X-FarmDash-Mock: true`, or `Authorization: Bearer fd_sandbox_mock` Quote mock requests return typed `mock_not_supported` without contacting a live provider. Swap execution requires a fresh successful preflight simulation plus an EIP-191 agent wallet signature. Futures execution requires an EIP-712 Hyperliquid wallet signature. ## Dust Storm Protocol On upstream failure, FarmDash returns `ok:false` with a typed degraded state and a `warnings` array containing `{ kind: "dust_storm", message: "..." }`. Cached SDK responses may be returned as stale with explicit stale-data age. ## x402 Payment Wall When Scout limits are exceeded, send `X-Payment-Proof: 0x` with a route-specific USDC transfer on Base to the treasury to unlock one additional request. The configured default overage is 0.01 USDC; premium routes return their own amount. ## Data Confidence Agent-facing research responses include `data_quality` and `scoring_methodology` where available. Trail Heat is a transparent heuristic, not a guaranteed yield, allocation, or airdrop outcome. ## Rate Limit Headers All responses include: - `X-RateLimit-Limit` — max requests for the current window - `X-RateLimit-Remaining` — remaining requests - `X-RateLimit-Reset` — UTC epoch seconds when the window resets - `X-Request-ID` — unique request trace ID (echo it for support) ## Versioned Signature Payload (v1) `v1:FARMDASH_SWAP:{fromChainId}:{toChainId}:{fromToken}:{toToken}:{fromAmount}:{agentAddress}:{toAddress}:{nonce}` ## Mandatory Swap Simulation Gate Call `/agents/quote` with `walletAddress` to receive `intent_id`, then call `POST /v1/simulate` with that intent and wallet before calling `/agents/swap`. `/agents/swap` rejects missing, failed, expired, or mismatched simulations. ' contact: name: FarmDash Engineering url: https://www.farmdash.one/agents license: name: MIT servers: - url: https://www.farmdash.one/api description: Production tags: - name: Intelligence description: Trail Heat protocol data and chain analytics paths: /v1/agent/status: get: operationId: getAgentStatus summary: Get agent feature status and contracts description: 'Public status endpoint for agent builders. Returns feature readiness, tier gates, data-confidence contract, structured-error contract, and deterministic sandbox instructions. This endpoint is not a trading or portfolio-data surface. ' tags: - Intelligence responses: '200': description: Agent status contract content: application/json: schema: type: object additionalProperties: true '405': $ref: '#/components/responses/BadRequest' /v1/agent/protocols: get: operationId: getProtocolCatalog summary: Get catalog protocol directory (discovery heuristic scores) description: 'Returns the curated FarmDash protocol catalog with EDITORIAL discovery heuristic scores. These are NOT live Trail Heat: values derive from static catalog TVL strings, status labels and hand-curated flags (methodology catalog-editorial-v1). The canonical quantitative Trail Heat lives at /v1/trail-heat. Scout tier: top 3 with encrypted numeric values. Pioneer/Syndicate: full dataset for the current FarmDash protocol registry (81 protocols at this build). ' tags: - Intelligence security: - bearerAuth: [] - {} responses: '200': description: Protocol dataset headers: X-RateLimit-Limit: $ref: '#/components/headers/X-RateLimit-Limit' X-RateLimit-Remaining: $ref: '#/components/headers/X-RateLimit-Remaining' X-RateLimit-Reset: $ref: '#/components/headers/X-RateLimit-Reset' X-Request-ID: $ref: '#/components/headers/X-Request-ID' content: application/json: schema: $ref: '#/components/schemas/ProtocolsResponse' '402': $ref: '#/components/responses/PaymentRequired' '429': $ref: '#/components/responses/RateLimitExceeded' /v1/trail-heat: get: operationId: getLiveTrailHeat summary: Get live or deterministic mock Trail Heat scores description: 'Returns DeFiLlama-backed Trail Heat scores with source, confidence, and methodology metadata. `?mock=true` returns deterministic demo fixtures that are explicitly marked mock and not for trading. ' tags: - Intelligence security: - bearerAuth: [] - {} parameters: - name: mock in: query schema: type: string enum: - 'true' description: Return deterministic, explicitly non-live demo data. responses: '200': description: Live or deterministic mock Trail Heat response content: application/json: schema: type: object additionalProperties: true '401': description: Invalid API key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '402': $ref: '#/components/responses/PaymentRequired' '429': $ref: '#/components/responses/RateLimitExceeded' '503': description: Typed Trail Heat service degradation content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /v1/agent/prices: get: operationId: getTokenPrices summary: Get live token price context description: Returns live Alchemy USD prices. Provider failure is a typed ok:false degraded response, never a successful empty or zero price set. tags: - Intelligence security: - bearerAuth: [] - {} parameters: - name: symbols in: query schema: type: string example: ETH,USDC description: Comma-separated token symbols; provide symbols or tokens. - name: tokens in: query schema: type: string example: base-mainnet:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 description: Comma-separated network:address pairs; provide symbols or tokens. responses: '200': description: Live token prices with explicit data quality content: application/json: schema: type: object additionalProperties: true '400': $ref: '#/components/responses/BadRequest' '402': $ref: '#/components/responses/PaymentRequired' '429': $ref: '#/components/responses/RateLimitExceeded' '502': description: Typed upstream price degradation content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '503': description: Price provider is not configured content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /v1/agent/workflows: get: operationId: listAgentWorkflows summary: List supervised workflow templates description: Public catalog of planning and supervised workflow templates. Catalog registration does not enable the execution capabilities used by a workflow. tags: - Intelligence parameters: - name: filter in: query schema: type: string description: Optional case-insensitive catalog filter. responses: '200': description: Workflow catalog content: application/json: schema: type: object additionalProperties: true /v1/agent/chain-breakdown: get: operationId: getChainBreakdown summary: Get protocol distribution by chain description: 'Aggregates the protocol directory by blockchain network. Returns per-chain protocol counts, confirmed airdrops, points programs, and category coverage. ' tags: - Intelligence security: - bearerAuth: [] - {} responses: '200': description: Chain breakdown headers: X-RateLimit-Limit: $ref: '#/components/headers/X-RateLimit-Limit' X-RateLimit-Remaining: $ref: '#/components/headers/X-RateLimit-Remaining' X-RateLimit-Reset: $ref: '#/components/headers/X-RateLimit-Reset' X-Request-ID: $ref: '#/components/headers/X-Request-ID' content: application/json: schema: $ref: '#/components/schemas/ChainBreakdownResponse' '402': $ref: '#/components/responses/PaymentRequired' '429': $ref: '#/components/responses/RateLimitExceeded' components: responses: RateLimitExceeded: description: Rate limit exceeded headers: Retry-After: schema: type: integer description: Seconds until rate limit resets X-RateLimit-Limit: $ref: '#/components/headers/X-RateLimit-Limit' X-RateLimit-Remaining: $ref: '#/components/headers/X-RateLimit-Remaining' X-RateLimit-Reset: $ref: '#/components/headers/X-RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' PaymentRequired: description: Free-tier limit exceeded — x402 payment required headers: X-Payment-Required: schema: type: string X-Payment-Address: schema: type: string description: Treasury wallet (USDC on Base) X-Payment-Token: schema: type: string description: USDC contract on Base X-Payment-Amount: schema: type: string description: Amount in token decimals (990000 = 0.99 USDC) X-Payment-Chain-Id: schema: type: string description: 8453 (Base) content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredError' BadRequest: description: Invalid parameters content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' schemas: ProtocolsResponse: type: object required: - tier - count - data properties: tier: $ref: '#/components/schemas/Tier' count: type: integer data: type: array items: $ref: '#/components/schemas/ProtocolItem' status: type: string message: type: string direct_upgrade_url: type: string format: uri total_protocols_available: type: integer ChainBreakdownResponse: type: object required: - tier - data properties: tier: $ref: '#/components/schemas/Tier' status: type: string message: type: string direct_upgrade_url: type: string format: uri data: type: object properties: chains: type: array items: $ref: '#/components/schemas/ChainBreakdownItem' summary: $ref: '#/components/schemas/ChainBreakdownSummary' ChainBreakdownItem: type: object properties: chain: type: string protocol_count: oneOf: - type: integer - type: string pct_of_total: oneOf: - type: number - type: string confirmed_airdrops: oneOf: - type: integer - type: string points_programs: oneOf: - type: integer - type: string categories: type: array items: type: string Tier: type: string enum: - scout - pioneer - syndicate ProtocolItem: type: object properties: protocol_name: type: string discovery_heuristic_score: oneOf: - type: number - type: string description: Encrypted for scout tier description: Catalog editorial heuristic (methodology catalog-editorial-v1). NOT live Trail Heat — canonical quantitative scores live at /v1/trail-heat. discovery_methodology: type: string sybil_risk: type: string tvl: type: string category: type: string enum: - Perps - Lending - Dex - L2 - Bridge - Restaking - HyperEVM - Infra - Wallet - Testnet status: type: string enum: - Confirmed Airdrop - Points Program - Speculative chains: type: array items: type: string recommended_agent_deploy_link: type: string format: uri PaymentRequiredError: type: object properties: ok: type: boolean example: false error: type: string example: payment_required code: type: string example: payment_required message: type: string retryable: type: boolean direct_upgrade_url: type: string format: uri rate_limit: type: object additionalProperties: true developer_sandbox: type: object additionalProperties: true payment_required: type: object properties: amount: type: string example: 0.01 USDC chain: type: string example: Base destination: type: string example: '0xb0Ed0d7bca24BBaD635B977C2efbE06742e33377' token: type: string chainId: type: integer example: 8453 ChainBreakdownSummary: type: object properties: total_chains: type: integer total_protocols: oneOf: - type: integer - type: string dominant_chain: type: string nullable: true dominant_chain_pct: oneOf: - type: number - type: string ErrorResponse: type: object required: - error properties: ok: type: boolean example: false error: type: string code: type: string message: type: string retryable: type: boolean request_id: type: string details: type: object additionalProperties: true headers: X-Request-ID: description: Unique request trace ID for debugging and support schema: type: string format: uuid X-RateLimit-Reset: description: UTC epoch seconds when the rate limit window resets schema: type: string X-RateLimit-Limit: description: Maximum requests allowed in the current window schema: type: string X-RateLimit-Remaining: description: Remaining requests in the current window schema: type: string securitySchemes: bearerAuth: type: http scheme: bearer description: Pioneer or Syndicate API key x-agent-use-cases: - id: bounded-autopilot name: Bounded Autopilot tier: Syndicate cadence: Every 5 minutes purpose: Run an always-on loop inside explicit budgets, allowlists, cooldowns, quote freshness, and local-signing requirements. primaryTools: - agent_onboard - create_session - configure_autopilot - autopilot_cycle - session_heartbeat stopConditions: - Budget, allowlist, cooldown, quote freshness, or risk bound is violated. - Required local EIP-191 or EIP-712 signature is missing. - Realized performance degrades enough to require analysis_only mode. - id: airdrop-rotation name: Airdrop Rotation Desk tier: Pioneer cadence: Daily or event-driven purpose: Watch Trail Heat, snapshots, multiplier changes, wallet health, and costs before entering, waiting, rotating, or exiting. primaryTools: - get_trail_heat - get_historical_trailheat - get_agent_events - simulate_points - get_swap_quote - simulate_swap_execution stopConditions: - Expected point edge is unclear or negative after fees and gas. - Sybil risk exceeds the configured threshold. - User constraints do not allow the target chain or protocol. - id: cross-chain-roi name: Cross-Chain ROI Gate tier: Pioneer cadence: Before any bridge purpose: Bridge only when net expected edge remains positive after bridge fee, gas, slippage, and execution risk buffer. primaryTools: - get_chain_breakdown - get_wallet_balances - get_token_prices - get_swap_quote - simulate_swap_execution - optimize_portfolio stopConditions: - netEdgeUsd is not positive. - Quote age exceeds the configured freshness limit. - Target chain is not allowlisted. - id: perps-hedge name: Perps Hedge Co-Pilot tier: Syndicate cadence: Before exposure changes purpose: Evaluate whether a farming position needs a Hyperliquid hedge, with no_trade as a valid outcome. primaryTools: - scan_funding_rates - scan_market_conditions - get_futures_account - analyze_futures_strategy - calculate_position_size stopConditions: - Research gate expires. - Strategy confidence, liquidity, jurisdiction, or guardrails do not support execution. - Daily loss or drawdown limit is reached.