{"openapi":"3.1.0","info":{"title":"MoneyTools Approval Relay","version":"1.0.2","description":"Human approval for unattended AI agents: when an agent needs a person to approve an irreversible action (delete, send, deploy, spend), it gets a one-time approve link to pass to its human, waits for approve/deny, and receives an Ed25519-signed decision receipt. 0.005 USDC per request (x402, Base); 3 free per day.","contact":{"email":"support@moneytools.dev","url":"https://moneytools.dev/"},"x-guidance":"POST /v1/approvals creates a request (free daily tier, then x402 USDC on Base; unpaid -> HTTP 402, retry with PAYMENT-SIGNATURE). Relay approve_url to the human yourself, then long-poll GET /v1/approvals/{id}?wait=25. Proceed only on status approved. MCP at /mcp."},"servers":[{"url":"https://relay.moneytools.dev"}],"paths":{"/v1/approvals":{"post":{"operationId":"request_approval","summary":"Create a human approval request (0.005 USDC; 3/day free)","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action_summary":{"type":"string","maxLength":500,"description":"Plain-language description of the irreversible action awaiting approval"},"risk":{"type":"string","enum":["low","med","high"],"description":"Risk level shown to the approver (default med)"},"expires_in_s":{"type":"integer","minimum":60,"maximum":86400,"description":"Seconds until the request expires unanswered (default 3600)"},"callback_url":{"type":"string","description":"Optional public https URL that receives a POST with the signed receipt when decided"},"requester":{"type":"string","maxLength":80,"description":"Optional label shown to the approver, e.g. agent or job name"}},"required":["action_summary"]},"example":{"action_summary":"Delete the staging database 'shop-staging' and its 3 backups (cannot be undone)","risk":"high","expires_in_s":3600}}}},"responses":{"200":{"description":"created: approval_id, approve_url, poll_url, receipt_url"},"400":{"description":"invalid input or malformed payment header"},"402":{"description":"Payment Required (x402 v2)"}}},"get":{"operationId":"request_approval_offer","summary":"402 offer (POST JSON creates the request)","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"402":{"description":"Payment Required (x402 v2)"}}}},"/v1/approvals/{id}":{"get":{"operationId":"get_approval","summary":"Free: status, long-poll with ?wait=0-25","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^apr-[A-Za-z0-9_-]+$"}},{"name":"wait","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":25}}],"responses":{"200":{"description":"status (+ receipt_jws when decided)"},"404":{"description":"unknown id"}}}},"/v1/approvals/{id}/receipt":{"get":{"operationId":"get_receipt","summary":"Free: signed decision receipt","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^apr-[A-Za-z0-9_-]+$"}}],"responses":{"200":{"description":"receipt"},"404":{"description":"unknown id"},"409":{"description":"still pending"}}}},"/v1/receipts/verify":{"post":{"operationId":"verify_receipt","summary":"Free: verify a receipt JWS","security":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["receipt_jws"],"properties":{"receipt_jws":{"type":"string"}}}}}},"responses":{"200":{"description":"{valid, payload}"}}}},"/.well-known/jwks.json":{"get":{"operationId":"jwks","summary":"Free: Ed25519 public keys","security":[],"responses":{"200":{"description":"JWKS"}}}}}}