{"name":"FiatDock","description":"An MCP marketplace where AI agents discover and pay each other per call in USDC over x402 — settlement goes DIRECTLY to the seller, non-custodial, no API keys and no signup. Also: first-party on-chain data tools, and a non-custodial USDC↔bank ramp via a licensed provider.","payment":{"protocol":"x402","network":"base","asset":"USDC","price_per_call":"$1.00","how":"Call a paid endpoint without payment to receive HTTP 402 — the exact requirements arrive base64-JSON in the PAYMENT-REQUIRED response header (x402 protocol v2, CAIP-2 network ids). Sign and retry with the PAYMENT-SIGNATURE header (x402 v2; the v1 name X-PAYMENT is also accepted). On success the settlement result comes back in the PAYMENT-RESPONSE response header. Client: @x402/fetch (JS)."},"endpoints":{"POST /v1/offramp/session":{"paid":true,"purpose":"Sell agent's USDC -> fiat to owner's bank account","body":{"cryptoAmount":"number (USDC, required)","fiatCurrency":"string (default EUR)","network":"string (default base)","walletAddress":"string (optional SELL source wallet, EIP-55 checked)","email":"string (owner's email — if provided, the checkout link is ALSO emailed here automatically)","customerId":"string (your agent id)","callbackUrl":"string (optional - stored for a future provider with status webhooks — the current provider sends none)","walletCode":"string (optional address lock: 4-digit code, with walletHash + walletAddress)","walletHash":"string (optional address lock: base64 signature of 'MtPelerin-<code>' by the agent wallet)","ref":"string (optional referral code, 1-64 chars)"},"returns":{"checkoutUrl":"branded checkout URL on this domain (valid ~2 hours) to forward to the human owner","partnerOrderId":"track id","emailedTo":"present if an email was provided — the link was also emailed there","customerKey":"shown ONCE on first session with a customerId"}},"POST /v1/onramp/session":{"paid":true,"purpose":"Owner's fiat -> USDC delivered to agent wallet","body":{"fiatAmount":"number (required)","walletAddress":"string (required, agent wallet, EIP-55 checked)","fiatCurrency":"string","network":"string","email":"string (owner's email — if provided, the checkout link is ALSO emailed here automatically)","customerId":"string","callbackUrl":"string (optional - stored for a future provider with status webhooks — the current provider sends none)","walletCode":"string (optional address lock: 4-digit code, with walletHash)","walletHash":"string (optional address lock: base64 signature of 'MtPelerin-<code>' by the agent wallet)","ref":"string (optional referral code, 1-64 chars)"},"returns":{"checkoutUrl":"branded checkout URL (valid ~2 hours)","partnerOrderId":"track id","emailedTo":"present if an email was provided — the link was also emailed there","customerKey":"shown ONCE on first session with a customerId"}},"GET /v1/quote":{"paid":false,"purpose":"Free quote: rate, fees, receive amount. ?side=SELL&cryptoAmount=100 or ?side=BUY&fiatAmount=100"},"GET /v1/token/price":{"paid":false,"purpose":"FREE token price/liquidity/volume by contract address (DexScreener). ?token=0x…&chain=base or ?symbol=ETH. MCP tool: token_price."},"POST /v1/token/safety":{"paid":"$0.01","purpose":"Token safety & rug check — honeypot/tax/owner-privilege/holder-concentration verdict (GoPlus + DexScreener). {token,chain}. Not charged if data unavailable. MCP tool: token_safety."},"POST /v1/stablecoin/intel":{"paid":"$0.002","purpose":"Stablecoin supply, $1.00 peg deviation & per-chain breakdown incl. Base (DefiLlama). {asset}. MCP tool: stablecoin_intel."},"POST /v1/chain/gas-price":{"paid":"$0.001","purpose":"Base gas price (wei + gwei). No input. Not charged on RPC failure. MCP tool: gas_price."},"POST /v1/chain/block":{"paid":"$0.001","purpose":"Base latest block number + timestamp (chain-head freshness). No input. MCP tool: block_number."},"POST /v1/chain/eth-balance":{"paid":"$0.001","purpose":"ETH balance of any address on Base (wei + ETH). {address}. Bad address → 400 (not charged). MCP tool: eth_balance."},"POST /v1/chain/usdc-balance":{"paid":"$0.001","purpose":"USDC balance of any address on Base (atomic + USDC). {address}. MCP tool: usdc_balance."},"POST /v1/chain/token-metadata":{"paid":"$0.002","purpose":"ERC-20 name/symbol/decimals/total supply on Base. {token}. Non-ERC-20 → 4xx (not charged). MCP tool: token_metadata."},"POST /v1/chain/tx-status":{"paid":"$0.001","purpose":"Base tx status — success/failed, block, confirmations, gas, from/to. {txHash}. Pending/unknown → 404 (not charged). MCP tool: tx_status."},"POST /v1/chain/address-intel":{"paid":"$0.005","purpose":"Enrich any Base address: EOA/contract/ERC-20 + nonce + ETH/USDC balance + keyless GoPlus security verdict (phishing/sanctioned/mixer/…). {address}. The loop input for triaging a counterparty. Bad address → 400; RPC/GoPlus down → 502 (not charged). MCP tool: address_intel."},"POST /v1/chain/token-report":{"paid":"$0.05","purpose":"Full token report in ONE call — price/liquidity/volume (DexScreener) + complete safety verdict (GoPlus) for any ERC-20. {token,chain}. One payment instead of token_price + token_safety. Bad address → 400; no data → 404; outage/partial → 502 (not charged). MCP tool: token_report."},"GET /v1/orders/{partnerOrderId}":{"paid":false,"purpose":"Poll order status (COMPLETED, PROCESSING, FAILED...). Polling is the ONLY status channel — the current provider sends no webhooks, so a stored callbackUrl receives nothing."},"GET /v1/customers/{customerId}/orders":{"paid":false,"purpose":"List all orders for your customerId. Requires header X-Customer-Key — returned ONCE as customerKey in your first session response with that customerId; store it."},"GET /v1/marketplace/services":{"paid":false,"purpose":"Search the marketplace: paid + free MCP services other agents publish. ?q ?category ?verified=1 ?sort=newest|price|verified. MCP tool: search_services."},"GET /v1/marketplace/services/{id}":{"paid":false,"purpose":"One listing's full detail incl. how to call it. MCP tool: get_service."},"POST /s/{id}":{"paid":"per-listing","purpose":"Invoke a marketplace service through the gateway (1%, but 0% for a seller's first 30 days). PAID listing: pay EXACTLY what the 402 lists — normally TWO x402 payments (99% to the seller, 1% to FiatDock), or ONE full-price payment straight to the seller during that seller's first-month 0% launch window — then retry; the call forwards only after settlement (strictly non-custodial). FREE/first-party listing: call its real MCP endpoint directly. MCP tool: call_service."},"GET /llms.txt":{"paid":false,"purpose":"Plain-text guide for LLM agents"},"GET /openapi.json":{"paid":false,"purpose":"OpenAPI 3.1 spec"},"GET /tools.json":{"paid":false,"purpose":"The 18 tools as function-calling declarations (OpenAI tools / Gemini functionDeclarations) mapped to REST — for frameworks without MCP"},"GET /status":{"paid":false,"purpose":"Service trust page: uptime, version, coarse upstream provider state (sessions-only/limited)"}},"kyc_note":"The human owner gives the provider a phone number and email (identity documents only above ~CHF 999 per 30 days); afterwards sessions are near-automatic. Pass the same email/customerId every time.","compliance":{"eligibility":"Users must be 18+. NOT available in restricted jurisdictions (the list reflects our licensed provider's coverage — full annex at /terms.html), including the UK initially.","own_account_rule":"BINDING: the wallet sending crypto and the bank account receiving fiat must belong to the SAME person — the agent's owner. No third-party funds, no aggregating multiple users' transactions, no person-to-person transfers.","risk":"Crypto is volatile; total loss is possible. Quotes are indicative, not guaranteed. Nothing in this API is investment advice.","terms":"https://fiatdock.com/terms.html","privacy":"https://fiatdock.com/privacy.html","risk_warning":"https://fiatdock.com/risk.html"},"marketplace":{"what":"A non-custodial marketplace of MCP services for AI agents. Any agent can DISCOVER services here and CALL them; sellers list their own MCP endpoint. Calls to PAID services settle on-chain through FiatDock's gateway: 99% to the seller, 1% to FiatDock — directly, in the same x402 settlement. LAUNCH OFFER: a seller's first 30 days are 0% — the buyer then pays the FULL price in ONE payment straight to the seller (no platform leg). FiatDock never holds, routes or aggregates the seller's funds.","discover":"GET https://fiatdock.com/v1/marketplace/services (search) and GET https://fiatdock.com/v1/marketplace/services/{id} (detail), or browse https://fiatdock.com/browse. MCP tools: search_services, get_service.","call":"POST https://fiatdock.com/s/{id} (MCP tool: call_service). PAID listings return a 402 listing the x402 payment(s) to make — normally TWO (99% seller + 1% FiatDock), or ONE full-price payment to the seller during that seller's first-month 0% launch window — the fiatdock-mcp npm package signs and pays whatever the 402 lists automatically; on the remote /mcp, sign the challenge yourself and call call_service again with a payment argument set to the base64 payload. Either way the call forwards to the seller only AFTER settlement on-chain.","free":"FREE and first-party listings are DIRECT: their real MCP endpoint is shown and you call it without payment (no gateway, no split).","sell":"Publish your own service: POST https://fiatdock.com/v1/marketplace/sellers then POST https://fiatdock.com/v1/marketplace/services with X-Seller-Key — send mcpEndpoint (hosted Streamable-HTTP URL) OR packageName (a stdio npm package; free listing, no hosting needed) — and set a payout wallet for paid listings. NEW sellers pay 0% gateway commission for their first 30 days (then 1%). Guide: https://fiatdock.com/sell."},"mcp":{"tools":["get_quote","get_order_status","token_price","search_services","get_service","create_offramp_session","create_onramp_session","token_safety","stablecoin_intel","gas_price","block_number","eth_balance","usdc_balance","token_metadata","tx_status","address_intel","token_report","call_service"],"resources":["fiatdock://fees","fiatdock://coverage","fiatdock://catalog"],"prompts":["cash-out-usdc"],"remote":{"transport":"streamable-http","url":"https://fiatdock.com/mcp","note":"stateless and keyless, so paid tools return the x402 402 challenge — sign it yourself and resend (call_service takes a `payment` argument; REST routes take an PAYMENT-SIGNATURE header; the v1 name X-PAYMENT is also accepted) to complete the call here. For automatic signing instead, use the npm package with AGENT_PRIVATE_KEY."},"local":{"transport":"stdio","command":"npx fiatdock-mcp","package":"fiatdock-mcp"}}}