# x402 Directory

Free to read. Reviews are free. Listing a service is the paid act. The part
you cannot get anywhere else is the ratings: **anyone who paid may review,
and the settle is the receipt.**

Listed now: **587**. Carrying at least one paid review: **0**. Upstream registry total at last sync: **28,586**. Last sync: 2026-09-13T03:22:05.820Z.

Aggregated from https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources plus anything submitted here.

## Read

    GET /api/directory/resources?q=&chain=base&tag=&rated=1&sort=rating&limit=25&offset=0
    GET /api/directory/resources/<id-or-url-encoded-resource-url>
    GET /api/directory/reviewers/<wallet>

Every response carries `pagination.total`. The board is tens of thousands
of rows; one page is not the board.

**Prices are per leg.** `accepts` is an array and each entry carries its
own amount, chain and asset. This API never blends them into one number,
because a blended number is not what any wallet will be asked to sign.
`priceDisplay` is null whenever the token's decimals are unknown —
`amountAtomic` and `asset` are always there.

## List your service (1.000000 USDC over x402)

    GET  /api/directory/listings   → the price per network, and whether the door is open
    POST /api/directory/listings   {"resource":"https://…","name":"…","tags":[…]}

We fetch the URL first. It has to answer **402 with an `accepts` block** (x402 v2
in the `PAYMENT-REQUIRED` header, or v1 in the body), and
the prices we store come from that answer — there is no form where you type
your own price. A URL already on the board answers 409 with its listing and
costs nothing.

Then the bare POST answers **402** with `accepts`: sign the leg you want
(EIP-3009 `TransferWithAuthorization` on EVM, the x402 exact scheme) and
retry with `X-PAYMENT`. The response is the listing and the receipt. Re-sending
the same `X-PAYMENT` after a lost response hands back the listing it bought
and charges nothing. What one listing costs right now, per network:

- `base`: 1.000000 USDC (the settle on that chain is inside)
- `polygon`: 1.000000 USDC (the settle on that chain is inside)
- `solana`: 1.000000 USDC (the settle on that chain is inside)

## Review something you paid for

1.  `GET /api/directory/reviews?resource=<url>&wallet=<addr>&chainId=<n>&tx=<hash>&rating=<1-5>&body=<text>`
    returns `statement` — the exact bytes to sign — and a `nonce`.
2.  Sign it. EVM: EIP-191 / `personal_sign`. Solana: ed25519 detached, base58.
3.  `POST /api/directory/reviews` with resource, rating, body, chainId,
    txHash, wallet, signature, nonce, issuedAt.

What is checked, in order:

- the settle is **read on chain here**, not taken on your word;
- it paid **this resource** — the transfer's `to` is a payTo this listing
  publishes on that chain;
- **you are the payer** — the payer is the TRANSFER LOG's `from`, never
  `tx.from`, because x402's exact scheme is relayed by a facilitator;
- **you are not the payee**;
- **one settle, one review**;
- the settle is under 180 days old and has at least
  2 confirmations.

`receipt_pending` (409, `retryable: true`) means the settle is real and
still confirming. Every other refusal is final and says which gate closed.

## What a review is worth

Weight rises with the number of **distinct payees** a wallet has paid and,
more slowly, with its total settles. It falls when most of a wallet's
settles point at the payee it is reviewing. The formula and its live
coefficients are published at `/api/directory/reviewers/<wallet>`.

Fraud is not prevented here. Paying yourself through a second wallet works;
it costs a real settle every time, shows on the card as concentration, and
weighs close to nothing. It is made visible and expensive.
