Dokumentasi API

Integrasikan payment gateway Iegpay ke aplikasi Anda. Buat pembayaran, terima webhook, dan kelola status secara otomatis.

Pendahuluan

API Payment Iegpay memungkinkan Anda membuat pembayaran dan menerima status pembayaran secara otomatis. Anda cukup berinteraksi dengan satu API yang konsisten dari Iegpay.

  1. Buat invoice pembayaran lewat API.
  2. Dapatkan instruksi pembayaran (QRIS, Virtual Account, E-Wallet, atau halaman checkout), lalu tampilkan ke pelanggan.
  3. Pelanggan membayar dengan metode pilihannya.
  4. Iegpay mengirim webhook ke callback URL Anda saat status berubah.
Base URL: semua endpoint di dokumentasi ini menggunakan https://iegpay.iegcode.com/api untuk LIVE dan https://iegpay.iegcode.com/api-sandbox untuk TEST. Halaman dokumitasi ini bersifat publik.

Quickstart

Lima langkah untuk mulai menerima pembayaran:

  1. Daftar merchant di halaman register. Anda langsung mendapatkan API Key dan Webhook Token (mode TEST).
  2. Atur callback URL (webhook) di dashboard merchant, atau kirim callback_url per invoice.
  3. Buat pembayaran dengan memanggil POST /api-sandbox/v1/invoices (pengujian) atau POST /api/v1/invoices (produksi). Sertakan payment_method jika ingin langsung memilih metode.
  4. Tampilkan instruksi bayar ke pelanggan: QR code (QRIS), nomor Virtual Account (VA), atau link E-Wallet. Tanpa payment_method, pelanggan memilih metode di halaman checkout.
  5. Terima webhook ke callback URL Anda saat pembayaran berhasil.

Autentikasi

Kirim API Key Anda pada header Authorization dengan skema Bearer di setiap request. Mode (TEST/LIVE) mengikuti endpoint yang dipakai:

  • Sandbox (/api-sandbox/v1/...) dengan Sandbox API Key untuk pengujian. Transaksi berjalan di mode TEST.
  • Production (/api/v1/...) dengan Live API Key untuk transaksi uang sungguhan. Mode LIVE hanya aktif setelah bisnis Anda disetujui.
# Sandbox / TEST
Authorization: Bearer sk_sandbox_XXXXXXXXXXXXXXXXXXXXXXXXXXXX
curl https://iegpay.iegcode.com/api-sandbox/v1/invoices

# Production / LIVE
Authorization: Bearer sk_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXX
curl https://iegpay.iegcode.com/api/v1/invoices
Penting: jangan pernah membagikan API Key Anda. Simpan di server Anda, bukan di kode frontend/browser.

Integrasi QRIS

Ingin hanya menerima pembayaran via QRIS? Cukup kirim "payment_method": "QRIS" saat membuat invoice. API akan langsung membuat kode QRIS dinamis — tanpa halaman checkout — dan mengembalikan qr_code serta qr_image_url.

1. Buat pembayaran QRIS

# POST /api-sandbox/v1/invoices (untuk TEST; produksi gunakan /api/v1/invoices)
curl -X POST https://iegpay.iegcode.com/api-sandbox/v1/invoices \
  -H "Authorization: Bearer pk_iegpay_sandbox_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_name": "Budi Santoso",
    "customer_email": "budi@example.com",
    "customer_phone": "081234567890",
    "description": "Paket Premium",
    "amount": 100000,
    "payment_method": "QRIS"
  }'

2. Response (201 Created)

# HTTP 201 — payment_method QRIS
{
  "id": "qr_...",
  "external_id": "INV-20260801-ABCDE",
  "status": "PENDING",
  "amount": 100000,
  "mode": "TEST",
  "payment_method": "QRIS",
  "qr_code": "000201010212...6304",
  "qr_image_url": "https://api.qrserver.com/...qr...",
  "invoice_url": null,
  "created_at": "2026-08-01T10:00:00+07:00"
}

3. Tampilkan QR ke pelanggan

