Digital Store Rebahan Yuk
API Reference v1

Otomatiskan penjualanmu lewat API.

Ambil daftar produk, buat pesanan, dan terima data akun langsung dari sistemmu sendiri. Empat endpoint, semuanya JSON.

Mulai cepat

Tiga langkah sampai request pertama.

1

Buat API key

Masuk sebagai member, buka menu API Settings, lalu buat key baru.

2

Daftarkan IP server

Isi IP whitelist dengan IP server yang akan memanggil API. Tanpa ini semua request ditolak.

3

Kirim request

Semua endpoint memakai POST. Coba dulu dengan mode sandbox supaya saldo tidak terpotong.

Autentikasi & IP

Sertakan API key sebagai parameter api_key di isi (body) setiap request. Tidak ada header khusus.

Base URL

Base URL
https://juragan.digitals.id/api/v1

IP whitelist wajib diisi. Request dari IP yang belum terdaftar dijawab 403, dan pesannya menyebutkan IP yang terbaca — tinggal salin ke API Settings. Beberapa IP dipisahkan dengan koma.

Panggil API hanya dari server. Jangan menaruh API key di aplikasi atau halaman yang bisa dibuka pengunjung — key ini bisa membelanjakan saldomu.

Format & galat

Isi request berupa JSON (Content-Type: application/json) atau form biasa. Jawaban selalu JSON dengan success, message, dan — bila berhasil — data.

Kode HTTPArtinya
401api_key tidak dikirim, salah, atau akunnya nonaktif.
403IP server belum didaftarkan di IP whitelist.
405Bukan metode POST.
422Parameter tidak sah (mis. variant_id kosong, voucher tidak berlaku). Rinciannya di errors.
400Permintaan ditolak: varian tidak ditemukan, stok habis, atau saldo tidak cukup.
Contoh galat (422)
{
  "success": false,
  "message": "Validation failed",
  "errors": {
    "variant_id": "Variant ID is required"
  }
}
POST /balance

Cek saldo

Saldo akun kamu saat ini. Pesanan lewat API dibayar dari saldo ini.

curl -X POST https://juragan.digitals.id/api/v1/balance \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_API_KEY"
}'
<?php
$payload = [
    'api_key' => 'YOUR_API_KEY',
];

$ch = curl_init('https://juragan.digitals.id/api/v1/balance');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_TIMEOUT => 30,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
const res = await fetch('https://juragan.digitals.id/api/v1/balance', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "api_key": "YOUR_API_KEY"
  }),
});
const result = await res.json();
Jawaban
{
  "success": true,
  "message": "Balance fetched successfully",
  "data": {
    "balance": 250000,
    "currency": "IDR"
  }
}
POST /products

Daftar produk

Semua produk aktif beserta varian, harga, dan stoknya. id varian dipakai sebagai variant_id saat membuat pesanan.

Varian yang disembunyikan admin tidak muncul di sini, dan muncul lagi begitu ditampilkan kembali. Ambil ulang daftar ini secara berkala untuk menyamakan produk dan stok di sistemmu.

curl -X POST https://juragan.digitals.id/api/v1/products \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_API_KEY"
}'
<?php
$payload = [
    'api_key' => 'YOUR_API_KEY',
];

$ch = curl_init('https://juragan.digitals.id/api/v1/products');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_TIMEOUT => 30,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
const res = await fetch('https://juragan.digitals.id/api/v1/products', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "api_key": "YOUR_API_KEY"
  }),
});
const result = await res.json();
Jawaban
{
  "success": true,
  "message": "Products fetched successfully",
  "data": [
    {
      "id": "c6c25743-f544-11f0-abb4-246e9691c22c",
      "name": "CapCut Pro",
      "category": "Productivity",
      "description": "Deskripsi produk...",
      "variants": [
        {
          "id": "1e43001c-f5e2-11f0-abb4-246e9691c22c",
          "name": "Pro",
          "price": 5000,
          "duration": "7 Hari",
          "type": "Private",
          "warranty": "7 Hari",
          "stock": 50,
          "terms": "Syarat & ketentuan checkout",
          "delivery_terms": null,
          "delivery_mode": "auto"
        }
      ]
    }
  ]
}

Isi tiap varian

