Payments API

Buat dan cek status pembayaran QRIS, Virtual Account, dan Direct payment.

Semua endpoint membutuhkan header x-api-key. Lihat Authentication.

Payment adalah tagihan pembayaran yang Anda buat untuk menerima uang dari pelanggan. Setelah pelanggan membayar, transaksi akan muncul di Mutations API dengan field payment berisi detail order.

Siklus Status Pembayaran

PENDING  →  PAID     (pelanggan berhasil membayar)
         →  EXPIRED  (waktu habis sebelum dibayar)
         →  FAILED   (pembayaran gagal diproses)

POST /api/v1/payments

Buat permintaan pembayaran baru.

Request Body

FieldTypeRequiredKeterangan
amountnumberYaJumlah pembayaran dalam IDR
walletAccountIdstringYaUUID akun e-wallet penerima — akun ini harus sudah terhubung via Accounts API
redirectUrlstringYaURL redirect setelah pelanggan selesai membayar
orderIdstringYaID order unik dari sistem Anda — gunakan untuk mencocokkan pembayaran
typestringYaTipe pembayaran (lihat tabel provider di bawah)

Tipe Pembayaran per Provider

ProviderTipe yang Didukung
GOPAY-MERCHANTQRIS, QRIS-DYNAMIC
GRAB-MERCHANTQRIS
DANADIRECT, VA-BCA, VA-MANDIRI, VA-PERMATA
DANA BISNISQRIS, QRIS-DYNAMIC

Virtual Account (VA-BCA, VA-MANDIRI, VA-PERMATA) dan DIRECT hanya tersedia untuk provider DANA. Menggunakan tipe ini di provider lain akan mengembalikan error 400.

Response 200

{
  "status": "success",
  "data": {
    "id": "595a196b-191c-4767-818e-a7646dd048e8",
    "amount": 20000,
    "uniqueCode": 0,
    "totalAmount": 20000,
    "expiresAt": "2025-12-30T08:27:49.686Z",
    "paymentUrl": "https://mutasiku.co.id/pay/TOKEN",
    "type": "QRIS",
    "accountNumber": "081234567890",
    "accountName": "John Doe",
    "provider": {
      "name": "GOPAY MERCHANT",
      "code": "GOPAY-MERCHANT"
    },
    "qrisImage": "https://mutasiku.co.id/api/qris/TOKEN"
  }
}

Penjelasan Field Respons

FieldKeterangan
idUUID pembayaran — gunakan untuk cek status via endpoint di bawah
uniqueCodeKode unik yang ditambahkan ke amount agar nominal pembayaran berbeda tiap tagihan. Jika 0, tidak ada kode unik
totalAmountNominal yang harus dibayar pelanggan (amount + uniqueCode)
paymentUrlHalaman pembayaran yang bisa Anda tampilkan ke pelanggan
expiresAtBatas waktu pembayaran — setelah ini status berubah menjadi EXPIRED
qrisImageURL gambar QR code PNG 256×256 — hanya ada untuk tipe QRIS dan QRIS-DYNAMIC

Tampilkan QR code langsung ke pelanggan dengan tag <img>:

<img src="https://mutasiku.co.id/api/qris/TOKEN" alt="Scan QRIS" />

Errors

StatusKeterangan
400Tipe pembayaran tidak didukung provider ini
401API key tidak valid atau tidak ada
404Akun e-wallet (walletAccountId) tidak ditemukan
500Internal server error

Contoh

# QRIS — GoPay Merchant
curl -X POST 'https://mutasiku.co.id/api/v1/payments' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 20000,
    "walletAccountId": "9a4f62d1-5d21-49ad-a5a9-1a77a6ba5b74",
    "redirectUrl": "https://merchant.com/order/success",
    "orderId": "order-123",
    "type": "QRIS"
  }'

# Virtual Account BCA — DANA
curl -X POST 'https://mutasiku.co.id/api/v1/payments' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 100000,
    "walletAccountId": "3d5e67f8-9a12-4bcd-c3de-4f99d8ea7f96",
    "redirectUrl": "https://merchant.com/order/success",
    "orderId": "order-456",
    "type": "VA-BCA"
  }'

# Direct Payment — DANA
curl -X POST 'https://mutasiku.co.id/api/v1/payments' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 75000,
    "walletAccountId": "3d5e67f8-9a12-4bcd-c3de-4f99d8ea7f96",
    "redirectUrl": "https://merchant.com/order/success",
    "orderId": "order-789",
    "type": "DIRECT"
  }'

GET /api/v1/payments/status/:paymentId

Cek status pembayaran. Gunakan ini untuk polling setelah membuat tagihan, atau untuk verifikasi sebelum memproses order.

Untuk notifikasi otomatis tanpa polling, gunakan Webhooks dan dengarkan event payment.completed atau payment.expired.

Path Parameters

ParameterTypeRequiredKeterangan
paymentIdstringYaUUID pembayaran dari response create

Response 200

{
  "status": "success",
  "data": {
    "id": "595a196b-191c-4767-818e-a7646dd048e8",
    "amount": 20000,
    "totalAmount": 20000,
    "status": "PAID",
    "type": "QRIS",
    "orderId": "order-123",
    "createdAt": "2025-12-30T07:27:49.686Z",
    "paidAt": "2025-12-30T07:30:15.123Z",
    "expiresAt": "2025-12-30T08:27:49.686Z"
  }
}

Status Pembayaran

StatusKeterangan
PENDINGMenunggu pembayaran dari pelanggan
PAIDPembayaran berhasil diterima
EXPIREDPelanggan tidak membayar sebelum expiresAt
FAILEDPembayaran gagal diproses

Errors

StatusKeterangan
401API key tidak valid atau tidak ada
404Pembayaran tidak ditemukan
500Internal server error

Contoh

curl 'https://mutasiku.co.id/api/v1/payments/status/595a196b-191c-4767-818e-a7646dd048e8' \
  -H 'x-api-key: YOUR_API_KEY'

© 2026 PT. Cobra Code Indonesia. All rights reserved.

Last updated: 4/11/2026