Gunakan qr_code (string QRIS, cocok untuk ditampilkan ulang) atau qr_image_url (gambar siap tampil) untuk render kode QR di aplikasi Anda:

<!-- Contoh tampilan QR di frontend -->
<!-- Gunakan nilai 'qr_image_url' dari respons API di atas -->
<img src="https://pay.iegpay.com/storage/qr/INV-20260801-ABCDE.png" alt="QRIS" />
Nilai src di atas berasal dari field qr_image_url pada response API — jangan di-hardcode. Jika ingin merender gambar sendiri, decode string QRIS pada field qr_code.
Pelanggan melakukan scan menggunakan aplikasi e-wallet atau m-banking. Status otomatis berubah PAID begitu pembayaran diterima — pantau lewat webhook atau GET /api-sandbox/v1/invoices/{external_id} (produksi: /api/v1/...).

Integrasi Virtual Account (VA)

Untuk menerima transfer bank lewat Virtual Account, kirim salah satu kode VA pada payment_method: BCA_VA, BNI_VA, BRIVA, atau MANDIRI_VA. API mengembalikan account_number (nomor VA) yang bisa langsung ditampilkan, atau invoice_url sebagai alternatif.

1. Buat pembayaran BCA VA

# POST /api-sandbox/v1/invoices (untuk TEST; produksi gunakan /api/v1/invoices)
curl -X POST https://iegpay.iegcode.com/api-sandbox/v1/invoices \
  -H "Authorization: Bearer pk_iegpay_sandbox_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_name": "Budi Santoso",
    "customer_email": "budi@example.com",
    "customer_phone": "081234567890",
    "description": "Paket Premium",
    "amount": 150000,
    "payment_method": "BCA_VA"
  }'

2. Response (201 Created)

# HTTP 201
{
  "external_id": "INV-20260801-ABCDE",
  "status": "PENDING",
  "amount": 150000,
  "payment_method": "BCA_VA",
  "account_number": "2833400000000123",
  "bank_code": "BCA",
  "invoice_url": null,
  "created_at": "2026-08-01T10:00:00+07:00"
}
Tampilkan nomor account_number ke pelanggan beserta instruksi transfer (mis. dari m-banking BCA ke nomor VA tersebut). Status VA berubah menjadi PAID setelah transfer masuk & dikonfirmasi.

Integrasi E-Wallet

Mendukung OVO, DANA, GoPay (GOPAY), dan ShopeePay (SHOPEEPAY). E-Wallet diarahkan ke halaman pembayaran penyedia — API mengembalikan invoice_url yang harus dimuat pelanggan untuk menyelesaikan pembayaran.

1. Buat pembayaran DANA

# POST /api-sandbox/v1/invoices (untuk TEST; produksi gunakan /api/v1/invoices)
curl -X POST https://iegpay.iegcode.com/api-sandbox/v1/invoices \
  -H "Authorization: Bearer pk_iegpay_sandbox_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_name": "Budi Santoso",
    "customer_email": "budi@example.com",
    "customer_phone": "081234567890",
    "description": "Top Up Saldo",
    "amount": 50000,
    "payment_method": "DANA"
  }'

2. Response (201 Created)

# HTTP 201
{
  "external_id": "INV-20260801-XYZ89",
  "status": "PENDING",
  "amount": 50000,
  "payment_method": "DANA",
  "invoice_url": "https://checkout-sandbox.iegpay.com/...",
  "created_at": "2026-08-01T10:00:00+07:00"
}
Arahkan pelanggan ke invoice_url untuk menyelesaikan pembayaran E-Wallet. Setelah pembayaran berhasil, mereka dikembalikan ke invoice_url/halaman status pembayaran aplikasi Anda.

Buat Pembayaran

Membuat invoice pembayaran baru dan mengembalikan instruksi pembayaran.

Gunakan /api-sandbox/v1/invoices untuk mode TEST dan /api/v1/invoices untuk mode LIVE.

POST /api/v1/invoices

