# Machine Payments Protocol (MPP)
The open protocol for machine-to-machine payments.
* **[IETF Draft](https://datatracker.ietf.org/doc/draft-ryan-httpauth-payment/)** — the core specification submitted to the IETF
* **[Full Rendered Spec](https://tempoxyz.github.io/payment-auth-spec/)** — all specs including methods and extensions
* **[Learn more](https://mpp.dev)**
## Overview
MPP lets businesses offer services to agents, apps, and humans via a standard HTTP control flow. The protocol defines a payment-method agnostic core alongside extensions for specific payment method flows, discovery, and identity.
```mermaid
sequenceDiagram
participant Client
participant Server
Client->>Server: GET /resource
Server-->>Client: 402 Payment Required
WWW-Authenticate: Payment ...
Note over Client: Client fulfills payment challenge
Client->>Server: GET /resource
Authorization: Payment credential
Server-->>Client: 200 OK
```
1. **Client** requests a protected resource
2. **Server** responds with `402 Payment Required` and a `WWW-Authenticate: Payment` challenge describing what payment is needed
3. **Client** fulfills the payment (off-band, via the specified payment method)
4. **Client** retries the request with an `Authorization: Payment` credential proving payment
5. **Server** validates the credential and grants access
## Design Principles
MPP is designed to be simple, secure, and performant, holding the following design principles as guides:
* **Extensible core**: Minimal protocol designed for safe extension.
* **Network agnostic and multi-rail**: Designed to support a number of payment networks and settlement layers, including bank rails, credit cards, and stablecoins.
* **Currency agnostic**: No implicit advantages for any currency or asset.
* **Durable by design**: All designs follow web standards and are designed for security and replay protection as first class concerns.
See [STYLE.md](STYLE.md) for the full design principles and RFC writing conventions.
## Architecture
The specification is modular, separating stable protocol mechanics from evolving payment ecosystems:
* **[Core](specs/core/)**: HTTP 402 semantics, headers, IANA registries.
* **[Intents](specs/intents/)**: Abstract payment patterns—charge, authorize, subscription. Define *what* kind of payment without specifying *how*.
* **[Methods](specs/methods/)**: Concrete implementations for specific networks (Tempo, Stripe, ACH).
* **[Extensions](specs/extensions/)**: Optional protocol additions, such as discovery and identity.
## Contributing
The Machine Payments Protocol specification is currently maintained by the following organizations:
* [Tempo Labs](https://tempo.xyz)
* [Stripe](https://stripe.com)
We welcome contributions from a wide variety of individuals and organizations.
See [CONTRIBUTING.md](CONTRIBUTING.md) for building instructions and contribution guidelines.
## License
Specifications: [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/) (Public Domain)
Tooling: [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT), at your option