The wall now sells the door.

Every rate limit answers overload the same way: 429 Too Many Requests — no memory, no price, no commitment. x429 answers with a signed admission ticket instead: a guaranteed slot the caller can hold, pay to move up, or decline.

FREE LANE sample
scopeGET /429
ticket
tkt_9f2c81d4
key id
x429-protocol-demo
nonce
n_u4vX29aa4q
bound to
client-key ed25519:demo…
admission window clock ×12
14:03:47Zopens in 47s14:04:17Z
ed25519 signature MEUCIQDk3qk8vR2…Jw7c2fA verifies against /.well-known/x429.json

a real ticket, minted by this page from x429.dev/429 — one redemption, then the nonce is spent

01 · the problem

A 429 with no promise creates the storm.

Reject a machine and it comes back at machine speed. Hand the same demand a signed slot and the storm becomes a schedule.

blind retry · 0 wasted requests 429 + signed ticket admitted on schedule · 0

02 · the mechanism

One response, read two ways.

The entire protocol is carried by an ordinary 429. Hover the notes to see which bytes do the work.

GET x429.dev/429
HTTP/2 429
retry-after: 47
x429-version: 1
link: </.well-known/x429.json>; rel="service-desc"

{ "x429": 1,
  "ticket": {
    "id": "tkt_9f2c81d4",
    "scope": "GET /429",
    "notBefore": "…T14:03:47Z",
    "notAfter":  "…T14:04:17Z",
    "nonce": "n_u4vX29aa4q",
    "sig": "ed25519:MEUCIQ…" },
  "upgrades": [ { "class": "immediate",
    "price": { "amount": "0.004",
               "asset": "USDC", "rail": "mock" } } ],
  "redeem": { "header": "X429-Ticket" } }
Still a legal 429

A legacy client sees an honest Retry-After and behaves like it always has. Turning x429 on breaks nobody.

A signed commitment, not advice

Scope, window, signature — verifiable with the public key at /.well-known/x429.json. No account, no lookup.

One admission, ever

The nonce is spent on redemption. Present the same ticket twice and the second presentation bounces.

A priced exit from waiting

Priority is a standard x402 payment payload. The rail is mock today; real settlement is roadmap, and the response says so.

Redemption is one header

Retry inside the window with X429-Ticket. The server verifies with three stateless checks, sub-millisecond.

invariants: binding, not advisory · degrades to plain 429 · stateless verify · x402-native · auditable ordering · pseudonymous — the full spec is one page →

03 · the decision

Wait, pay, or walk — by arithmetic.

The client compares the promised wait against its deadline, and the price against what the deadline is worth. Policy, not vibes:

wait ≤ deadline → hold ticketprice ≤ budget → pay x402else → abort, informed

15s30s45s60s75s naive retry 7 requests · still guessing x429 · free ticket 2 requests · admitted at 47s, promised x429 · paid priority x402 · 0.004 USDC 2 requests · admitted at ~0.6s p95

Scalping? The fee goes to the resource owner, the free lane keeps its guarantee, and issuance order is auditable. Today the priority market exists anyway — it is just run by whoever writes the fastest retry bot, and pays nobody.

scheduled agents

Every promise gets a row.

agentticketwindowlanestatus
agt_04b1tkt_8c31f0:03:47 – :04:17freeBOARDING
agt_9e77tkt_5d02aa:04:05 – :04:35priorityADMITTED
agt_1f08tkt_77b91c:04:12 – :04:42freeSCHEDULED
agt_c25dtkt_8c31f0:03:47 – :04:17freeREPLAY · REJECTED
agt_3aa9tkt_e410fb:04:20 – :04:50freeSCHEDULED
agt_b6c2tkt_02cd77:04:31 – :05:01freeSCHEDULED

free lane boards in issued order · priority inserts ahead, paid · a spent nonce never boards twice

04 · the proof

Don't trust the pitch. Reproduce it.

88%fewer requests, identical demand1,485 → 180 · 100 agents
0replayed tickets admittedredeem-once, enforced by nonce
0tampered tickets verifyed25519 over canonical JSON
0.56spaid p95 admission · free p95 10.1sa window, not a guess
git clone https://github.com/x429-protocol/x429 && cd x429 && npm run check

One command re-runs the 100-agent simulator and the signature / replay / tamper tests that produced every number above. No dashboard screenshots to take on faith.

05 · the action

Two integrations, one afternoon.

import { x429, x429WellKnown } from "@x429/hono";

app.use("/v1/*", x429({
  issuer: "https://api.example.com",
  privateKey: env.X429_PRIVATE_KEY,          // ed25519
  capacity: { limit: 5, intervalMs: 1000 },  // your policy
  ticket: { freeDelayMs: 10_000,
            redeemWindowMs: 30_000 }
}));

app.get("/.well-known/x429.json",
        x429WellKnown({ /* keys, docs */ }));

v0.1 ships: signed tickets · Hono/Workers middleware · agent client · simulator · paid priority with mock receipts
roadmap: real x402 settlement · transparency log · more frameworks

Follow the draft.

changelog only — no marketing, one-click unsubscribe