Referensi API
Dokumentasi lengkap semua endpoint REST API TransX402 — autentikasi, manajemen merchant, fasilitasi pembayaran, sandbox, dan lainnya.
Base URL
Semua request hosted mengarah ke https://api.transx402.com. Pengembangan lokal memakai http://localhost:3402.
Chain ditentukan dari prefix API key Anda (rahasia atau publishable):
| Prefix Key | Tipe | Chain |
|---|---|---|
ipk_sandbox_ | Rahasia (server) | Sandbox (CAMP Testnet) |
ipk_live_ | Rahasia (server) | Production (Base mainnet) |
ipk_pub_sandbox_ | Publishable (browser / CDN) | Sandbox (CAMP Testnet) |
ipk_pub_live_ | Publishable (browser / CDN) | Production (Base mainnet) |
IDRX memakai 2 desimal. String amount on-chain dan catatan pembayaran adalah unit dasar (Rp 5.000 → "500000"). Harga manusiawi di SDK adalah IDR utuh ("5000").
Autentikasi
| Grup Endpoint | Auth | Metode |
|---|---|---|
/config | Tidak (publik) | — |
/facilitate | API Key (X-API-Key) | Key rahasia, atau key publishable dengan Origin terdaftar |
/payments/* | API Key rahasia | Header X-API-Key |
/tokens/* | Tidak (publik) | — |
/health | Tidak (publik) | — |
/auth/* | Tanda tangan wallet | SIWE |
/merchant/* | Session cookie | Di-set setelah /auth/login |
/sandbox/* | API Key sandbox rahasia | Header X-API-Key |
Rahasia vs publishable: POST /facilitate dari browser (Origin ada) harus memakai ipk_pub_* dan Allowed Origin dari dashboard. Key rahasia (ipk_sandbox_, ipk_live_) untuk backend merchant (@transx402/server, PHP WordPress) tanpa Origin browser.
Autentikasi dan Registrasi
POST /auth/register
Daftarkan akun merchant baru. Memerlukan tanda tangan SIWE untuk membuktikan kepemilikan wallet.
Request:
Response:
Saat registrasi, sandbox API key otomatis dibuat. Production key dibuat terpisah dari dashboard.
POST /auth/login
Login dengan tanda tangan wallet. Menyimpan session cookie untuk akses dashboard.
POST /auth/logout
Hapus session.
Config fasilitator
GET /config
Snapshot publik chain, token, dan kapabilitas x402. Tanpa API key. Client dan @transx402/server memuat RPC, chainId, alamat IDRX, desimal, dan Permit2 dari sini — jangan hardcode di kode aplikasi.
Browser dalam settlement server harus memanggil ini via proxy same-origin merchant (GET /api/transx402/config), bukan origin fasilitator (CORS).
Response (bentuk):
ipk_sandbox_ / ipk_pub_sandbox_ memakai section sandbox; ipk_live_ / ipk_pub_live_ memakai production. rpcUrl / chainId / alamat yang tepat berasal dari fasilitator live.
Fasilitasi Pembayaran
POST /facilitate
Proses otorisasi pembayaran yang sudah ditandatangani. Ini adalah endpoint inti yang dipanggil oleh client x402 (@transx402/server dalam mode kanonis, atau client browser pada settlement: "direct").
Auth: API Key (header X-API-Key). Pemanggil browser harus memakai key publishable plus Allowed Origins.
Alur:
- Parse dan validasi request
- Autentikasi API key, resolve merchant dan environment
- Route ke chain yang benar (sandbox CAMP Testnet atau production Base)
- Verifikasi token ada di registry
- Verifikasi tanda tangan Permit2
- Cek deadline belum lewat
- Cek nonce belum digunakan
- Cek saldo IDRX pembayar
- Cek allowance Permit2 pembayar
- Simulasi transaksi
- Kirim transaksi on-chain
- Tunggu konfirmasi
- Catat pembayaran di database
- Kirim webhook (async)
- Kembalikan hash transaksi
Status Pembayaran
GET /payments/:txHash
Lookup pasca-settlement: cek apakah TransX402 sudah merekam pembayaran untuk hash transaksi ini. Dibatasi ke merchant dari API key. Gunakan untuk unlock tertunda (mis. WordPress pay-per-article) atau rekonsiliasi setelah Anda punya txHash.
Ini bukan langkah verify pre-settlement protokol x402. Settlement memakai POST /facilitate gabungan (verify + settle internal).
Auth: API Key
Response:
Nilai status: pending, confirmed, failed
verified bernilai true jika status === "confirmed". resource adalah URL konten dari pembayaran asli (gunakan untuk mencocokkan unlock pay-per-article). resource dan description bisa null jika tidak disediakan saat settlement.
Alias deprecated: GET /verify/:txHash mengembalikan response yang sama dengan header Deprecation: true. Gunakan /payments/:txHash.
GET /payments
Daftar pembayaran untuk merchant yang terautentikasi.
Auth: API Key
Parameter query:
| Param | Tipe | Deskripsi |
|---|---|---|
page | number | Nomor halaman (default: 1) |
limit | number | Item per halaman (default: 20, max: 100) |
status | string | Filter berdasarkan status |
from | string | Filter berdasarkan alamat pembayar |
since | ISO date | Filter pembayaran setelah tanggal ini |
until | ISO date | Filter pembayaran sebelum tanggal ini |
Response:
Profil Merchant
GET /merchant/me
Dapatkan profil merchant saat ini.
Auth: Session cookie
PATCH /merchant/me
Update profil merchant.
Auth: Session cookie
Request:
GET /merchant/stats
Dapatkan statistik pembayaran.
Auth: Session cookie
Response:
Manajemen API Key
POST /merchant/api-keys
Buat API key baru.
Auth: Session cookie
Request:
Response:
Penting: Field key lengkap hanya dikembalikan sekali saat pembuatan. Simpan dengan aman.
GET /merchant/api-keys
Daftar semua API key (menampilkan prefix, label, environment, terakhir digunakan — tidak pernah key lengkap).
Auth: Session cookie
DELETE /merchant/api-keys/:id
Cabut (revoke) API key.
Auth: Session cookie
Utilitas Sandbox
Endpoint ini hanya bisa diakses menggunakan API key sandbox.
POST /sandbox/fund
Isi wallet test dengan IDRX atau ETH di chain sandbox. token opsional
default "IDRX". Untuk IDRX, amount adalah IDRX utuh (sama dengan IDR utuh), batas default 100000 per request. Gunakan "ETH" dengan amount desimal seperti "0.01".
Auth: API key sandbox rahasia (ipk_sandbox_... saja)
Request (IDRX):
Request (ETH):
Response:
POST /sandbox/reset
Re-fork sandbox Anvil dari block Base mainnet terbaru. Mengembalikan 409 sandbox_operation_unsupported pada sandbox CAMP hosted (treasury).
Auth: API key sandbox rahasia
GET /sandbox/wallets
Daftar wallet test deterministik Anvil. Mengembalikan 409 pada sandbox CAMP hosted (treasury).
Response:
Ini adalah akun deterministik Anvil — aman untuk diekspos di sandbox saja.
Informasi Token
GET /tokens
Daftar semua token yang didukung.
Auth: Tidak diperlukan
GET /tokens/:symbol/price
Dapatkan informasi harga token.
Auth: Tidak diperlukan
Response:
Health Check
GET /health
Auth: Tidak diperlukan
Response:
Format Error
Semua error mengikuti format yang konsisten:
Kode Error
| Kode | HTTP Status | Deskripsi |
|---|---|---|
invalid_signature | 400 | Verifikasi tanda tangan Permit2 gagal |
insufficient_balance | 400 | Saldo token pembayar kurang |
no_permit2_approval | 400 | Pembayar belum approve kontrak Permit2 |
expired_deadline | 400 | Otorisasi pembayaran sudah kedaluwarsa |
unsupported_token | 400 | Token tidak ada di registry |
unsupported_network | 400 | Jaringan tidak didukung untuk token ini |
simulation_failed | 400 | Simulasi transaksi gagal |
tx_failed | 500 | Transaksi on-chain gagal |
rate_limited | 429 | Terlalu banyak request |
unauthorized | 401 | API key tidak valid atau tidak ada |
Rate Limits
| Endpoint | Limit |
|---|---|
POST /facilitate | 60/menit per IP |
GET /payments/* | 120/menit per API key |
POST /merchants/* | 10/menit per IP |
| Lainnya | 120/menit per IP |