Payments
Put a price on a path, and let agents pay for it with x402.
A paid route puts a price on one of your own paths. An agent that asks
for it gets a 402 with terms, pays, retries, and reaches your origin
with a receipt. Policy runs first: a paid route only charges traffic
your rules already let through.
Early access
Payments are in early access and enabled per organization, on request. Ask us.
What a paid route is
Your host, one of your paths, and a price in a token you choose. Two things it deliberately is not:
- It gates on evidence, not on who is asking. You can narrow a route to a tier or a purpose.
- A block wins, and an allow buys nothing. Pricing is not policy. A rule that blocks still blocks, and nobody buys past it.
Two routes may not price the same request, so overlapping paths are refused when
their conditions could both match: /api and /api/premium can't carry
different prices for the same request.
Add a paid route
In the dashboard, open Payments.
| Field | What you set |
|---|---|
| Host | One of your sites. Only hosts we have already seen traffic for are offered. |
| Path | The path to price, like /premium. |
| Match | This path only, or this path and everything under it. |
| Token | Any token the payments provider settles. A token is its contract address; the name beside it is self-reported, not vouched for. |
| Price per request | In that token's own units, like 0.001. One route can accept up to 10 tokens, each priced separately. |
| Tier, Purpose | Optional. Leave both clear to charge everyone policy lets through. |
- Charging needs a wallet We provision it for your organization in the background.
- Owners and admins manage routes and wallets. Only an owner can withdraw.
Record first, charge when ready
A new route is Recording only: it logs what it would have charged and takes nothing. Start charging is a second, deliberate step, and you can stop at any time. Same shape as observe first — you see what a price would have collected before it collects anything.
What the caller gets
| Route | Payment presented | The caller gets | In your log |
|---|---|---|---|
| None matches | either | Your page, free | — |
| Recording only | either | Your page, free | would have charged |
| Charging | no | 402 with the terms | asked to pay |
| Charging | yes | Your page and a receipt, or 402 | paid or refused |
The Charge column in your request log carries these words.
The money gate fails closed. Everything else fails open: if we are unreachable, your traffic flows. A charging route is the exception. When a payment cannot be settled, nothing is served and nothing is charged — an outage of ours must not give paid content away.
Paying for a route
For whoever writes the agent. The exchange is x402: ask, read the terms, sign, retry.
| Header | On | Carries |
|---|---|---|
payment-required | the 402 | Base64 JSON: accepts[] and resource. The first 402 has an empty body. |
payment-signature | your retry | Base64 JSON: the signed authorization. Send x-payment instead if you speak x402 v1. |
payment-response | the paid response | Base64 JSON receipt naming the transaction. x-payment-response for v1. |
- The scheme is
exact. Networks are CAIP-2, likeeip155:8453. - Amounts are atomic units.
maxAmountRequiredcarries no decimals; read those from the token. - Terms are good for 300 seconds, and the payment header caps at 4096 bytes.
- Use a fresh nonce per attempt. A reused one comes back
nonce_already_used, and it is spent either way.
Limits
| Limit | Value |
|---|---|
| Paid routes per organization | 50 |
| Tokens one route accepts | 10 |
| Challenge validity | 300 s |
| Payment header | 4096 bytes |
What it doesn't do yet:
- No per-agent pricing. A route prices a path, narrowed at most by tier and purpose.
Something you need that isn't here? Tell us.