{"protocol":"mpp","version":"0.1","service":{"name":"Settle","description":"Programmable escrow. Hold funds, verify conditions, and settle after payout confirmation.","house_line":"Ready to settle when the payout is confirmed."},"endpoints":{"create":{"method":"POST","path":"/escrow/create"},"get":{"method":"GET","path":"/escrow/{id}"},"status":{"method":"GET","path":"/escrow/{id}/status"},"verify":{"method":"POST","path":"/escrow/{id}/verify"},"authorize_release":{"method":"POST","path":"/escrow/{id}/authorize-release"},"payout":{"method":"POST","path":"/escrow/{id}/payout"},"payout_status":{"method":"GET","path":"/escrow/{id}/payout"},"fund":{"method":"POST","path":"/escrow/{id}/fund"},"checkout":{"method":"POST","path":"/escrow/{id}/checkout"},"fund_spt":{"method":"POST","path":"/escrow/{id}/fund-spt"},"fund_usdc_base":{"method":"POST","path":"/escrow/{id}/fund-usdc-base"},"fund_usdg_xlayer":{"method":"POST","path":"/escrow/{id}/fund-usdg-xlayer"},"walletconnect":{"method":"GET","path":"/escrow/{id}/walletconnect"},"fund_usdg":{"method":"POST","path":"/escrow/{id}/fund-usdg"},"fund_usdg_eth":{"method":"POST","path":"/escrow/{id}/fund-usdg-eth"},"fund_usdc":{"method":"POST","path":"/escrow/{id}/fund-usdc"},"fund_usdc_eth":{"method":"POST","path":"/escrow/{id}/fund-usdc-eth"},"pay":{"method":"POST","path":"/escrow/{id}/pay"},"x402_deferred_offer":{"method":"POST","path":"/x402/deferred/offer"},"x402_deferred_commit":{"method":"POST","path":"/x402/deferred/commit"},"webhook_github":{"method":"POST","path":"/webhooks/github"},"webhook_stripe":{"method":"POST","path":"/webhooks/stripe"},"webhook_payout":{"method":"POST","path":"/webhooks/payout"},"webhook_usdg":{"method":"POST","path":"/webhooks/usdg-transfer"},"webhook_usdg_eth":{"method":"POST","path":"/webhooks/usdg-transfer-eth"}},"discovery":{"skill":"/skill.md","openapi":"/openapi.json","llms":"/llms.txt","agents":"/agents.txt"},"compatibility":{"base_agents":{"status":"compatible","notes":"Base gives agents wallets, USDC, x402, and agent identity primitives. Settle composes with that stack as the conditional settlement layer: use a Base agent wallet to fund USDC on Base, register a provider payout address, then let Settle verify the condition before payout finalizes."},"app":{"name":"OKX Agent Payments Protocol","status":"planned","notes":"APP describes quote, negotiation, escrow, metering, settlement, and dispute flows on X Layer. Settle already exposes the escrow state machine and X Layer USDG payout rail; APP-specific message formats should be integrated once the escrow spec is public and stable."}},"pricing":{"model":"principal_and_release","principal":"client-specified at create-time, denominated in USDC or USDG","platform_fee_bps":0,"notes":"Settle holds the principal until the condition is verified and payout is confirmed. The principal is the only payable amount. There is no per-call fee."},"payment_rails":[{"id":"stripe_spt","status":"sandbox_preview","description":"Sandbox Stripe Link shared payment token funding for agent cards. POST /escrow/{id}/fund-spt or POST /escrow/{id}/pay with { payment_credential: { shared_payment_granted_token } } creates and confirms a PaymentIntent using the 2026-04-22.preview API version. Requires STRIPE_SECRET_KEY and Stripe SPT access. Not the primary production rail in v0.1.","currency":"USD"},{"id":"stripe_payment_intent","status":"sandbox","description":"Sandbox human card / Link funding via Stripe Checkout or regular PaymentIntents. POST /escrow/{id}/checkout redirects browser clients to hosted Checkout; POST /escrow/{id}/fund creates a PaymentIntent for API clients. Both wait for /webhooks/stripe to fire FUND. Live Stripe funding is planned after account activation and reconciliation work.","currency":"USD"},{"id":"bridge_payouts","status":"planned","description":"Planned fiat/cross-border payout rail. The API shape exists behind payout_method=bridge, but v0.1 launch does not market Bridge payouts as live until the operator account, compliance posture, and reconciliation flow are ready.","currency":"USD"},{"id":"vault_stablecoin_payouts","status":"available","description":"Base USDC and X Layer USDG operator-vault payout rail. If payout_method is base_usdc or xlayer_usdg, POST /escrow/{id}/authorize-release signs and broadcasts an ERC-20 transfer from the configured vault to payout_destination. GET /escrow/{id}/payout?sync=1 checks the transaction receipt and settles when status=0x1.","currencies":["USDC","USDG"],"chains":["base","xlayer"]},{"id":"ethereum_stablecoin_payouts","status":"optional_legacy","description":"Optional legacy Ethereum per-contract payout rail. Not the primary v0.1 path. Base USDC and X Layer USDG vault payouts are the launch rails.","currencies":["USDC","USDG"],"chain":"ethereum"},{"id":"visa_agent_wallet","status":"partial","description":"Visa agent wallet via @visa/cli (MCP server). /escrow/{id}/pay exposes an HTTP 402 challenge-response facade. Stablecoin accepts are available now; card/SPT-style credentials should treat the Stripe Link SPT path as sandbox until live Stripe is activated.","currency":"USD"},{"id":"walletconnect_intent","status":"available","description":"GET /escrow/{id}/walletconnect returns a WalletConnect-ready eth_sendTransaction intent for funding with Base USDC or X Layer USDG. WalletConnect handles wallet selection and signing; Settle verifies the resulting transaction with /sync-funding.","currencies":["USDC","USDG"],"chains":["base","xlayer"]},{"id":"usdg_onchain","status":"configured_optional","description":"USDG funding support. X Layer USDG is the primary v0.1 USDG rail. Solana and Ethereum funding endpoints are optional/configured paths and are not the launch positioning.","currency":"USDG","chains":["xlayer","solana","ethereum"]},{"id":"usdc_onchain","status":"configured_optional","description":"USDC funding support. Base USDC is the primary v0.1 USDC rail. Solana and Ethereum funding endpoints are optional/configured paths and are not the launch positioning.","currency":"USDC","chains":["base","solana","ethereum"]},{"id":"x402_deferred","status":"available_preview","description":"Deferred x402-compatible commitment surface. POST /x402/deferred/offer returns a machine-readable deferred offer and signing payload. POST /x402/deferred/commit verifies the signed commitment, creates or links an escrow, and stores commitment metadata. Settlement still requires funding, condition verification, and payout confirmation.","settlement":"deferred"},{"id":"x402_stablecoin","status":"available","description":"HTTP 402 challenge facade at POST /escrow/{id}/pay. Returns x402-shaped { x402Version, accepts: [...] } listing every configured rail with pay_to addresses pre-populated, and accepts sandbox Stripe Link SPT credentials in the same endpoint. Lights up URL-pay wallets (Coinbase x402, Visa @visa/cli, Stripe mppx / Link CLI) - one POST yields stablecoin payment instructions and, when Stripe is configured, a sandbox pointer to /fund. WWW-Authenticate: x402 header included.","currencies":["USDG","USDC"]},{"id":"tempo_stablecoin","status":"planned","description":"Tempo native stablecoins (pathUSD, USDC) for sub-millidollar settlement.","currencies":["pathUSD","USDC"]},{"id":"x402_base","status":"available","description":"USDC on Base as the primary v1 vault settlement rail. Base-agent wallets can use Settle when payment should wait for proof of work instead of finalizing at resource access time.","currency":"USDC","chain":"base"},{"id":"okx_app","status":"planned","description":"OKX Agent Payments Protocol compatibility target. APP-style escrow maps to create_escrow, fund_escrow, verify_condition, authorize_release, payout sync, and dispute/refund states. X Layer USDG is the matching v1 settlement rail.","currency":"USDG","chain":"xlayer"}],"conditions":{"manual":{"params":[],"notes":"POST verify body { confirmed: true } to mark condition_met."},"github_pr_merged":{"params":["repo","pr"],"notes":"repo as \"owner/name\", pr as numeric string.","implemented":true},"file_delivered":{"params":["url","sha256?"],"notes":"url is required; optional sha256 hex check against the response body.","implemented":true},"api_response":{"params":["url","expected_status?","expected_body?"],"notes":"url is required; expected_status defaults to 200; expected_body matches as substring.","implemented":true},"stripe_invoice_paid":{"params":["invoice"],"notes":"invoice is a Stripe invoice id (in_…). Resolves when Stripe reports status=\"paid\". Requires STRIPE_SECRET_KEY scoped to invoices:read.","implemented":true},"onchain_event":{"params":["address","topic0","from_block?","chain_id?"],"notes":"address is a contract; topic0 is the event signature hash (keccak-256). Resolves on the first matching eth_getLogs hit. Requires ETH_RPC_URL.","implemented":true}}}