Facilitator
Live on Robinhood ChainA hosted, non-custodial /verify and /settle service that settles agent payments in USDG on Robinhood Chain. It speaks the leading agent-commerce standards - live today for x402, with MPP interoperability on the roadmap - verifying a buyer's signed authorization and relaying it on-chain, so servers never run a node or hold funds.
Protocols
RPP402 is the settlement layer; the payment handshake can speak either standard. Both sign-and-verify, then settle the same way in USDG on Robinhood Chain.
RPP402 verifies and settles x402 exact-scheme payments in USDG on Robinhood Chain. Signature recovery plus on-chain balance and replay checks, then a relayed transferWithAuthorization. The live endpoints are below.
The Machine Payments Protocol is an HTTP auth scheme (WWW-Authenticate: Payment). @rpp402/sdk parses MPP 402 challenges and builds Authorization: Payment credentials, so agents can pay MPP-protected services. MPP settlement runs on its own rails (Stripe on Tempo) with no third-party facilitator - so RPP402 supports the client side, not settlement.
MPP in the SDK
import { mpp } from "@rpp402/sdk";
// An MPP-protected endpoint answers 402 with Payment challenges.
const res = await fetch(url);
const challenges = mpp.parseChallenges(res.headers.get("www-authenticate") ?? "");
// -> [{ id, method: "tempo" | "stripe", intent: "charge", params }]
// Build the credential header for the chosen method and retry.
const authorization = mpp.buildAuthorization(signedCredential);
await fetch(url, { headers: { authorization } });Supported network
The same settlement layer backs both protocols. One network and asset in v1, verified on-chain - a server advertises these exact values in its 402 paymentRequirements.
- Network
- Robinhood Chain
- Chain ID
- 4663
- x402 version
- 1
- Scheme
- exact
- Settlement asset
- USDG · Global Dollar
- Asset contract
- 0x5fc536…F1d168
- Decimals
- 6
- Authorization
- EIP-3009 transferWithAuthorization
- Custody
- Non-custodial
USDG implements EIP-3009 transferWithAuthorization (selector 0xcf092995), so the exact scheme settles directly with no Permit2 fallback. The EIP-712 domain is { name: "Global Dollar", version: "1", chainId: 4663 }.
Endpoints
Base URL https://rpp402.com/api/facilitator. These are the live x402 endpoints; the MPP adapter will expose the same verify/settle shape. Request and response bodies follow the x402 facilitator spec.
/supportedCapability discovery: the (scheme, network) pairs this facilitator settles.
/verifyValidate a signed payment against the server's requirements: signature recovery plus on-chain balance and replay checks. No key required.
/settleRelay the signed authorization on-chain via transferWithAuthorization. Funds move payer → payTo directly; the facilitator only pays gas.
GET /supported
{
"kinds": [
{ "x402Version": 1, "scheme": "exact", "network": "robinhood" }
]
}POST /settle response
{
"success": true,
"transaction": "0x… (Robinhood Chain tx hash)",
"network": "robinhood",
"payer": "0xPayer…"
}POST /verify request
POST https://rpp402.com/api/facilitator/verify
Content-Type: application/json
{
"x402Version": 1,
"paymentPayload": {
"x402Version": 1,
"scheme": "exact",
"network": "robinhood",
"payload": {
"signature": "0x…",
"authorization": {
"from": "0xPayer…",
"to": "0xSeller…",
"value": "1000000",
"validAfter": "1783900000",
"validBefore": "1783903600",
"nonce": "0x… (32 bytes)"
}
}
},
"paymentRequirements": {
"scheme": "exact",
"network": "robinhood",
"maxAmountRequired": "1000000",
"resource": "https://api.example/data",
"description": "Market data",
"mimeType": "application/json",
"payTo": "0xSeller…",
"maxTimeoutSeconds": 60,
"asset": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
"extra": { "name": "Global Dollar", "version": "1" }
}
}POST /verify response
// valid
{ "isValid": true, "payer": "0xPayer…" }
// rejected (examples)
{ "isValid": false, "invalidReason": "insufficient_funds", "payer": "0xPayer…" }
{ "isValid": false, "invalidReason": "invalid_exact_evm_payload_signature", "payer": "0xPayer…" }How settlement works
- 1402 Payment Required
A client calls a paid resource; the server responds 402 with paymentRequirements (scheme exact, network robinhood, asset USDG, payTo, amount).
- 2Client signs
The client signs an EIP-3009 authorization off-chain (gasless) and retries the request with the payment in the X-PAYMENT header.
- 3Server verifies
The server POSTs the payload to /verify. The facilitator recovers the signature and checks balance and nonce on Robinhood Chain, returning { isValid }.
- 4Facilitator settles
The server POSTs to /settle. The facilitator submits transferWithAuthorization from its relayer; USDG moves from the payer straight to the seller.
- 5Resource + receipt
The server returns the resource once settlement confirms. The on-chain transaction is the receipt.
Non-custodial by design
The only component that touches a funded key is the relayer, and it just submits transferWithAuthorization and pays gas. Value moves from the payer straight to the seller. The facilitator never holds funds.
Point your x402 server at it
Configure your x402 middleware to advertise the values above and call this facilitator's /verify and /settle. The reusable core is on npm:
npm install @rpp402/facilitatorMarket and settlement values on this page are informational and verified against Robinhood Chain mainnet. Always confirm the asset contract before transacting.
