# x402 payments

Kryard runs an **x402 facilitator**: the service that verifies and settles the
payments behind HTTP `402 Payment Required`.

If you sell an API, x402 lets you charge per call without accounts, API keys, or a
checkout page. The buyer's client gets a `402`, signs a stablecoin authorization,
and retries. The facilitator checks the signature and puts the transfer on chain —
**fronting the gas**, so neither side needs native ETH.

::: warning Testnet preview
The facilitator serves **Base Sepolia only** (chain `84532`), settling **testnet
USDC**. There is no mainnet deployment and no SLA. Build and integrate against it;
don't put real money behind it.
:::

## Why it's interesting

The buyer needs **no ETH**. An x402 payment is an [EIP-3009](https://eips.ethereum.org/EIPS/eip-3009)
`transferWithAuthorization` — the payer signs a message, and someone else submits
it. That someone is Kryard's relayer, which pays gas out of its own balance.

So a buyer holding nothing but USDC can pay for an API call. That's the property
that makes x402 work for machine-to-machine payments, where funding every agent
with gas is impractical.

## How a payment flows

```
1. Client   → GET /your-api                    → 402 + `accepts` (price, asset, payTo)
2. Client   signs an EIP-3009 authorization    (no gas, no on-chain action)
3. Client   → GET /your-api  + X-PAYMENT       (the signed authorization, base64)
4. Your API → POST /x402/v1/verify             → { isValid: true, payer }
5. Your API serves the response
6. Your API → POST /x402/v1/settle             → { success: true, transaction: "0x…" }
```

Steps 4 and 6 are the only ones that touch Kryard. Everything else is between you
and your caller — x402 is an HTTP convention, not a platform you sign up for.

**Verify before you serve, settle after.** `/verify` is a cheap read-only check;
`/settle` broadcasts and costs the facilitator gas. Serving first and settling
second means you never charge for a response you failed to deliver.

## What the facilitator enforces

It spends the operator's gas on behalf of strangers, so it is deliberately narrow:

| Control | Current value |
| --- | --- |
| Network | Base Sepolia (`84532`) — one chain per deployment |
| Asset | Testnet USDC `0x036CbD…3dCF7e` only |
| Amount per settle | 0.01 – 10 USDC |
| Scheme | `exact` (EIP-3009) |
| Auth | **None** — unauthenticated by design, as x402 specifies |

Anything outside those bounds is refused before a transaction is built. Full list of
refusal codes in the [reference](/x402/reference#reason-codes).

## Next

- [**Quickstart**](/x402/quickstart) — charge for an endpoint, and pay for one.
- [**Reference**](/x402/reference) — routes, payloads, reason codes, rate limits.
- The protocol itself: [x402.org](https://x402.org).
