Standards · the legal layer for agentic commerce
Recourse and the Legal Context Protocol
The Legal Context Protocol (LCP) is the open standard, launched in June 2026 by the American Arbitration Association and Integra Ledger, that lets an AI agent discover the legal terms of a transaction at one URL — /.well-known/legal-context.json — prove exactly which terms applied (a SHA-256 atrHash), sign its acceptance, and find where disputes go. Recourse implements it on both sides: we publish our own legal context, and we are a dispute-resolution provider any merchant or agent can name in theirs — decided in minutes under the Standard Rules rather than months in arbitration.
Generate a clause; get the disputeResolution block for your legal-context.json. Content-addressed, verifiable by anyone.
terms.format: "lcp" in the bundle. The venue re-verifies the hash, the signature and the clause, and the engine judges under terms whose provenance is on the record.
What an agent's policy engine should do before it pays: fetch, validate, hash, look at the venue. Try it on any domain.
The four levels, and what Recourse does at each
| Level | LCP | Recourse |
|---|---|---|
| 1 · Informational | Terms discoverable at the well-known URL; proceeding is implicit consent. | Our legal-context.json points at the Standard Rules in machine-readable JSON. /lcp/verify validates any domain's document against the published schema. |
| 2 · Provable | atrHash — SHA-256 of the terms bytes — proves exactly what the terms were at transaction time. | The Rules JSON is served byte-stable and its hash is published (0x8a433c660b0f2025…). An LCP bundle is checked against the receipt's hash; a mismatch is stated on the face of the determination. |
| 3 · Signed | The buyer signs the atrHash (EIP-712 or similar): a specific party accepted specific terms. | We verify eip191 (personal_sign over the hash) and eip712 acceptance records and put the signer on the case. Agents filing with us consent by an EIP-4361 signature naming the Rules — the same idea, applied to the venue itself. |
| 4 · Integrated | disputeResolution: method, jurisdiction, a content-addressed clauseId, its source, and the provider's catalog. | Every Recourse clause is a content-addressed artifact at /clauses/sha256:0x…; the provider catalog enumerates the service, the Rules versions and every standard clause. When the clause in a counterparty's context is ours, the case proceeds under a pre-dispute agreement (Rule 3). |
Put Recourse in your legal-context.json
Two edits. Add the clause to your terms document (that changes its atrHash — recompute it), then add the disputeResolution block to your discovery document. Agents evaluating your terms see a named venue, a verifiable clause and a catalog they can read.
B2B clauses. For consumer contracts see the clause generator and Rule 15.
Your disputeResolution block
Clause text (what source serves, byte for byte)
A merchant's finished document looks like this — everything above disputeResolution is the merchant's own:
{
"terms": "https://shop.example/terms/agent-terms-v3.md",
"termsFormat": "markdown",
"atrHash": "0x7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069",
"acceptanceRequired": true,
"disputeResolution": {
"method": "Recourse Standard Rules v1.1 — expert determination",
"jurisdiction": "England and Wales",
"contact": "https://recourse.so/case/new",
"clauseId": "sha256:0x90c65a8787c87b371998808fcbe2f1de0abbd1a0fb9d27bb762967ddb2fd4af5",
"source": "https://recourse.so/clauses/sha256:0x90c65a8787c87b371998808fcbe2f1de0abbd1a0fb9d27bb762967ddb2fd4af5",
"catalog": "https://recourse.so/.well-known/dispute-services.json"
}
}File a dispute with LCP terms
Instead of pasting the terms, the bundle carries the LCP record the agent kept from the transaction. The venue resolves the terms document, checks it against the atrHash (the receipt's hash wins if the merchant has since changed terms), verifies the acceptance signature, resolves the clause, and puts the whole verification on the case. If the clause names Recourse with a value ceiling, larger disputes are declined at commencement (Rule 5).
POST /disputes
{
"rulepack": "marketplace-contractor-v1",
"currency": "USD", "amount_minor": 12000,
"terms": {
"format": "lcp",
"content": "{ \"context_url\": \"https://shop.example/.well-known/legal-context.json\",
\"document\": \"…the terms bytes the agent saved at checkout…\",
\"receipt_atr_hash\": \"0x7f83b1…9069\",
\"acceptance\": { \"scheme\": \"eip191\", \"signer\": \"0xBuyerAgent…\",
\"signature\": \"0x…\", \"signed_at\": \"2026-09-01T10:02:11Z\", \"party\": \"claimant\" } }"
},
"claim": { "by": "claimant", "claimed_breach": "…" },
"log": [ … ], "deliverables": [ … ]
}
content may also be the bare URL of the counterparty's legal-context.json, or the discovery document itself. The record on GET /disputes/:id carries bundle.terms.lcp — claimed and verified levels, hashes, the signer, and whether the clause is ours. Full field reference in the API docs; a complete offline-verifiable example is fixtures/disputes/006-lcp-agent-purchase.json in the repo.
Check a domain
Fetches the domain's discovery document, validates it against the LCP schema, fetches the terms and recomputes the hash, resolves the clause. No login; 60 checks an hour.
What Recourse publishes
| Document | What it is |
|---|---|
/.well-known/legal-context.json | The legal context of transacting with the Verdict API. Level 4: terms = Standard Rules v1.1 (JSON), atrHash published, acceptance required, dispute resolution = the venue's own default clause (sha256:0x63110e880ec67…). |
/.well-known/dispute-services.json | The provider catalog: what the service is, the Rules versions with their hashes, clause parameters and all 24 standard clauses with content addresses, how to file, which acceptance schemes verify. LCP v1.0 names this file but has not yet published a schema for it; ours uses LCP's field names where LCP has one and will track the schema when it lands. |
/clauses/sha256:0x… | Any standard clause, as immutable text. sha256(body) == clauseId, always. |
GET /lcp/clause · POST /lcp/verify | Programmatic clause generation and verification — what the widgets on this page call. |
Recourse's own document, as served now:
{
"terms": "https://recourse.so/rules/v1.1.json",
"termsFormat": "json",
"atrHash": "0x8a433c660b0f202520769ba737628c83fb22358799a272083e51baaf12b93ba8",
"acceptanceRequired": true,
"disputeResolution": {
"method": "Recourse Standard Rules v1.1 — expert determination by the venue (Rule 1)",
"jurisdiction": "Law of the parties' underlying agreement; England and Wales where none is stated (Rule 18)",
"contact": "https://recourse.so/case/new",
"clauseId": "sha256:0x63110e880ec6750201c1e9c88e75913c341f2fd7c70db096932c0daa4aa9d440",
"source": "https://recourse.so/clauses/sha256:0x63110e880ec6750201c1e9c88e75913c341f2fd7c70db096932c0daa4aa9d440",
"catalog": "https://recourse.so/.well-known/dispute-services.json"
},
"contact": {
"legal": "https://recourse.so/contact",
"technical": "https://recourse.so/docs"
},
"api": "https://recourse.so/lcp",
"x-recourse": "…"
}
Where LCP stops and the venue begins
LCP is deliberately a discovery and evidence layer: it makes terms findable, provable and signed, and it points at a dispute-resolution provider. It does not decide anything, and it does not prescribe the provider — AAA co-stewards the standard, and the catalog field is open to any venue. What an LCP-verified record gives Recourse is better evidence than a pasted contract: the terms are the terms, the acceptance is attributable, and the venue agreement is provable in advance. What Recourse gives LCP adopters is the part the standard leaves open — a determination in minutes, with reasons, executable on the rail holding the funds. The same clause works for agents committing through the Recourse Protocol escrow, where termsURI can be the LCP terms URL and the on-chain termsHash sits beside the LCP atrHash on the record.
LCP specification v1.0 (draft, Apache-2.0): legalcontextprotocol.org/standard · github.com/legal-context-protocol. Recourse is not affiliated with the AAA or Integra Ledger; we implement the published standard.