Dokumentasi API v1

Integrasi NotiPay.

Panduan endpoint create order, check status, callback Android, dan format respons.

Autentikasi

Gunakan API key milik akun Anda. API key dapat dilihat dan dirotasi di halaman Pengaturan.

Kirim melalui body apikey, query ?apikey=, header X-API-Key, atau Authorization: Bearer <key>.

Base URL
https://pg.odzre.my.id/api/v1

Create order

POST

/api/v1/create-order

FieldWajibKeterangan
apikeyYaAPI key akun merchant.
regionYamy atau id.
amountYaMY: unit ringgit (1 = RM1.00). ID: rupiah (1000 = Rp1.000).
qrisTidakPayload QRIS atau URL gambar QR.
expiredTidakMenit. Default 5, maksimal 180.
Request
curl -X POST https://pg.odzre.my.id/api/v1/create-order \
  -H "Content-Type: application/json" \
  -d '{
    "apikey": "np_live_xxxxxxxxx",
    "region": "my",
    "amount": 116,
    "qris": "00020101021226...",
    "expired": 5
  }'
Response 201
{
  "success": true,
  "message": "Order berhasil dibuat.",
  "data": {
    "order_id": "3f48e2f6-...",
    "reference": "NP261029A7K2Q",
    "region": "MY",
    "currency": "MYR",
    "amount": 11600,
    "formatted_amount": "RM116.00",
    "status": "pending",
    "qris": null,
    "qr_url": null,
    "payment_url": "https://pg.odzre.my.id/pay/NP261029A7K2Q",
    "check_status_url": "https://pg.odzre.my.id/api/v1/check-status",
    "expires_at": "2026-10-29T02:20:00.000Z",
    "expires_in": 300
  }
}

Nilai amount pada respons disimpan dalam unit terkecil: sen untuk MY, rupiah untuk ID.

Check status

GET POST

/api/v1/check-status · kirim apikey dan salah satu dari order_id, reference, atau trxid.

Request
curl "https://pg.odzre.my.id/api/v1/check-status?apikey=np_live_xxxxxxxxx&reference=NP261029A7K2Q"
Response 200
{
  "success": true,
  "data": {
    "reference": "NP261029A7K2Q",
    "region": "MY",
    "amount": 11600,
    "formatted_amount": "RM116.00",
    "status": "success",
    "paid_at": "2026-10-29T02:16:42.000Z",
    "expires_at": "2026-10-29T02:20:00.000Z"
  }
}

Order yang melewati waktu expired akan otomatis berubah menjadi expired ketika dicek atau saat cron berjalan.

Callback Android

POST

/api/v1/callback · dipanggil oleh aplikasi listener. Autentikasi memakai API key merchant agar order yang dicocokkan tetap ter-scope.

Payload
{
  "apikey": "np_live_xxxxxxxxx",
  "package": "id.dana",
  "title": "DANA",
  "text": "RM116.00 diterima untuk -",
  "device_id": "android-01",
  "timestamp": "2026-10-29T02:16:40.000Z"
}

Respons matched: true berarti ada order pending dengan region dan nominal yang cocok. Teks notifikasi yang tidak memiliki nominal akan tersimpan sebagai unmatched dan bisa dicocokkan manual oleh admin.

Response 200
{
  "success": true,
  "matched": true,
  "status": "matched",
  "order": {
    "reference": "NP261029A7K2Q",
    "status": "success",
    "formatted_amount": "RM116.00"
  }
}

Status transaksi

pending

Order dibuat, menunggu callback dengan nominal yang cocok.

success

Callback cocok dan order sudah dibayar.

expired

Melewati batas waktu sebelum ada pembayaran.

Error

Semua error menggunakan format JSON dengan field success dan message.

HTTPArti
400Parameter tidak valid, region salah, atau amount kosong.
401API key / secret tidak valid.
403Akun ditangguhkan.
404Order tidak ditemukan atau bukan milik API key.
429Terlalu banyak request. Coba lagi nanti.