x429

HTTP admission control

429 says later.x429 says when.

Signed, single-use admission windows for overloaded APIs. Clients verify the offer, wait or choose an available upgrade, then redeem once.

Production-profile v2. SQLite Durable Objects enforce finite free and paid slots. The 250ms auction is sealed; settlement is deliberately mock-only.

Stop turning overload into more load.

Blind retries multiply traffic when capacity is already scarce. x429 gives the client one verifiable time to return.

admission.trace
t+0.0s
Blind retry 1 request

Waiting for a response.

x429 1 request

Requesting one signed return window.

A signed way back in.

An x429 offer is still an ordinary 429. V2 binds each window to a client proof, reserves it durably, and never lets priority bypass capacity.

LEGACY VISUAL DEMO /429
HTTP/2 429 Too Many Requests
retry-after: 47
x429-version: 1

{
  "ticket": {
    "scope": "GET /429",
    "notBefore": "…14:03:47Z",
    "notAfter": "…14:04:17Z",
    "bind": { "type": "client-key" },
    "sig": "ed25519:…"
  },
  "upgrades": [{ "rail": "mock" }],
  "redeem": { "header": "X429-Ticket" }
}
This public preview shows the legacy v1 shape. The deployable v2 Worker uses Durable Objects, proof of possession, and signed envelopes.

The client owns the decision.

One signed offer. Three deterministic outcomes. The client waits, takes an available upgrade, or stops without another blind request.

client.policy(ticket) deadline 60s · signed window +47s
Client action WAIT hold(ticket)

13 seconds remain. Hold the signed ticket.

  • Wait when the signed window opens before the deadline.
  • Upgrade when waiting misses the deadline but an available priority route fits the budget.
  • Exit when neither route fits, without sending another blind retry.

Run the reference.

The simulator and protocol tests are the product proof. They are local, readable, and reproducible.

100simulated clients
≥80%attempt-reduction target
successful nonce spend
0tampered tickets accepted
git clone https://github.com/x429-protocol/x429 && cd x429 && npm run check

Runtime-dependent development simulation, not a production benchmark.

Deploy one admission boundary.

V2 runs as a separate Worker in front of a fixed origin. One Durable Object owns capacity, tickets, auctions, and replay state for each resource and method.

npm ci
npm run keys:generate -- x429-2026-07
npm run check
npm run worker:dev

# after staging review
npm run worker:deploy

The v2 Worker is deployable from this private repository. No @x429/* package is published to npm, and real USDC/x402 settlement is not enabled.

Make overload schedulable.