---
title: "x402 で、料金を払って最初のリクエストを送る"
description: "x402.erpc.global にリクエストを送り、402 のレスポンスで料金を確かめ、x402 のクライアントで払って、RPC の結果と決済結果を受け取るまでの手順です。"
canonical: "https://erpc.global/ja/doc/x402/quickstart/"
locale: "ja"
---

# x402 で、料金を払って最初のリクエストを送る

Solana のリクエストを 1 つ例に、x402 で料金を確かめ、払い、RPC の結果と決済結果を受け取るまでを順に追います。他の 15 のチェーンも、それぞれのパスで同じ手順です。

用意するのは、Solana 上の USDC、または Base 上の USDC か EURC が入ったウォレットと、x402 のクライアントです。x402 のクライアントは、402 のレスポンスを読み、ウォレットで支払いに署名して、リクエストを送り直すソフトウェアです。クライアントについては、[x402.org](https://x402.org/) のドキュメントをご覧ください。

## 1. リクエストを送る

まず、支払いペイロードを付けずに RPC のリクエストを送ります。

```bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
```

402 Payment Required が返ります。ヘッダーには、メソッドと料金が入っています。

```http
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
```

レスポンスボディの `accepts` には、支払いに使えるステーブルコインごとに支払い方法が並びます。`amount` はステーブルコインの最小単位で数えた額で、1000 は 0.001 USDC（EURC なら 0.001 EURC）です。

```json
{
  "error": { "code": "payment_required", "message": "Payment required", "request_id": "…" },
  "x402Version": 2,
  "accepts": [
    { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "amount": "1000", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42", … }
  ],
  "pricing": { "methods": ["getSlot"], …, "weight": 1000, "rawWeight": 42, …, "price": "$0.001", … },
  …
}
```

## 2. x402 のクライアントで払う

402 のレスポンスを x402 のクライアントに渡します。クライアントは、ウォレットで払える支払い方法を選んで、その金額の支払いに署名し、X-Payment ヘッダーに入れる値にエンコードします。ネットワーク手数料のための SOL や ETH は要りません。

## 3. 支払いペイロードを付けて、もう一度送る

同じリクエストボディを、X-Payment ヘッダーに支払いペイロードを入れて、もう一度送ります。

```bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --header 'X-Payment: <PAYMENT_PAYLOAD>' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
```

リクエストボディは変えずに送ってください。料金はリクエストボディで決まるので、変えたことで料金が変わると、支払いの金額と合わずに `price_mismatch` が返ります。

支払いの検証と決済が済むと、RPC の結果が返ります。決済結果は X-Payment-Response ヘッダーに入ります。

```http
HTTP/2 200
x-payment-response: <RECEIPT>
```

```json
{ "jsonrpc": "2.0", "id": 1, "result": … }
```

1 つの支払いペイロードで払えるのは、1 つのリクエストだけです。同じ支払いペイロードをもう一度送ると、402 `payment_invalid` か 409 `duplicate_payment` が返り、リクエストがもう一度チェーンへ送られることはありません。

## レスポンス

支払いを求める前にエラーを返したリクエストには、料金はかかりません。

| ステータス | `error.code` | 何が起きたか |
| --- | --- | --- |
| 402 | `payment_required` | 支払いペイロードが付いていません。レスポンスボディに料金と支払い方法が入っています。 |
| 402 | `payment_invalid` | 支払いペイロードが検証を通りませんでした。新しい支払いに署名して、もう一度送ってください。 |
| 402 | `price_mismatch` | 支払いペイロードが、このリクエストの 402 が示した支払い方法（料金など）と合いません。 |
| 402 | `payment_amount_too_low` | 金額が、x402.erpc.global が決済する最小の金額を下回っています。 |
| 402 | `settlement_failed` | 決済が失敗したと報告されました。レスポンスには、支払い方法が改めて入っています。 |
| 409 | `duplicate_payment` | この支払いペイロードは、すでに使われています。 |
| 400 | `method_not_supported`、`invalid_request` | そのパスでは提供していないメソッドか、受け付けないリクエストボディです。料金はかかりません。 |
| 413 | `batch_too_large` | バッチが 100 件を超えています。料金はかかりません。 |
| 500 | `configuration_error` | そのパスが、いまリクエストを受けられません。料金はかかりません。 |
| 503 | `payment_unavailable` | いまは支払い方法を示せません。料金はかかっていません。Retry-After の秒数の後に送り直してください。 |
| 503 | `service_busy` | 同時のリクエストが多すぎます。料金はかかっていません。Retry-After の秒数の後に送り直してください。 |
| 502 | `settlement_failed` | 決済の結果が分かりません。支払いが通っている場合があり、決済結果は付いていません。新しい支払いに署名する前に、署名した支払いが Solana か Base で通ったかを確かめてください。 |
| 502、504 | `upstream_error`、`upstream_timeout` | 決済は済みましたが、チェーンからの応答が無いか、時間内に返りませんでした。決済結果は付いています。もう一度送るには、新しい支払いが要ります。 |

Solana では、読み取る範囲が広すぎる呼び出し（大きなプログラムに絞り込みなしで送る `getProgramAccounts` など）には、支払いを求める前に HTTP 200 と JSON-RPC のエラーを返します。料金はかかりません。

## 次のステップ

- [x402 の料金の決まり方](https://erpc.global/ja/doc/x402/pricing/): 1 回の料金、0.001 ドルの最低料金、バッチの料金
- [x402 の概要](https://erpc.global/ja/doc/x402/overview/): チェーンごとのパスと、支払いに使えるステーブルコイン
- [OpenAPI ドキュメント](https://x402.erpc.global/doc): すべてのパスのリクエストとレスポンスの形
