Kirim request berbayar pertama Anda dengan x402

Panduan ini menelusuri satu request Solana melalui x402: membaca harga, membayarnya, lalu menerima jawaban beserta bukti settlement. Cara yang sama berlaku untuk 15 chain lainnya, masing-masing di path-nya sendiri.
Anda memerlukan wallet berisi USDC di Solana, atau USDC atau EURC di Base, serta client x402: software yang membaca respons 402, menandatangani pembayaran dari wallet Anda, lalu mengirim ulang request beserta pembayaran itu. Untuk client x402, lihat dokumentasi x402 di x402.org.

1. Kirim request

Kirim request RPC tanpa pembayaran:
bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
Jawabannya adalah 402 Payment Required. Header-nya menyebutkan method dan harganya:
http
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
Body mencantumkan opsi pembayaran di accepts, satu untuk setiap stablecoin yang bisa dipakai membayar request tersebut. amount dinyatakan dalam satuan terkecil stablecoin, jadi 1000 berarti 0.001 USDC, atau 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. Bayar dengan client x402

Berikan respons 402 ke client x402 Anda. Client memilih opsi yang bisa dibayar wallet Anda, menandatangani pembayaran sebesar jumlah itu, lalu mengodekannya untuk header X-Payment. Pembayaran ini tidak memerlukan SOL atau ETH untuk biaya jaringan.

3. Kirim ulang request beserta pembayarannya

Kirim lagi body yang sama, dengan pembayaran di header 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"}'
Jangan ubah body. Harga dihitung dari body, jadi jika body yang diubah memiliki harga berbeda, pembayaran tidak lagi cocok dengan harganya, sehingga request dijawab dengan price_mismatch.
Setelah pembayaran diverifikasi dan settlement selesai, jawaban RPC kembali beserta bukti settlement di header X-Payment-Response:
http
HTTP/2 200
x-payment-response: <RECEIPT>
json
{ "jsonrpc": "2.0", "id": 1, "result": … }
Satu pembayaran hanya berlaku untuk satu request. Jika Anda mengirim pembayaran yang sama lagi, pembayaran itu ditolak dengan 402 payment_invalid atau 409 duplicate_payment, dan request tidak diteruskan lagi.

Respons

Request yang dijawab x402.erpc.global dengan error sebelum pembayaran diminta tidak dikenai biaya.
Statuserror.codeYang terjadi
402payment_requiredTidak ada pembayaran yang dikirim. Body menyebutkan harga dan opsi pembayaran.
402payment_invalidPembayaran tidak lolos verifikasi. Tanda tangani pembayaran baru, lalu kirim ulang request.
402price_mismatchPembayaran tidak cocok dengan opsi yang ditawarkan respons 402 untuk request ini, misalnya dalam hal harga.
402payment_amount_too_lowJumlahnya di bawah pembayaran terkecil yang di-settle x402.erpc.global.
402settlement_failedSettlement dilaporkan gagal. Respons menawarkan opsi pembayaran lagi.
409duplicate_paymentPembayaran sudah pernah dipakai.
400method_not_supported, invalid_requestPath tidak menjual method tersebut, atau tidak menerima body tersebut. Tidak ada biaya.
413batch_too_largeBatch berisi lebih dari 100 panggilan. Tidak ada biaya.
500configuration_errorPath saat ini tidak dapat melayani request. Tidak ada biaya.
503payment_unavailableSaat ini tidak ada opsi pembayaran yang bisa ditawarkan. Tidak ada biaya. Coba lagi setelah jeda (dalam detik) yang ditunjukkan Retry-After.
503service_busyTerlalu banyak request sekaligus. Tidak ada biaya. Coba lagi setelah jeda (dalam detik) yang ditunjukkan Retry-After.
502settlement_failedHasil settlement tidak diketahui: pembayaran mungkin sudah berhasil, dan tidak ada bukti yang dilampirkan. Sebelum menandatangani pembayaran baru, periksa di Solana atau Base apakah pembayaran yang Anda tanda tangani sudah berhasil.
502, 504upstream_error, upstream_timeoutSettlement pembayaran sudah selesai, tetapi chain tidak menjawab, atau tidak menjawab tepat waktu. Bukti settlement tetap dilampirkan. Mengirim ulang request memerlukan pembayaran baru.
Di Solana, panggilan yang akan membaca terlalu banyak data, seperti getProgramAccounts tanpa filter pada program besar, dijawab dengan HTTP 200 dan error JSON-RPC sebelum pembayaran apa pun diminta, sehingga tidak dikenai biaya.

Langkah berikutnya