{"openapi":"3.1.0","info":{"title":"DNS://Money API","description":"DNS://Money resolves a human-readable `pay:` name into the payment instructions for the rail it settles on, the way DNS resolves a domain into an IP address.\n\n- **Free reads:** resolve a name without a key at the anonymous rate limit.\n- **API key:** send `X-API-Key` for a higher rate limit. Get a free key at https://dnsofmoney.com/#request.\n- **x402:** paid routes answer `402` with a challenge. Pay from your own wallet and retry with `X-PAYMENT` or `PAYMENT-SIGNATURE`.\n\nDNS://Money is not a bank. The payer signs from their own wallet and the resolver never holds funds. Guides: https://dnsofmoney.com/docs/.","termsOfService":"https://dnsofmoney.com/terms.html","contact":{"name":"DNS://Money support","url":"https://dnsofmoney.com/docs/","email":"support@dnsofmoney.com"},"version":"0.3.0"},"servers":[{"url":"https://api.dnsofmoney.com","description":"Production"}],"paths":{"/health":{"get":{"summary":"Health Check","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"db":true,"redis":true,"status":"ok","xrpl_mode":"mainnet","xrpl_rpc":{"fallbacks":"2","host":"s2.ripple.com","provider":"public"}}}},"headers":{}}},"tags":["system"],"description":"Return the service status and the state of Redis and the XRPL node.","security":[]}},"/resolve/{alias_name}":{"get":{"summary":"Resolve Get","description":"Resolve a pay: alias via GET.","operationId":"resolve_get_resolve__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"alias":"pay:dnsofmoney","caller_tier":0,"message_id":"FAS-20261105010404-2845B9D2","resolution_id":"ba9a2e2d-5dcb-4f21-8b08-f2d7d640b429","resolved_at":"2026-11-05T01:04:04.628304Z","status":"resolved"},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:04.633425Z"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["resolve"],"security":[{},{"ApiKeyAuth":[]}]}},"/resolve":{"post":{"summary":"Resolve Post","description":"Resolve a pay: alias via POST with optional amount/currency context.","operationId":"resolve_post_resolve_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveRequest"},"example":{"alias_name":"pay:dnsofmoney"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["resolve"],"security":[{},{"ApiKeyAuth":[]}]}},"/mcp":{"get":{"tags":["mcp"],"summary":"Server Card","description":"MCP server card — what any agent sees on discovery.","operationId":"server_card_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"description":"DNS of Money — financial address resolution for AI agents.","docs":"https://dnsofmoney.com/mcp/","endpoints":{"a2a_agent_card":"/.well-known/agent-card.json","call":"/mcp/tools/call","metrics":"/mcp/metrics","rpc":"/mcp/rpc","tools":"/mcp/tools","x402_discovery":"/.well-known/x402","x402_pay":"/api/v1/x402/pay/{alias}"},"name":"project-o-dns-of-money","protocol":"MCP","supported_protocols":["AP2","A2A","x402","FAS-1","MCP"],"tools":["resolve_alias","discover_agent","check_alias_available","get_payment_requirements","get_payment_status","get_agent_registration_info"],"version":"1.1.0"},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:04.704702Z"}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/mcp/tools":{"get":{"tags":["mcp"],"summary":"List Tools","description":"MCP tool discovery — full inputSchemas for reflection-based clients.","operationId":"list_tools_mcp_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"tools":[{"description":"Resolve a human-readable financial alias (pay: address) to payment endpoints and routing metadata. Call this before initiating any payment to a pay: address. Returns the preferred rail, fallback endpoints, an ISO 20022 hint, and a compliance signal. Anonymous calls return status only; a free API key (no credit card) unlocks the endpoint set — which rails and currencies the alias accepts — via POST /api/v1/access-requests. You do NOT need a key to pay: get_payment_requirements returns a payable address to any caller. Example: resolve_alias('pay:acme.user').","inputSchema":{"properties":{"alias_uri":{"description":"The pay: address to resolve. E.g. 'pay:acme.user'.","type":"string"},"amount":{"description":"Optional payment amount (decimal string) — refines rail scoring.","type":"string"},"currency":{"description":"Optional ISO 4217 currency code. Defaults to USD.","type":"string"},"preferred_rail":{"description":"Optional rail hint (e.g. 'xrpl', 'fednow'). Advisory only.","type":"string"}},"required":["alias_uri"],"type":"object"},"name":"resolve_alias"},{"description":"Get the AP2/A2A agent-commerce block for a pay: address — the DNS of Money equivalent of an A2A agent-card lookup. Use this during agent discovery before initiating a mandate flow. Returns agent capabilities only; NO payment credentials. Example: discover_agent('pay:acme.user').","inputSchema":{"properties":{"alias_uri":{"description":"The pay: address to discover. E.g. 'pay:acme.user'.","type":"string"}},"required":["alias_uri"],"type":"object"},"name":"discover_agent"},{"description":"Check whether a pay: alias can still be claimed. Returns exactly one of three states: 'available' (free to register), 'taken' (already registered), or 'reserved' (protected namespace). When available, also returns the number of founding spots remaining. Public — no API key required. Read-only: this never reserves or registers the name. Example: check_alias_available('pay:acme.user').","inputSchema":{"properties":{"alias_uri":{"description":"Candidate pay: address, e.g. 'pay:acme.user'. A bare name without the 'pay:' prefix is accepted too.","type":"string"}},"required":["alias_uri"],"type":"object"},"name":"check_alias_available"},{"description":"Get x402 PaymentRequirements for paying a pay: alias. Returns the 402 `accepts` block (scheme, network, payTo, asset, amount, invoiceId) an x402 agent needs to construct and submit the payment. currency='XRP' settles on the XRP Ledger (amount in drops); currency='USDC' settles USDC on Algorand via the GoPlausible facilitator (amount in atomic micro-USDC, feePayer in `extra`). The deterministic resolver chooses the rail; this tool never moves money. Example: get_payment_requirements('pay:acme.user', amount='1.5').","inputSchema":{"properties":{"alias_uri":{"description":"The pay: address to pay. E.g. 'pay:acme.user'.","type":"string"},"amount":{"description":"Amount to pay — decimal string in the asset's display unit (XRP). Omit it to be quoted the alias's declared price; required for an alias that declares no price.","type":"string"},"currency":{"description":"Asset to pay in: 'XRP' (XRPL) or 'USDC' (Algorand). Defaults to XRP.","type":"string"}},"required":["alias_uri"],"type":"object"},"name":"get_payment_requirements"},{"description":"Check whether a payment you already attempted was recorded, BEFORE you retry and risk spending twice. Pass the request_key you sent as the Idempotency-Key header on the paid request. Returns state 'settled' (we hold a receipt — do NOT pay again) or 'not_found' (we have no record — retrying is safe). Use this when a paid call timed out or its response was lost: on rails where the facilitator broadcasts, you never learn the transaction hash unless our response reaches you, so this key is the only thing that can answer. The key is a bearer secret — whoever presents it gets the receipt.","inputSchema":{"properties":{"request_key":{"description":"The exact Idempotency-Key you sent with the paid request. 32-128 characters of [A-Za-z0-9_-], generated from a CSPRNG with at least 128 bits of entropy.","type":"string"}},"required":["request_key"],"type":"object"},"name":"get_payment_status"},{"description":"Learn how to self-register a FREE pay:agent.<label> alias for your agent. Returns the registration endpoint, the AgentAuthorityCredential verifiable-presentation requirements (intent binding + domain), the rate limit, and the Merkle anchor-proof endpoint. Read-only — registration itself is the credential-gated POST this tool points at. Example: get_agent_registration_info().","inputSchema":{"properties":{},"type":"object"},"name":"get_agent_registration_info"}]},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:04.767514Z"}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/mcp/metrics":{"get":{"tags":["mcp"],"summary":"Metrics","description":"Phase-0 usage counters — tool calls, failures, unique callers.","operationId":"metrics_mcp_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/mcp/tools/call":{"post":{"tags":["mcp"],"summary":"Call Tool","description":"Execute an MCP tool against the live resolver, tier-redacted for the caller.","operationId":"call_tool_mcp_tools_call_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolCallRequest"},"example":{"tool":"resolve_alias"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{},{"ApiKeyAuth":[]}]}},"/mcp/rpc":{"post":{"tags":["mcp"],"summary":"Mcp Rpc","description":"MCP streamable-HTTP JSON-RPC endpoint: initialize / tools/list / tools/call / ping.","operationId":"mcp_rpc_mcp_rpc_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{},{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"jsonrpc":"2.0","id":1,"method":"tools/list"}}}}}},"/api/v1/aliases/available/{name}":{"get":{"summary":"Alias Availability","description":"Public availability check with founding spots remaining.\n\nReturns exactly three states: available, taken, reserved.\nInvalid format → 422.","operationId":"alias_availability_api_v1_aliases_available__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"},"example":"Example Agent"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[]}},"/api/v1/aliases":{"post":{"summary":"Register Alias","description":"Register a new alias. When tier=founding:\n1. Validate FAS-1 format (Pydantic does this)\n2. Check reserved → 409 ALIAS_RESERVED\n3. Check taken → 409 ALIAS_TAKEN\n4. Check wallet already registered → 409 WALLET_ALREADY_REGISTERED\n5. Verify TX on-chain → 422 PAYMENT_VERIFICATION_FAILED\n6. Check TX hash not reused → 409 TX_HASH_ALREADY_USED\n7. Atomic cap check (advisory lock, see FAS-1 §10.2) → 409 CAP_EXCEEDED\n8. INSERT alias\n9. Fire-and-forget: FAS-1 memo TX + Redis counter","operationId":"register_alias_api_v1_aliases_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AliasCreate"},"example":{"alias_name":"pay:example.name","xrpl_address":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","founding_tx_hash":"EA8159536A8D557492AF64421EBD78BC0C185A31DCC7CC4F1CAE553245BADBDA"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[]}},"/api/v1/aliases/check/{alias_name}":{"get":{"summary":"Check Availability","description":"Public availability check — no auth, no side effects.","operationId":"check_availability_api_v1_aliases_check__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"alias_name":"pay:dnsofmoney","reason":"alias_name must contain at least one dot segment (e.g. pay:name.identifier)","status":"invalid"},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:04.832128Z"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[]}},"/api/v1/aliases/{alias_name}":{"get":{"summary":"Get Alias","description":"Get alias details — requires auth.","operationId":"get_alias_api_v1_aliases__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[{"ApiKeyAuth":[]}]},"patch":{"summary":"Update Alias","description":"Update mutable alias preferences for an alias the caller's tenant owns.\n\nThe primary use is declaring a cross-currency DELIVER asset\n(preferred_deliver_currency, e.g. \"XRP\") so a sender can pay in a different\nXRPL-native asset (Tier 1). Schema validation rejects non-XRPL-native values.\nAlso declares the owner's X handle (x_handle) as UNVERIFIED resolvable metadata.\nOnly fields present in the PATCH body are changed.","operationId":"update_alias_api_v1_aliases__alias_name__patch","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AliasUpdate"},"example":{}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[{"ApiKeyAuth":[]}]}},"/api/v1/aliases/{alias_name}/endpoints":{"post":{"summary":"Create Endpoint","description":"Create payment endpoint — stub, returns 501.","operationId":"create_endpoint_api_v1_aliases__alias_name__endpoints_post","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[{"ApiKeyAuth":[]}]}},"/api/v1/aliases/{alias_name}/endpoints/{endpoint_id}":{"delete":{"summary":"Delete Endpoint","description":"Delete payment endpoint — stub, returns 501.","operationId":"delete_endpoint_api_v1_aliases__alias_name__endpoints__endpoint_id__delete","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Endpoint Id"},"example":"00000000-0000-4000-8000-000000000000"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[{"ApiKeyAuth":[]}]}},"/api/v1/aliases/{alias_name}/evolve":{"post":{"summary":"Evolve Alias","description":"Evolve alias identity — mutate genome, re-render, re-upload, re-mint.\nIn XRPL_MODE=simulated: skip NFT ownership check.\nReturns 202 immediately — evolution runs as background task.","operationId":"evolve_alias_api_v1_aliases__alias_name__evolve_post","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"intensity","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Intensity"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[{"ApiKeyAuth":[]}]}},"/api/v1/aliases/{alias_name}/vote":{"post":{"summary":"Vote Alias","description":"Vote for an alias genome in the current epoch.\nWeight determined by NFT ownership (simulated: always 1).\nDuplicate vote same epoch → 409.","operationId":"vote_alias_api_v1_aliases__alias_name__vote_post","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["aliases"],"security":[{"ApiKeyAuth":[]}]}},"/api/v1/founding/status":{"get":{"summary":"Founding Status","description":"Public founding tier status.","operationId":"founding_status_api_v1_founding_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"claimed":43,"is_open":true,"percent_claimed":7.17,"price_drops":1000000,"price_xrp":"1","remaining":557,"slots_at_price":36,"tier_label":"1 XRP (36 left at this price)","total":600},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:04.912305Z"}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/wallet-check/{xrpl_address}":{"get":{"summary":"Check if a wallet already has a founding alias","description":"Check if a wallet already registered a founding name. Call before payment.","operationId":"wallet_check_api_v1_founding_wallet_check__xrpl_address__get","parameters":[{"name":"xrpl_address","in":"path","required":true,"schema":{"type":"string","title":"Xrpl Address"},"example":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"already_registered":true,"existing_alias":"pay:dnsofmoney","wallet":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:05.056891Z"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/available/{alias_name}":{"get":{"summary":"Check if a pay: alias is available","description":"Public — no auth required. Returns available/taken/reserved/invalid.","operationId":"check_alias_availability_api_v1_founding_available__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"alias_name":"dnsofmoney","reason":"alias_name must start with 'pay:'","status":"invalid"},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:04.974246Z"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/create-payment":{"post":{"summary":"Create Xaman Payment","description":"Create a Xaman payment request server-side. Returns QR + deeplink.","operationId":"create_xaman_payment_api_v1_founding_create_payment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePaymentRequest"},"example":{"alias_name":"pay:dnsofmoney"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/payload-result/{payload_uuid}":{"get":{"summary":"Get Payload Result","description":"Check Xaman payload result — was it signed? Get TX hash + signer.","operationId":"get_payload_result_api_v1_founding_payload_result__payload_uuid__get","parameters":[{"name":"payload_uuid","in":"path","required":true,"schema":{"type":"string","title":"Payload Uuid"},"example":"00000000-0000-4000-8000-000000000000"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/recover":{"post":{"summary":"Founding Recover","description":"Idempotent registration recovery.\n\nCall this when the page closed after payment but before /register completed.\n- If TX hash is already registered: returns the existing alias (200, recovered=true).\n- If not yet registered: runs the full registration and returns 201.\n\nThis eliminates admin intervention for the \"paid but page closed\" failure mode.","operationId":"founding_recover_api_v1_founding_recover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FoundingAliasCreate"},"example":{"alias_name":"pay:dnsofmoney","xrpl_address":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","founding_tx_hash":"EA8159536A8D557492AF64421EBD78BC0C185A31DCC7CC4F1CAE553245BADBDA"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/register":{"post":{"summary":"Founding Register","description":"Register a founding tier alias.","operationId":"founding_register_api_v1_founding_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FoundingAliasCreate"},"example":{"alias_name":"pay:dnsofmoney","xrpl_address":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","founding_tx_hash":"EA8159536A8D557492AF64421EBD78BC0C185A31DCC7CC4F1CAE553245BADBDA"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/identity-status/{alias_id}":{"get":{"summary":"Founding Identity Status","description":"Poll identity pipeline status for a founding alias.","operationId":"founding_identity_status_api_v1_founding_identity_status__alias_id__get","parameters":[{"name":"alias_id","in":"path","required":true,"schema":{"type":"string","title":"Alias Id"},"example":"00000000-0000-4000-8000-000000000000"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/claim-nft":{"post":{"summary":"Claim Nft","description":"Create a Xaman NFTokenAcceptOffer payload so the user can claim their NFT.","operationId":"claim_nft_api_v1_founding_claim_nft_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimNFTRequest"},"example":{"alias_name":"pay:dnsofmoney"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/wallet-signin":{"post":{"summary":"Wallet Signin","description":"Create a Xaman SignIn payload — no payment, just identity proof.","operationId":"wallet_signin_api_v1_founding_wallet_signin_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WalletSigninRequest"},{"type":"null"}],"title":"Body"},"example":{}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/wallet/{xrpl_address}/nfts":{"get":{"summary":"Wallet Nfts","description":"List all founding aliases + NFTs for a wallet address.","operationId":"wallet_nfts_api_v1_founding_wallet__xrpl_address__nfts_get","parameters":[{"name":"xrpl_address","in":"path","required":true,"schema":{"type":"string","title":"Xrpl Address"},"example":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/burn-nft":{"post":{"summary":"Burn Nft","description":"Burn an NFT for a founding alias.\n\n- Unclaimed (still in minter wallet): server-side burn, immediate. The minter\n  wallet signs, so the caller must prove they own the alias with a fresh,\n  single-use, burn-only Xaman SignIn (signin_uuid) from the alias's founding wallet.\n- Claimed (in user wallet): returns Xaman NFTokenBurn payload for user to sign.\n  No sign-in needed: the ledger rejects a burn from anyone but the holder.","operationId":"burn_nft_api_v1_founding_burn_nft_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurnNFTRequest"},"example":{"alias_name":"pay:dnsofmoney"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/transfer/offer":{"post":{"summary":"Transfer Offer","description":"Owner-signed NFTokenCreateOffer that hands a claimed founding NFT to another wallet.\n\nThe owner signs in their own wallet (we never hold the NFT once it's claimed),\nso this only builds the Xaman payload. Destination-scoped: only that wallet can\naccept. amount_drops=\"0\" gifts the name; a positive value sells it.","operationId":"transfer_offer_api_v1_founding_transfer_offer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferOfferRequest"},"example":{"alias_name":"pay:dnsofmoney","destination":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/transfer/accept":{"post":{"summary":"Transfer Accept","description":"Recipient-signed NFTokenAcceptOffer for a peer-to-peer sell offer.","operationId":"transfer_accept_api_v1_founding_transfer_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferAcceptRequest"},"example":{"offer_id":"EA8159536A8D557492AF64421EBD78BC0C185A31DCC7CC4F1CAE553245BADBDA"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/transfer/offers/{nft_token_id}":{"get":{"summary":"Transfer Offers","description":"List active on-chain sell offers for an NFT so a recipient can find the offer id.\n\nReads the ledger directly (chain is source of truth for the founding tier).","operationId":"transfer_offers_api_v1_founding_transfer_offers__nft_token_id__get","parameters":[{"name":"nft_token_id","in":"path","required":true,"schema":{"type":"string","title":"Nft Token Id"},"example":"0008138800000000000000000000000000000000000000000000000000000000"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/transfer/sync":{"post":{"summary":"Transfer Sync","description":"Reconcile a founding name's receive address with on-chain NFT ownership.\n\nAfter a transfer — ours or an off-API marketplace sale — the NFT holder changes but\nour DB cache can go stale. This reads the current holder from the ledger (source of\ntruth for the founding tier) and updates the receive address so the name resolves to\nthe new holder. The genesis-minter field (founding_xrpl_address) stays immutable.\n\nProvide expected_owner to confirm via AccountNFTs (works on any node); omit it to\nread the owner via Clio nft_info. Idempotent — safe to call repeatedly.","operationId":"transfer_sync_api_v1_founding_transfer_sync_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferSyncRequest"},"example":{"alias_name":"pay:dnsofmoney"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/gallery":{"get":{"summary":"Founding Gallery","description":"Public gallery of all completed founding aliases with their fractal identities.","operationId":"founding_gallery_api_v1_founding_gallery_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/founding/xrpl-balance/{xrpl_address}":{"get":{"summary":"Check XRPL account balance and reserve safety for NFT claim","description":"Return an account's XRP balance and whether it has enough to accept an NFT offer.\n\nUsed by the claim page to warn users before they hit tecINSUFFICIENT_RESERVE.\nSafe to call unauthenticated — only reads public ledger data.","operationId":"xrpl_balance_api_v1_founding_xrpl_balance__xrpl_address__get","parameters":[{"name":"xrpl_address","in":"path","required":true,"schema":{"type":"string","title":"Xrpl Address"},"example":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"address":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","balance_drops":null,"balance_xrp":null,"error":"Could not reach XRPL node","safe_to_claim":null,"warning":null},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:05.117897Z"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["founding"],"security":[]}},"/api/v1/leases":{"post":{"summary":"Create Lease","description":"Create or renew a lease over a non-founding name the caller's tenant owns.","operationId":"create_lease_api_v1_leases_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaseCreate"},"example":{"alias_name":"pay:dnsofmoney","lessee_address":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["leases"],"security":[{"ApiKeyAuth":[]}]}},"/api/v1/leases/reconcile":{"post":{"summary":"Reconcile Leases","description":"Lapse the caller's expired leases (term ended → cooldown). Idempotent.","operationId":"reconcile_leases_api_v1_leases_reconcile_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["leases"],"security":[{"ApiKeyAuth":[]}]}},"/api/v1/leases/{alias_name}":{"get":{"summary":"Get Lease","description":"Return the current lease for a name (most recent active or lapsed).","operationId":"get_lease_api_v1_leases__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["leases"],"security":[]}},"/api/v1/leases/{alias_name}/revoke":{"post":{"summary":"Revoke Lease","description":"Owner ends an active lease early; the name enters cooldown with RoFR.","operationId":"revoke_lease_api_v1_leases__alias_name__revoke_post","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["leases"],"security":[{"ApiKeyAuth":[]}]}},"/identity/preview/{alias_name}":{"get":{"summary":"Identity Preview","description":"Public 256×256 PNG preview — shows evolved genome if available, else seed.","operationId":"identity_preview_identity_preview__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["identity"],"security":[]}},"/nft/{alias_slug}":{"get":{"summary":"Nft Metadata","description":"Public NFT metadata JSON — this is the URI stored in the XRPL NFT.\n\nServes real data from DB when available; falls back to seed genome\nfor aliases not yet in the DB.","operationId":"nft_metadata_nft__alias_slug__get","parameters":[{"name":"alias_slug","in":"path","required":true,"schema":{"type":"string","title":"Alias Slug"},"example":"dnsofmoney"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"attributes":[{"trait_type":"Tier","value":"founding"},{"display_type":"number","trait_type":"Generation","value":281},{"trait_type":"Palette","value":"ocean"},{"display_type":"number","trait_type":"Symmetry","value":2},{"display_type":"number","trait_type":"Complexity","value":0.366}],"description":"Generative identity for pay:dnsofmoney — DNS://Money","dnsofmoney":{"alias":"pay:dnsofmoney","generation":281,"genome":{"brightness":0.568,"complexity":0.366,"generation":281,"iterations":163252,"mutation_rate":0.206,"palette":"ocean","parent_seed":944840189,"rotation":6.0767,"seed":830704897,"symmetry":2,"version":1,"zoom":2.143},"registered_at":"","tier":"founding"},"external_url":"https://dnsofmoney.com/identity/dnsofmoney","image":"ipfs://pending","name":"pay:dnsofmoney"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"tags":["identity"],"security":[]}},"/api/v1/send/status/{transaction_id}":{"get":{"tags":["send"],"summary":"Get Send Status","description":"Look up the current status of a send-to-alias transaction.","operationId":"get_send_status_api_v1_send_status__transaction_id__get","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transaction Id"},"example":"00000000-0000-4000-8000-000000000000"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendResponse"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/send/preview/{alias_name}":{"get":{"tags":["send"],"summary":"Preview Send","description":"Dry-run: resolve a pay:name and show where money would go.\nNo payment is executed. Public endpoint — no API key required.","operationId":"preview_send_api_v1_send_preview__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendPreviewResponse"},"example":{"alias":"pay:dnsofmoney","currency":"XRP","destination_address":"rawcpsYW...3ng7","display_name":"pay:dnsofmoney","fee_estimate":"< 0.001 XRP","identity":{"generation":0,"identity_status":"complete","image_uri":null,"nft_token_id":"000801F4A44F1AD0ADAD271BF51D5A559D181EE8CAB0B015F9C508FE0624D680","tier":"founding"},"rail":"crypto","resolved":true}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/send/create-payment":{"post":{"tags":["send"],"summary":"Create Send Payment","description":"Public endpoint — creates a Xaman payment payload for wallet-to-wallet send.\nNo API key required. The platform never touches the funds.","operationId":"create_send_payment_api_v1_send_create_payment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSendPaymentRequest"},"example":{"alias":"pay:dnsofmoney","amount":1.0}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/send":{"post":{"tags":["send"],"summary":"Send To Alias","description":"Send money to a pay:name alias. Resolves globally, routes to best rail,\nexecutes payment from platform wallet.","operationId":"send_to_alias_api_v1_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendRequest"},"example":{"alias":"pay:dnsofmoney","amount":1.0,"idempotency_key":"order-1001"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendResponse"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"ApiKeyAuth":[]}]}},"/api/v1/onramp/address/{alias_name}":{"get":{"tags":["onramp"],"summary":"Onramp Address","description":"Resolve a pay:name to the XRPL destination address the on-ramp widget should\ndeliver to. Public endpoint — no API key. No money moves here.\n\n`currency` (default \"xrp\") selects the deliver asset. For \"rlusd\" the alias\nwallet MUST already hold an RLUSD trust line — otherwise MoonPay's delivery\nwould bounce (tecNO_LINE), so we refuse the address up front (422) rather\nthan hand out one that cannot receive RLUSD.","operationId":"onramp_address_api_v1_onramp_address__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","default":"xrp","title":"Currency"},"example":"XRP"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnrampAddressResponse"},"example":{"alias":"pay:dnsofmoney","currency":"xrp","destination_tag":null,"network":"xrp_ledger","wallet_address":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/onramp/sign":{"post":{"tags":["onramp"],"summary":"Onramp Sign","description":"HMAC-SHA256 sign a MoonPay widget URL. The secret never leaves the server.\n\nMoonPay's scheme: signature = base64(HMAC_SHA256(secretKey, <query string incl. '?'>)).","operationId":"onramp_sign_api_v1_onramp_sign_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnrampSignRequest"},"example":{}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnrampSignResponse"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/swap/quote/{alias_name}":{"get":{"tags":["swap"],"summary":"Swap Quote","description":"Resolve the alias and return a delegated-swap quote. No money moves here.","operationId":"swap_quote_api_v1_swap_quote__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"from_symbol","in":"query","required":true,"schema":{"type":"string","maxLength":16,"title":"From Symbol"},"example":"USDC"},{"name":"from_chain","in":"query","required":true,"schema":{"type":"string","maxLength":32,"title":"From Chain"},"example":"base"},{"name":"amount_in","in":"query","required":true,"schema":{"type":"string","maxLength":32,"title":"Amount In"},"example":"1.00"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapQuoteResponse"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/swap/verify":{"post":{"tags":["swap"],"summary":"Swap Verify","description":"Confirm the destination XRP payment is finalized on the XRP Ledger. Read-only —\nno wallet, no funds. This is how Project O 'closes the loop' on a swap without ever\nhaving touched the money: the provider delivered XRP, we prove it on-chain.","operationId":"swap_verify_api_v1_swap_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapVerifyRequest"},"example":{"xrpl_tx_hash":"EA8159536A8D557492AF64421EBD78BC0C185A31DCC7CC4F1CAE553245BADBDA"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapVerifyResponse"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/deliver/quote":{"post":{"tags":["deliver"],"summary":"Deliver Quote","operationId":"deliver_quote_api_v1_deliver_quote_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryQuoteRequest"},"example":{"to":"pay:dnsofmoney","amount":"1.00","from_asset":"USDC","from_network":"eip155:8453"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Quote how a payment to a name can arrive in another asset or chain.","security":[]}},"/api/v1/x402/pay/{alias_label}":{"get":{"tags":["x402"],"summary":"Pay","description":"x402 pay-to-alias: 402 challenge, then verify + record a submitted payment.","operationId":"pay_api_v1_x402_pay__alias_label__get","parameters":[{"name":"alias_label","in":"path","required":true,"schema":{"type":"string","title":"Alias Label"},"example":"pay:dnsofmoney"},{"name":"amount","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Amount to pay, in the asset's display unit (XRP or USDC). Omit it to be quoted the alias's declared price. Required for an alias that declares no price.","title":"Amount"},"description":"Amount to pay, in the asset's display unit (XRP or USDC). Omit it to be quoted the alias's declared price. Required for an alias that declares no price.","example":"1.00"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Asset to pay in. XRP (XRPL), USDC (Algorand), USDC-BASE (Base), USDC-POLYGON (Polygon) or USDC-ARB (Arbitrum), when enabled.","default":"XRP","title":"Currency"},"description":"Asset to pay in. XRP (XRPL), USDC (Algorand), USDC-BASE (Base), USDC-POLYGON (Polygon) or USDC-ARB (Arbitrum), when enabled.","example":"XRP"},{"name":"X-PAYMENT","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment-Signature"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"},"PAYMENT-RESPONSE":{"$ref":"#/components/headers/PAYMENT-RESPONSE"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment required. The body lists each rail that this route accepts.","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PAYMENT-REQUIRED"}},"content":{"application/json":{"schema":{"type":"object"},"example":{"accepts":[{"amount":"10000","asset":"XRP","description":"x402 payment to pay:dnsofmoney","extra":{"areFeesSponsored":false,"invoiceId":"fcc92afa37ac07903ee578434ed68257"},"invoiceId":"fcc92afa37ac07903ee578434ed68257","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"xrpl:0","payTo":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","resource":"https://api.dnsofmoney.com/api/v1/x402/pay/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"31566704","description":"x402 USDC payment to pay:dnsofmoney","extra":{"decimals":6,"feePayer":"ZMFK2OI7ZBD2U27ISERZC4S6LKM6WMFJPZQ4MYNJDZ2VNBNMBA67RA22AA","tag":"x402-global-challenge"},"invoiceId":"764ad0a722ca581f1ef3163528b0cda9","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=","payTo":"AM3OSW5LGBGLRHXYXLEWLXDM63DFSAPUZLILWFE4Z26R2MA67PUFKELTAU","resource":"https://api.dnsofmoney.com/api/v1/x402/pay/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"x402 USDC (Base) payment to pay:dnsofmoney","extra":{"assetTransferMethod":"eip3009","decimals":6,"name":"USD Coin","version":"2"},"invoiceId":"e255cd094c8268b37972b3d4a5765e8f","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"eip155:8453","payTo":"0x00fbee2a37610e7115bbb471c0a73da20d8447c5","resource":"https://api.dnsofmoney.com/api/v1/x402/pay/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"0x779ded0c9e1022225f8e0630b35a9b54be713736","description":"x402 USDT0 (X Layer) payment to pay:dnsofmoney","extra":{"assetTransferMethod":"eip3009","decimals":6,"name":"USD₮0","version":"1"},"invoiceId":"b0461d89a5485f8c4375faf29793b72e","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"eip155:196","payTo":"0x701560b58cbefea9ab35e0651123848f7290323b","resource":"https://api.dnsofmoney.com/api/v1/x402/pay/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","description":"x402 USDC (Solana) payment to pay:dnsofmoney","extra":{"decimals":6,"feePayer":"BENrLoUbndxoNMUS5JXApGMtNykLjFXXixMtpDwDR9SP"},"invoiceId":"172328df0217d57969cd5ab35b4f8856","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","payTo":"DY5rGF5ZsaMQn1VP7coodC1FpyYcySgnPuq8FBWJSKUM","resource":"https://api.dnsofmoney.com/api/v1/x402/pay/pay:dnsofmoney","scheme":"exact"}],"x402Version":2}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"X402Payment":[]},{"X402PaymentSignature":[]}]}},"/api/v1/x402/screen/{target}":{"get":{"tags":["x402"],"summary":"Screen Counterparty","description":"Paid counterparty screen: pay the fee, get an OFAC + resolution attestation about\na caller-named target (a `pay:` alias or a raw any-chain address).\n\nThe FEE is an x402 payment to our screening-service alias at ITS declared price — the\ncaller never names the amount, so the price of the screen is server-set (this is the\nenforced-pricing feature applied to our own service). Off the money path: we verify +\nrecord the fee, then run the deterministic screen; we never custody or submit funds.","operationId":"screen_counterparty_api_v1_x402_screen__target__get","parameters":[{"name":"target","in":"path","required":true,"schema":{"type":"string","title":"Target"},"example":"pay:dnsofmoney"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Fee asset. USDC (Algorand) by default; XRP/USDC-BASE/USDT0-XLAYER when enabled.","default":"USDC","title":"Currency"},"description":"Fee asset. USDC (Algorand) by default; XRP/USDC-BASE/USDT0-XLAYER when enabled.","example":"XRP"},{"name":"X-PAYMENT","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment-Signature"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"},"PAYMENT-RESPONSE":{"$ref":"#/components/headers/PAYMENT-RESPONSE"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment required. The body lists each rail that this route accepts.","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PAYMENT-REQUIRED"}},"content":{"application/json":{"schema":{"type":"object"},"example":{"accepts":[{"amount":"10000","asset":"XRP","description":"x402 payment to pay:dnsofmoney","extra":{"areFeesSponsored":false,"invoiceId":"d01452b399d6e2a0512cef8a67cf4618"},"invoiceId":"d01452b399d6e2a0512cef8a67cf4618","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"xrpl:0","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"target":{"description":"The counterparty to screen — a pay: alias (e.g. pay:acme) or a wallet address (e.g. a 0x EVM address).","type":"string"}},"required":["target"],"type":"object"},"type":"http"}},"payTo":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","resource":"https://api.dnsofmoney.com/api/v1/x402/screen/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"31566704","description":"x402 USDC payment to pay:dnsofmoney","extra":{"decimals":6,"feePayer":"ZMFK2OI7ZBD2U27ISERZC4S6LKM6WMFJPZQ4MYNJDZ2VNBNMBA67RA22AA","tag":"x402-global-challenge"},"invoiceId":"d74089d701c178988cf3db498d43dc5c","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"target":{"description":"The counterparty to screen — a pay: alias (e.g. pay:acme) or a wallet address (e.g. a 0x EVM address).","type":"string"}},"required":["target"],"type":"object"},"type":"http"}},"payTo":"AM3OSW5LGBGLRHXYXLEWLXDM63DFSAPUZLILWFE4Z26R2MA67PUFKELTAU","resource":"https://api.dnsofmoney.com/api/v1/x402/screen/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"x402 USDC (Base) payment to pay:dnsofmoney","extra":{"assetTransferMethod":"eip3009","decimals":6,"name":"USD Coin","version":"2"},"invoiceId":"b47513b34eceea2d68e2dd82fef8703c","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"eip155:8453","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"target":{"description":"The counterparty to screen — a pay: alias (e.g. pay:acme) or a wallet address (e.g. a 0x EVM address).","type":"string"}},"required":["target"],"type":"object"},"type":"http"}},"payTo":"0x00fbee2a37610e7115bbb471c0a73da20d8447c5","resource":"https://api.dnsofmoney.com/api/v1/x402/screen/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"0x779ded0c9e1022225f8e0630b35a9b54be713736","description":"x402 USDT0 (X Layer) payment to pay:dnsofmoney","extra":{"assetTransferMethod":"eip3009","decimals":6,"name":"USD₮0","version":"1"},"invoiceId":"a826bbb830b1434368fb47c306805d2d","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"eip155:196","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"target":{"description":"The counterparty to screen — a pay: alias (e.g. pay:acme) or a wallet address (e.g. a 0x EVM address).","type":"string"}},"required":["target"],"type":"object"},"type":"http"}},"payTo":"0x701560b58cbefea9ab35e0651123848f7290323b","resource":"https://api.dnsofmoney.com/api/v1/x402/screen/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","description":"x402 USDC (Solana) payment to pay:dnsofmoney","extra":{"decimals":6,"feePayer":"BENrLoUbndxoNMUS5JXApGMtNykLjFXXixMtpDwDR9SP"},"invoiceId":"4085627752a9c92d6311427e4c932251","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"target":{"description":"The counterparty to screen — a pay: alias (e.g. pay:acme) or a wallet address (e.g. a 0x EVM address).","type":"string"}},"required":["target"],"type":"object"},"type":"http"}},"payTo":"DY5rGF5ZsaMQn1VP7coodC1FpyYcySgnPuq8FBWJSKUM","resource":"https://api.dnsofmoney.com/api/v1/x402/screen/pay:dnsofmoney","scheme":"exact"}],"x402Version":2}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"X402Payment":[]},{"X402PaymentSignature":[]}]}},"/api/v1/x402/screen-xlayer/{target}":{"get":{"tags":["x402"],"summary":"Screen Counterparty Xlayer","description":"X-Layer-native counterparty screen — the same paid screen with the fee\ncurrency defaulting to USDT0 on X Layer, so a bare GET advertises a pure\neip155:196 challenge paying USDT0 (the token OKX mandates).\n\nExists because marketplace reviewers probe the listed URL with a bare GET and\nexpect THEIR chain AND token in the 402. OKX rejected listing #7190 twice over\nthis — first the network (eip155:196), then the token (USDT0) — see memory\nproject_okx_asp_listing. A per-rail alias keeps each marketplace's challenge\nshape independent: this is the URL listed on OKX.AI, while the plain /screen\nroute keeps its Algorand default for the Algorand x402 Challenge.","operationId":"screen_counterparty_xlayer_api_v1_x402_screen_xlayer__target__get","parameters":[{"name":"target","in":"path","required":true,"schema":{"type":"string","title":"Target"},"example":"pay:dnsofmoney"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Fee asset. USDT0 on X Layer by default; XRP/USDC/USDC-BASE when enabled.","default":"USDT0-XLAYER","title":"Currency"},"description":"Fee asset. USDT0 on X Layer by default; XRP/USDC/USDC-BASE when enabled.","example":"XRP"},{"name":"X-PAYMENT","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment-Signature"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"},"PAYMENT-RESPONSE":{"$ref":"#/components/headers/PAYMENT-RESPONSE"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment required. The body lists each rail that this route accepts.","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PAYMENT-REQUIRED"}},"content":{"application/json":{"schema":{"type":"object"},"example":{"accepts":[{"amount":"10000","asset":"0x779ded0c9e1022225f8e0630b35a9b54be713736","description":"x402 USDT0 (X Layer) payment to pay:dnsofmoney","extra":{"assetTransferMethod":"eip3009","decimals":6,"name":"USD₮0","version":"1"},"invoiceId":"93d6af9c01f5efb26425ee93974f661c","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"eip155:196","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"target":{"description":"The counterparty to screen — a pay: alias (e.g. pay:acme) or a wallet address (e.g. a 0x EVM address).","type":"string"}},"required":["target"],"type":"object"},"type":"http"}},"payTo":"0x701560b58cbefea9ab35e0651123848f7290323b","resource":"https://api.dnsofmoney.com/api/v1/x402/screen-xlayer/pay:dnsofmoney","scheme":"exact"}],"x402Version":2}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"X402Payment":[]},{"X402PaymentSignature":[]}]}},"/api/v1/x402/resolve/{alias_name}":{"get":{"tags":["x402"],"summary":"Paid Resolve","description":"Pay-per-call full resolve: pay the fee, get the alias's tier-2 resolution.\n\nThe pay-per-call alternative to an API key for GET /resolve/{alias}. The FEE is an x402\npayment to our resolve-fee alias at ITS declared price, so the caller never names the\namount. Off the money path: we verify and record the fee, then return a read of the\ndeterministic resolver. We never custody or submit funds, and no model is involved.\n\nA caller is never charged for an alias that does not resolve: the alias is looked up\nfirst, and an unresolvable one returns 404 before any 402 challenge. That lookup tells\na caller only what the free tier-0 resolve already tells them.","operationId":"paid_resolve_api_v1_x402_resolve__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Fee asset. A bare GET advertises every rail the fee alias accepts.","default":"USDC","title":"Currency"},"description":"Fee asset. A bare GET advertises every rail the fee alias accepts.","example":"XRP"},{"name":"X-PAYMENT","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment-Signature"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"},"PAYMENT-RESPONSE":{"$ref":"#/components/headers/PAYMENT-RESPONSE"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment required. The body lists each rail that this route accepts.","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PAYMENT-REQUIRED"}},"content":{"application/json":{"schema":{"type":"object"},"example":{"accepts":[{"amount":"10000","asset":"XRP","description":"x402 payment to pay:dnsofmoney","extra":{"areFeesSponsored":false,"invoiceId":"61c96b31238bb2cc171d51309bdce26c"},"invoiceId":"61c96b31238bb2cc171d51309bdce26c","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"xrpl:0","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"alias_name":{"description":"The pay: alias to resolve (for example pay:acme).","type":"string"}},"required":["alias_name"],"type":"object"},"type":"http"}},"payTo":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","resource":"https://api.dnsofmoney.com/api/v1/x402/resolve/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"31566704","description":"x402 USDC payment to pay:dnsofmoney","extra":{"decimals":6,"feePayer":"ZMFK2OI7ZBD2U27ISERZC4S6LKM6WMFJPZQ4MYNJDZ2VNBNMBA67RA22AA","tag":"x402-global-challenge"},"invoiceId":"e5ee25ce679d3ed7676462639f2be87e","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"alias_name":{"description":"The pay: alias to resolve (for example pay:acme).","type":"string"}},"required":["alias_name"],"type":"object"},"type":"http"}},"payTo":"AM3OSW5LGBGLRHXYXLEWLXDM63DFSAPUZLILWFE4Z26R2MA67PUFKELTAU","resource":"https://api.dnsofmoney.com/api/v1/x402/resolve/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"x402 USDC (Base) payment to pay:dnsofmoney","extra":{"assetTransferMethod":"eip3009","decimals":6,"name":"USD Coin","version":"2"},"invoiceId":"666be3b92287042171abc847919fbcaa","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"eip155:8453","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"alias_name":{"description":"The pay: alias to resolve (for example pay:acme).","type":"string"}},"required":["alias_name"],"type":"object"},"type":"http"}},"payTo":"0x00fbee2a37610e7115bbb471c0a73da20d8447c5","resource":"https://api.dnsofmoney.com/api/v1/x402/resolve/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"0x779ded0c9e1022225f8e0630b35a9b54be713736","description":"x402 USDT0 (X Layer) payment to pay:dnsofmoney","extra":{"assetTransferMethod":"eip3009","decimals":6,"name":"USD₮0","version":"1"},"invoiceId":"b2b1af4b45325f21915ad5c4f8053aeb","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"eip155:196","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"alias_name":{"description":"The pay: alias to resolve (for example pay:acme).","type":"string"}},"required":["alias_name"],"type":"object"},"type":"http"}},"payTo":"0x701560b58cbefea9ab35e0651123848f7290323b","resource":"https://api.dnsofmoney.com/api/v1/x402/resolve/pay:dnsofmoney","scheme":"exact"},{"amount":"10000","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","description":"x402 USDC (Solana) payment to pay:dnsofmoney","extra":{"decimals":6,"feePayer":"BENrLoUbndxoNMUS5JXApGMtNykLjFXXixMtpDwDR9SP"},"invoiceId":"371247148cfc7ab298b84cd44bcc6997","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","outputSchema":{"input":{"method":"GET","pathParams":{"properties":{"alias_name":{"description":"The pay: alias to resolve (for example pay:acme).","type":"string"}},"required":["alias_name"],"type":"object"},"type":"http"}},"payTo":"DY5rGF5ZsaMQn1VP7coodC1FpyYcySgnPuq8FBWJSKUM","resource":"https://api.dnsofmoney.com/api/v1/x402/resolve/pay:dnsofmoney","scheme":"exact"}],"x402Version":2}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"X402Payment":[]},{"X402PaymentSignature":[]}]}},"/api/v1/x402/presend":{"get":{"tags":["x402"],"summary":"Presend Address Safety","description":"Paid pre-send address safety: pay the fee, get deterministic evidence about the\naddress you are about to pay.\n\nHTTP 402 on this route means EXACTLY ONE THING: x402 payment required, before\nsettlement. A risky or sanctioned target is reported as a verdict inside a 200 — it\nis a finding about a third party the caller named, not a block of the caller's own\npayment. Letting a compliance 402 escape here would make the payer's x402 client read\nit as \"pay me\", pay again, and loop (spec T1). Do not change this.","operationId":"presend_address_safety_api_v1_x402_presend_get","parameters":[{"name":"target","in":"query","required":true,"schema":{"type":"string","description":"Address or pay: alias you are about to pay","title":"Target"},"description":"Address or pay: alias you are about to pay","example":"pay:dnsofmoney"},{"name":"chain","in":"query","required":false,"schema":{"type":"string","description":"CAIP-2 chain id of the destination","default":"eip155:8453","title":"Chain"},"description":"CAIP-2 chain id of the destination"},{"name":"payee","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Addresses you have paid before (never stored)","title":"Payee"},"description":"Addresses you have paid before (never stored)"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Fee asset.","default":"USDC-BASE","title":"Currency"},"description":"Fee asset.","example":"XRP"},{"name":"X-PAYMENT","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment-Signature"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"},"PAYMENT-RESPONSE":{"$ref":"#/components/headers/PAYMENT-RESPONSE"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment required. The body lists each rail that this route accepts.","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PAYMENT-REQUIRED"}},"content":{"application/json":{"schema":{"type":"object"},"example":{"accepts":[{"amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"x402 USDC (Base) payment to pay:dnsofmoney","extra":{"assetTransferMethod":"eip3009","decimals":6,"name":"USD Coin","version":"2"},"invoiceId":"78aad8fa4331e7b375f86fab4d1ee1f7","maxAmountRequired":"10000","maxTimeoutSeconds":600,"mimeType":"application/json","network":"eip155:8453","outputSchema":{"input":{"method":"GET","queryParams":{"properties":{"chain":{"description":"CAIP-2 chain id of the destination, e.g. eip155:8453.","type":"string"},"payee":{"description":"Addresses you have paid before. Enables lookalike / address-poisoning detection. Compared in memory and discarded — never stored.","items":{"type":"string"},"maxItems":256,"type":"array"},"target":{"description":"The destination you are about to pay — a 0x address or a pay: alias.","type":"string"}},"required":["target","chain"],"type":"object"},"type":"http"}},"payTo":"0x00fbee2a37610e7115bbb471c0a73da20d8447c5","resource":"https://api.dnsofmoney.com/api/v1/x402/presend","scheme":"exact"}],"x402Version":2}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"X402Payment":[]},{"X402PaymentSignature":[]}]}},"/api/v1/x402/plan/{plan}":{"get":{"tags":["x402"],"summary":"Buy Plan","description":"Buy an API plan for the caller's tenant: pay the plan price, get the plan.\n\nNeeds an API key, because the key says WHICH tenant gets the plan. Each settled\npayment adds X402_PLAN_DAYS to the plan (from now, or from the current expiry if the\nsame plan is still live). The base plan is kept and returns on expiry.\n\nThe server sets the price; the caller never names it. Off the money path: we verify\nand record the payment to our own fee alias. We never custody or submit funds.\n\nNot granted: an exempt payer (nothing moved) and an idempotent replay (already\ngranted once). If the grant itself fails after a real payment, the route returns 500\nwith the transaction id and logs it, so an operator can grant the plan by hand.","operationId":"buy_plan_api_v1_x402_plan__plan__get","parameters":[{"name":"plan","in":"path","required":true,"schema":{"type":"string","title":"Plan"},"example":"standard"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Payment asset. USD stablecoins only.","default":"USDC-BASE","title":"Currency"},"description":"Payment asset. USD stablecoins only.","example":"XRP"},{"name":"X-PAYMENT","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment-Signature"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"},"PAYMENT-RESPONSE":{"$ref":"#/components/headers/PAYMENT-RESPONSE"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment required. The body lists each rail that this route accepts.","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PAYMENT-REQUIRED"}},"content":{"application/json":{"schema":{"type":"object"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"X402Payment":[]},{"X402PaymentSignature":[]}]}},"/api/v1/agents/register":{"post":{"tags":["agent-selfreg"],"summary":"Agent Register","description":"Self-register a free pay:agent.<label> alias, gated by an AgentAuthorityCredential VP.","operationId":"agent_register_api_v1_agents_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegisterRequest"},"example":{"alias_name":"pay:agent.example","presentation":{},"nonce":"c2FtcGxlLW5vbmNl"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/agents/anchor-proof/{alias_name}":{"get":{"tags":["agent-selfreg"],"summary":"Agent Anchor Proof","description":"Merkle inclusion proof for a registered agent alias against its batch's on-chain root.","operationId":"agent_anchor_proof_api_v1_agents_anchor_proof__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/names/status":{"get":{"tags":["standard-registration"],"summary":"Names Status","description":"Public config probe (spec §1.8) — lets the xApp show/hide the claim tab.","operationId":"names_status_api_v1_names_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"standard_registration":false},"error_code":null,"message":null,"success":true,"timestamp":"2026-11-05T01:04:05.190654Z"}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/names/signin":{"post":{"tags":["standard-registration"],"summary":"Names Signin","description":"Issue a single-use nonce and the Xaman SignIn payload bound to it.","operationId":"names_signin_api_v1_names_signin_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInRequest"},"example":{"alias_name":"pay:dnsofmoney"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/names/register":{"post":{"tags":["standard-registration"],"summary":"Names Register","description":"Register a dotted standard name to the SIGNED wallet (365-day tenure).","operationId":"names_register_api_v1_names_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"},"example":{"alias_name":"pay:dnsofmoney","payload_uuid":"00000000-0000-4000-8000-000000000000"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/names/renew":{"post":{"tags":["standard-registration"],"summary":"Names Renew","description":"Renew for another term. The fresh SignIn is the activity proof (spec §1.5).","operationId":"names_renew_api_v1_names_renew_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenewRequest"},"example":{"alias_name":"pay:dnsofmoney","payload_uuid":"00000000-0000-4000-8000-000000000000"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/names/rotate-receive":{"post":{"tags":["standard-registration"],"summary":"Names Rotate Receive","description":"Point receive at a different address — SignIn-bound, screened, evicted (§1.3).","operationId":"names_rotate_receive_api_v1_names_rotate_receive_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateReceiveRequest"},"example":{"alias_name":"pay:dnsofmoney","payload_uuid":"00000000-0000-4000-8000-000000000000","receive_address":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/names/available/{alias_name}":{"get":{"tags":["standard-registration"],"summary":"Names Available","description":"Availability with the standard lifecycle states: `cooldown` during RoFR\n(never 'available' — spec §4), revoked reported as `reserved` (no\nadvertising takedowns).","operationId":"names_available_api_v1_names_available__alias_name__get","parameters":[{"name":"alias_name","in":"path","required":true,"schema":{"type":"string","title":"Alias Name"},"example":"pay:dnsofmoney"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/brand/challenge":{"post":{"tags":["brand-namespace"],"summary":"Brand Challenge","description":"Issue a single-use nonce. The company signs the returned document with an assertionMethod key.","operationId":"brand_challenge_api_v1_brand_challenge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeRequest"},"example":{"label":"example","did":"did:pkh:xrpl:0:rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","wallet":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/brand/prove":{"post":{"tags":["brand-namespace"],"summary":"Brand Prove","description":"Verify the signed challenge against the company's live DID document, then claim the root.","operationId":"brand_prove_api_v1_brand_prove_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProveRequest"},"example":{"label":"example","did":"did:pkh:xrpl:0:rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","wallet":"rawcpsYWnGTFQQGx19F7YguBXPXugA3ng7","proof":{}}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/brand/status/revocation":{"get":{"tags":["brand-namespace"],"summary":"Brand Status List","description":"The brand revocation list, built from the database on every request (no deployed file).","operationId":"brand_status_list_api_v1_brand_status_revocation_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"@context":["https://www.w3.org/ns/credentials/v2","https://dnsofmoney.com/contexts/fas1-v1"],"credentialSubject":{"encodedList":"uH4sIAAAAAAACA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA","id":"https://dnsofmoney.com/api/v1/brand/status/revocation#list","statusPurpose":"revocation","type":"BitstringStatusList"},"id":"https://dnsofmoney.com/api/v1/brand/status/revocation","issuer":"did:web:dnsofmoney.com","proof":{"created":"2026-11-05T01:04:05Z","cryptosuite":"eddsa-jcs-2022","proofPurpose":"assertionMethod","proofValue":"z4Yb5Y9dQC7vNVcs9zdvWgkrKWVE2Rc8yDetHmUJgka8hhH7JfQv5LDky2HE9VTJA5iKCfvLcqFen8CneXzYSUsGx","type":"DataIntegrityProof","verificationMethod":"did:web:dnsofmoney.com#key-1"},"type":["VerifiableCredential","BitstringStatusListCredential"],"validFrom":"2026-11-05T01:04:05Z"}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/.well-known/agent-card.json":{"get":{"tags":["a2a"],"summary":"Agent Card","description":"A2A AgentCard — the discovery document (RFC 8615 well-known path).","operationId":"agent_card__well_known_agent_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"capabilities":{"pushNotifications":false,"stateTransitionHistory":false,"streaming":false},"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json"],"description":"Deterministic financial address resolution for AI agents: resolve pay: aliases to payment endpoints, discover agent-commerce capabilities, and quote x402 payment requirements. Read-only and non-custodial — the intelligence lives in the calling agent; this agent serves verifiable, deterministic answers and never moves money. Send a message whose data part is {\"tool\": <skill id>, \"arguments\": {...}}.","documentationUrl":"https://dnsofmoney.com/mcp/","name":"DNS of Money — Financial Address Resolution Agent","preferredTransport":"JSONRPC","protocolVersion":"0.3.0","provider":{"organization":"DNS of Money","url":"https://dnsofmoney.com"},"security":[],"securitySchemes":{"apiKey":{"description":"Optional. Anonymous callers get tier-redacted resolution results; keyed callers see the fields their tier allows.","in":"header","name":"X-API-Key","type":"apiKey"}},"skills":[{"description":"Resolve a human-readable financial alias (pay: address) to payment endpoints and routing metadata. Call this before initiating any payment to a pay: address. Returns the preferred rail, fallback endpoints, an ISO 20022 hint, and a compliance signal. Anonymous calls return status only; a free API key (no credit card) unlocks the endpoint set — which rails and currencies the alias accepts — via POST /api/v1/access-requests. You do NOT need a key to pay: get_payment_requirements returns a payable address to any caller. Example: resolve_alias('pay:acme.user').","examples":["{\"tool\": \"resolve_alias\", \"arguments\": {\"alias_uri\": \"pay:acme.user\"}}"],"id":"resolve_alias","inputModes":["application/json","text/plain"],"name":"resolve_alias","outputModes":["application/json"],"tags":["resolution","discovery","payments"]},{"description":"Get the AP2/A2A agent-commerce block for a pay: address — the DNS of Money equivalent of an A2A agent-card lookup. Use this during agent discovery before initiating a mandate flow. Returns agent capabilities only; NO payment credentials. Example: discover_agent('pay:acme.user').","examples":["{\"tool\": \"discover_agent\", \"arguments\": {\"alias_uri\": \"pay:acme.user\"}}"],"id":"discover_agent","inputModes":["application/json","text/plain"],"name":"discover_agent","outputModes":["application/json"],"tags":["discovery","agent-commerce"]},{"description":"Check whether a pay: alias can still be claimed. Returns exactly one of three states: 'available' (free to register), 'taken' (already registered), or 'reserved' (protected namespace). When available, also returns the number of founding spots remaining. Public — no API key required. Read-only: this never reserves or registers the name. Example: check_alias_available('pay:acme.user').","examples":[],"id":"check_alias_available","inputModes":["application/json","text/plain"],"name":"check_alias_available","outputModes":["application/json"],"tags":["payments"]},{"description":"Get x402 PaymentRequirements for paying a pay: alias. Returns the 402 `accepts` block (scheme, network, payTo, asset, amount, invoiceId) an x402 agent needs to construct and submit the payment. currency='XRP' settles on the XRP Ledger (amount in drops); currency='USDC' settles USDC on Algorand via the GoPlausible facilitator (amount in atomic micro-USDC, feePayer in `extra`). The deterministic resolver chooses the rail; this tool never moves money. Example: get_payment_requirements('pay:acme.user', amount='1.5').","examples":["{\"tool\": \"get_payment_requirements\", \"arguments\": {\"alias_uri\": \"pay:acme.user\", \"currency\": \"USDC\"}}"],"id":"get_payment_requirements","inputModes":["application/json","text/plain"],"name":"get_payment_requirements","outputModes":["application/json"],"tags":["payments","x402","quoting"]},{"description":"Check whether a payment you already attempted was recorded, BEFORE you retry and risk spending twice. Pass the request_key you sent as the Idempotency-Key header on the paid request. Returns state 'settled' (we hold a receipt — do NOT pay again) or 'not_found' (we have no record — retrying is safe). Use this when a paid call timed out or its response was lost: on rails where the facilitator broadcasts, you never learn the transaction hash unless our response reaches you, so this key is the only thing that can answer. The key is a bearer secret — whoever presents it gets the receipt.","examples":[],"id":"get_payment_status","inputModes":["application/json","text/plain"],"name":"get_payment_status","outputModes":["application/json"],"tags":["payments"]},{"description":"Learn how to self-register a FREE pay:agent.<label> alias for your agent. Returns the registration endpoint, the AgentAuthorityCredential verifiable-presentation requirements (intent binding + domain), the rate limit, and the Merkle anchor-proof endpoint. Read-only — registration itself is the credential-gated POST this tool points at. Example: get_agent_registration_info().","examples":["{\"tool\": \"get_agent_registration_info\", \"arguments\": {}}"],"id":"get_agent_registration_info","inputModes":["application/json","text/plain"],"name":"get_agent_registration_info","outputModes":["application/json"],"tags":["registration","onboarding"]}],"supportedInterfaces":[{"protocolBinding":"JSONRPC","protocolVersion":"1.0","url":"https://api.dnsofmoney.com/a2a/v1"},{"protocolBinding":"JSONRPC","protocolVersion":"0.3.0","url":"https://api.dnsofmoney.com/a2a/v1"}],"url":"https://api.dnsofmoney.com/a2a/v1","version":"1.0.0"}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/.well-known/agent.json":{"get":{"tags":["a2a"],"summary":"Agent Card Legacy Path","description":"Pre-0.3 discovery path; serves the identical card.","operationId":"agent_card_legacy_path__well_known_agent_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"capabilities":{"pushNotifications":false,"stateTransitionHistory":false,"streaming":false},"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json"],"description":"Deterministic financial address resolution for AI agents: resolve pay: aliases to payment endpoints, discover agent-commerce capabilities, and quote x402 payment requirements. Read-only and non-custodial — the intelligence lives in the calling agent; this agent serves verifiable, deterministic answers and never moves money. Send a message whose data part is {\"tool\": <skill id>, \"arguments\": {...}}.","documentationUrl":"https://dnsofmoney.com/mcp/","name":"DNS of Money — Financial Address Resolution Agent","preferredTransport":"JSONRPC","protocolVersion":"0.3.0","provider":{"organization":"DNS of Money","url":"https://dnsofmoney.com"},"security":[],"securitySchemes":{"apiKey":{"description":"Optional. Anonymous callers get tier-redacted resolution results; keyed callers see the fields their tier allows.","in":"header","name":"X-API-Key","type":"apiKey"}},"skills":[{"description":"Resolve a human-readable financial alias (pay: address) to payment endpoints and routing metadata. Call this before initiating any payment to a pay: address. Returns the preferred rail, fallback endpoints, an ISO 20022 hint, and a compliance signal. Anonymous calls return status only; a free API key (no credit card) unlocks the endpoint set — which rails and currencies the alias accepts — via POST /api/v1/access-requests. You do NOT need a key to pay: get_payment_requirements returns a payable address to any caller. Example: resolve_alias('pay:acme.user').","examples":["{\"tool\": \"resolve_alias\", \"arguments\": {\"alias_uri\": \"pay:acme.user\"}}"],"id":"resolve_alias","inputModes":["application/json","text/plain"],"name":"resolve_alias","outputModes":["application/json"],"tags":["resolution","discovery","payments"]},{"description":"Get the AP2/A2A agent-commerce block for a pay: address — the DNS of Money equivalent of an A2A agent-card lookup. Use this during agent discovery before initiating a mandate flow. Returns agent capabilities only; NO payment credentials. Example: discover_agent('pay:acme.user').","examples":["{\"tool\": \"discover_agent\", \"arguments\": {\"alias_uri\": \"pay:acme.user\"}}"],"id":"discover_agent","inputModes":["application/json","text/plain"],"name":"discover_agent","outputModes":["application/json"],"tags":["discovery","agent-commerce"]},{"description":"Check whether a pay: alias can still be claimed. Returns exactly one of three states: 'available' (free to register), 'taken' (already registered), or 'reserved' (protected namespace). When available, also returns the number of founding spots remaining. Public — no API key required. Read-only: this never reserves or registers the name. Example: check_alias_available('pay:acme.user').","examples":[],"id":"check_alias_available","inputModes":["application/json","text/plain"],"name":"check_alias_available","outputModes":["application/json"],"tags":["payments"]},{"description":"Get x402 PaymentRequirements for paying a pay: alias. Returns the 402 `accepts` block (scheme, network, payTo, asset, amount, invoiceId) an x402 agent needs to construct and submit the payment. currency='XRP' settles on the XRP Ledger (amount in drops); currency='USDC' settles USDC on Algorand via the GoPlausible facilitator (amount in atomic micro-USDC, feePayer in `extra`). The deterministic resolver chooses the rail; this tool never moves money. Example: get_payment_requirements('pay:acme.user', amount='1.5').","examples":["{\"tool\": \"get_payment_requirements\", \"arguments\": {\"alias_uri\": \"pay:acme.user\", \"currency\": \"USDC\"}}"],"id":"get_payment_requirements","inputModes":["application/json","text/plain"],"name":"get_payment_requirements","outputModes":["application/json"],"tags":["payments","x402","quoting"]},{"description":"Check whether a payment you already attempted was recorded, BEFORE you retry and risk spending twice. Pass the request_key you sent as the Idempotency-Key header on the paid request. Returns state 'settled' (we hold a receipt — do NOT pay again) or 'not_found' (we have no record — retrying is safe). Use this when a paid call timed out or its response was lost: on rails where the facilitator broadcasts, you never learn the transaction hash unless our response reaches you, so this key is the only thing that can answer. The key is a bearer secret — whoever presents it gets the receipt.","examples":[],"id":"get_payment_status","inputModes":["application/json","text/plain"],"name":"get_payment_status","outputModes":["application/json"],"tags":["payments"]},{"description":"Learn how to self-register a FREE pay:agent.<label> alias for your agent. Returns the registration endpoint, the AgentAuthorityCredential verifiable-presentation requirements (intent binding + domain), the rate limit, and the Merkle anchor-proof endpoint. Read-only — registration itself is the credential-gated POST this tool points at. Example: get_agent_registration_info().","examples":["{\"tool\": \"get_agent_registration_info\", \"arguments\": {}}"],"id":"get_agent_registration_info","inputModes":["application/json","text/plain"],"name":"get_agent_registration_info","outputModes":["application/json"],"tags":["registration","onboarding"]}],"supportedInterfaces":[{"protocolBinding":"JSONRPC","protocolVersion":"1.0","url":"https://api.dnsofmoney.com/a2a/v1"},{"protocolBinding":"JSONRPC","protocolVersion":"0.3.0","url":"https://api.dnsofmoney.com/a2a/v1"}],"url":"https://api.dnsofmoney.com/a2a/v1","version":"1.0.0"}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/a2a/v1":{"post":{"tags":["a2a"],"summary":"A2A Rpc","description":"A2A JSON-RPC 2.0 endpoint — both 1.0 and legacy 0.3 method names.","operationId":"a2a_rpc_a2a_v1_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{},{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"jsonrpc":"2.0","id":1,"method":"tasks/list","params":{}}}}}}},"/api/v1/trust/sample-credential":{"get":{"tags":["trust"],"summary":"Sample Credential","description":"Serve the fixed, real, signed sample credential (see app/trust/sample.py).","operationId":"sample_credential_api_v1_trust_sample_credential_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"@context":["https://www.w3.org/ns/credentials/v2","https://dnsofmoney.com/contexts/fas1-v1"],"credentialSubject":{"id":"did:web:dnsofmoney.com","sample":true,"statement":"Sample credential. It exists so that anyone can verify that did:web:dnsofmoney.com produces valid eddsa-jcs-2022 Data Integrity proofs. It asserts nothing about any party and confers nothing."},"id":"https://dnsofmoney.com/credentials/sample/1","issuer":"did:web:dnsofmoney.com","proof":{"created":"2026-09-18T00:00:00Z","cryptosuite":"eddsa-jcs-2022","proofPurpose":"assertionMethod","proofValue":"z4WUnVce7REp6yiquhXgS6mQzfNMCwiozD69yU5ovCNjgxrrML97iXymz2CTjMk99dMo6fGjsqtveHRLbryVGj32B","type":"DataIntegrityProof","verificationMethod":"did:web:dnsofmoney.com#key-1"},"type":["VerifiableCredential","TrustLayerSampleCredential"],"validFrom":"2026-09-18T00:00:00Z"}}},"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"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/ap2/purchase":{"post":{"tags":["ap2"],"summary":"Ap2 Purchase","description":"Verify a settled XRPL payment to a pay: alias and emit the AP2 Cart + Payment mandates.","operationId":"ap2_purchase_api_v1_ap2_purchase_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AP2PurchaseRequest"},"example":{"intent":{"natural_language_description":"Pay 1 XRP to pay:dnsofmoney","intent_expiry":"2026-11-05T00:00:00Z"},"alias":"pay:dnsofmoney","amount":"1.00","tx_hash":"EA8159536A8D557492AF64421EBD78BC0C185A31DCC7CC4F1CAE553245BADBDA"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/xapp/ott":{"post":{"tags":["xapp"],"summary":"Exchange a Xaman OTT for a backend JWT + session context","description":"Frontend posts {ott} → we call Xaman's /platform/xapp/ott/{token} with the\nAPI secret, then return {jwt, context}. The Xaman API secret NEVER leaves\nthis backend.","operationId":"ott_exchange_xapp_ott_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OttExchangeRequest"},"example":{"ott":"00000000-0000-4000-8000-000000000000"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/xapp/me":{"get":{"tags":["xapp"],"summary":"Return the JWT-bound session (smoke-test for the Bearer round-trip)","description":"JWT-protected echo. Returns the account, network, and token lifetime —\nuseful for confirming the frontend→backend Bearer round-trip works.","operationId":"xapp_me_xapp_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"XappBearer":[]}]}},"/xapp/event":{"post":{"tags":["xapp"],"summary":"Record one client-side xApp sign-funnel event (best-effort telemetry)","description":"The xApp posts funnel events the backend/Xaman can't observe (did the sign\nrequest surface? rejected? timed out? deeplink fallback used?). Identity\n(account, network) is taken from the verified JWT, never the body. Unknown\nflow/event strings are kept (truncated) rather than rejected — a telemetry\nwrite must never become a client-facing error.\n\nTerminal outcomes (signed / rejected / timeout) also push a one-line\nTelegram alert via ALERT_WEBHOOK_URL, queued post-response so it never\nadds latency to the client.","operationId":"record_xapp_event_xapp_event_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XappEventIn"},"example":{"flow":"register","event":"opened"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"XappBearer":[]}]}},"/xapp/events":{"get":{"tags":["xapp"],"summary":"Admin-only: recent xApp sign-funnel events (X-Admin-Key = live API key)","description":"Read the client telemetry funnel, newest first. Read-only, off the money path.","operationId":"list_xapp_events_xapp_events_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"flow","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flow"},"example":"register"},{"name":"account","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account"}},{"name":"x-admin-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"AdminKey":[]}]}},"/api/v1/access-requests":{"post":{"tags":["access-requests"],"summary":"Submit Access Request","operationId":"submit_access_request_api_v1_access_requests_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitAccessRequest"},"example":{"name":"Example Agent","email":"dev@example.com"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Request an API key. The key arrives after email verification.","security":[]},"get":{"tags":["access-requests"],"summary":"List Access Requests","operationId":"list_access_requests_api_v1_access_requests_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccessRequestResponse"},"title":"Response List Access Requests Api V1 Access Requests Get"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"List API key requests. Operators only.","security":[{"ApiKeyAuth":[]}]}},"/api/v1/access-requests/verify":{"get":{"tags":["access-requests"],"summary":"Verify Access Request","description":"Consume an emailed token and issue the free developer key, shown once.","operationId":"verify_access_request_api_v1_access_requests_verify_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"},"example":"verification-token"}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/access-requests/{request_id}/approve":{"post":{"tags":["access-requests"],"summary":"Approve Access Request","operationId":"approve_access_request_api_v1_access_requests__request_id__approve_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"},"example":"00000000-0000-4000-8000-000000000000"},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveResponse"}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Approve an API key request. Operators only.","security":[{"ApiKeyAuth":[]}]}},"/api/v1/access-requests/{request_id}/reject":{"post":{"tags":["access-requests"],"summary":"Reject Access Request","operationId":"reject_access_request_api_v1_access_requests__request_id__reject_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"},"example":"00000000-0000-4000-8000-000000000000"},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"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"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Reject an API key request. Operators only.","security":[{"ApiKeyAuth":[]}]}}},"components":{"schemas":{"AP2PurchaseRequest":{"properties":{"intent":{"$ref":"#/components/schemas/IntentMandate"},"alias":{"type":"string","title":"Alias","description":"The pay: alias being paid (the merchant/payee)."},"amount":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount","description":"Amount paid, in the asset's display unit (XRP)."},"currency":{"type":"string","title":"Currency","description":"Settlement asset. XRP (XRPL) for v1.","default":"XRP"},"tx_hash":{"type":"string","title":"Tx Hash","description":"The already-settled XRPL transaction hash (verified read-only)."},"merchant_name":{"type":"string","title":"Merchant Name","description":"Merchant name carried in the CartMandate.","default":"DNS of Money"}},"type":"object","required":["intent","alias","amount","tx_hash"],"title":"AP2PurchaseRequest","description":"An inbound AP2 purchase: the user's IntentMandate + the settled-on-XRPL proof."},"AccessRequestResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"company":{"type":"string","title":"Company"},"use_case":{"type":"string","title":"Use Case"},"twitter_handle":{"type":"string","title":"Twitter Handle","default":""},"linkedin_url":{"type":"string","title":"Linkedin Url","default":""},"github_username":{"type":"string","title":"Github Username","default":""},"followed_socials":{"type":"string","title":"Followed Socials","default":"false"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"},"reviewed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed At"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["id","name","email","company","use_case","status","created_at"],"title":"AccessRequestResponse"},"AgentRegisterRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":11,"title":"Alias Name","description":"pay:agent.<label>"},"presentation":{"additionalProperties":true,"type":"object","title":"Presentation"},"nonce":{"type":"string","maxLength":128,"minLength":8,"title":"Nonce"},"currency":{"type":"string","maxLength":8,"title":"Currency","description":"Must match the credential grant's currency.","default":"XRP"},"xrpl_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Xrpl Address","description":"Optional XRPL receive address for resolution."},"dust_tx_hash":{"anyOf":[{"type":"string","maxLength":64,"minLength":64},{"type":"null"}],"title":"Dust Tx Hash","description":"Hash of the settled fee-in-kind dust payment (required only when AGENT_DUST_FEE_ENABLED)."}},"type":"object","required":["alias_name","presentation","nonce"],"title":"AgentRegisterRequest"},"AliasCreate":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"xrpl_address":{"type":"string","maxLength":34,"minLength":25,"title":"Xrpl Address"},"founding_tx_hash":{"type":"string","maxLength":64,"minLength":64,"title":"Founding Tx Hash"},"preferred_rail":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Preferred Rail"}},"type":"object","required":["alias_name","xrpl_address","founding_tx_hash"],"title":"AliasCreate","description":"Request body for POST /api/v1/aliases/register."},"AliasUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Display Name"},"preferred_rail":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Preferred Rail"},"xrpl_address":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Xrpl Address"},"preferred_deliver_currency":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Preferred Deliver Currency"},"deliver_as":{"anyOf":[{"type":"string","maxLength":96},{"type":"null"}],"title":"Deliver As"},"x_handle":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"X Handle"}},"type":"object","title":"AliasUpdate","description":"PATCH body for alias updates. All fields optional."},"ApproveResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"slug":{"type":"string","title":"Slug"},"api_key":{"type":"string","title":"Api Key"},"message":{"type":"string","title":"Message"}},"type":"object","required":["request_id","tenant_id","slug","api_key","message"],"title":"ApproveResponse"},"BurnNFTRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"signin_uuid":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Signin Uuid"}},"type":"object","required":["alias_name"],"title":"BurnNFTRequest"},"ChallengeRequest":{"properties":{"label":{"type":"string","maxLength":64,"minLength":1,"title":"Label"},"did":{"type":"string","maxLength":256,"minLength":10,"title":"Did"},"wallet":{"type":"string","maxLength":64,"minLength":25,"title":"Wallet"}},"type":"object","required":["label","did","wallet"],"title":"ChallengeRequest"},"ClaimNFTRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"}},"type":"object","required":["alias_name"],"title":"ClaimNFTRequest"},"CreatePaymentRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"xrpl_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Xrpl Address","description":"If provided, the backend checks wallet_exists before creating the payload — prevents Xaman from requesting a payment from a wallet that is already registered."}},"type":"object","required":["alias_name"],"title":"CreatePaymentRequest"},"CreateSendPaymentRequest":{"properties":{"alias":{"type":"string","maxLength":128,"minLength":1,"title":"Alias"},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount"},"memo":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Memo"}},"type":"object","required":["alias","amount"],"title":"CreateSendPaymentRequest"},"DeliveryQuoteRequest":{"properties":{"to":{"type":"string","maxLength":160,"title":"To","description":"Recipient pay: name, e.g. pay:bob"},"amount":{"type":"string","maxLength":40,"title":"Amount","description":"What the RECIPIENT receives, display units"},"from_asset":{"type":"string","maxLength":12,"title":"From Asset","description":"Asset you hold: USDC, XRP, RLUSD"},"from_network":{"type":"string","maxLength":80,"title":"From Network","description":"CAIP-2 of your holding, e.g. eip155:137"},"sender":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Sender","description":"Your address (needed for XRPL + pre-flight)"},"max_source_amount":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Max Source Amount","description":"XRPL conversions: the most of your asset you will spend"},"simulate":{"type":"boolean","title":"Simulate","description":"CCTP: simulate your burn against your real balance","default":false}},"type":"object","required":["to","amount","from_asset","from_network"],"title":"DeliveryQuoteRequest"},"FoundingAliasCreate":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"xrpl_address":{"type":"string","maxLength":34,"minLength":25,"title":"Xrpl Address"},"founding_tx_hash":{"type":"string","maxLength":64,"minLength":64,"title":"Founding Tx Hash"},"preferred_rail":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Preferred Rail"}},"type":"object","required":["alias_name","xrpl_address","founding_tx_hash"],"title":"FoundingAliasCreate","description":"Request body for POST /api/v1/founding/register — allows single-label aliases."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IntentMandate":{"properties":{"natural_language_description":{"type":"string","title":"Natural Language Description"},"intent_expiry":{"type":"string","title":"Intent Expiry"},"user_cart_confirmation_required":{"type":"boolean","title":"User Cart Confirmation Required","default":true},"merchants":{"items":{"type":"string"},"type":"array","title":"Merchants"},"skus":{"items":{"type":"string"},"type":"array","title":"Skus"},"requires_refundability":{"type":"boolean","title":"Requires Refundability","default":false}},"type":"object","required":["natural_language_description","intent_expiry"],"title":"IntentMandate"},"LeaseCreate":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"lessee_address":{"type":"string","maxLength":64,"minLength":1,"title":"Lessee Address"},"term_days":{"anyOf":[{"type":"integer","maximum":3650.0,"minimum":1.0},{"type":"null"}],"title":"Term Days"},"lessee_label":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Lessee Label"}},"type":"object","required":["alias_name","lessee_address"],"title":"LeaseCreate"},"OnrampAddressResponse":{"properties":{"alias":{"type":"string","title":"Alias"},"currency":{"type":"string","title":"Currency"},"network":{"type":"string","title":"Network","default":"xrp_ledger"},"wallet_address":{"type":"string","title":"Wallet Address"},"destination_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Tag"}},"type":"object","required":["alias","currency","wallet_address"],"title":"OnrampAddressResponse"},"OnrampSignRequest":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"params":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object","maxProperties":32},{"type":"null"}],"title":"Params"}},"type":"object","title":"OnrampSignRequest"},"OnrampSignResponse":{"properties":{"url":{"type":"string","title":"Url"},"signature":{"type":"string","title":"Signature"}},"type":"object","required":["url","signature"],"title":"OnrampSignResponse"},"OttExchangeRequest":{"properties":{"ott":{"type":"string","maxLength":128,"minLength":10,"title":"Ott","description":"Raw xAppToken from Xaman boot query string."}},"type":"object","required":["ott"],"title":"OttExchangeRequest"},"ProveRequest":{"properties":{"label":{"type":"string","maxLength":64,"minLength":1,"title":"Label"},"did":{"type":"string","maxLength":256,"minLength":10,"title":"Did"},"wallet":{"type":"string","maxLength":64,"minLength":25,"title":"Wallet"},"proof":{"additionalProperties":true,"type":"object","title":"Proof"}},"type":"object","required":["label","did","wallet","proof"],"title":"ProveRequest"},"RegisterRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"payload_uuid":{"type":"string","maxLength":64,"minLength":8,"title":"Payload Uuid"},"receive_address":{"anyOf":[{"type":"string","maxLength":64,"minLength":25},{"type":"null"}],"title":"Receive Address"}},"type":"object","required":["alias_name","payload_uuid"],"title":"RegisterRequest"},"RenewRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"payload_uuid":{"type":"string","maxLength":64,"minLength":8,"title":"Payload Uuid"}},"type":"object","required":["alias_name","payload_uuid"],"title":"RenewRequest"},"ResolveRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount"},"currency":{"type":"string","maxLength":3,"title":"Currency","default":"USD"},"preferred_rail":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Preferred Rail"}},"type":"object","required":["alias_name"],"title":"ResolveRequest","description":"Request body for POST /resolve (optional — GET uses path param)."},"RotateReceiveRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"payload_uuid":{"type":"string","maxLength":64,"minLength":8,"title":"Payload Uuid"},"receive_address":{"type":"string","maxLength":64,"minLength":25,"title":"Receive Address"}},"type":"object","required":["alias_name","payload_uuid","receive_address"],"title":"RotateReceiveRequest"},"SendPreviewResponse":{"properties":{"alias":{"type":"string","title":"Alias"},"resolved":{"type":"boolean","title":"Resolved"},"destination_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Address"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"rail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rail"},"currency":{"type":"string","title":"Currency","default":"USD"},"fee_estimate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Estimate"},"identity":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Identity"}},"type":"object","required":["alias","resolved"],"title":"SendPreviewResponse","description":"Dry-run: shows where money would go without executing."},"SendRequest":{"properties":{"alias":{"type":"string","title":"Alias","description":"Target alias, e.g. 'pay:jd' or just 'jd'"},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Amount in currency units"},"currency":{"type":"string","maxLength":8,"title":"Currency","default":"USD"},"memo":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Memo"},"idempotency_key":{"type":"string","maxLength":128,"minLength":1,"title":"Idempotency Key","description":"Prevents double-send"},"sender_address":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Sender Address","description":"Optional XRPL address of sender (for tracking/memo only)"},"source_currency":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Source Currency","description":"XRPL-native asset the sender pays in, e.g. 'RLUSD' (cross-currency)"},"max_source_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Source Amount","description":"Max source-asset units the sender will spend (slippage ceiling)"}},"type":"object","required":["alias","amount","idempotency_key"],"title":"SendRequest","description":"Send money to a pay:name alias."},"SendResponse":{"properties":{"transaction_id":{"type":"string","format":"uuid","title":"Transaction Id"},"status":{"type":"string","title":"Status"},"alias":{"type":"string","title":"Alias"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency"},"rail":{"type":"string","title":"Rail"},"tx_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tx Hash"},"settle_time_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Settle Time Seconds"},"memo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memo"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"simulated":{"type":"boolean","title":"Simulated","default":false}},"type":"object","required":["transaction_id","status","alias","amount","currency","rail","created_at"],"title":"SendResponse","description":"Result of a send-to-alias payment execution."},"SignInRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"}},"type":"object","required":["alias_name"],"title":"SignInRequest"},"SubmitAccessRequest":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"company":{"type":"string","title":"Company","default":""},"use_case":{"type":"string","title":"Use Case","default":""},"twitter_handle":{"type":"string","title":"Twitter Handle","default":""},"linkedin_url":{"type":"string","title":"Linkedin Url","default":""},"github_username":{"type":"string","title":"Github Username","default":""},"followed_socials":{"type":"boolean","title":"Followed Socials","default":false}},"type":"object","required":["name","email"],"title":"SubmitAccessRequest"},"SwapQuoteResponse":{"properties":{"alias":{"type":"string","title":"Alias"},"provider":{"type":"string","title":"Provider"},"quote_id":{"type":"string","title":"Quote Id"},"from_symbol":{"type":"string","title":"From Symbol"},"from_chain":{"type":"string","title":"From Chain"},"to_symbol":{"type":"string","title":"To Symbol","default":"XRP"},"to_chain":{"type":"string","title":"To Chain","default":"xrpl"},"deposit_address":{"type":"string","title":"Deposit Address"},"dest_address":{"type":"string","title":"Dest Address"},"amount_in":{"type":"string","title":"Amount In"},"est_amount_out":{"type":"string","title":"Est Amount Out"},"note":{"type":"string","title":"Note","default":"Project O custodies nothing; the provider holds and converts the funds."}},"type":"object","required":["alias","provider","quote_id","from_symbol","from_chain","deposit_address","dest_address","amount_in","est_amount_out"],"title":"SwapQuoteResponse"},"SwapVerifyRequest":{"properties":{"xrpl_tx_hash":{"type":"string","maxLength":64,"minLength":64,"title":"Xrpl Tx Hash"}},"type":"object","required":["xrpl_tx_hash"],"title":"SwapVerifyRequest"},"SwapVerifyResponse":{"properties":{"xrpl_tx_hash":{"type":"string","title":"Xrpl Tx Hash"},"confirmed":{"type":"boolean","title":"Confirmed"}},"type":"object","required":["xrpl_tx_hash","confirmed"],"title":"SwapVerifyResponse"},"ToolCallRequest":{"properties":{"tool":{"type":"string","maxLength":64,"minLength":1,"title":"Tool"},"arguments":{"additionalProperties":true,"type":"object","title":"Arguments"}},"type":"object","required":["tool"],"title":"ToolCallRequest"},"TransferAcceptRequest":{"properties":{"offer_id":{"type":"string","maxLength":128,"minLength":1,"title":"Offer Id"},"alias_name":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Alias Name"}},"type":"object","required":["offer_id"],"title":"TransferAcceptRequest"},"TransferOfferRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"destination":{"type":"string","maxLength":64,"minLength":1,"title":"Destination"},"amount_drops":{"type":"string","maxLength":20,"title":"Amount Drops","default":"0"}},"type":"object","required":["alias_name","destination"],"title":"TransferOfferRequest"},"TransferSyncRequest":{"properties":{"alias_name":{"type":"string","maxLength":128,"minLength":5,"title":"Alias Name"},"expected_owner":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Expected Owner"}},"type":"object","required":["alias_name"],"title":"TransferSyncRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WalletSigninRequest":{"properties":{"purpose":{"anyOf":[{"type":"string","const":"burn-nft"},{"type":"null"}],"title":"Purpose"},"alias_name":{"anyOf":[{"type":"string","maxLength":128,"minLength":5},{"type":"null"}],"title":"Alias Name"}},"type":"object","title":"WalletSigninRequest"},"XappEventIn":{"properties":{"flow":{"type":"string","maxLength":32,"title":"Flow"},"event":{"type":"string","maxLength":48,"title":"Event"},"alias":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Alias"},"payload_uuid":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Payload Uuid"},"detail":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Detail"}},"type":"object","required":["flow","event"],"title":"XappEventIn"},"ErrorDetail":{"type":"object","required":["detail"],"properties":{"detail":{"type":"string"}},"example":{"detail":"Invalid or missing API key"}},"RateLimitError":{"type":"object","required":["error","limit","reset_at"],"properties":{"error":{"type":"string","const":"rate_limit_exceeded"},"limit":{"type":"integer"},"reset_at":{"type":"string","format":"date-time"}},"example":{"error":"rate_limit_exceeded","limit":60,"reset_at":"2026-11-04T00:01:00+00:00"}}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key."},"X402Payment":{"type":"apiKey","in":"header","name":"X-PAYMENT","description":"x402 v1 payment payload. Answer the 402 challenge with this header."},"X402PaymentSignature":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"x402 v2 payment payload. Answer the 402 challenge with this header."},"XappBearer":{"type":"http","scheme":"bearer","description":"Session JWT from POST /xapp/ott."},"AdminKey":{"type":"apiKey","in":"header","name":"x-admin-key","description":"Operator key."}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time when the window resets.","schema":{"type":"integer"}},"PAYMENT-REQUIRED":{"description":"The 402 challenge, encoded for x402 v2 clients.","schema":{"type":"string"}},"PAYMENT-RESPONSE":{"description":"The settlement receipt.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before the next request.","schema":{"type":"integer"}}},"responses":{"Unauthorized":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"Forbidden":{"description":"This key cannot use this route.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDetail"}}}},"RateLimited":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"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"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}}}}},"tags":[{"name":"resolve","description":"Resolve a pay: name into payment instructions."},{"name":"aliases","description":"Check, register and manage pay: names."},{"name":"founding","description":"The founding tier of 600 names, with its NFT and transfer flows."},{"name":"standard-registration","description":"Register and renew standard names with a wallet."},{"name":"agent-selfreg","description":"Agents register their own pay:agent.* names."},{"name":"brand-namespace","description":"Prove control of a domain to claim a brand namespace."},{"name":"leases","description":"Lease a name to a wallet for a fixed term."},{"name":"identity","description":"Identity art and NFT metadata for a name."},{"name":"send","description":"Preview, create and track a payment to a name."},{"name":"deliver","description":"Quote delivery of a payment in another asset or chain."},{"name":"swap","description":"Quote and verify a swap before a payment."},{"name":"onramp","description":"Buy crypto with fiat through a third-party provider."},{"name":"x402","description":"Pay per call over the HTTP 402 handshake."},{"name":"mcp","description":"The Model Context Protocol server for AI agents."},{"name":"a2a","description":"The Agent2Agent card and JSON-RPC endpoint."},{"name":"ap2","description":"Agent Payments Protocol purchase intake."},{"name":"trust","description":"Sample credentials from the did:web trust layer."},{"name":"xapp","description":"The backend for the Xaman xApp."},{"name":"access-requests","description":"Request an API key and review requests."},{"name":"system","description":"Service health."}]}