Parameter
ParameterTipeWajibDeskripsi
external_idstringopsionalReference ID unik milik Anda. Jika kosong dibuat otomatis.
customer_namestringyaNama pelanggan.
customer_emailemailyaEmail pelanggan.
customer_phonestringyaNomor telepon pelanggan.
descriptionstringyaDeskripsi pembayaran.
amountnumberyaNominal pembayaran dalam IDR, minimal 1.000.
currencystringopsionalMata uang, default IDR.
payment_methodstringopsionalNama metode (cth: QRIS, BCA_VA, OVO). Jika diisi, pembayaran langsung dibuat untuk metode itu; jika kosong, pelanggan memilih lewat halaman checkout. Lihat daftar channel di bawah.
callback_urlurlopsionalURL webhook khusus invoice ini. Mengesampingkan callback URL akun.
Daftar Payment Method
QRIS
QRIS (kode QR dinamis) — tipe QRIS
BCA_VA
BCA Virtual Account
BNI_VA
BNI Virtual Account
BRIVA
BRI Virtual Account
MANDIRI_VA
Mandiri Virtual Account
OVO / DANA / GOPAY / SHOPEEPAY
E-Wallet
Contoh Request (cURL) — tanpa metode (pelanggan memilih)
# POST /api-sandbox/v1/invoices (untuk TEST; produksi gunakan /api/v1/invoices)
curl -X POST https://iegpay.iegcode.com/api-sandbox/v1/invoices \
  -H "Authorization: Bearer pk_iegpay_sandbox_XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_name": "Budi Santoso",
    "customer_email": "budi@example.com",
    "customer_phone": "081234567890",
    "description": "Pembayaran Paket Premium",
    "amount": 100000
  }'
Contoh Response (201 Created)
# HTTP 201
{
  "id": "64f1c2b3e4a5f6c7d8e9f0a1",
  "external_id": "INV-20260801-ABCDE",
  "status": "PENDING",
  "amount": 100000,
  "currency": "IDR",
  "mode": "TEST",
  "payment_method": "QRIS",
  "paid_at": null,
  "qr_code": "000011010212265215...",
  "qr_image_url": "https://...",
  "account_number": null,
  "bank_code": null,
  "invoice_url": "https://pay.iegpay.com/payment/status/INV-20260801-ABCDE",
  "created_at": "2026-08-01T10:00:00+07:00"
}

Jika payment_method kosong, arahkan pelanggan ke invoice_url tempat mereka memilih metode — mulai dari QRIS, E-Wallet, hingga Virtual Account.

Cek Status Invoice

Mendapatkan detail invoice berdasarkan reference ID Anda atau ID transaksi Iegpay.

GET /api/v1/invoices/{external_id}

Contoh Request (cURL)
# GET /api-sandbox/v1/invoices/INV-20260801-ABCDE (TEST; produksi: /api/v1/...)
curl https://iegpay.iegcode.com/api-sandbox/v1/invoices/INV-20260801-ABCDE \
  -H "Authorization: Bearer pk_iegpay_sandbox_XXXX"
Contoh Response (200 OK)
# HTTP 200
{
  "id": "64f1c2b3e4a5f6c7d8e9f0a1",
  "external_id": "INV-20260701-ABCDE",
  "status": "PAID",
  "amount": 100000,
  "currency": "IDR",
  "mode": "TEST",
  "payment_method": "QRIS",
  "paid_at": "2026-08-01T10:05:00+07:00",
  "invoice_url": "https://pay.iegpay.com/checkout/...",
  "created_at": "2026-08-01T10:00:00+07:00"
}

Status Pembayaran

Setiap invoice memiliki salah satu status berikut:

StatusDeskripsi
Menunggu Pembayaran Pembayaran dibuat, menunggu pelanggan membayar.
Lunas Pembayaran berhasil.
Gagal Pembayaran gagal.
Kadaluarsa Waktu pembayaran habis.
Dibatalkan Pembayaran dibatalkan.

Status PAID bersifat final dan tidak akan berubah meskipun ada webhook datang belakangan.

