Dokumentasi

Rest API v1

Integrasi Gopay Merchant dan Shopee Partner lewat satu API yang konsisten. Semua endpoint menerima dan mengembalikan JSON.

Stabil Base URL: https://pay.odzreshop.id/api/v1

Quickstart

  1. 1.Daftar akun lalu masuk ke dashboard.
  2. 2.Buka menu Proyek → buat proyek baru (nama, QRIS, merchant).
  3. 3.Salin API key yang muncul sekali saja.
  4. 4.Panggil endpoint dengan header X-API-Key.

Contoh panggilan pertama (cURL)

curl -X POST https://pay.odzreshop.id/api/v1/transaction/create \
  -H "X-API-Key: odzre_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 25000,
    "customerName": "Budi Santoso",
    "description": "Pembayaran pesanan #1234"
  }'

Autentikasi

Semua endpoint memerlukan API key. Sertakan pada salah satu dari:

Header (disarankan)

X-API-Key: odzre_live_xxx

Bearer token

Authorization: Bearer odzre_live_xxx

API key hanya tampil satu kali saat dibuat. Simpan di variabel lingkungan server — jangan pernah di kode frontend atau repositori.

Rate Limit

Default 60 permintaan/menit per API key. Setiap response menyertakan header:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
Retry-After: 14        # hanya saat terkena limit (HTTP 429)
GET /api/v1/profile

Mengembalikan informasi akun dan proyek pemilik API key.

Contoh — JavaScript (fetch)

const res = await fetch('https://pay.odzreshop.id/api/v1/profile', {
  headers: { 'X-API-Key': process.env.ODZRE_API_KEY },
});
const json = await res.json();
console.log(json.data.project.name);

Response 200

{
  "success": true,
  "data": {
    "user": {
      "id": "uuid",
      "email": "john.doe@example.com",
      "full_name": "John Doe",
      "company": "Doe Digital",
      "created_at": "2026-01-15T08:00:00.000Z"
    },
    "project": {
      "id": "uuid",
      "name": "Toko Sepatu Online",
      "merchant": "gopay"
    },
    "scopes": ["profile:read", "transaction:write", "transaction:read"]
  },
  "timestamp": "2026-09-13T03:00:00.000Z"
}
POST /api/v1/transaction/create

Membuat transaksi QRIS baru. Status awal pending.

Parameter body

FieldTipeWajibKeterangan
amountintegerYaNominal dalam rupiah (100 – 50.000.000)
orderIdstringTidakID pesanan Anda (4-64 char). Kosong = dibuat otomatis
customerNamestringTidakNama pelanggan
customerEmailstringTidakEmail pelanggan
customerPhonestringTidakNomor telepon pelanggan
descriptionstringTidakKeterangan transaksi (maks. 200 char)
expiryMinutesintegerTidakMasa berlaku (5–1440 menit, default 30)
callbackUrlstringTidakURL webhook saat status berubah

Contoh — PHP (cURL)

<?php
$ch = curl_init('https://pay.odzreshop.id/api/v1/transaction/create');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'X-API-Key: ' . getenv('ODZRE_API_KEY'),
    'Content-Type: application/json',
  ],
  CURLOPT_POSTFIELDS => json_encode(['amount' => 25000]),
]);
$res = json_decode(curl_exec($ch), true);
echo $res['data']['qris_string'];

Response 201

{
  "success": true,
  "data": {
    "order_id": "ODZ-260913-K3P6W6CHKM",
    "status": "pending",
    "merchant": "gopay",
    "amount": 25000,
    "fee": 0,
    "qris_string": "00020101021126...",
    "customer": { "name": "Budi Santoso", "email": null, "phone": null },
    "description": "Pembayaran pesanan #1234",
    "expires_at": "2026-09-13T03:30:00.000Z",
    "created_at": "2026-09-13T03:00:00.000Z"
  },
  "timestamp": "2026-09-13T03:00:00.000Z"
}

Tampilkan qris_string sebagai QR code di aplikasi Anda (mis. pakai library qrcode).

GET /api/v1/transaction/status/:orderId

Memeriksa status transaksi. Bila masih pending, kami menyinkronkan dulu dengan provider sebelum menjawab.

Contoh

curl -H "X-API-Key: odzre_live_xxx" \
  https://pay.odzreshop.id/api/v1/transaction/status/ODZ-260913-K3P6W6CHKM

Nilai status yang mungkin

pending — menunggu pembayaran paid — pembayaran berhasil expired — melewati batas waktu failed — gagal diproses refunded — dana dikembalikan

Kode Error

Semua error mengikuti format yang sama:

{
  "success": false,
  "error": {
    "code": "INVALID_API_KEY",
    "message": "API key tidak valid, sudah dicabut, atau proyeknya tidak aktif."
  },
  "timestamp": "2026-09-13T03:00:00.000Z"
}
HTTPCodeArti
401MISSING_API_KEYHeader X-API-Key tidak disertakan
401MALFORMED_API_KEYFormat key salah
401INVALID_API_KEYKey tidak terdaftar / dicabut
403INSUFFICIENT_SCOPEKey tidak punya izin endpoint
404NOT_FOUNDTransaksi tidak ditemukan
409DUPLICATE_ORDER_IDorderId sudah pernah dipakai
422VALIDATION_ERRORParameter tidak valid
429RATE_LIMIT_EXCEEDEDBatas permintaan terlampaui
502PROVIDER_ERRORProvider menolak permintaan
500INTERNAL_ERRORKesalahan internal server

Siap Mencoba?

Buat akun gratis dan dapatkan API key dalam waktu kurang dari lima menit.