Skip to main content
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.
A product catalog is how you describe what you sell to autonomous agents. On the Fireblocks x402 Facilitator, each product is a payment-gated HTTP endpoint with a price, an accepted-asset list, and metadata. Your own agents and customers reach products directly through the 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 the x402 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:
To price directly in an asset’s base units instead of converting from USD, pass the amount with the asset or use --price:
Each accepted asset must already be imported into the facilitator’s asset catalog (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 a pricing[] 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:
This advertises three ways to pay for the same resource: convert $0.10 to USDC on Base, charge a fixed 0.09 USDC on Polygon, and convert $0.10 to ETH at the current rate. The facilitator emits one 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.
Offer at least one stablecoin priced row. Agents compare quotes across services, and a stable, low-gas option (for example, USDC on Base) is the path most buyers can settle immediately.

Publish to the discovery catalog

By default a product is private: agents reach it only by hitting your endpoint and receiving a 402. To list a product in the public discovery API, mark it discoverable and give it a category:
The facilitator exposes the catalog at 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.
The response lists each discoverable product as a resource an agent can act on:
Query parameters: 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 your 402 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

The is_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. The 402 flow 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.
A common pattern is a tiered catalog: a small set of discoverable products as a public on-ramp, with richer or higher-value endpoints kept private for authenticated partners.

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 own public_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:
  1. The agent browses the discovery catalog and selects a resource whose price and asset suit it.
  2. The agent requests the resource and receives a 402 quote (or fetches it ahead of time with POST /api/payments/create).
  3. The agent signs an EIP-712 authorization and retries with a payment-signature header.
  4. Your middleware verifies and settles through the facilitator, then serves the resource. Whether you settle before or after serving is the settlement mode choice.
You never write agent-facing payment code beyond the middleware that returns the 402 and calls verify/settle. The catalog does the rest.
  • 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.