APPD
← Protocols

MPP

マシン決済プロトコル

MPPはマシン間商取引のためのインターネット決済プロトコルです。HTTP 402ステータスコードで決済要件を通知し、暗号資産(オンチェーンステーブルコイン)と法定通貨(カード、ウォレット via Stripe)の両方に対応。StripeとTempoが共同開発。

主な特徴

デュアル決済レール

オンチェーン暗号資産決済(USDCステーブルコイン)と従来の法定通貨決済(カード、ウォレット)をStripe経由で同一プロトコル上でサポート。

HTTP 402ネイティブ

HTTP 402 Payment Requiredステータスコード上に構築。標準的なHTTPリクエスト/レスポンスサイクル内で決済ネゴシエーションが完結。

チャレンジベースセッション

暗号学的チャレンジ-レスポンスによる決済検証。各チャレンジは32バイトのランダムシークレットで保護。

マシン間通信ファースト

自律エージェントとプログラマティッククライアント向けに設計。ブラウザリダイレクトや人間の操作は不要。

MPPの仕組み

1

クライアントが有料リソースをサーバーにリクエスト

2

サーバーがHTTP 402と決済チャレンジ(challengeId、金額、通貨、受付方法)を返却

3

クライアントが決済を完了 — オンチェーン(暗号資産をデポジットアドレスへ)またはオフチェーン(カード/ウォレット via SPT)

4

クライアントがAuthorizationヘッダーに決済証明を含めてリクエストを再送信

5

サーバーが認証情報を検証し、200 OKでリソースを返却

決済方法

2つの決済レール、1つのプロトコル

暗号資産決済

デポジットアドレスによるオンチェーンステーブルコイン決済。サーバーがブロックチェーンアドレスを提供し、クライアントが直接トークンを送金。オンチェーンで決済確認。

  1. 1サーバーがデポジットアドレスと対応トークンを含む402を返却
  2. 2クライアントがオンチェーンでデポジットアドレスにUSDCを送金
  3. 3Stripeが入金到着時にPaymentIntentを自動キャプチャー
  4. 4クライアントが決済証明を含むAuthorizationヘッダーでリトライ

SPT(共有決済トークン)決済

カード、ウォレット、その他Stripe対応手段による法定通貨決済。クライアントがトークンを作成し、サーバーがStripeの決済ネットワーク経由で課金。

  1. 1クライアントがSPT(共有決済トークン)を作成
  2. 2サーバーがトークンを使用してStripe PaymentIntentを生成
  3. 3Stripeのレール(カード、Linkなど)経由で決済処理
  4. 4サーバーが完了を検証しアクセスを許可

暗号資産決済フロー

クライアント
サーバー
Stripe

支払いなしで有料リソースをリクエスト

crypto決済手段を使用する

POST /v1/payment_intents

入金アドレスを含むPaymentIntentを返す

支払い要件を含むHTTP 402レスポンス

決済でリクエストを再試行

リクエストされたリソースを返す

SPT(共有決済トークン)決済フロー

クライアント
サーバー
Stripe

支払いなしで有料リソースをリクエスト

支払い要件を含むHTTP 402レスポンス

共有決済トークン(SPT)の作成

SPTを返す

SPTクレデンシャルによるリクエストの再試行

SPTでPaymentIntentを作成

POST /v1/payment_intents

確定済みのPaymentIntentを返す

リクエストされたリソースを返す

HTTPプロトコル詳細

402レスポンスとAuthorizationヘッダーの仕様

402レスポンスボディ

決済が必要な場合、サーバーはRFC 9457に準拠したJSON問題詳細オブジェクトを返却します。

{
  "type": "https://paymentauth.org/problems/payment-required",
  "title": "Payment Required",
  "status": 402,
  "detail": "Payment is required to access this resource.",
  "challengeId": "ch_1abc2def3ghi..."
}

PaymentIntent (Crypto)

{
  "id": "pi_123",
  "amount": 5000,
  "currency": "usd",
  "status": "requires_action",
  "next_action": {
    "type": "crypto_display_details",
    "crypto_display_details": {
      "deposit_addresses": {
        "tempo": {
          "address": "0x...",
          "supported_tokens": [
            {
              "token_currency": "usdc",
              "token_contract_address": "0x..."
            }
          ]
        }
      }
    }
  }
}

Authorizationヘッダー

決済後、クライアントはAuthorizationヘッダーに証明を含めます。サーバーがスキームを抽出・検証します。

コード例

暗号資産決済 (Node.js)

// Server: MPP crypto payment endpoint
import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, {
  apiVersion: '2026-03-04.preview',
});

// 1. Client requests resource → server returns 402
app.get('/api/data', async (req, res) => {
  const credential = Credential.fromRequest(req);

  if (!credential) {
    const challenge = await createChallenge({
      amount: 500, // $5.00
      currency: 'usd',
    });
    return res.status(402).json({
      type: 'https://paymentauth.org/problems/payment-required',
      title: 'Payment Required',
      status: 402,
      challengeId: challenge.id,
    });
  }

  // 4. Verify payment credential
  const scheme = Credential.extractPaymentScheme(credential);
  const verified = await verifyPayment(scheme);

  if (verified) {
    return res.json({ data: 'protected resource' });
  }
});

SPT(共有決済トークン)決済 (Client)

// Client: SPT (Shared Payment Token) flow
const response = await fetch('https://api.example.com/data');

if (response.status === 402) {
  const challenge = await response.json();

  // Create SPT and complete payment via Stripe
  const payment = await stripe.charge({
    networkId: 'internal',
    paymentMethodTypes: ['card', 'link'],
    secretKey: process.env.STRIPE_SECRET_KEY,
  });

  // Retry with Authorization header
  const result = await fetch('https://api.example.com/data', {
    headers: {
      'Authorization': `Bearer ${payment.token}`,
    },
  });

  const data = await result.json();
}

セキュリティ

チャレンジシークレット — 32バイトの暗号学的ランダム値(Base64エンコード)で各決済チャレンジを保護

認証情報検証 — サーバーが決済スキーム、PaymentIntent ID、アドレスの整合性を抽出・検証

リプレイ保護 — 各チャレンジはユニークな識別子による使い捨て

エコシステム

MPPを支える主要組織

Stripe

グローバル決済インフラ、MPPプロトコル共同開発者、法定通貨決済レール

Tempo

オンチェーン決済インフラ、暗号資産決済レール、ステーブルコイン決済

テスト & ツール

Stripeサンドボックスで暗号資産デポジットをシミュレーションしたテスト取引

mppx CLIツール(npmパッケージ)によるコマンドライン決済テスト

TempoテストネットのPATH_USDテストトークンで暗号資産フロー開発

次のステップ