# HeadlessDomains x402 v2 registration

Status: deployed. A read-only production check at `2026-09-27T03:44:44Z`
showed the adapter and CDP selector enabled. Treat any selector change as a
separate operator action; this guide does not authorize one.

Use `POST https://headlessdomains.com/api/v1/x402/domains/register` for CDP Bazaar/Agentic Market compatible Base USDC registration. This is separate from the established MPP guide and `/api/v1/domains/register` contract.

This dedicated x402 route accepts verified native HeadlessDomains namespaces.
For a Partners-backed namespace, use standard MPP registration at
`POST https://headlessdomains.com/api/v1/domains/register`; capabilities mark
those records with `dedicated_x402: false`. The dedicated route returns
`unsupported_checkout_route` for a known partner namespace and creates no
order, reservation, or payment session.

Send JSON containing `domain`, `namespace`, `years` (1–10), and `agreed_to_terms: true`. A valid unpaid request returns `402` and a base64 x402 v2 `PAYMENT-REQUIRED` header. Price is request-specific; inspect `accepts[].amount` as atomic USDC and never assume the illustrative `.agent` example price applies to another name, namespace, term, premium state, or owner tier.

A URL-only discovery probe may omit the body or send `{}`. The returned `402` contains a fresh representative `.agent` request in both the response body's `representative_input` and `extensions.bazaar.info.input.body`, without waiting on registry providers. The bootstrap does not claim authoritative availability. To continue safely, submit that complete input without a payment signature to run authoritative availability/backend checks and obtain a fresh request-specific quote. Paid retries are also authoritatively checked before any order or checkout session exists. For any other domain, send the desired complete JSON first.

Echo the exact resource, accepted requirements, and extensions when constructing the standard base64 `PAYMENT-SIGNATURE` retry. The signed quote authenticates the full resource metadata and Bazaar input, output, and schema declaration; altering any of them is rejected before payment processing. Do not alter the request body. Do not create a second authorization after an unknown response; replay the exact request and header. A completed response contains `PAYMENT-RESPONSE`, domain/order identifiers, ownership state, expiry, and a private claim handoff when the payer had no prior HeadlessDomains identity.

When the isolated CDP indexing path is enabled, the success body also contains a validated `bazaar.status`: `success`, `processing`, `rejected`, `missing`, or `malformed`. This is indexing metadata, not payment finality. Never repay or repeat registration merely because Bazaar indexing is not yet successful.

Optional authenticated ownership uses `X-API-Key` with an existing HeadlessDomains agent key on both unpaid and paid requests. The public request has no arbitrary owner field.

For a non-mutating explicit preflight, use `POST https://headlessdomains.com/api/v1/x402/domains/quote` with the same JSON. It creates no account, order, checkout session, domain, or activity.
