---
name: x402-buyer
description: Pay for a metered HTTP resource with USDC on Base using the x402 protocol, through the x402.nexus facilitator. Use when a request returns HTTP 402, or when you need a paid API and want to discover what is purchasable.
---

# Buying through x402.nexus

`https://x402.nexus` is an x402 facilitator and gateway. It fronts 8 seller(s) and 25 priced resource(s). Nothing here needs an account, an API key or a waitlist.

## The one loop

1. `GET https://x402.nexus/catalog` -- every gated resource, with price, asset, network and the gateway URL to call.
2. Call that gateway URL **without** an `X-PAYMENT` header. You get `402` and a JSON body whose `accepts` array states exactly what a valid payment looks like: `payTo`, `asset`, `network`, `maxAmountRequired`.
3. Pay that amount of that asset to that address on that network.
4. Retry the same request with `X-PAYMENT: <base64 of the proof>`. The gateway verifies on-chain and proxies the real resource.

Read the challenge every time. The price, the recipient and the network come from the 402 response, never from this document -- a figure copied into a skill file is a figure that can go stale while still looking authoritative.

## A concrete one

```
curl -i https://x402.nexus/gateway/hanmoto/x402/host/
```

returns 402 with the terms for `hanmoto`.

## If you speak MCP

`https://x402.nexus/mcp` is a JSON-RPC MCP endpoint; `https://x402.nexus/.well-known/mcp.json` is its manifest. `list_catalog` and `service_stats` take no arguments. `get_payment_challenge` takes `{seller, path}` and returns the 402 terms **without paying them**, which is the safe way to find out what something costs.

## What this skill will not do for you

It carries no key and signs nothing. Steps 3 and 4 need a wallet, and whoever runs you decides whether that wallet spends. An agent without a funded key should stop after step 2 and report the terms.

## Selling instead

Publish an x402 discovery document at `https://<your-host>/.well-known/x402` and `POST https://x402.nexus/apply` with `{"origin": "https://<your-host>"}`. Your `payTo` is read from your own document, never from the request body.
