MPP Tempo Payment Method
Before writing code
Fetch live docs:
- Fetch
https://docs.stripe.com/payments/machine/mppfor Stripe's Tempo integration guide - Web-search
tempo blockchain usdc machine payments mppfor current Tempo chain details - Web-search
site:github.com stripe-samples machine-payments tempofor Tempo payment sample code - Fetch
https://mpp.dev/overviewfor the Tempo payment method specification
Conceptual Architecture
What Tempo Is
Tempo is a purpose-built blockchain for stablecoin payments and high-frequency transactions, incubated by Stripe and Paradigm. It is the primary crypto payment rail for MPP.
Key Properties
| Property | Value |
|---|---|
| Chain ID | 4217 (mainnet) |
| Throughput | 100,000+ TPS |
| Finality | Sub-second |
| Gas model | No native gas token (predictable fees, no gas volatility) |
| Currency | USDC |
| USDC Contract | 0x20c000000000000000000000b9537d11c60e8b50 |
| Minimum charge | 0.01 USDC |
Server-Side Configuration
import { Mppx, tempo } from 'mppx/server';
const mppx = Mppx.create({
secretKey: process.env.MPP_SECRET_KEY,
methods: [
tempo.charge({
chainId: 4217, // Tempo mainnet
currency: '0x20C000000000000000000000b9537d11c60E8b50', // USDC
recipient: process.env.TEMPO_RECIPIENT_ADDRESS,
}),
],
});
Payment Flow (Tempo)
- Server returns 402 with Tempo-specific challenge (includes deposit address)
- Client sends USDC on Tempo chain to the deposit address
- Transaction confirms in sub-second
- Client constructs credential with on-chain proof (tx hash)
- Server verifies the on-chain transaction
- Server returns resource with receipt
Stripe Integration for Tempo
When using Stripe as the merchant backend, Tempo payments land directly in your Stripe balance:
// Stripe PaymentIntent for crypto (requires preview API version)
const paymentIntent = await stripe.paymentIntents.create({
amount: 1,
currency: 'usd',
payment_method_types: ['crypto'],
payment_method_options: {
crypto: {
mode: 'deposit',
deposit_options: {
network: ['tempo']
}
}
}
}, {
apiVersion: '2026-03-04.preview' // Required preview version
});
The response includes next_action.crypto_display_details.deposit_addresses.tempo.address.
Stripe Settlement Properties
- Payments land in your Stripe balance in fiat
- Standard Stripe metrics, reporting, and multi-currency payouts apply
- Individual charges can be as low as 0.01 USDC
- Stripe uses a unique deposit address per payment for privacy
- Refunds return stablecoins to the originating wallet
Geographic Availability
Available to developers with a US legal entity in all states except New York and Texas.
Tempo vs Other Chains
| Property | Tempo | Base (x402) | Solana (x402) |
|---|---|---|---|
| Protocol | MPP | x402 | x402 |
| Finality | Sub-second | ~2 seconds | ~400ms |
| Gas model | No gas token | ETH gas | SOL gas |
| Stripe integration | Native | Via facilitator | Via facilitator |
| Sessions | Yes | No | No |
Best Practices
- Use environment variables for recipient address and private keys
- Monitor wallet balances for receiving addresses
- Implement refund logic using the Stripe Refunds API
- Set up Stripe webhook listeners for
payment_intent.succeededevents - Consider multi-chain support (Tempo + Stripe SPT) for maximum client compatibility
Fetch the latest Stripe machine payments docs and Tempo blockchain documentation for current contract addresses, API versions, and chain configuration before implementing.