FieldTipeKeterangan
id string ID varian — dipakai sebagai variant_id di /order.
name string Nama varian.
price number Harga dalam Rupiah.
duration string Masa aktif, mis. "30 Hari".
type string Tipe akun, mis. "Private", "Sharing".
warranty string Masa garansi, atau "No Garansi".
stock int Stok yang tersedia.
terms string | null Syarat & ketentuan saat checkout.
delivery_terms string | null Ketentuan pengiriman akun.
delivery_mode string Cara pengiriman: "auto" = dikirim otomatis oleh sistem begitu lunas, "manual" = dikirim admin (perlu waktu), "mixed" = bisa otomatis atau manual tergantung ketersediaan.
POST /order

Buat pesanan

Membeli satu varian produk. Saldo langsung dipotong saat pesanan dibuat; data akunnya diambil lewat /transactions.

Parameter

ParameterTipeWajibKeterangan
api_key string Wajib API key kamu.
variant_id string Wajib ID varian dari /products.
quantity int Opsional Jumlah yang dibeli. Bawaan: 1.
email_invite string Opsional Email yang akan diundang. Wajib untuk produk bertipe invite.
voucher_code string Opsional Kode voucher. Bila kodenya tidak berlaku, pesanan ditolak — kirim ulang tanpa parameter ini untuk harga normal.
is_test boolean Opsional true = mode coba (sandbox), lihat di bawah.
curl -X POST https://juragan.digitals.id/api/v1/order \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_API_KEY",
  "variant_id": "1e43001c-f5e2-11f0-abb4-246e9691c22c",
  "quantity": 1
}'
<?php
$payload = [
    'api_key' => 'YOUR_API_KEY',
    'variant_id' => '1e43001c-f5e2-11f0-abb4-246e9691c22c',
    'quantity' => 1,
];

$ch = curl_init('https://juragan.digitals.id/api/v1/order');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_TIMEOUT => 30,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
const res = await fetch('https://juragan.digitals.id/api/v1/order', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "api_key": "YOUR_API_KEY",
    "variant_id": "1e43001c-f5e2-11f0-abb4-246e9691c22c",
    "quantity": 1
  }),
});
const result = await res.json();
Jawaban
{
  "success": true,
  "message": "Order created successfully",
  "data": {
    "order_id": "ORD-20260126-X8Y9Z",
    "status": "processing",
    "payment_status": "paid",
    "total_amount": 5000,
    "current_balance": 245000
  }
}

Mode sandbox

Tambahkan "is_test": true untuk mencoba tanpa memotong saldo. Semua pemeriksaan tetap berjalan (varian, stok, voucher), tetapi tidak ada pesanan yang dibuat. Nomornya berawalan TEST-ORD-.

Jawaban sandbox
{
  "success": true,
  "message": "Order created successfully (Sandbox Mode)",
  "data": {
    "order_id": "TEST-ORD-A7X9K2",
    "status": "processing",
    "payment_status": "paid",
    "total_amount": 5000,
    "current_balance": 250000,
    "is_test": true
  }
}
POST /transactions

Riwayat pesanan

50 pesanan terakhir beserta data akunnya. Selama akun masih disiapkan, details bernilai null.

curl -X POST https://juragan.digitals.id/api/v1/transactions \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_API_KEY"
}'
<?php
$payload = [
    'api_key' => 'YOUR_API_KEY',
];

$ch = curl_init('https://juragan.digitals.id/api/v1/transactions');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_TIMEOUT => 30,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
const res = await fetch('https://juragan.digitals.id/api/v1/transactions', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "api_key": "YOUR_API_KEY"
  }),
});
const result = await res.json();
Jawaban
{
  "success": true,
  "message": "Orders fetched successfully",
  "data": [
    {
      "order_id": "ORD-20260123-B5F739",
      "total_amount": 5000,
      "status": "completed",
      "payment_status": "paid",
      "products": [
        {
          "product_name": "CapCut Pro",
          "variant_name": "Pro",
          "type": "Private",
          "duration": "7 Hari",
          "warranty": "7 Hari",
          "price": 5000,
          "quantity": 1
        }
      ],
      "account_details": [
        {
          "product": "CapCut Pro - Pro",
          "details": [
            { "title": "Akun 1", "credentials": "email@contoh.com | password123" }
          ]
        }
      ],
      "created_at": "2026-01-23 09:30:19"
    }
  ]
}

Isi tiap pesanan

