RPP402RPP402
Facilitator

Facilitator

Live on Robinhood Chain

A 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.

x402Live
spec
Coinbase · Cloudflare · Linux Foundation

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.

MPPIn the SDK
spec
Stripe · Tempo

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

ts
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.

GET/supported

Capability discovery: the (scheme, network) pairs this facilitator settles.

POST/verify

Validate a signed payment against the server's requirements: signature recovery plus on-chain balance and replay checks. No key required.

POST/settle

Relay the signed authorization on-chain via transferWithAuthorization. Funds move payer → payTo directly; the facilitator only pays gas.

GET /supported

json
{
  "kinds": [
    { "x402Version": 1, "scheme": "exact", "network": "robinhood" }
  ]
}

POST /settle response

json
{
  "success": true,
  "transaction": "0x… (Robinhood Chain tx hash)",
  "network": "robinhood",
  "payer": "0xPayer…"
}

POST /verify request

json
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

json
// 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

  1. 1
    402 Payment Required

    A client calls a paid resource; the server responds 402 with paymentRequirements (scheme exact, network robinhood, asset USDG, payTo, amount).

  2. 2
    Client signs

    The client signs an EIP-3009 authorization off-chain (gasless) and retries the request with the payment in the X-PAYMENT header.

  3. 3
    Server verifies

    The server POSTs the payload to /verify. The facilitator recovers the signature and checks balance and nonce on Robinhood Chain, returning { isValid }.

  4. 4
    Facilitator settles

    The server POSTs to /settle. The facilitator submits transferWithAuthorization from its relayer; USDG moves from the payer straight to the seller.

  5. 5
    Resource + 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:

bash
npm install @rpp402/facilitator

Market and settlement values on this page are informational and verified against Robinhood Chain mainnet. Always confirm the asset contract before transacting.