Pengenalan Webhook

Saat status pembayaran berubah, Iegpay mengirimkan notifikasi ke callback_url yang Anda daftarkan. Anda tidak perlu mengecek status secara terus-menerus.

FieldDeskripsi
idID event webhook.
external_idReference ID invoice milik Anda.
statusStatus terbaru pembayaran (PENDING, PAID, FAILED, dst).
amountNominal pembayaran.
currencyMata uang pembayaran.
payment_methodMetode pembayaran yang digunakan pelanggan.
paid_atWaktu pembayaran berhasil (jika sudah dibayar).
Contoh Payload Webhook
# POST <callback_url>
{
  "id": "evt_8f2d91a5",
  "external_id": "INV-20260701-ABCDE",
  "status": "PAID",
  "amount": 100000,
  "currency": "IDR",
  "payment_method": "QRIS",
  "paid_at": "2026-08-01T10:05:00+07:00"
}
Beri tahu Iegpay bahwa webhook Anda sudah diproses dengan mengembalikan HTTP 200. Jika Anda mengembalikan kode selain 200, webhook dianggap gagal dan dikirim ulang.
Opsional: webhook tidak wajib. Jika tidak memasang callback URL, Anda cukup mengecek status secara berkala lewat GET /api-sandbox/v1/invoices/{external_id} (produksi: /api/v1/...).

Verifikasi Webhook

Untuk memastikan webhook benar-benar berasal dari Iegpay, bandingkan header x-callback-token pada request dengan Webhook Token Anda.

x-callback-token: <Webhook Token Anda>

Contoh verifikasi di PHP:

// $expectedToken = 'Webhook Token Anda'
// $receivedToken = $_SERVER['HTTP_X_CALLBACK_TOKEN'] ?? ''
if (!hash_equals($expectedToken, $receivedToken)) {
    return 'Invalid signature'; // tolak
}
return 'OK'; // HTTP 200, webhook valid
Webhook Token Anda berbeda untuk mode TEST dan LIVE. Gunakan token sesuai mode pembayaran. Anda dapat melihatnya di dashboard merchant.

Testing dengan Postman

Kami menyediakan koleksi API Postman yang sudah berisi contoh pembuatan pembayaran (QRIS, VA, E-Wallet, dan tanpa metode) plus cek status.

Download Postman Collection
  1. Unduh file JSON di atas.
  2. Buka aplikasi Postman, klik Import, lalu pilih file JSON tersebut.
  3. Buka tab Variables di dalam koleksi.
  4. Ganti value API_KEY dengan Sandbox API Key dari dashboard Anda.
  5. Jalankan request folder "QRIS" untuk percobaan tanpa checkout — ambil qr_image_url lalu pindai QR.
  6. Untuk mode LIVE, ubah BASE_URL ke /api dan ganti API_KEY ke Live API Key.

Kode Error

HTTPDeskripsi
401API Key tidak valid atau tidak dikirim.
403Mode LIVE digunakan tetapi bisnis belum terverifikasi. Selesaikan verifikasi di dashboard merchant.
404Invoice tidak ditemukan.
422Validasi gagal (misalnya nominal di bawah 1.000), atau gagal membuat pembayaran di penyedia — transaksi ditandai FAILED.
500Terjadi kesalahan server.

Mode Sandbox & Production

Setiap merchant memiliki mode: TEST atau LIVE .

  • TEST — transaksi berjalan di sandbox. Tidak ada uang sungguhan. Ini default saat mendaftar dan dapat langsung dipakai.
  • LIVE — transaksi uang sungguhan. Mode ini hanya aktif setelah bisnis Anda disetujui melalui verifikasi di dashboard merchant.

Gunakan endpoint /api-sandbox/v1 untuk mode TEST dan /api/v1 untuk mode LIVE, dengan API Key yang sesuai.

Sebelum beralih ke LIVE, pastikan callback URL sudah benar (bila memakai webhook), webhook sudah teruji di mode TEST, dan proses verifikasi bisnis telah disetujui.