Shipped Settlement slices. Dates and titles only — no user counts, no revenue. Full list: /api/changelog.json.
Loading recent ships…
Scoreboard
Challenge evidence. Zeros stay zeros. Listings are not users. Machine-readable: /api/scoreboard.json.
Loading honest zeros…
Public listing URLs (not users):
Integrate
Human walk of the machine-readable Settlement quickstart. Fetched from /api/quickstart.json — not a second step list. Crawlers can start at /.well-known/agents.json or the fuller brief /llms-full.txt. Dry-check a body first on /#validate with POST /api/v0/validate — same rules, no commit. Preview the cut on /#quote with POST /api/v0/quote — create / fund / topup, honest fee display, no commit. Validate a quote body against /api/schemas/quote.json before calling POST /api/v0/quote. A quote is not an invoice and not proof of payment. Validate a simulate body against /api/schemas/simulate.json before calling POST /api/v0/simulate. Validate a downloaded simulate walk against /api/schemas/simulate-walk.json before importing it on /#simulate. Local demo export / restore only. Not an audit ledger. Not custody proof. Not network sync. Validate a verify body against /api/schemas/verify.json before calling POST /api/v0/verify. A verify is not custody. Handle failures from /api/errors.json (live codes only, including hold_expired). Browse that same catalog on /#errors. Validate a shared receipt against /api/schemas/receipt.json before trusting the link. Validate a shared job handoff against /api/schemas/handoff.json before trusting the link. Client-held demo. Liberty does not move real money. Receipts are not proof of payment. Handoffs are not custody transfers. Honest zeros: /#scoreboard. Copy-ready curls also on /#adapters. Copied curls use this page’s origin. Demo only. money: false. Not a production integration guarantee.
Loading the demo escrow walk…
Demo wallets
Two-sided demo money in this browser only. Payer credits fund escrow. A payer top-up POSTs /api/v0/quote with action: topup and shows the 5% markup before adding credits_received here. A successful release credits the agent wallet by agent_payout. Dispute refunds the payer and does not credit the agent. Both balances are localStorage — not real money, not custody. No payment API.
Payer
Demo top-up markup is 5% rounded, added on top of the amount. The quote shows charged vs received before anything is added. Only received credits land in this browser. No payment. Fill from quote copies the last successful top-up quote in this tab into this amount and shows the already-quoted charged vs received. Fill from fee preview copies the last successful top-up preview from /#fees the same way. Confirm still required — this does not add credits. A quote is not an invoice and not proof of payment. Liberty does not store that quote. Demo only. money: false.
Agent
Optional demo top-up. Same localStorage-only credits as the payer wallet (liberty.agent-settlement.agent-credits.v0).
Demo pack
Download this browser’s Settlement state as one JSON file — payer credits and jobs, agent credits, receipts, and the demo API key if one is already stored here. Import replaces that localStorage (does not merge). Reset demo clears those known Settlement keys only, after confirm. Other localStorage is left alone. Stays in this browser. Liberty never receives the file. Demo only — money: false.
The file may contain the raw demo API key if you minted one here. Treat it like a password. Do not email it or commit it.
Settlement ledger
Running totals for this browser only. Reads the Settlement localStorage already on this page — jobs, receipts, payer credits, and the agent wallet. Liberty does not persist a ledger. Demo only — money: false. Not real money. Not live GMV.
No stored receipts yet. Totals stay at zero until this browser has a release or dispute.
Activity
Append-only list of local demo actions in this browser — create, fund, submit, release, dispute, simulate, validate, verify, callback attempts, and demo pack import / export / reset. Newest first. Last 80. Hold expiry appears when a fund or simulate stamped expiresAt. Idempotency-Key appears when create or simulate sent one. Last callback attempt (host, HTTP status or error class, signature presence) appears when a job had callback_url. Optional callback_secret is never logged in full. After a successful simulate, Export last walk downloads that walk as JSON from this browser — local demo export only, not an audit ledger, not custody proof. Import walk JSON restores a previously exported file into this browser so you can re-inspect transitions, quotes, and receipts without re-running simulate. Local demo restore only — not an audit ledger, not custody proof, not network sync. After a simulate or a live release/dispute, Copy last share card copies a small local demo summary (title, settlement id, final state, fee totals already on screen, timestamps) — local demo summary only, not an audit ledger, not custody proof, not proof of external users. Never includes callback_secret. Liberty never receives this log. Demo only — money: false.
No local demo actions yet. Create, simulate, validate, verify, or export a pack to see them here.
Create job
Pick a template to fill title, amount, and criteria. Does not create or fund. Demo — not real money. Same fields: /api/templates.json. Fill from examples pastes live create fields from /api/examples.json (validate / quote create, the transition create step, or simulate create fields). Liberty does not invent examples. Fill from last error copies title / amount / criteria from the last failed quote / fee-preview / validate / verify in this tab. After a successful create — Apply create-ok to simulate copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key that create actually returned or sent) into /#simulate. Fill only — does not simulate, create, fund, or commit. Confirm still required. A fill is not a create and not a walk. Never copies callback_secret or a previous as_ job id.
Validate a draft
Paste a create / fund / submit / release / dispute body and POST /api/v0/validate. Same engine and JSON Schema as POST /api/v0/transition. Validate the body against /api/schemas/transition.json. A valid body returns ok: true and validated: true — no apply, no persist, no job id. Schema errors are 400 with kind: schema. State errors are 409 with kind: state. Look up those codes on /#errors (from /api/errors.json). Look up last error copies the last failed validate in this tab into that catalog (code, plus kind / route). Look-up only — does not invent a failure. action: topup is rejected. Non-create actions must include the client-held job — Liberty does not look jobs up. Fill from quote copies title / amount / criteria from the last successful create quote on /#quote into a create body. Fill from fee preview copies title / amount / criteria (preview defaults: Fee preview / preview) from the last successful create or release preview on /#fees into a create body. Fill from last walk copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key the last walk actually returned or sent) from the last imported or run /#simulate walk, or from the last create-shaped /#quote, /#fees, or /#validate request in this tab — including a failed walk that still had real fields — into a create body. Fill from last error copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key the last failed /#quote, /#fees, /#validate, or /#verify actually exposed) from that last failed walk in this tab into a create body. Fill only — does not validate, create, fund, or commit. Confirm still required. A fill is not a validate. Successful walks stay rejected. Empty or nonsense last-error payloads stay rejected. Never copies callback_secret or a previous as_ job id. A quote is not an invoice. A fee preview is not an invoice. After a successful dry-check — or when other fields are ok — Apply ok fields to create copies those fields into /#create. Fill only — does not create or fund. Never copies callback_secret. Copy as curl builds that same POST from the current paste against this page’s origin. Demo only — not real money. money: false. Not a production integration guarantee. Liberty does not store what you paste. Liberty does not store the last walk. Liberty does not store the last error.
Quote a fee
Paste a create / fund / topup body (submit / release / dispute also work) and POST /api/v0/quote. Same fee engine as POST /api/v0/transition. Validate the body against /api/schemas/quote.json. A quote is not an invoice and not proof of payment. Create quote has no durable id. Top-up returns credits_charged vs credits_received — apply credits_received locally; this page does not add credits. Fill from fee preview pastes the last successful /#fees preview body. After a successful quote — Apply quote fields to create copies title / amount / criteria (and optional client_ref / callback_url) into /#create. Apply quote fields to simulate copies title / amount / criteria into /#simulate. Apply create-ok to simulate copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key the last successful create or this quote-ok actually returned or sent) into /#simulate. Apply quote fields to validate copies title / amount / criteria into /#validate as a create body. Apply quote fields to verify copies the quoted receipt from a successful release or dispute quote into /#verify. Apply top-up quote to wallet prefills /#wallet and shows the already-quoted charged vs received. Fill only — does not create, fund, simulate, validate, verify, or add credits. Confirm still required to run the walk, dry-check, or top-up. A fill is not a walk. A fill is not a validate. A fill is not a verify. Failed / error receipts stay rejected for create-ok. Top-up and verify-only receipts stay rejected. Never copies callback_secret or a previous as_ job id. Schema errors are 400. State errors are 409 (insufficient_credits, illegal_transition, hold_expired). Look up those codes on /#errors (from /api/errors.json). Look up last error copies the last failed quote in this tab into that catalog (code, plus kind / route). Look-up only — does not invent a failure. Non-create job actions must include the client-held job — Liberty does not look jobs up. Copy as curl builds that same POST from the current paste against this page’s origin. Demo only — not real money. money: false. Not a production integration guarantee. Liberty does not store what you paste.
Error catalog
Browse and search the live codes from /api/errors.json. Same list the engines return — schema vs state vs http, including hold_expired. A listed code is not a failure on this page. Deep-link /#errors/<code>. Fill from last walk copies the last failed /#quote, /#fees, /#validate, or /#verify error in this tab (code, plus kind / route when the walk returned them). Apply last walk to simulate copies title / amount / criteria (and other real create fields) from that last create-shaped walk — or from the last imported /#simulate walk — into /#simulate. Apply last error to simulate copies title / amount / criteria (and other real simulate fields that last failed walk actually exposed) into /#simulate so a failed create-shaped walk can be retried without retyping. Fill only — does not simulate, create, fund, or add credits. Confirm still required to run the walk. A fill is not a walk. Successful walks stay rejected. Empty or nonsense last-error payloads stay rejected. Apply last walk to create copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key) from that same last create-shaped walk into /#create. Apply last error to create copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key that last failed walk actually exposed) into /#create so a failed create can be fixed without retyping. Fill only — does not create, fund, validate-as-commit, or submit. Confirm still required. A fill is not a create. Successful walks stay rejected. Empty or nonsense last-error payloads stay rejected. Apply last walk to validate copies title / amount / criteria from that same last create-shaped walk into /#validate as a create body. Apply last error to validate copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key that last failed walk actually exposed) into /#validate as a create body so a failed dry-check can be fixed without retyping. Fill only — does not validate, create, fund, or commit. Confirm still required. A fill is not a validate. Successful walks stay rejected. Empty or nonsense last-error payloads stay rejected. Apply last walk to verify copies the last walk’s live receipt — from an imported or run /#simulate walk, a successful release or dispute quote, a release fee preview (never the dry-run preview job id), or the last /#verify paste — into /#verify. Apply last error to verify copies only the verify-accepted receipt fields that last failed walk actually exposed into /#verify so a failed verify can be fixed without retyping. Fill only — does not verify, create, fund, or commit. Confirm still required. A fill is not a verify. Successful walks stay rejected. Empty or nonsense last-error payloads stay rejected. A fee mismatch is not a catalog code. Look-up / fill only — this page does not invent a failure, a code, a receipt, or traction. A listed code is not a failure on this page. A fee mismatch is not a catalog code. Dry-check a body on /#validate, quote fees on /#quote, or verify a receipt on /#receipts. There is no auth error code. Demo only — not real money. money: false. Liberty does not invent codes. Liberty does not store the last walk. Liberty does not store the last error.
Loading live codes…
Run a full demo settlement
One click POSTs /api/v0/simulate — create → fund → submit → release (or dispute) through the same fee engine. Validate the body against /api/schemas/simulate.json. Safe demo defaults below. Fill from examples pastes a live simulate body from /api/examples.json (title, amount, criteria, payer_credits, proof_url, terminal, and optional notes / hold fields the example actually provides). Liberty does not invent examples. Fill only — does not run the walk, create, fund, or add credits. Confirm still required to run the walk. A fill is not a walk. Never copies callback_secret. Fill from quote copies title / amount / criteria from the last successful create quote on /#quote. Fill only — does not run the walk, create, fund, or add credits. Confirm still required to run the walk. A fill is not a walk. A quote is not an invoice. Fill from fee preview copies amount from the last successful create or release preview on /#fees (title / criteria only when they are real create fields, not preview defaults). Fill only — does not run the walk, create, fund, or add credits. Confirm still required to run the walk. A fee preview is not an invoice. Never copies callback_secret or the dry-run preview job id. Fill from last walk copies title / amount / criteria (and other real simulate fields the last walk actually returned or sent) from the last imported or run /#simulate walk, or from the last create-shaped /#quote, /#fees, or /#validate request in this tab — including a failed walk that still had real fields. Fill only — does not run the walk. Confirm still required. A fill is not a walk. Fill from last error copies title / amount / criteria (and other real simulate fields the last failed /#quote, /#fees, /#validate, or /#verify actually exposed) from that last failed walk in this tab. Fill only — does not simulate, create, fund, or add credits. Confirm still required to run the walk. A fill is not a walk. Successful walks stay rejected. Empty or nonsense last-error payloads stay rejected. Fill from last create copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key the last successful /#create or create-shaped /#quote actually returned or sent) from that last create-ok / quote-ok receipt in this tab. Fill only — does not simulate, create, fund, or commit. Confirm still required to run the walk. A fill is not a walk. Failed / error receipts stay rejected. Top-up and verify-only receipts stay rejected. Empty or nonsense last-create payloads stay rejected. Never copies callback_secret or a previous as_ job id. Apply last walk to create copies title / amount / criteria (and optional client_ref / callback_url / idempotency_key) from that same last walk into /#create. Fill only — does not create, fund, add credits, or persist. Confirm still required. A fill is not a create. Apply last walk to validate copies title / amount / criteria from that same last walk into /#validate as a create body. Fill only — does not validate, create, fund, or commit. Confirm still required. A fill is not a validate. Apply last walk to verify copies the last walk’s live receipt into /#verify. Fill only — does not verify, create, fund, or move money. A fill is not a verify. Never invents a receipt or the dry-run preview job id. Never copies callback_secret or a previous as_ job id. Optional hold expiry below is sent as ttl_seconds or expires_at on the fund step (one, not both). After expiry, release fails; dispute still refunds. Optional Idempotency-Key is sent as the HTTP header and only stabilizes the create id — no server replay ledger. Optional note lands on the receipt. Copy as curl builds that same POST /api/v0/simulate from the current form against this page’s origin — optional Idempotency-Key only if you filled it; never invents secrets. Not a production integration guarantee. After a successful walk, export the last walk as JSON (transitions, fee quotes, receipts, timestamps) from this browser, or copy a small share card (title, settlement id, final state, fee totals already on screen, timestamps) as plain text or download .txt / markdown. Import a previously exported file to restore that last walk here without re-running simulate. Validate the file against /api/schemas/simulate-walk.json. Local demo export / restore / summary only — not an audit ledger, not custody proof, not proof of external users, not network sync. Never includes callback_secret. Demo — not real money. money: false. Liberty does not store the job.
Fill from examples pastes a live simulate body from /api/examples.json. Liberty does not invent examples. Fill only — does not simulate, create, fund, or add credits. Confirm still required to run the walk. A fill is not a walk. Never copies callback_secret. Demo only. money: false.
Safe demo defaults. Empty payer credits still auto-covers amount from this browser’s wallet. Empty proof URL / note keep the demo defaults. Apply from /#quote fills title / amount / criteria from the last successful create quote. Apply from /#fees fills amount (and title / criteria only when they are real create fields). Fill from last walk refills from the last simulate walk or last create-shaped quote / fee preview / validate in this tab. Fill from last error copies title / amount / criteria from the last failed quote / fee-preview / validate / verify in this tab. Fill from last create copies title / amount / criteria from the last successful create or create-shaped quote-ok in this tab. Fill only — does not simulate, create, fund, or commit. Confirm still required. A fill is not a walk. Failed / error receipts stay rejected. Apply last walk to create copies those same create fields into /#create. Apply last walk to validate copies those same create fields into /#validate as a create body. Apply last walk to verify copies the last walk’s live receipt into /#verify (never invents a receipt or the dry-run preview job id). Review, then run, create, dry-check, or verify. Demo only. money: false.
Optional. Sent as the Idempotency-Key HTTP header on this walk. Same key plus the demo title, amount, and criteria yields the same as_… create id. Liberty is still client-held and stateless — the key only stabilizes create ids for retries. No server replay ledger. Demo only — not real money.
Restores a previously exported walk in this browser so you can re-inspect transitions, quotes, and receipts. Local demo restore only — not an audit ledger, not custody proof, not network sync. Validates required fields against /api/schemas/simulate-walk.json. Rejects money: true. Strips callback_secret. Liberty does not receive the file.
Jobs
Loads a job snapshot into this browser so the other party can continue. Machine-readable shape: /api/schemas/handoff.json. Credits stay here. Liberty does not store the job. Handoffs are not custody transfers. Jobs with callback_url show a last callback attempt panel in this browser only — not a server webhook, not reliable delivery. Handoffs do not include callback_secret.
No jobs yet. Create one above, or load a handoff.
Receipts / Export
Terminal receipts from release or dispute in this browser. Download JSON, or copy a receipt link (#receipt/r1.…) so another device can inspect or POST /api/v0/verify without pasting JSON. The last receipt can also copy a small share card — title, settlement id, final state, fee totals already on screen, timestamps — as plain text or download .txt / markdown. Local demo summary only. Not an audit ledger. Not custody proof. Not proof of external users. Never includes callback_secret. Machine-readable shape: /api/schemas/receipt.json. Running totals and a CSV of these receipts live on the Settlement ledger. Liberty does not store receipts. Demo — not real money. Not proof of payment.
Loads the receipt into Verify below. Credits and jobs stay here. Liberty does not store the receipt.
No receipts yet. Release or dispute a submitted job, or run a full demo settlement.
Last receipt share card
Local demo summary only. Not an audit ledger. Not custody proof. Not proof of external users. Never includes callback_secret. Liberty does not receive this file. money: false.
Verify a receipt
Paste a receipt, or a submitted job plus release/dispute, and POST /api/v0/verify. Same fee engine as quote/transition. Validate the body against /api/schemas/verify.json. A wrong fee is still 200 with valid: false. Illegal input shows the field error. Look up those codes on /#errors (from /api/errors.json). Look up last error copies the last failed verify in this tab into that catalog (code, plus kind / route). Look-up only — does not invent a failure. A fee mismatch is not a catalog code. Fill from examples pastes a live verify body from /api/examples.json. Liberty does not invent examples. Fill from quote copies the quoted receipt from the last successful release or dispute quote on /#quote. Fill from fee preview copies the quoted release receipt from the last successful release preview on /#fees (never the dry-run preview job id). Fill from last walk copies the live receipt from the last imported or run /#simulate walk, the last successful release or dispute quote on /#quote, the last successful release preview on /#fees (never the dry-run preview job id), or the last verify paste in this tab. Fill from last error copies only the verify-accepted receipt fields the last failed /#quote, /#fees, /#validate, or /#verify actually exposed. Fill only — does not verify, create, fund, or commit. Confirm still required. A fill is not a verify. Successful walks stay rejected. Empty or nonsense last-error payloads stay rejected. A fee mismatch is not a catalog code. Never invents a receipt or job id. Never copies callback_secret or the dry-run preview job id. Create-only and top-up walks stay rejected. A fee preview is not an invoice. Copy as curl builds that same POST from the current paste against this page’s origin. Demo only — not real money. money: false. Not a production integration guarantee. A verify is not custody. Liberty does not store what you paste.
Demo API key
Self-serve identifier for adapters. Demo only — not production auth, not an account, not real money. The raw key stays in this browser’s localStorage. Liberty never stores it. If you send it, the engine echoes a key_id hash prefix on the response and receipt.
Copy the full key now. After this visit the page only shows a prefix. This browser can still copy it until you revoke.
Try as an adapter
Copy-ready curls against the live demo. Optional Authorization: Bearer or X-Liberty-Key — mint a key above. Missing keys still work (key_optional). Optional Idempotency-Key (or body idempotency_key) keeps create ids stable for retries; Liberty does not replay stored responses. Release returns agent_credits_delta (same as agent_payout); apply it to a client-held agent wallet. Demo only. money: false. Liberty does not persist jobs or receipts. Same bodies: /api/examples.json. Ordered walk: /#integrate (from /api/quickstart.json). Human dry-check: /#validate. Human fee quote: /#quote.
POST /api/v0/validate
Dry-check. Same request shape as transition. No apply, no persist, no job id. Schema errors are 400 with kind: schema. State errors are 409 with kind: state. Human panel: /#validate.
curl -X POST https://liberty-amber.vercel.app/api/v0/validate \
-H 'content-type: application/json' \
-d '{"action":"create","title":"Summarize filings","amount":100,"criteria":"Three-bullet brief"}'
# optional: -H 'Authorization: Bearer lib_demo_…' or -H 'X-Liberty-Key: lib_demo_…'
# optional: -H 'Idempotency-Key: retry-create-1' (echo only; still no durable id)
POST /api/v0/quote
Dry-run. No state change. Create quote has no durable id. action: topup is quote-only and returns credits_charged vs credits_received. Human panel: /#quote.
curl -X POST https://liberty-amber.vercel.app/api/v0/quote \
-H 'content-type: application/json' \
-d '{"action":"create","title":"Summarize filings","amount":100,"criteria":"Three-bullet brief"}'
curl -X POST https://liberty-amber.vercel.app/api/v0/quote \
-H 'content-type: application/json' \
-d '{"action":"topup","amount":100,"payer_credits":0}'
# optional: -H 'Authorization: Bearer lib_demo_…' or -H 'X-Liberty-Key: lib_demo_…'
# optional: -H 'Idempotency-Key: retry-create-1' (echo only on quote)
POST /api/v0/transition
Stateless create. Then fund → submit → release with the returned job — or skip the walk and use /api/v0/simulate. Optional client_ref on create (max 128) stamps your adapter id on the job and receipt. Optional callback_url (notify_url alias, max 512, https) is stamped the same way — Liberty never fetches it. Optional callback_secret is client-held only (HMAC-SHA256 header on a would-POST or browser POST) — not an API field, no server signing ledger. Optional expires_at (ISO-8601 UTC) or ttl_seconds (positive integer) on fund stamps expiresAt. If both are sent, Liberty rejects as conflicting. After that instant, release fails; dispute still refunds. Optional proof_note on submit. Optional release_note or dispute_reason on the terminal action. Release returns agent_credits_delta.
curl -X POST https://liberty-amber.vercel.app/api/v0/transition \
-H 'content-type: application/json' \
-d '{"action":"create","title":"Summarize filings","amount":100,"criteria":"Three-bullet brief","client_ref":"agent-job-42","callback_url":"https://your-adapter.example/notify"}'
# optional: -H 'Authorization: Bearer lib_demo_…' or -H 'X-Liberty-Key: lib_demo_…'
# optional: -H 'Idempotency-Key: retry-create-1' (stable create id; no stored replay)
# fund → submit → release sketch (send the job from create, or these sample jobs)
curl -X POST https://liberty-amber.vercel.app/api/v0/transition \
-H 'content-type: application/json' \
-d '{"action":"fund","payer_credits":100,"job":{"id":"as_0123456789","title":"Summarize filings","amount":100,"criteria":"Three-bullet brief","proofUrl":"","status":"open","createdAt":"2026-09-15T00:00:00.000Z","fundedAt":null,"submittedAt":null,"resolvedAt":null,"fee":0,"agentPayout":0}}'
curl -X POST https://liberty-amber.vercel.app/api/v0/transition \
-H 'content-type: application/json' \
-d '{"action":"submit","proof_url":"https://example.com/proof","proof_note":"Three-bullet brief attached.","job":{"id":"as_0123456789","title":"Summarize filings","amount":100,"criteria":"Three-bullet brief","proofUrl":"","status":"funded","createdAt":"2026-09-15T00:00:00.000Z","fundedAt":"2026-09-15T00:00:00.000Z","submittedAt":null,"resolvedAt":null,"fee":0,"agentPayout":0}}'
curl -X POST https://liberty-amber.vercel.app/api/v0/transition \
-H 'content-type: application/json' \
-d '{"action":"release","release_note":"Proof matches the three-bullet brief.","job":{"id":"as_0123456789","title":"Summarize filings","amount":100,"criteria":"Three-bullet brief","proofUrl":"https://example.com/proof","status":"submitted","createdAt":"2026-09-15T00:00:00.000Z","fundedAt":"2026-09-15T00:00:00.000Z","submittedAt":"2026-09-15T00:00:00.000Z","resolvedAt":null,"fee":0,"agentPayout":0}}'
POST /api/v0/simulate
Full walk: create → fund → submit → release. Set terminal to dispute for a refund. Optional client_ref on create lands on the job and receipt. Optional callback_url is stamped the same way — Liberty never fetches it. Optional expires_at or ttl_seconds is applied on fund (send one, not both). After expiresAt, release fails; dispute still refunds. Optional proof_note on submit. Optional release_note or dispute_reason lands on the receipt. Release returns agent_credits_delta.
curl -X POST https://liberty-amber.vercel.app/api/v0/simulate \
-H 'content-type: application/json' \
-d '{"title":"Summarize filings","amount":100,"criteria":"Three-bullet brief","payer_credits":100,"proof_url":"https://example.com/proof","proof_note":"Three-bullet brief attached.","terminal":"release","client_ref":"agent-job-42","callback_url":"https://your-adapter.example/notify","release_note":"Proof matches the three-bullet brief."}'
# optional: -H 'Authorization: Bearer lib_demo_…' or -H 'X-Liberty-Key: lib_demo_…'
# optional: -H 'Idempotency-Key: retry-create-1' (stable create id; no stored replay)
POST /api/v0/verify
Stateless receipt check. A wrong fee is still 200 with valid: false.
Demo only. This page stores payer credits and jobs in localStorage, and a separate agent wallet under liberty.agent-settlement.agent-credits.v0. The activity log appends local demo actions in this browser (create / fund / submit / release / dispute, simulate, validate, verify, demo pack import / export / reset). Liberty never receives that log. The Settlement ledger sums this browser’s stored receipts (fees paid, agent payouts, disputed returns) and can download them as CSV. Liberty does not persist that ledger. A successful release (via /api/v0/transition or /api/v0/simulate) credits that agent wallet by agent_credits_delta / agent_payout. Dispute refunds the payer and does not credit the agent. Before payer top-up, fund, release, or dispute it POSTs /api/v0/quote and shows the cut. Top-up confirm applies credits_received in this browser — no payment API. Job confirms POST create / fund / submit / release / dispute to /api/v0/transition — the same engine adapters use. Optional hold expiry on fund (and on the one-click simulate walk) sends ttl_seconds or expires_at — one of the two, not both. After expiry, release fails; dispute still refunds. Optional Idempotency-Key on create and on that simulate walk is sent as the HTTP header. Same key plus same title, amount, and criteria yields the same as_… id. Liberty is still client-held and stateless — the key only stabilizes create ids for retries. No server replay ledger. Run a full demo settlement POSTs /api/v0/simulate and walks that engine end-to-end in one request. After a successful walk, export that walk as JSON (transitions, fee quotes, receipts, timestamps) from this browser, or copy a small share card (title, settlement id, final state, fee totals already on screen, timestamps). Import a previously exported file to restore that last walk here without re-running simulate. Local demo export / restore / summary only — not an audit ledger, not custody proof, not proof of external users, not network sync. Never includes callback_secret. A successful release or dispute keeps the JSON receipt in this browser so you can download or share proof. Paste a receipt (or pick a stored one) to POST /api/v0/verify and check fee math. Share a job with another browser via a handoff link (#handoff/h1.… base64url JSON of the job). Share a terminal receipt via a receipt link (#receipt/r1.… base64url JSON of the receipt) so another device can inspect or verify without pasting JSON. Come back later, or move to another device, with a demo pack — one JSON file of this browser’s Settlement localStorage. Import replaces (does not merge). Reset demo on that section clears the known Settlement keys after confirm. Liberty never receives the pack. The file may include the raw demo API key if one is stored here. Credits stay in each browser. Mint a demo API key above if you want adapters to identify themselves. Send Authorization: Bearer <key> or X-Liberty-Key. If a key is sent, the response and receipt include key_id (hash prefix only). If omitted, the route still works and notes key_optional. Liberty does not persist jobs, receipts, or balances or take custody. Not a live escrow service. Not real money. Not production auth.
Try as an adapter — copy-ready curls for validate, quote, transition, simulate, and verify
Validate a draft — paste a create/transition body, POST /api/v0/validate, and see structured ok / schema / state errors. Fill from live /api/examples.json validate bodies — Liberty does not invent examples. Fill from quote copies title / amount / criteria from the last successful /#quote create quote into a create body. Fill from fee preview copies title / amount / criteria from the last successful /#fees create or release preview into a create body. Fill from last error copies title / amount / criteria from the last failed quote / fee-preview / validate / verify in this tab into a create body. Apply ok fields copies a successful (or otherwise-ok) create body into /#create. Fill only — no commit
Quote a fee — paste a create / fund / topup body, POST /api/v0/quote, and see the honest cut (fee, credits_charged vs credits_received). Fill from live /api/examples.json quote bodies — Liberty does not invent examples. Fill from fee preview pastes the last successful /#fees preview. Apply quote fields copies a successful create quote into /#create, /#simulate, or /#validate, a successful release or dispute quote’s receipt into /#verify, or a top-up quote into /#wallet. Fill only — confirm still required to run the walk, dry-check, or add credits. A fill is not a walk. A fill is not a validate. A fill is not a verify. A quote is not an invoice. Dry-run only — no commit
Run a full demo settlement — one-click POST /api/v0/simulate. Fill from live /api/examples.json simulate bodies — Liberty does not invent examples. Fill from quote copies title / amount / criteria from the last successful /#quote create quote. Fill from fee preview copies amount from the last successful /#fees create or release preview. Fill from last walk copies title / amount / criteria from the last simulate walk or last create-shaped quote / fee preview / validate in this tab. Fill from last error copies title / amount / criteria from the last failed quote / fee-preview / validate / verify in this tab. Apply last walk to create copies those same create fields into /#create. Apply last walk to verify copies the last walk’s live receipt into /#verify. Fill only — confirm still required to run the walk, create, or verify. A fill is not a walk. A fill is not a create. A fill is not a verify. Demo only. money: false
Verify a receipt — paste a receipt or release/dispute body, POST /api/v0/verify, and see honest ok / mismatch / field errors. Fill from live /api/examples.json verify bodies — Liberty does not invent examples. Fill from quote copies the quoted receipt from the last successful /#quote release or dispute quote. Fill from last walk copies the last simulate walk’s live receipt, or the last successful release or dispute quote / release fee preview, in this tab. Fill from last error copies only the verify-accepted receipt fields the last failed quote / fee-preview / validate / verify actually exposed. Fill only — does not verify, create, fund, or commit. Confirm still required. A fill is not a verify. Never invents a receipt. Demo only. money: false. A verify is not custody
Error catalog — browse / search live Settlement codes from /api/errors.json and deep-link /#errors/<code> into validate or verify. Fill from last walk copies the last failed quote / fee-preview / validate / verify error in this tab. Apply last walk to simulate copies those real create fields into /#simulate. Apply last error to simulate copies the last failed walk’s real simulate fields into /#simulate. Apply last walk to create copies those same create fields into /#create. Apply last error to create copies the last failed walk’s real create fields into /#create. Apply last walk to validate copies those same create fields into /#validate. Apply last error to validate copies the last failed walk’s real create fields into /#validate. Apply last walk to verify copies the last walk’s live receipt into /#verify. Apply last error to verify copies only the verify-accepted receipt fields that last failed walk actually exposed into /#verify. Look-up / fill only — this page does not invent a failure. Same list the engines return. Demo only — Liberty does not invent codes
/api/scoreboard.json — honest zeros (external users, paid pilots, revenue) plus curated listing URLs. Same facts as /#scoreboard
/api/fees.json — demo fee schedule (release 5% rounded, top-up 5% markup on amount, dispute no release fee, fund none). Same facts as /#fees, which can preview create / release / top-up via POST /api/v0/quote and apply that preview into /#quote, /#wallet, /#create, or /#simulate (fill only; confirm still required to run the walk)
/api/tools.json — callable Settlement surfaces (validate, quote, transition, simulate, verify) plus read-only discovery URLs. Not an MCP server
/api/quickstart.json — ordered ready-to-run demo escrow walk (health/discovery → quote → fund → prove → release; dispute optional). Same walk as /#integrate
/api/schemas/transition.json — JSON Schema for POST /api/v0/transition bodies (client-held demo protocol; Liberty does not move real money)
/api/schemas/quote.json — JSON Schema for POST /api/v0/quote bodies (create / fund / submit / release / dispute / topup). Dry-run only. A quote is not an invoice and not proof of payment. Client-held demo; Liberty does not move real money
/api/schemas/simulate.json — JSON Schema for POST /api/v0/simulate bodies (one-shot create → fund → submit → release|dispute). Client-held demo protocol; Liberty does not move real money
/api/schemas/simulate-walk.json — JSON Schema for a client-held simulate dry-run walk export (liberty-simulate-*.json). Local demo export only. Not an audit ledger. Not custody proof. money is always false. callback_secret must not appear
/api/schemas/verify.json — JSON Schema for POST /api/v0/verify bodies (receipt, terminal job, or submitted job plus release/dispute). Demo only. money is always false. A verify is not custody
/api/schemas/receipt.json — JSON Schema for shareable terminal receipts (#receipt/r1.… / verify). Client-held demo; Liberty does not move real money. Receipts are not proof of payment
/api/schemas/handoff.json — JSON Schema for shareable job handoffs (#handoff/h1.…). Client-held demo; Liberty does not move real money. Handoffs are not custody transfers
/api/errors.json — live Settlement error codes (schema vs state, including hold_expired). Same list as /#errors. Client-held demo; Liberty does not move real money
Activity — this browser’s append-only demo action log (newest first), including last callback attempts when a job had callback_url (signature presence only; the secret is never logged). After a successful simulate, export the last walk as JSON, or import a previously exported file to restore it. After a simulate or live release/dispute, copy a last-receipt share card. Local demo export / restore / summary only — not an audit ledger, not custody proof, not proof of external users, not network sync. Never includes callback_secret. Client-held. Liberty never receives it. Clear activity does not wipe wallets, jobs, or receipts
Settlement ledger — this browser’s running totals from stored receipts (fees, agent payouts, disputed returns) plus a CSV download. Client-held. Not a server ledger
Demo pack — export / import this browser’s Settlement localStorage (replace, not merge; may include the raw demo key), or reset those known keys after confirm