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.
Waiting for a response.
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.
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" }
}
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
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.
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
GET /.well-known/x429.json
sign(method, authority, target, body, credential)
GET /v1/infer + X429-Client-* proof
429 → hold the signed free ticket
→ or submit one sealed maximum bid
redeem once inside the assigned window
The v2 Worker is deployable from this private repository. No @x429/* package is published to npm, and real USDC/x402 settlement is not enabled.