# 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. # Set a User-Agent: default Python-urllib is blocked on some workers.dev hosts. from urllib.parse import urlencode from urllib.request import Request, urlopen import json PRECHECK = "https://api.moneytools.dev/v1/precheck" SETTLE = "https://settle.moneytools.dev/v1/spend/check" RELAY = "https://relay.moneytools.dev/v1/approvals" LEDGER = "https://ledger.moneytools.dev/v1/ledger" UA = {"User-Agent": "moneytools-suite-example/1.0", "Accept": "application/json"} def _get(url): with urlopen(Request(url, headers=UA), timeout=20) as r: return json.load(r) def _post(url, body): data = json.dumps(body).encode() req = Request(url, data=data, headers={**UA, "Content-Type": "application/json"}, method="POST") with urlopen(req, timeout=20) as r: return json.load(r) def before_pay(seller_url: str, payer: str, amount_usd: str, host: str, risk: str = "med") -> dict: pre = _get(f"{PRECHECK}?{urlencode({'url': seller_url})}") if pre.get("verdict") == "block" or pre.get("ok") is False: return {"proceed": False, "step": "precheck", "pre": pre} cap = _post(SETTLE, {"payer": payer, "amountUsd": amount_usd, "host": host}) if cap.get("allow") is False: return {"proceed": False, "step": "spend_check", "cap": cap} if risk == "high": appr = _post(RELAY, { "action_summary": f"Pay {amount_usd} USDC to {host} at {seller_url}", "risk": risk, "expires_in_s": 3600, }) return { "proceed": False, "step": "approval_relay", "approve_url": appr.get("approve_url"), "approval_id": appr.get("approval_id"), "poll_url": appr.get("poll_url"), } return {"proceed": True, "pre": pre, "cap": 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": 7}