Skip to main content

HPP Facilitator

A facilitator is the service an x402 resource server delegates payment verification and onchain settlement to. HPP operates production facilitators for both its Mainnet and Sepolia networks, so sellers never have to run an RPC node, manage a settlement key, or hold buyer funds — the facilitator only verifies signatures and submits the settlement transaction.

Endpoints

NetworkBase URL
HPP Mainnet (eip155:190415)https://facilitator.hpp.io
HPP Sepolia (eip155:181228)https://facilitator-sepolia.hpp.io

Each facilitator exposes the standard x402 facilitator API:

RouteMethodPurpose
/supportedGETLists the (scheme, network) pairs and extensions the facilitator supports.
/verifyPOSTVerifies a signed payment payload without settling.
/settlePOSTSubmits the payment onchain and returns a settlement receipt.

CORS is enabled, so browser-based clients can call the facilitator directly.

You can confirm what a facilitator supports at any time:

curl https://facilitator.hpp.io/supported
{
"kinds": [
{ "x402Version": 2, "scheme": "exact", "network": "eip155:190415" },
{ "x402Version": 2, "scheme": "upto", "network": "eip155:190415",
"extra": { "facilitatorAddress": "0xaA03c7BD2fAf554db507D78CD3bF126a3DD2E033" } }
],
"extensions": ["eip2612GasSponsoring"],
"signers": { "eip155:*": ["0xaA03c7BD2fAf554db507D78CD3bF126a3DD2E033"] }
}

The Sepolia facilitator (https://facilitator-sepolia.hpp.io/supported) returns the same shape with network: "eip155:181228" and its own signer 0x420bd05aB1103b0F4A02B39Ca07C92677b5CFD9d.

Supported schemes

SchemeStandardNotes
exactEIP-3009 (transferWithAuthorization)Fixed-price payments.
uptoPermit2Authorize a maximum, settle the actual amount. Supports gasless settlement.

Both schemes settle in USDC.e (0x401eCb1D350407f13ba348573E5630B83638E30D, 6 decimals) on both networks. See How it works → Payment schemes.

Connecting to it

You don't call the facilitator directly in normal use — your resource server does. Point a facilitator client at the right base URL:

import { HTTPFacilitatorClient } from "@x402/core/server";

// HPP Mainnet
const facilitator = new HTTPFacilitatorClient({ url: "https://facilitator.hpp.io" });
// HPP Sepolia
// const facilitator = new HTTPFacilitatorClient({ url: "https://facilitator-sepolia.hpp.io" });

Then register your schemes against it — see Quickstart: Sellers. Buyers never configure the facilitator at all; they discover it implicitly from the seller's 402 challenge.

Verify and settle

HTTPFacilitatorClient wraps the two POST endpoints. Both take the same body — the buyer's signed paymentPayload plus the paymentRequirements it is paying — and the SDK calls them for you during paymentMiddleware. The shapes:

// POST /verify and POST /settle request
{
"x402Version": 2,
"paymentPayload": { /* the decoded payment payload the buyer signed */ },
"paymentRequirements": { /* the matching accept from the 402 */ }
}
// POST /verify response — checks the signature WITHOUT moving funds
{ "isValid": true, "payer": "0x…" }
// on failure: { "isValid": false, "invalidReason": "...", "invalidMessage": "..." }
// POST /settle response — submits the payment onchain
{
"success": true,
"transaction": "0x…", // settlement tx hash
"network": "eip155:190415",
"payer": "0x…",
"amount": "10000" // actual amount settled (for `upto`, ≤ the max)
}
// on failure: { "success": false, "errorReason": "...", "errorMessage": "...", "transaction": "0x…" }

In the SDK, a failed /verify or /settle surfaces to the resource server as VerifyError or SettleError (exported from @x402/core), carrying invalidReason / errorReason for branching. Buyers don't see these types — they get a non-2xx response instead (see Quickstart: Buyers → Handling failures).

Gasless settlement (upto)

For the upto scheme, HPP's facilitator advertises the eip2612GasSponsoring extension. This lets the facilitator sponsor the buyer's one-time Permit2 approval via EIP-2612, so a paying agent needs only USDC.e and zero native ETH to transact.

The sponsoring signer — the facilitator's onchain address that pays gas and submits settlement — is the same value shown as signers and as the upto facilitatorAddress in /supported:

NetworkSponsoring signer (facilitatorAddress)
HPP Mainnet0xaA03c7BD2fAf554db507D78CD3bF126a3DD2E033
HPP Sepolia0x420bd05aB1103b0F4A02B39Ca07C92677b5CFD9d

When a seller offers an upto route, the SDK surfaces the facilitatorAddress and the eip2612GasSponsoring extension in the 402 challenge automatically, and a compatible buyer signs the gasless approval path with no extra configuration.

note

Gasless upto requires the seller to declare the EIP-2612 extension on the route (declareEip2612GasSponsoringExtension()). Without it the facilitator can't sponsor the buyer's Permit2 approval, and a 0-ETH buyer is rejected with permit2_allowance_required — see Quickstart: Sellers → Accepting upto and gasless payments.

Self-hosting

HPP's facilitator is a deployment of the standard open-source x402 facilitator, so you are not locked in: you can run your own and point your resource server at it instead. Use HPP's hosted endpoints to get started, and self-host if you need custom signing keys, private RPC, or independent operations. See the x402 SDK & reference for the upstream packages.

Quick reference

FieldHPP MainnetHPP Sepolia
Facilitator URLhttps://facilitator.hpp.iohttps://facilitator-sepolia.hpp.io
Network (CAIP-2)eip155:190415eip155:181228
Token (USDC.e)0x401eCb1D350407f13ba348573E5630B83638E30D0x401eCb1D350407f13ba348573E5630B83638E30D
Schemesexact, uptoexact, upto
Gasless extensioneip2612GasSponsoringeip2612GasSponsoring
Sponsor signer0xaA03c7BD2fAf554db507D78CD3bF126a3DD2E0330x420bd05aB1103b0F4A02B39Ca07C92677b5CFD9d