FieldTipeKeterangan
order_id string Nomor pesanan.
total_amount number Total yang dibayar.
status string Status pesanan, mis. "processing", "completed".
payment_status string "paid" atau "unpaid".
products array Varian yang dibeli: nama, tipe, durasi, garansi, harga, jumlah.
account_details array Data akun per produk. details berisi daftar akun (title + credentials), teks, atau null bila masih diproses.
created_at string Waktu pesanan dibuat (YYYY-MM-DD HH:MM:SS).
WEBHOOK order.completed

Webhook

Isi Webhook URL di API Settings. Setiap kali pesanan yang kamu buat lewat API selesai, akunnya diganti, atau di-refund, kami mengirim POST berisi JSON ke alamat itu — jadi kamu tidak perlu terus-menerus memanggil /transactions.

Isi yang dikirim
{
  "id": "0b6f6c1e-5a2d-4c7e-9d0a-3f1c2b4a5d6e",
  "event": "order.completed",
  "timestamp": "2026-01-26T14:05:11+07:00",
  "data": {
    "order_id": "ORD-20260126-X8Y9Z",
    "status": "completed",
    "payment_status": "paid",
    "product_name": "Netflix Premium",
    "variant_name": "Private 1 Bulan",
    "quantity": 1,
    "total_amount": 35000,
    "accounts": [
      {
        "product": "Netflix Premium - Private 1 Bulan",
        "details": "email@contoh.com | password123"
      }
    ],
    "delivery_terms": "Jangan ganti password."
  }
}

Tanda tangan ada di header X-Digitals-Signature: HMAC-SHA256 (hex) dari isi mentah request, dengan API key terbaru kamu sebagai kuncinya. Selalu cocokkan sebelum memproses.

Integrasi lama yang membaca X-Premify-Signature atau X-Rebahan-Signature tetap berjalan — keduanya masih dikirim dengan nilai yang sama, tapi gunakan X-Digitals-Signature untuk integrasi baru.

Balas dengan cepat (batas 5 detik) dan kode 2xx. Kalau gagal, kami mengulang setelah 1 menit, 5 menit, 30 menit, lalu 2 jam (total 5 percobaan). Kabar yang sama bisa tiba lebih dari sekali — pakai id (juga di header X-Digitals-Delivery) supaya tidak diproses dua kali. /transactions tetap bisa dipakai sebagai cadangan.

Event yang dikirim

EventKapan dikirim
order.completedAkun sudah terisi dan pesanan selesai — baik diisi otomatis dari stok maupun oleh admin. data.accounts berisi data akunnya.
order.account_updatedData akun pada pesanan yang sudah selesai diganti admin (mis. klaim garansi). data.accounts berisi akun terbaru.
order.refundedPesanan di-refund dan dananya kembali ke saldo kamu. Ada tambahan data.refunded (jumlah, Rupiah) dan data.note (catatan admin, bisa null).
order.processingPembayaran QRIS untuk pesanan yang kamu buat di website (bukan lewat API) diterima. Isinya ringkas: order_id, status, total_amount, product_name, note; tanpa id dan tanpa pengulangan.

Contoh penerima (PHP)

webhook.php
<?php
// 1. Ambil tanda tangan dan isi mentah (JANGAN yang sudah di-decode)
$signature = $_SERVER['HTTP_X_DIGITALS_SIGNATURE'] ?? '';
$raw = file_get_contents('php://input');

// 2. Cocokkan tanda tangan — kuncinya API key terbaru kamu
$expected = hash_hmac('sha256', $raw, 'API_KEY_KAMU');
if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}

// 3. Proses. Kabar yang sama bisa datang lebih dari sekali (kirim ulang):
//    simpan $payload['id'] dan lewati yang sudah pernah diproses.
$payload = json_decode($raw, true);
$data = $payload['data'] ?? [];
$orderId = $data['order_id'] ?? '';

switch ($payload['event'] ?? '') {
    case 'order.completed':        // akun siap: teruskan $data['accounts'] ke pembelimu
    case 'order.account_updated':  // akun diganti: teruskan akun terbaru
        $accounts = $data['accounts'];
        break;

    case 'order.refunded':         // dana kembali ke saldomu: kembalikan uang pembelimu
        $refunded = $data['refunded'];
        break;
}

http_response_code(200);
echo json_encode(['status' => 'ok']);

Siap mengintegrasikan?

Daftar sebagai member untuk mendapatkan API key.

🛒
Orderan Masuk
•