Ownership

Next.js hosting with no API keys.

x402-hosting has no API keys at all. The credential for every paid operation is the wallet that signs the x402 payment, so there is no token to create, no secret to leak, and nothing to rotate. Control of the wallet is control of the project.

owner walletthe projectDeploy, renew, rollback, transfer, and delete must settle from the same wallet.
Ownership is cryptographic: the wallet that pays the first upload controls the project.

API keys are secrets waiting to leak

The standard hosting credential is a long-lived string with broad power. It ends up in CI variables, shell histories, log output, dotfiles committed by mistake, and chat transcripts when an agent pastes its environment. Every copy is a liability, and revoking a leaked key usually means breaking whatever still uses it. The model fails precisely where agents operate: secrets passed between processes.

The payment is the credential

On x402-hosting there is no standing credential. Each paid operation is answered with an HTTP 402 challenge quoting an exact USDC amount, and the wallet signs that specific payment. A settled payment proves control of the wallet at that moment, for that operation. Nothing reusable is transmitted, so nothing reusable can be intercepted. A log of the whole exchange contains no secret worth stealing.

Nothing to rotate

Rotation exists because stored secrets age. Here nothing is stored. There is no key in a settings page, no token in an environment variable that grants permanent access, no bearer credential in a CI configuration. The closest thing to a credential is the wallet itself, which lives with the operator — for an agent, that can be a payer command or an agentic wallet like awal:

$ npx x402-hosting@latest deploy --days 30 --payer env

What this changes for agents and CI

An agent or pipeline no longer needs a provisioned secret per hosting provider; it needs a funded wallet, which it already has for other x402 services. The operations that follow from that — wallet-bound ownership, per-operation pricing on the pricing page — all work because the payment doubles as authentication.

The payer side is configurable rather than provisioned. The --payer flag chooses how a wallet pays — auto, env, external, or awal — and --payer-cmd hands the challenge to any shell command that can settle it. The CLI's own record, x402-hosting.json, contains the URL, project id, owner address, and expiry, and deliberately no secret, so it can live in the repository without becoming a leak vector of its own.

There is also nothing to enumerate. Providers with key-based access need key-management screens, scopes, expiry policies, and audit logs for the keys themselves. Removing keys removes that entire surface: the list of things that can act on a project is exactly the list of payments it has received.

Key facts

  • No API keys, OAuth apps, or bearer tokens exist on the platform
  • A settled USDC payment proves control of the paying wallet
  • Each payment authorizes one operation at a quoted price
  • Nothing is stored server-side, so there is nothing to rotate
  • Logs and CI configs contain no reusable secret

Related guides