{"service":"liberty-agent-settlement","version":"0","mode":"demo","money":false,"title":"Agent Settlement","description":"Escrow and credits for agent jobs. This file describes the demo protocol. GET /.well-known/agent.json (same JSON as GET /api/agent.json) is the small discovery card for crawlers and other agents. GET /api/quickstart.json is the ordered ready-to-run demo escrow walk (health/discovery → quote → fund → prove → release; dispute optional). GET /api/tools.json lists callable Settlement surfaces (quote, transition, simulate, verify) plus read-only discovery URLs. Not an MCP server. GET /api/schemas/transition.json is the JSON Schema for POST /api/v0/transition bodies. GET /settlement.openapi.json is the OpenAPI 3.1 document (same JSON at /openapi.json and /api/openapi.json). GET /api/changelog.json lists recent shipped slices (newest first; no user counts or revenue). GET /api/scoreboard.json reports honest zeros (external users, paid pilots, revenue). GET /api/fees.json is the machine-readable demo fee schedule (same math as fee_schedule below). POST /api/v0/quote dry-runs the same engine as POST /api/v0/transition: next status and fee math, no state change. Transition commits one action. POST /api/v0/simulate runs create → fund → submit → release|dispute in one request. POST /api/v0/verify recomputes fee math for a client-held receipt or proposed release/dispute. Release also returns agent_credits_delta so a client-held agent wallet can be credited. GET /api/examples.json for copy-ready request bodies (same curls as /#adapters). GET /api/templates.json for preset create-job fields (same buttons as /#create; fill only, no auto-create or fund). None persist jobs, receipts, or balances, take custody, or move real money.","human_path":{"ui":"/","storage":"localStorage","storage_key":"liberty.agent-settlement.v0","note":"The browser UI stores payer credits and jobs here, and a separate agent wallet under liberty.agent-settlement.agent-credits.v0. Create-job templates on /#create fill title, amount, and criteria only — they do not create or fund. Before fund, release, or dispute it POSTs /api/v0/quote and shows the cut, then POSTs /api/v0/transition on confirm. A successful release credits the agent wallet by agent_credits_delta (same as agent_payout). Dispute refunds the payer and does not credit the agent. Run a full demo settlement POSTs /api/v0/simulate with safe defaults and stores the terminal receipt. A successful release or dispute also stores the JSON receipt in this browser for export. Paste a receipt (or pick a stored one) to POST /api/v0/verify against the same fee engine. Same engine as adapters. Demo credits stay in this browser. Jobs can be copied to another browser via a client-held handoff link. Terminal receipts can be copied via a client-held receipt link (#receipt/r1.…). /#ledger sums this browser’s stored receipts (fees, agent payouts, disputed returns) and can download CSV. /#activity appends local demo actions in this browser. Clear activity does not wipe wallets, jobs, or receipts. A demo pack on /#demo-pack downloads or replaces this browser’s Settlement localStorage as one JSON file. Import does not merge. Liberty never receives the pack or the activity log.","demo_key_storage_key":"liberty.agent-settlement.demo-key.v0","demo_key_note":"Self-serve demo API key. Raw key is localStorage only. Not production auth. Not an account. A demo pack includes it only if it is already stored here.","receipt_storage_key":"liberty.agent-settlement.receipts.v0","receipt_export_note":"Client-held terminal receipts (release/dispute). Download JSON for one, or JSON array / NDJSON for all. Copy a receipt link (#receipt/r1.…) to load the receipt into Verify on another device. POST /api/v0/verify to check fee math. Liberty does not store receipts. Not a server ledger. Demo only.","agent_credits_storage_key":"liberty.agent-settlement.agent-credits.v0","agent_credits_note":"Client-held agent wallet. Credited on release by agent_credits_delta / agent_payout. Dispute does not credit. localStorage only. Not real money.","demo_pack":"/#demo-pack","demo_pack_note":"Client-held JSON snapshot of Settlement localStorage (payer store, agent credits, receipts, optional demo key). Export downloads; import replaces after confirm. Reset demo clears those known keys after confirm. money: false. Liberty never receives the file.","ledger":"/#ledger","ledger_note":"Client-held running totals from this browser’s stored receipts, payer credits, jobs, and agent wallet. CSV download of those receipts. Liberty does not persist a ledger. money: false.","activity":"/#activity","activity_note":"Client-held append-only log of local demo actions (create/fund/submit/release/dispute, simulate, verify, demo pack import/export/reset). Newest first. Capped. Clear activity does not wipe wallets, jobs, or receipts. Liberty never receives the log. money: false.","activity_storage_key":"liberty.agent-settlement.activity.v0"},"surfaces":{"discovery":"/.well-known/agent.json","agent":"/api/agent.json","health":"/api/health.json","protocol":"/api/settlement.json","transition":"/api/v0/transition","quote":"/api/v0/quote","verify":"/api/v0/verify","simulate":"/api/v0/simulate","examples":"/api/examples.json","templates":"/api/templates.json","changelog":"/api/changelog.json","scoreboard":"/api/scoreboard.json","fees":"/api/fees.json","tools":"/api/tools.json","quickstart":"/api/quickstart.json","transition_schema":"/api/schemas/transition.json","openapi":"/settlement.openapi.json","openapi_aliases":["/openapi.json","/api/openapi.json"],"markdown":"/SETTLEMENT.md","llms":"/llms.txt","handoff":"/#handoff/<token>","receipt_link":"/#receipt/<token>","receipt_export":"/","agent_wallet":"/","demo_pack":"/#demo-pack","ledger":"/#ledger","activity":"/#activity"},"agent_wallet":{"mode":"client","persistence":false,"money":false,"storage":"localStorage","storage_key":"liberty.agent-settlement.agent-credits.v0","when":"successful release (transition or simulate). Dispute does not credit.","unit":"credits","delta_field":"agent_credits_delta","note":"The human UI credits this browser’s agent wallet by agent_credits_delta (same integer as agent_payout) after a successful release. Dispute leaves the agent wallet unchanged and refunds the payer. Adapters should apply the same delta locally. Liberty does not store balances. Not real money."},"ledger":{"mode":"client","persistence":false,"money":false,"human_path":"/#ledger","storage":"localStorage","storage_keys":["liberty.agent-settlement.v0","liberty.agent-settlement.agent-credits.v0","liberty.agent-settlement.receipts.v0"],"includes":["fees_paid","agent_payouts","disputed_returns","released_count","disputed_count","payer_credits","agent_credits"],"formats":["csv"],"note":"The human UI on /#ledger reads this browser’s existing Settlement localStorage and shows running totals from stored receipts plus current payer and agent balances. Download CSV of those receipts. Liberty does not persist a ledger. Not real money. Not live GMV."},"activity":{"mode":"client","persistence":false,"money":false,"human_path":"/#activity","storage":"localStorage","storage_key":"liberty.agent-settlement.activity.v0","max_events":80,"order":"newest_first","includes":["create","fund","submit","release","dispute","simulate","verify","import","export","reset"],"clear":"confirm_activity_only","note":"The human UI on /#activity appends local demo actions in this browser. Newest first, last 80. Job id and client_ref appear when present. Clear activity removes only this list after confirm — wallets, jobs, receipts, and the demo API key stay. Reset demo does not wipe the log; it appends a reset event. Liberty never receives the log. Not a server audit trail. Demo only."},"demo_pack":{"mode":"client","persistence":false,"money":false,"human_path":"/#demo-pack","storage":"localStorage","storage_keys":["liberty.agent-settlement.v0","liberty.agent-settlement.agent-credits.v0","liberty.agent-settlement.receipts.v0","liberty.agent-settlement.demo-key.v0"],"includes":["payer_credits","jobs","agent_credits","receipts"],"optional":["demo_api_key"],"import":"replace","reset":"confirm_clear_known_keys","note":"The human UI downloads one JSON file of this browser’s Settlement state and can restore it later or on another device. Import validates the shape and replaces localStorage after confirm; it does not merge. Reset demo on /#demo-pack clears those known keys after confirm (payer store, agent credits, receipts, demo key). Unrelated localStorage is left alone. The raw demo API key is included only if it already lives in localStorage. Liberty never receives the pack. Not a server ledger. Demo only."},"receipt_export":{"mode":"client","persistence":false,"money":false,"storage":"localStorage","storage_key":"liberty.agent-settlement.receipts.v0","when":"successful release or dispute (transition or simulate receipt; quote dry-runs are not stored)","formats":["json","ndjson"],"fields":["job_id","client_ref","callback_url","status","release_fee","agent_payout","returned_to_payer","proof_note","release_note","dispute_reason","created","funded","submitted","resolved"],"note":"The human UI keeps the transition or simulate receipt in this browser so a human or adapter can download or share proof. Copy a receipt link (#receipt/r1.…) to load it into Verify on another device. POST /api/v0/verify to check that receipt against the fee engine. Liberty does not store receipts. Not a server ledger. Not real money."},"receipt_link":{"mode":"client","persistence":false,"money":false,"encoding":"r1. + base64url of compact JSON (short keys) of the receipt","prefix":"r1.","hash":"#receipt/<token>","query":"?receipt=<token>","includes":["receipt"],"excludes":["credits","agent_credits","demo_api_key","jobs"],"note":"Share a terminal receipt so another browser can inspect it or POST /api/v0/verify without pasting JSON. Credits, jobs, and the demo API key stay in each browser. Liberty does not store the receipt."},"handoff":{"mode":"client","persistence":false,"money":false,"encoding":"h1. + base64url of compact JSON (short keys) of the current job","prefix":"h1.","hash":"#handoff/<token>","query":"?handoff=<token>","includes":["job"],"excludes":["credits","agent_credits","demo_api_key","receipts"],"note":"Share a job snapshot so another browser can continue the next legal action via POST /api/v0/transition. Credits and the demo API key stay in each browser. Copy a fresh link after each action. Liberty does not store the job."},"transition_api":{"path":"/api/v0/transition","method":"POST","cors":["POST","OPTIONS"],"auth":"optional","auth_headers":["Authorization: Bearer <key>","X-Liberty-Key"],"auth_note":"Optional demo API key. Mint on the human UI (localStorage only). If sent, response and receipt include key_id (SHA-256 hex prefix, k_ + 12 chars). Raw key is never stored server-side. If omitted, the engine still works and notes key_optional. Not production auth. Not real money.","idempotency":{"header":"Idempotency-Key","body":"idempotency_key","persistence":false,"replay":false,"note":"Optional. On create, SHA-256 of the key plus title/amount/criteria yields as_ + 10 hex. Same key and create fields = same job id. Different keys = different ids. Missing key = random as_ + 10 hex. Successful responses echo idempotency_key; create sets idempotent true when the id came from the key. Later actions echo the key only. Liberty does not store or replay responses. No SSRF. No real money."},"persistence":false,"money":false,"mode":"demo","note":"Client holds the job and credits. Send action plus the fields below. Liberty returns the updated job, updated credits when relevant, fee/agent_payout/agent_credits_delta on release, and a receipt on release or dispute. Optional client_ref (max 128) on create stamps the adapter’s reference on the job and later receipt. It is independent of Idempotency-Key. Optional callback_url (notify_url alias, max 512, https) is stamped the same way so the adapter’s own client can notify itself after release or dispute. Liberty never HTTP-fetches or calls this URL. No SSRF. Optional proof_note on submit (max 400) and release_note / dispute_reason on the terminal action echo on the job and receipt. Dispute returns agent_credits_delta: 0. Optional Idempotency-Key makes create ids stable for retries; it does not replay stored responses. Not live escrow custody.","job_object":{"response":"camelCase matching the browser UI and OpenAPI Job schema (proofUrl, createdAt, agentPayout, clientRef, callbackUrl)","request_aliases":["proof_url","created_at","funded_at","submitted_at","resolved_at","agent_payout","payerCredits","proofUrl","client_ref","clientRef","callback_url","callbackUrl","notify_url","notifyUrl"]},"requests":[{"action":"create","body":["action","title","amount","criteria"],"optional":["client_ref","callback_url","idempotency_key"]},{"action":"fund","body":["action","job","payer_credits"],"optional":["idempotency_key"]},{"action":"submit","body":["action","job","proof_url"],"optional":["proof_note","idempotency_key"]},{"action":"release","body":["action","job"],"optional":["release_note","idempotency_key"]},{"action":"dispute","body":["action","job"],"optional":["payer_credits","dispute_reason","idempotency_key"]}]},"quote_api":{"path":"/api/v0/quote","method":"POST","cors":["POST","OPTIONS"],"auth":"optional","auth_headers":["Authorization: Bearer <key>","X-Liberty-Key"],"auth_note":"Same optional demo API key as /api/v0/transition. If sent, response includes key_id. If omitted, notes key_optional. Not production auth.","idempotency":{"header":"Idempotency-Key","body":"idempotency_key","persistence":false,"replay":false,"note":"Optional. Echoed on success. Create quote stays dry-run and still has no durable id. Liberty does not replay stored responses."},"dry_run":true,"persistence":false,"money":false,"mode":"demo","engine":"/api/v0/transition","note":"Same request shape and engine as transition. Returns the next status and money impact (fee, agent_payout, agent_credits_delta, payer_credits_after, returned_to_payer when those apply) without mutating state. Optional client_ref echoes on the quoted create job. Optional callback_url echoes the same way. Liberty never fetches it. Optional proof_note echoes on the quoted submit job. Optional release_note / dispute_reason echo on the quoted receipt and job. Create quote returns validated open job fields without a durable id — Liberty does not assign as_… until POST /api/v0/transition. Optional Idempotency-Key is echoed only. Not live escrow custody.","create_job":"Validated open job fields only. No durable id. Optional client_ref and callback_url echo when sent.","requests":[{"action":"create","body":["action","title","amount","criteria"],"optional":["client_ref","callback_url","idempotency_key"]},{"action":"fund","body":["action","job","payer_credits"],"optional":["idempotency_key"]},{"action":"submit","body":["action","job","proof_url"],"optional":["proof_note","idempotency_key"]},{"action":"release","body":["action","job"],"optional":["release_note","idempotency_key"]},{"action":"dispute","body":["action","job"],"optional":["payer_credits","dispute_reason","idempotency_key"]}]},"simulate_api":{"path":"/api/v0/simulate","method":"POST","cors":["POST","OPTIONS"],"auth":"optional","auth_headers":["Authorization: Bearer <key>","X-Liberty-Key"],"auth_note":"Same optional demo API key as /api/v0/transition. If sent, response and receipt include key_id. If omitted, notes key_optional. Not production auth.","idempotency":{"header":"Idempotency-Key","body":"idempotency_key","persistence":false,"replay":false,"note":"Optional. Create uses the same stable as_ + 10 hex derivation as transition create. Successful walks echo idempotency_key and set idempotent true when the id came from the key. Liberty does not replay stored responses."},"persistence":false,"money":false,"mode":"demo","engine":"/api/v0/transition","note":"One-shot demo lifecycle through the same engine as transition. Create assigns a real as_… id. Optional Idempotency-Key makes that create id stable for retries. Optional client_ref (max 128) lands on the job and receipt. Optional callback_url (notify_url alias, max 512, https) is stamped the same way. Liberty never HTTP-fetches or calls it. Optional proof_note (max 400) lands on the submit job and later receipt. Optional release_note / dispute_reason (max 400) land on the terminal receipt and job. Runs create → fund → submit → release or dispute. Returns ordered steps, final job, payer_credits, agent_credits_delta, and the terminal receipt. Does not persist jobs or receipts. Not live escrow custody.","create_job":"Committed demo walk. Assigns as_ + 10 hex. Stable when Idempotency-Key is sent. Optional client_ref and callback_url are independent of that id.","terminals":["release","dispute"],"default_terminal":"release","requests":[{"body":["title","amount","criteria","payer_credits","proof_url"],"optional":["terminal","client_ref","callback_url","proof_note","release_note","dispute_reason","idempotency_key"]}]},"verify_api":{"path":"/api/v0/verify","method":"POST","cors":["POST","OPTIONS"],"auth":"optional","auth_headers":["Authorization: Bearer <key>","X-Liberty-Key"],"auth_note":"Same optional demo API key as /api/v0/quote and /api/v0/transition. If sent, response includes key_id. If omitted, notes key_optional. Not production auth.","persistence":false,"money":false,"mode":"demo","engine":"/api/v0/transition","note":"Stateless receipt / settlement verify. Same fee engine as quote/transition. Send a terminal receipt, or a job (terminal, or submitted plus release/dispute) and optional claimed fee / agent_payout / returned_to_payer. Response includes valid, verified, expected, received, and mismatches. Does not store receipts. Not live escrow custody.","requests":[{"body":["receipt"]},{"body":["job"],"optional":["action","fee","agent_payout","returned_to_payer"]}]},"currency":{"unit":"credits","real_money":false,"integer_only":true,"minimum":1},"fee_schedule":{"release":{"rate":0.05,"rounding":"nearest_credit","when":"payer_releases","formula":"Math.round(amount * 0.05)","agent_payout":"amount - fee","note":"5% of the job amount, rounded to the nearest credit, taken when the payer releases."},"dispute":{"release_fee":0,"escrow":"returned_to_payer","note":"No release fee. Escrow returns to the payer."},"top_up":{"fee":0},"fund":{"fee":0,"note":"Funding holds the full amount in escrow. No extra fee."}},"states":["open","funded","submitted","released","disputed"],"actions":[{"id":"create","from":null,"to":"open","requires":["title","amount","criteria"],"optional":["client_ref","callback_url"],"effect":"Creates a job. Credits are unchanged until fund. Optional client_ref (max 128) stamps the adapter’s correlation id on the job and later receipt. Optional callback_url (notify_url alias, max 512, https) is stamped the same way so the adapter’s client can notify itself after release or dispute. Liberty never HTTP-fetches or calls this URL. Independent of Idempotency-Key."},{"id":"fund","from":"open","to":"funded","requires":["job","payer_credits >= amount"],"effect":"Deducts amount from payer credits and holds it in escrow."},{"id":"submit","from":"funded","to":"submitted","requires":["job","proof_url"],"optional":["proof_note"],"effect":"Attaches proof the payer can check. Optional proof_note (max 400) lands on the job and later receipt. Escrow stays held."},{"id":"release","from":"submitted","to":"released","requires":["job"],"optional":["release_note"],"effect":"Computes fee, agent_payout, and agent_credits_delta. Optional release_note (max 400) lands on the job and receipt. Escrow is not returned to the payer. Client may credit an agent wallet by the delta. Terminal."},{"id":"dispute","from":"submitted","to":"disputed","requires":["job"],"optional":["dispute_reason"],"effect":"Returns the full amount to the payer. Optional dispute_reason (max 400) lands on the job and receipt. fee=0, agent_payout=0, agent_credits_delta=0. Terminal."}],"job":{"id":{"type":"string","pattern":"^as_[0-9a-f]{10}$","note":"Assigned at create. Random as_ + 10 hex unless Idempotency-Key (or body idempotency_key) is sent; then SHA-256 of the key plus title/amount/criteria, truncated to 10 hex. Quote create still has no id."},"client_ref":{"type":"string","maxLength":128,"optional":true,"when":"create","note":"Adapter/correlation id. Job field is clientRef. Independent of as_ id and Idempotency-Key. Empty or whitespace-only is rejected."},"callback_url":{"type":"string","maxLength":512,"optional":true,"when":"create","format":"uri","scheme":"https","aliases":["callbackUrl","notify_url","notifyUrl"],"note":"Adapter-owned URL. Job field is callbackUrl. Receipt field is callback_url. https only. Empty or whitespace-only is rejected. Liberty never HTTP-fetches or calls this URL. No SSRF. The adapter’s own client may notify itself after release or dispute. Independent of as_ id and Idempotency-Key."},"title":{"type":"string","maxLength":80},"amount":{"type":"integer","minimum":1,"unit":"credits"},"criteria":{"type":"string","note":"Success criteria. Proof must match this."},"proof_url":{"type":"string","empty_until":"submit"},"proof_note":{"type":"string","maxLength":400,"optional":true,"when":"submit"},"status":{"enum":["open","funded","submitted","released","disputed"]},"created_at":{"type":"string","format":"date-time"},"funded_at":{"type":["string","null"],"format":"date-time"},"submitted_at":{"type":["string","null"],"format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"fee":{"type":"integer","unit":"credits","zero_until":"release"},"agent_payout":{"type":"integer","unit":"credits","zero_until":"release"},"release_note":{"type":"string","maxLength":400,"optional":true,"when":"release"},"dispute_reason":{"type":"string","maxLength":400,"optional":true,"when":"dispute"}},"receipt_fields":[{"id":"job_id","source":"job.id"},{"id":"title","source":"job.title"},{"id":"status","source":"job.status"},{"id":"amount","source":"job.amount","unit":"credits"},{"id":"release_fee","source":"job.fee if released else 0","unit":"credits","rate":"5%"},{"id":"agent_payout","source":"job.agentPayout if released else 0","unit":"credits"},{"id":"returned_to_payer","source":"job.amount if disputed else 0","unit":"credits"},{"id":"success_criteria","source":"job.criteria"},{"id":"proof","source":"job.proofUrl"},{"id":"created","source":"job.createdAt"},{"id":"funded","source":"job.fundedAt"},{"id":"submitted","source":"job.submittedAt"},{"id":"resolved","source":"job.resolvedAt"},{"id":"client_ref","source":"request.client_ref on create","optional":true,"maxLength":128},{"id":"callback_url","source":"request.callback_url on create (notify_url alias)","optional":true,"maxLength":512,"note":"Liberty never HTTP-fetches or calls this URL."},{"id":"proof_note","source":"request.proof_note on submit","optional":true,"maxLength":400},{"id":"release_note","source":"request.release_note on release","optional":true,"maxLength":400},{"id":"dispute_reason","source":"request.dispute_reason on dispute","optional":true,"maxLength":400},{"id":"key_id","source":"sha256(demo_key) prefix when Authorization or X-Liberty-Key is sent","optional":true}],"discovery":{"path":"/.well-known/agent.json","alias":"/api/agent.json","money":false,"mode":"demo","origin":"https://liberty-amber.vercel.app","human_path":"/","not":["a2a-agent-card","openai-ai-plugin"],"note":"Small honest card for crawlers and other agents. Same JSON at /api/agent.json. Not an A2A Agent Card. Not a ChatGPT plugin. Points at health, protocol, examples, templates, changelog, scoreboard, fees, tools, quickstart, OpenAPI, and the human UI."},"quickstart":{"path":"/api/quickstart.json","money":false,"mode":"demo","persistence":false,"origin":"https://liberty-amber.vercel.app","human_path":"/#integrate","note":"Ordered ready-to-run demo escrow walk (health/discovery → quote → create → fund → prove → release; dispute optional). Absolute curls against the live origin. Human walk on /#integrate. Client-held protocol. Liberty does not move real money. Scoreboard zeros are honest."},"tools":{"path":"/api/tools.json","money":false,"mode":"demo","persistence":false,"origin":"https://liberty-amber.vercel.app","human_path":"/#adapters","not":["mcp-server","a2a-agent-card","openai-ai-plugin"],"note":"Callable Settlement surfaces (quote, transition, simulate, verify) plus read-only discovery URLs. GET this instead of scraping the homepage. Not an MCP server. Not an A2A Agent Card. Not a ChatGPT plugin."},"transition_schema":{"path":"/api/schemas/transition.json","money":false,"mode":"demo","persistence":false,"origin":"https://liberty-amber.vercel.app","draft":"2020-12","validates":"POST /api/v0/transition","note":"JSON Schema for transition request bodies. Client-held demo protocol; Liberty does not move real money. Same request shape as POST /api/v0/quote. Agent wallets stay client-held."},"examples":{"path":"/api/examples.json","money":false,"mode":"demo","origin":"https://liberty-amber.vercel.app","human_path":"/#adapters","note":"Copy-ready request bodies for POST /api/v0/quote, /api/v0/transition (create → fund → submit → release), /api/v0/simulate, and /api/v0/verify. Optional Authorization: Bearer or X-Liberty-Key. Optional Idempotency-Key on quote, transition, and simulate. Release returns agent_credits_delta. GET /api/examples.json for the bodies; the human UI shows the same curls on /#adapters."},"templates":{"path":"/api/templates.json","money":false,"mode":"demo","origin":"https://liberty-amber.vercel.app","human_path":"/#create","fills":"create_form","auto_create":false,"auto_fund":false,"note":"Preset title, amount, and success criteria for the create-job form. Clicking a template on /#create fills the form only. It does not create or fund. GET /api/templates.json for the same fields adapters can send on create."},"changelog":{"path":"/api/changelog.json","money":false,"mode":"demo","origin":"https://liberty-amber.vercel.app","human_path":"/#whats-new","note":"Newest-first shipped slices. Dates and short titles only. No user counts or revenue. Same list as /#whats-new."},"scoreboard":{"path":"/api/scoreboard.json","money":false,"mode":"demo","origin":"https://liberty-amber.vercel.app","human_path":"/#scoreboard","note":"Honest zeros. external_users, paid_pilots, and revenue_usd stay 0 until there is real evidence. directory_listings is a curated static list of public listing URLs. Listings are not users. Same facts as /#scoreboard."},"fees":{"path":"/api/fees.json","money":false,"mode":"demo","origin":"https://liberty-amber.vercel.app","human_path":"/#fees","note":"Machine-readable demo fee schedule. Same math as fee_schedule below and the quote/transition/simulate/verify engine. Release 5% rounded. Dispute no release fee. Top-up and fund none. Not live GMV. Same facts as /#fees."},"adapter_notes":["GET /.well-known/agent.json (same JSON as /api/agent.json) for the discovery card. Demo / money: false. Not an A2A Agent Card. Not a ChatGPT plugin.","GET /api/quickstart.json for an ordered ready-to-run demo escrow walk (health/discovery → quote → fund → prove → release; dispute optional). Absolute curls. Client-held. Liberty does not move real money.","GET /api/tools.json for callable Settlement surfaces (quote, transition, simulate, verify) plus read-only discovery URLs. Not an MCP server. Not an A2A Agent Card. Not a ChatGPT plugin.","GET /api/schemas/transition.json for the JSON Schema (2020-12) of POST /api/v0/transition bodies. Client-held demo protocol; Liberty does not move real money.","GET /settlement.openapi.json for the OpenAPI 3.1 document. Same JSON at /openapi.json and /api/openapi.json.","GET /api/examples.json for copy-ready request bodies (same curls as /#adapters). Optional Authorization: Bearer <key> or X-Liberty-Key. Optional Idempotency-Key on quote, transition, and simulate. Release returns agent_credits_delta.","GET /api/templates.json for preset create-job fields (same buttons as /#create). Fill only — no auto-create or fund.","GET /api/changelog.json for recent shipped slices (newest first; dates and titles only). No user counts or revenue. Same list as /#whats-new.","GET /api/scoreboard.json for honest zeros (external users, paid pilots, revenue) plus curated listing URLs. Listings are not users. Same facts as /#scoreboard.","GET /api/fees.json for the demo fee schedule (release 5% rounded Math.round(amount * 0.05), dispute no release fee, top-up/fund none). Same math as this document’s fee_schedule. Same facts as /#fees.","POST /api/v0/transition is a stateless demo engine. It does not persist jobs or take escrow custody. Not a live escrow service.","POST /api/v0/quote is a dry-run of that same engine. Use it to preview fee, payout, and credit impact before committing. Create quote does not assign a durable job id. Optional Idempotency-Key is echoed only.","POST /api/v0/simulate runs create → fund → submit → release|dispute in one request through that same engine. Create assigns a real as_… id. Optional Idempotency-Key makes that create id stable for retries. Client holds the result. Liberty does not persist.","Send the current job on fund, submit, release, and dispute. Clients hold state. Liberty returns the next state and fee math.","Optional demo API key: send Authorization: Bearer <key> or X-Liberty-Key. If present, response/receipt include key_id (hash prefix only). If omitted, the engine notes key_optional and still works. Not production auth.","Optional Idempotency-Key (or body idempotency_key) makes create ids stable for retries. Same key plus same title/amount/criteria = same as_ + 10 hex. Optional client_ref and optional callback_url (notify_url alias) are separate adapter stamps on the job and receipt; they do not change the derived id. Liberty never HTTP-fetches callback_url. Liberty does not store or replay responses. No persistence. No SSRF. No real money.","The human UI persists { credits, jobs } in localStorage under liberty.agent-settlement.v0, and the agent wallet under liberty.agent-settlement.agent-credits.v0. It quotes fund / release / dispute on /api/v0/quote, then POSTs the five actions to /api/v0/transition. A successful release credits the agent wallet by agent_credits_delta. Dispute does not. Run a full demo settlement POSTs /api/v0/simulate. Terminal receipts are stored separately under liberty.agent-settlement.receipts.v0 for JSON / NDJSON export. /#ledger sums those stored receipts (fees, agent payouts, disputed returns) and can download CSV. /#activity appends local demo actions (create/fund/submit/release/dispute, simulate, verify, demo pack import/export/reset) under liberty.agent-settlement.activity.v0. Clear activity does not wipe wallets, jobs, or receipts. A demo pack on /#demo-pack exports or replaces those keys as one client-held JSON file. Import does not merge. Reset demo on that section clears the known Settlement keys after confirm. Liberty never receives the pack or the activity log.","Share a job across browsers with a client-held handoff link (#handoff/h1.… or ?handoff=). The token is base64url JSON of the current job. Payer credits, agent credits, the demo API key, and the receipts list are not in the payload. Liberty does not persist the snapshot.","Share a terminal receipt with a client-held receipt link (#receipt/r1.… or ?receipt=). The token is base64url JSON of the receipt. Opening the link loads it into Verify. Payer credits, agent credits, jobs, and the demo API key are not in the payload. Liberty does not persist the receipt.","Receipt export is client-held. POST /api/v0/transition and POST /api/v0/simulate return receipt on release or dispute. The human UI downloads that object as JSON or copies a receipt link. There is no receipt GET and no server ledger.","POST /api/v0/verify recomputes fee / agent_payout / returned_to_payer with the same engine as quote/transition. Send a receipt or a job (terminal, or submitted plus action). A mismatch is 200 with valid:false. Liberty does not store the receipt.","Release and simulate return agent_credits_delta (same integer as agent_payout on release; 0 on dispute). The human UI credits liberty.agent-settlement.agent-credits.v0 by that delta. Liberty does not store the agent wallet. Not a server ledger.","Credits are simulated. money is always false. Do not claim live volume or user counts from this surface."]}