// MoneyTools payment-safety suite — suggested order for an agent about to pay. // Free tiers (live, UTC day): Pay Precheck HTTP 5/IP/endpoint, MCP 20/client; // Approval Relay 3/day; Settle free trial 50 calls / 7 days (or 0.005 USDC per check). // This snippet does not sign a wallet or send a payment. const PRECHECK = "https://api.moneytools.dev/v1/precheck"; const SETTLE = "https://settle.moneytools.dev/v1/spend/check"; const RELAY = "https://relay.moneytools.dev/v1/approvals"; const LEDGER = "https://ledger.moneytools.dev/v1/ledger"; export async function beforePay({ sellerUrl, payer, amountUsd, host, risk = "med" }: { sellerUrl: string; payer: string; amountUsd: string; host: string; risk?: "low" | "med" | "high"; }) { const pre = await fetch(`${PRECHECK}?url=${encodeURIComponent(sellerUrl)}`).then((r) => r.json()); if (pre.verdict === "block" || pre.ok === false) return { proceed: false, step: "precheck", pre }; const cap = await fetch(SETTLE, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ payer, amountUsd, host }), }).then((r) => r.json()); if (cap.allow === false) return { proceed: false, step: "spend_check", cap }; const needsHuman = risk === "high" || cap.allow === false; if (needsHuman) { const appr = await fetch(RELAY, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ action_summary: `Pay ${amountUsd} USDC to ${host} at ${sellerUrl}`, risk, expires_in_s: 3600, }), }).then((r) => r.json()); return { proceed: false, step: "approval_relay", approve_url: appr.approve_url, approval_id: appr.approval_id, poll_url: appr.poll_url }; } return { proceed: true, pre, cap }; } // After you pay with your own wallet (or Pay Gateway), record it: // GET ${LEDGER}?days=7 with header X-API-Key (free for gateway users) // or POST https://ledger.moneytools.dev/v1/ledger/wallet { address, days }