Skip to content

Create Payment

Endpoint ini digunakan untuk membuat transaksi pembayaran baru. Endpoint ini mendukung berbagai metode pembayaran melalui satu interface seragam. Anda hanya perlu mengganti parameter method_type dan method_detail.

⚠️ Penting: Hanya tenant dengan role Client yang dapat mengakses endpoint ini. Anda harus menggunakan API Key, bukan JWT.

http
POST /v1/payments/create

Request Headers

HeaderTipeRequiredDeskripsi
AuthorizationstringHarus berisi Bearer {api_key}
Content-TypestringSelalu application/json
X-Idempotency-KeystringKey unik per pesanan (contoh: nomor order dari sistem Anda) untuk mencegah duplikasi jika terjadi network error

Request Body

FieldTipeRequiredDeskripsi
amountintegerNominal tagihan dalam satuan terkecil (sen). Contoh: Rp 100.000 ditulis sebagai 10000000
currencystringMata uang. Saat ini hanya mendukung "IDR"
method_typestringJenis metode pembayaran. Lihat tabel Method Type
method_detailobjectParameter spesifik untuk metode pembayaran. Selalu sertakan field "type" yang nilainya sama dengan method_type. Lihat per-method di bawah
customer_namestringNama pelanggan Anda
customer_emailstringEmail pelanggan (wajib berformat email valid jika diisi)
customer_phonestringNomor handphone pelanggan (penting untuk beberapa tipe E-Wallet)
itemsarrayDetail produk/layanan yang dibeli pelanggan
expiry_minutesintegerWaktu kadaluarsa dalam menit. Default: 60. Minimum: 2 (Winpay)

Method Type (method_type)

NilaiKeterangan
virtual_accountTransfer via Virtual Account Bank
qrisPembayaran QRIS (Dynamic)
e_walletDompet Digital (OVO, DANA, dll)
over_the_counterPembayaran di gerai ritel (Alfamart, Indomaret)

Method Detail

Field method_detail wajib diisi dan bentuk objeknya bergantung pada nilai method_type. Perhatikan bahwa field "type" wajib ada di dalam objek method_detail.

1. Virtual Account

json
{
  "type": "virtual_account",
  "bank": "BCA" // Lihat list bank yang aktif di /v1/active-methods
}

2. QRIS

json
{
  "type": "qris"
}

3. E-Wallet

json
{
  "type": "e_wallet",
  "wallet_type": "DANA" // OVO, DANA, SHOPEEPAY, dll
}

4. Over The Counter (Gerai)

json
{
  "type": "over_the_counter",
  "store": "ALFAMART" // ALFAMART, INDOMARET
}

Array Items

Objek array opsional untuk rincian produk:

json
[
  {
    "id": "SKU-001",
    "name": "Kopi Susu Gula Aren",
    "price": 2500000, 
    "quantity": 2
  }
]

(Ingat: price dalam bentuk sen, sehingga 2500000 = Rp 25.000)


Response

Struktur response standar mengembalikan rincian pembayaran termasuk instruksi spesifik per-metode (method_data).

Response Berhasil (200 OK)

json
{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "tenant_id": "b6a3b2b8-f09d-4767-8fa0-68153c30a91f",
    "payment_code": "TEST-12345678",
    "idempotency_key": "order-123",
    "amount": 10000000,
    "currency": "IDR",
    "method_type": "virtual_account",
    "method_data": {
      "type": "virtual_account",
      "bank": "BCA",
      "va_number": "88880123456789"
    },
    "status": "pending",
    "provider": "winpay",
    "provider_payment_id": "WP-998877",
    "customer_name": "Budi Santoso",
    "customer_email": "[email protected]",
    "customer_phone": "081234567890",
    "items": [],
    "expires_at": "2026-07-21T12:00:00Z",
    "paid_at": null,
    "amount_paid": null,
    "failure_reason": null,
    "created_at": "2026-07-21T11:00:00Z",
    "updated_at": "2026-07-21T11:00:00Z"
  }
}

Response Field method_data

Field ini akan berubah-ubah sesuai metode pembayaran, serupa dengan request method_detail:

  • Virtual Account: { "type": "virtual_account", "bank": "BCA", "va_number": "8888..." }
  • QRIS: { "type": "qris", "qr_string": "000201010211...", "qr_image_url": "https://..." }
  • E-Wallet: { "type": "e_wallet", "wallet_type": "DANA", "redirect_url": "https://...", "deeplink": "dana://..." }
  • Over The Counter: { "type": "over_the_counter", "store_name": "ALFAMART", "payment_code": "44445555" }

Contoh Request Lengkap

1. Virtual Account

bash
curl -X POST https://gerbang-pay-api.gai.co.id/v1/payments/create \
  -H "Authorization: ApiKey gp_live_xxx" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: order-va-001" \
  -d '{
    "amount": 15000000,
    "currency": "IDR",
    "method_type": "virtual_account",
    "method_detail": { "type": "virtual_account", "bank": "BCA" },
    "customer_name": "Budi"
  }'

2. QRIS

bash
curl -X POST https://gerbang-pay-api.gai.co.id/v1/payments/create \
  -H "Authorization: ApiKey gp_live_xxx" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: order-qris-002" \
  -d '{
    "amount": 5000000,
    "currency": "IDR",
    "method_type": "qris",
    "method_detail": { "type": "qris" }
  }'

3. E-Wallet

bash
curl -X POST https://gerbang-pay-api.gai.co.id/v1/payments/create \
  -H "Authorization: ApiKey gp_live_xxx" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: order-ewallet-003" \
  -d '{
    "amount": 2500000,
    "currency": "IDR",
    "method_type": "e_wallet",
    "method_detail": { "type": "e_wallet", "wallet_type": "OVO" }
  }'

4. Over The Counter (Gerai Ritel)

bash
curl -X POST https://gerbang-pay-api.gai.co.id/v1/payments/create \
  -H "Authorization: ApiKey gp_live_xxx" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: order-otc-004" \
  -d '{
    "amount": 10000000,
    "currency": "IDR",
    "method_type": "over_the_counter",
    "method_detail": { "type": "over_the_counter", "store": "ALFAMART" }
  }'

Response Error Umum

400 Bad Request

json
{
  "success": false,
  "error": {
    "code": "BAD_REQUEST",
    "message": "bad request: Amount must be greater than zero"
  }
}

409 Idempotency Conflict

Terjadi jika Anda mengirim X-Idempotency-Key yang sama persis namun dengan parameter body yang berbeda.

json
{
  "success": false,
  "error": {
    "code": "IDEMPOTENCY_CONFLICT",
    "message": "idempotency conflict: Same key submitted with different payload"
  }
}

502 Provider Error

Terjadi jika server Winpay atau Midtrans menolak request Anda (contoh: nama bank salah).

json
{
  "success": false,
  "error": {
    "code": "PROVIDER_ERROR",
    "message": "provider error [winpay]: Bank BCA is not supported for this merchant"
  }
}

Gerbang Pay API Documentation