Lately, machine payments and HTTP 402-based solutions have been gaining traction and hype.
If you ignore all the AI agent buzz and look at this as just payments, the idea is pretty simple:
- a user (or agent) has a wallet with a balance (crypto or fiat — doesn’t matter)
- they pay for actual usage (a request to a service), not for a subscription
- services become easier to access and try
A simple example:
- today: 5 subscriptions at $20 → that’s just 5 services, and:
- you have to register and subscribe
- in some cases create API keys or deal with auth breaking
- you might not even use the full subscription value
- with pay-per-request machine payments:
- you can spend $0.5 on 1–2 requests and decide if you need the service
- use a service for $3–5 instead of a full subscription
- try and use more different services overall
This changes the UX quite a lot.
And this is where two different approaches come in: x402 from Coinbase and MPP (Machine Payment Protocol) from Stripe and Tempo.
Both protocols are solid in their own way.
They each have their own strengths and limitations, and it’s hard to say which one is “better” or which one will fade over time.
General model: HTTP 402 as transport
Both protocols use the same basic mechanism — HTTP 402 Payment Required.
Before, an HTTP request was just a data request.
Now it becomes something like a request with a payment condition.
The flow (or execution model) is the same in both cases:
- client makes a request
- server responds: “pay” (
402) - client pays
- repeats the request
- gets the result
At this level, the similarity mostly ends.
Where the difference begins
If you go a bit deeper, the differences show up in both philosophy and implementation:
- x402
- a more concrete, crypto-native approach
- a ready-to-use payment method
- MPP
- a more general, flexible, protocol-level approach
- a way to describe how payment should happen
It’s a subtle difference — but a fundamental one.
Payment Model
x402: built-in payment method
x402 was originally designed as a crypto-native solution.
- payments via ERC-20
- uses signatures (
ERC-3009,Permit2) - the client sends a signed transaction
- the transaction is committed on-chain via a facilitator or the server
The client simply signs a transaction and sends it.
This provides transparency, verifiability, and decentralization (there can be multiple facilitators).
At the same time, it introduces limitations — crypto-only assets, dependency on the blockchain, latency, and fees.
MPP: intent-based model
MPP introduces a more abstract model:
- the server returns a payment intent / challenge
- the client fulfills it
- the server validates the result
Important:
- the protocol doesn’t care what the payment actually is
- it only defines how to verify that the payment happened
This allows implementing different payment methods:
- Stripe / cards
- crypto
- custom schemes
At the same time, all validation logic is pushed to the server side.
The difference here is fundamental:
| x402 | MPP |
|---|---|
| fixed payment method | description of the payment method |
| client submits a signed transaction | client performs payment based on server requirements |
| web3, crypto payments | web3 + traditional web2 payments (cards, etc.) |
| concrete implementation | meta-protocol |
| you adapt to the protocol | you adapt the protocol to yourself |
And this already becomes noticeable at the integration stage.
Payment Processing
x402: facilitator as a layer
Here, x402 tries to follow a crypto approach — decentralization and crypto philosophy.
x402 introduces a separate entity — the facilitator.
It exists because:
- someone has to send the transaction to the blockchain
- someone has to confirm that it went through
The server usually doesn’t do this itself and delegates it to the facilitator.
So the flow looks like:
- client → server → facilitator → blockchain
This makes sense in a crypto context, but it adds an extra layer.
On one hand:
- you can use multiple facilitators
- you don’t need to run your own infrastructure
On the other:
- you introduce a dependency
- part of the logic moves outside your system
MPP: validation abstraction
MPP follows a different philosophy — it’s primarily a protocol focused on payments and standards.
Here you get a challenge / validation model:
- challenge — instructions for the client on how to pay
- validation — server-side check whether the payment was successful
The server doesn’t say “send this exact transaction”, it says:
“here are the payment conditions — fulfill them.”
This is where MPP provides flexibility.
The validation function on the server can:
- verify the payment locally
- or delegate it to an external service — blockchain, payment processor, facilitator
So the architecture is not enforced.
This gives you more freedom, but at the same time requires more effort and time to implement.
| x402 | MPP |
|---|---|
| server relies on a facilitator to send transactions and get results | server decides how to validate payments, giving more flexibility |
| crypto philosophy, decentralization-first | focused on payments and standards |
Stateless vs Sessions
This is where the difference stops being theoretical and becomes very practical.
x402
Works strictly in a one request — one payment model.
It’s simple and predictable.
But if you have, for example, 100 requests in a row — you need 100 payments.
MPP
Adds another layer — sessions, while still supporting one-off payments.
This is already closer to real-world billing:
- you open a session
- make multiple requests within it
- payment is settled later or based on usage
This significantly changes the UX:
- fewer operations
- lower latency
- easier to handle high-load scenarios
And this is where MPP provides more flexibility.
| x402 | MPP |
|---|---|
| stateless, only 1 request = 1 payment | supports both charge (1 request = 1 payment) and sessions |
Integration Complexity
x402
With x402, everything is very straightforward.
There’s good documentation, SDKs, and ready-to-use examples. The protocol already defines:
- how to pay
- how to validate
- which formats to use
Because of that, integration is fast — especially if you’re already working with EVM / Solana and USDC.
There’s also standardization: if a token supports ERC-3009 or Permit2, you can simply add a new network — the rest of the logic stays the same. You only need a facilitator for that network.
MPP
With MPP, the situation is a bit different.
If you use prebuilt payment methods (for example, Stripe, Tempo, or other ready solutions), the basic integration is also quite simple.
But after that, you start making decisions that x402 already made for you.
For example, you need to decide:
- whether you operate in one-off payment (charge) mode
- or use sessions
And if you want something custom, you’ll need to implement:
- your own payment intents / challenges
- your own payment validation logic
This isn’t technically hard, but it does require more time and architectural thinking.
And this is where the main trade-off becomes clear:
in MPP, complexity is the price you pay for flexibility
In the end:
- x402 — faster to start, fewer decisions
- MPP — more control, but more work
At the same time, both protocols are generally easy to integrate — these aren’t the kind of systems where you spend a week fighting the docs and nothing works.
Compatibility
A small but important point.
x402 came earlier and is already in use with its own rules and ecosystem.
MPP is a newer protocol, but it was designed with existing approaches in mind, including x402.
The key point:
MPP can be implemented in a way that is compatible with x402
In other words, if you build your system on MPP, you can still work with servers that use x402.
This makes MPP more universal in terms of integrations and transitions between protocols.
Scalability
If you look at the real world, there are many payment methods: different types of cards, bank transfers, local systems, crypto (with different networks and tokens).
And users in different regions will use different options.
So for a service, it’s important to:
- support multiple payment methods
- not limit the user
- scale as the service grows
x402
With x402, there are some limitations.
Yes, it can be wrapped through processors like Stripe, but in practice the payment still ends up being a blockchain transaction.
So: even if the user “pays with a card”, under the hood it’s still crypto
Which means:
- dependency on the network
- fees
- latency
MPP
MPP is not tied to any specific payment method.
It allows you to:
- use different payment rails
- adapt to regions
- use sessions instead of paying per request
This is already closer to real-world billing systems.
MPP provides more flexibility for scaling and, in this sense, looks stronger.
A small off-topic note.
You can argue about different implementations — what’s simpler, what’s more complex, and so on.
But at the most abstract level, a protocol is just:
a set of headers + rules for handling them
And the actual processing can be implemented in different ways.
However, I personally stick to defined protocols and try not to deviate from their original specifications.
And from that perspective, MPP clearly has the advantage.
Discovery and Machine-Readable Description
Another very important topic I want to touch on is discovery in both protocols.
Not just “how to pay”, but how to find the right service and understand what it can do.
x402
With x402, this is handled through the so-called bazaar discovery layer.
It’s implemented at the facilitator level:
- the server declares discovery metadata (description of its routes and endpoints)
- the facilitator extracts and aggregates this information
- the client queries the facilitator to discover available services
In essence:
the facilitator becomes an API marketplace
This is especially useful for AI agents, which can use the facilitator as a source to discover available tools.
And this unlocks a strong use case:
a lot of services are aggregated in one place, and you can immediately start interacting with them.
MPP
MPP takes a different approach.
There is no single entry point, but there is a specification:
- each server must expose an
openapi.json - it describes endpoints and pricing
This is a more classic, decentralized approach.
But there’s a trade-off:
the client (or agent) has to query each service and collect this information itself
Unlike x402, where the facilitator can return everything at once.
In the end, there’s no “right” answer here.
- x402 → centralized discovery via facilitator
- MPP → decentralized discovery via OpenAPI
Both approaches are valid and practical.
But personally: discovery through the facilitator is a very strong and underrated feature of x402
And in this aspect, it feels noticeably more convenient.
What to choose
So in the end — what should you choose, and for which use cases?
In my view, both protocols are useful, they just operate at different levels of abstraction.
x402 is a good choice if:
- you only need crypto payments
- fast and simple setup matters
- you’re interested in the facilitator ecosystem and bazaar discovery
It’s a solid option when you want to quickly launch pay-per-request in a crypto environment without adding complexity.
MPP is a better fit if:
- you plan to scale
- you need multiple payment methods (not just crypto)
- you expect high load
- sessions and flexible billing matter
This is closer to building a full payment infrastructure.
In my view:
- x402 is a fast and straightforward entry point
- MPP is the foundation for more complex and scalable systems