{"info":{"contact":{"email":"support@assetfare.dev","name":"AssetFare support","url":"https://assetfare.dev/security/"},"description":"Capped direct/hybrid quotes and caller-signed unsigned actions. Future actions require verified receipts. The server never signs or submits.","license":{"name":"Proprietary public API terms","url":"https://assetfare.dev/terms/"},"termsOfService":"https://assetfare.dev/terms/","title":"AssetFare Four-chain Agent API","version":"2.0.0"},"openapi":"3.1.0","paths":{"/v2/capabilities":{"get":{"operationId":"getMultichainCapabilities","responses":{"200":{"description":"Capabilities"},"429":{"description":"Rate limited"}},"summary":"List the four-chain core matrix"}},"/v2/prepare":{"post":{"operationId":"prepareMultichainAction","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"amount_usd":{"maximum":1000,"minimum":1,"type":"number"},"event_signer_public":{"type":"string"},"from_chain":{"enum":["solana","base","arbitrum","robinhood"],"type":"string"},"from_token":{"enum":["SOL","ETH","USDC","USDG"],"type":"string"},"to_chain":{"enum":["solana","base","arbitrum","robinhood"],"type":"string"},"to_token":{"enum":["SOL","ETH","USDC","USDG"],"type":"string"},"wallets":{"additionalProperties":false,"properties":{"arbitrum":{"type":"string"},"base":{"type":"string"},"robinhood":{"type":"string"},"solana":{"type":"string"}},"required":["solana","base","arbitrum","robinhood"],"type":"object"}},"required":["from_chain","from_token","to_chain","to_token","amount_usd","wallets","event_signer_public"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Unsigned action bundle"},"400":{"description":"Invalid request"},"429":{"description":"Rate limited"},"502":{"description":"Provider unavailable"},"503":{"description":"Capacity busy"}},"summary":"Get a validated unsigned action bundle"}},"/v2/quote":{"post":{"operationId":"quoteMultichainRoute","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"amount_usd":{"maximum":1000,"minimum":1,"type":"number"},"from_chain":{"enum":["solana","base","arbitrum","robinhood"],"type":"string"},"from_token":{"enum":["SOL","ETH","USDC","USDG"],"type":"string"},"to_chain":{"enum":["solana","base","arbitrum","robinhood"],"type":"string"},"to_token":{"enum":["SOL","ETH","USDC","USDG"],"type":"string"}},"required":["from_chain","from_token","to_chain","to_token","amount_usd"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"as_of":{"format":"date-time","type":"string"},"execution":{"properties":{"first_unsigned_action_supported":{"type":"boolean"},"future_actions_require_verified_receipts":{"const":true,"type":"boolean"},"supported":{"type":"boolean"}},"required":["supported","first_unsigned_action_supported","future_actions_require_verified_receipts"],"type":"object"},"intent":{"properties":{"amount_usd":{"type":"number"},"estimated_input_base":{"minimum":1,"type":"integer"},"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to","amount_usd","estimated_input_base"],"type":"object"},"offer":{"properties":{"assetfare_fee_bps":{"minimum":0,"type":"integer"},"estimated_min_receive_amount":{"type":"number"},"estimated_min_receive_usd":{"type":"number"},"estimated_time_seconds":{"type":["integer","null"]},"expected_receive_amount":{"type":"number"},"expected_receive_usd":{"type":"number"},"fee_collection_steps":{"items":{"minimum":0,"type":"integer"},"type":"array"},"output_symbol":{"type":"string"}},"required":["expected_receive_amount","estimated_min_receive_amount","output_symbol","expected_receive_usd","estimated_min_receive_usd","assetfare_fee_bps","fee_collection_steps"],"type":"object"},"quote_id":{"format":"uuid","type":"string"},"risk":{"properties":{"fresh_quote_required_each_step":{"const":true,"type":"boolean"},"non_atomic":{"type":"boolean"},"server_signing":{"const":false,"type":"boolean"},"server_submission":{"const":false,"type":"boolean"}},"required":["non_atomic","fresh_quote_required_each_step","server_signing","server_submission"],"type":"object"},"route":{"properties":{"quote_latency_ms":{"minimum":0,"type":"integer"},"route":{"type":"string"},"server_signing":{"const":false,"type":"boolean"},"server_submission":{"const":false,"type":"boolean"},"steps":{"items":{"type":"object"},"minItems":1,"type":"array"}},"required":["route","steps","quote_latency_ms","server_signing","server_submission"],"type":"object"},"status":{"const":"capped_public_agent_release","type":"string"},"ttl_seconds":{"minimum":1,"type":"integer"}},"required":["quote_id","status","as_of","ttl_seconds","intent","offer","route","risk","execution"],"type":"object"}}},"description":"Quote"},"400":{"description":"Invalid route"},"429":{"description":"Rate limited"},"502":{"description":"Provider unavailable"},"503":{"description":"Capacity busy"}},"summary":"Get a fee-inclusive route quote"}},"/v2/session":{"post":{"operationId":"createMultichainSession","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"amount_usd":{"maximum":1000,"minimum":1,"type":"number"},"event_signer_public":{"type":"string"},"from_chain":{"enum":["solana","base","arbitrum","robinhood"],"type":"string"},"from_token":{"enum":["SOL","ETH","USDC","USDG"],"type":"string"},"idempotency_key":{"pattern":"^[A-Za-z0-9._:-]{8,128}$","type":"string"},"to_chain":{"enum":["solana","base","arbitrum","robinhood"],"type":"string"},"to_token":{"enum":["SOL","ETH","USDC","USDG"],"type":"string"},"wallets":{"additionalProperties":false,"properties":{"arbitrum":{"type":"string"},"base":{"type":"string"},"robinhood":{"type":"string"},"solana":{"type":"string"}},"required":["solana","base","arbitrum","robinhood"],"type":"object"}},"required":["from_chain","from_token","to_chain","to_token","amount_usd","wallets","event_signer_public","idempotency_key"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Idempotent replay"},"201":{"description":"First unsigned action"},"400":{"description":"Invalid request or capacity reached"},"429":{"description":"Rate limited"},"503":{"description":"Capacity busy"}},"summary":"Create an idempotent receipt-driven session"}},"/v2/session/{session_id}":{"get":{"operationId":"getMultichainSession","parameters":[{"in":"path","name":"session_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Current state"},"404":{"description":"Session unavailable to this network identity"}},"summary":"Read workflow state"}},"/v2/session/{session_id}/observe-output":{"post":{"operationId":"observeOutputReceipt","parameters":[{"in":"path","name":"session_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"idempotency_key":{"pattern":"^[A-Za-z0-9._:-]{8,128}$","type":"string"}},"required":["idempotency_key"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Verified output and next action"},"400":{"description":"Invalid observation"},"429":{"description":"Rate limited"}},"summary":"Derive bridge output from provider and chain receipts"}},"/v2/session/{session_id}/observe-source":{"post":{"operationId":"observeSourceReceipt","parameters":[{"in":"path","name":"session_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"idempotency_key":{"pattern":"^[A-Za-z0-9._:-]{8,128}$","type":"string"},"transaction_hashes":{"items":{"type":"string"},"maxItems":4,"minItems":1,"type":"array","uniqueItems":true}},"required":["idempotency_key","transaction_hashes"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Verified source state"},"400":{"description":"Invalid observation"},"429":{"description":"Rate limited"}},"summary":"Derive source observation from caller-submitted transaction hashes"}},"/v2/session/{session_id}/refresh-action":{"post":{"operationId":"refreshMultichainAction","parameters":[{"in":"path","name":"session_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"idempotency_key":{"pattern":"^[A-Za-z0-9._:-]{8,128}$","type":"string"}},"required":["idempotency_key"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Fresh current action"},"400":{"description":"Action is not refreshable"},"429":{"description":"Rate limited"}},"summary":"Replace an expired unsubmitted action with a fresh quote-bound action"}},"/v2/status":{"get":{"operationId":"getMultichainStatus","responses":{"200":{"description":"Route health"},"429":{"description":"Rate limited"},"503":{"description":"Capacity busy"}},"summary":"Read route health without creating a quote"}}},"security":[],"servers":[{"url":"https://api.assetfare.dev"}],"x-assetfare-safety":{"amount_usd_maximum":1000,"amount_usd_minimum":1,"caller_verifies_signs_and_submits":true,"external_intent_protocol":"Across only for Robinhood ingress","provider_internal_dex_aggregation_possible":true,"public":true,"relay_used":false,"release_mode":"capped_agent_demand_validation","server_signing":false,"server_submission":false,"session_ownership":"session UUID plus a hash of the calling network identity; changing egress IP can make an active session unavailable"}}