Skip to content

MPP (Machine Payments Protocol)

MPP is an open payment protocol co-authored by Stripe and Tempo, now on the IETF standardization track. It extends HTTP 402 with standard authentication headers and supports multiple payment methods — stablecoins, fiat cards, Lightning, and more.

MPP is backwards-compatible with x402. Tollbooth’s mpp settlement strategy lets you accept payments from both x402 and MPP clients through the same gateway.

  • Multiple payment methods — accept USDC stablecoins and Stripe card payments through one config
  • Standard headers — uses WWW-Authenticate / Authorization / Payment-Receipt instead of custom headers
  • 50+ integrations — growing ecosystem of MPP-compatible agents and services
  • IETF track — on the path to becoming an internet standard
settlement:
strategy: mpp
methods:
- type: tempo # stablecoins via x402 facilitator
- type: stripe # fiat card payments via Stripe
secretKey: "${STRIPE_SECRET_KEY}"

Each method in the methods array adds a payment option. Clients pick whichever method they support.

Wraps the existing x402 facilitator for stablecoin payments. This is the same verify/settle flow as the default facilitator strategy, but advertised via MPP headers.

settlement:
strategy: mpp
methods:
- type: tempo

No additional config needed — it uses the same facilitator URL resolution (global facilitator field, per-route overrides, etc.).

Accepts fiat card payments via Stripe’s Shared Payment Tokens (SPT). Agents with a Stripe payment method can pay without crypto.

settlement:
strategy: mpp
methods:
- type: stripe
secretKey: "${STRIPE_SECRET_KEY}"

The gateway creates a Stripe PaymentIntent for each challenge, and the client confirms it with their SPT credential.

Agent Tollbooth Facilitator / Stripe
| | |
| GET /weather | |
|─────────────────────────>| |
| | |
| 402 Payment Required | |
| + payment-required | (x402 header) |
| + WWW-Authenticate: | (MPP header, one per method) |
| Payment method="tempo"| |
| Payment method="stripe"| |
|<─────────────────────────| |
| | |
| (agent picks a method | |
| and creates credential)| |
| | |
| GET /weather | |
| + Authorization: | |
| Payment id=".." | |
| payload=".." | |
|─────────────────────────>| |
| | verify + settle |
| |─────────────────────────────>|
| | settlement info |
| |<─────────────────────────────|
| | |
| 200 OK | |
| + payment-response | (x402 receipt) |
| + Payment-Receipt | (MPP receipt) |
|<─────────────────────────| |

Challenge (402 response):

WWW-Authenticate: Payment id="abc", method="tempo", intent="charge",
amount="0.01", currency="usd", decimals=6, description="GET /weather",
request="<base64url-encoded-json>"

Credential (request):

Authorization: Payment id="abc", payload="<base64url-encoded-json>"

Receipt (success response):

Payment-Receipt: id="abc", receipt="<base64url-encoded-json>"

When using the mpp strategy, tollbooth always returns both x402 and MPP headers:

  • 402 responses include both payment-required and WWW-Authenticate: Payment
  • Success responses include both payment-response and Payment-Receipt
  • Incoming requests are accepted with either payment-signature (x402) or Authorization: Payment (MPP)

This means existing x402 clients continue to work unchanged.

StrategyPayment methodsHeadersBest for
facilitatorUSDC stablecoinsx402 onlySimple x402 setups
nanopaymentsUSDC (batched)x402 onlySub-cent micropayments
mppStablecoins + fiat cardsx402 + MPPUniversal agent payments
CustomAnythingx402 onlySpecialized logic