Open-source or hosted? This page describes the open-source facilitator that you run yourself. Fireblocks also offers a fully managed, fully secured hosted x402 Facilitator — production-grade security, operational support, monitoring, and a managed endpoint, with no infrastructure for you to run or upgrade. Talk to us about early access.
402 flow on your server. The broader agent ecosystem finds them through the public discovery API, which follows the same shape as the Coinbase x402 Bazaar catalog. This page covers declaring products, pricing them across assets, and deciding which ones to publish.
With x402 you monetize an endpoint and let machines buy access without an account, a subscription, or a human in the loop. To fund an agent and control what it spends, see Fund and Control Agent Spending.
What a product is
A product binds a URL path on your server to a price and a set of accepted assets. The facilitator stores products per configuration; each product carries these fields:
A product is the unit an agent reasons about: a single endpoint, a price it can compare, and an asset it already holds.
Declare a product
Products are managed with thex402 CLI. (Creating and editing products over HTTP is intentionally read-only; the management API exposes products for inspection only.) The simplest product gates one endpoint at a fixed USD price, settled in USDC:
--price:
x402 assets import) before you can reference it in a product. Endpoints are unique within a configuration: adding a second product on a path that already exists returns 409.
Inspect the catalog
Price across multiple assets
Each product carries apricing[] table with one row per accepted asset. A row is either native-denomination (an explicit amount in the asset’s base units) or USD-converted (amount is null, and the product’s usd_price is converted at request time). You can mix both on the same product. Repeat --asset to accept several assets at once:
accepts[] entry per pricing row in the 402 response, and the agent picks whichever asset it holds. For how USD conversion resolves and how the same asset can be offered under several transfer mechanisms, see Pricing modes.
Publish to the discovery catalog
By default a product is private: agents reach it only by hitting your endpoint and receiving a402. To list a product in the public discovery API, mark it discoverable and give it a category:
GET /api/discovery/resources. This endpoint is public (no authentication) and is scoped to a configuration by the request’s Host header, so each merchant’s public host serves only its own discoverable products.
category filters by product category, type accepts http (the only supported resource type today), and limit (max 100) plus offset paginate.
Only fixed-price rows appear in discovery. The catalog is a static index, so a discoverable product surfaces one
accepts[] entry per native-denomination pricing row. USD-converted rows (where amount is null) are skipped, because their price depends on a live exchange rate. A product whose rows are all USD-converted still works through the live 402 flow, but it will not appear in the catalog. To list in discovery, give the product at least one native-denomination row.How discovery fits the wider ecosystem
The discovery response shape matches the Coinbase x402 Bazaar catalog format, so agents and directories built for the Bazaar can read your facilitator’s catalog directly. Discovery and settlement stay separate: the discovery API only advertises what you sell, while payment still flows through your402 endpoint and the /api/payments/* API. Publishing a product does not expose your Fireblocks vault, your API keys, or your customer traffic.
Build a catalog for your customers and for the open market
Theis_discoverable flag lets one facilitator serve two audiences from the same product set:
- Your own agents and customers. Leave products private (
is_discoverable: false). They are reachable only by callers who already know your endpoint, which suits internal tools, partner integrations, and paid APIs you market yourself. The402flow and the payment processing API work identically whether or not a product is discoverable. - The open agent ecosystem. Mark products discoverable so any agent browsing the catalog can find, price, and pay for them without prior knowledge of your service.
Host many catalogs on one facilitator
A single facilitator process can host a separate catalog per merchant using one configuration per merchant. Each configuration has its ownpublic_host, Fireblocks vault, API keys, and product list, and discovery requests are routed to the right catalog by Host header. This is the model a payment-service provider uses to run catalogs on behalf of many sellers. See Multiple merchants on one facilitator.
How an agent buys from your catalog
Once a product is published, the purchase path is fully machine-driven:- The agent browses the discovery catalog and selects a resource whose price and asset suit it.
- The agent requests the resource and receives a
402quote (or fetches it ahead of time withPOST /api/payments/create). - The agent signs an EIP-712 authorization and retries with a
payment-signatureheader. - Your middleware verifies and settles through the facilitator, then serves the resource. Whether you settle before or after serving is the settlement mode choice.
402 and calls verify/settle. The catalog does the rest.
What to read next
- Integration — the middleware pattern, the payment processing API, transfer mechanisms, and pricing modes.
- Fund and Control Agent Spending — funding an agent from a Fireblocks vault and controlling what it spends.
- Operating and production — config file, auth model, management API, CLI reference, and multi-merchant hosting.