Dokumentasi API

Dokumentasi teknis integrasi API untuk partner bisnis Navarana. Sambungkan sistem Anda dengan layanan transaksi produk digital secara otomatis.

https://api.navarana.id/api Khusus Partner Terdaftar
OtomaX API Bridge

OtomaX API Bridge

Dokumentasi integrasi API untuk transaksi, deposit, reseller, dan produk digital. Autentikasi via header API client — simpan credential di server backend Anda.

Accept: application/json Content-Type: application/json X-Api-Client-Id X-Api-Client-Secret

Setup Credential

Dokumentasi ini untuk partner Navarana yang sudah terdaftar. Kredensial API (client_id + client_secret) diterbitkan oleh tim Navarana setelah proses aktivasi.

Rahasia — jangan dipublikasikan. client_secret hanya disimpan di server backend Anda (variabel lingkungan, secret manager, atau konfigurasi server — sesuai stack yang Anda pakai). Jangan ditulis di frontend, dokumentasi publik, atau repository yang terbuka.

Setelah onboarding, tim Navarana mengirimkan credential secara private. Simpan dengan aman di server backend:

Client ID : web_yusuf_xxxxxxxx

Client Secret : (diberikan Navarana — jangan dibagikan)

Nilai di atas hanya ilustrasi format. Hubungi kami untuk request akses API.

Header Wajib

Setiap request protected memerlukan header berikut. Untuk POST / PUT tambahkan Content-Type: application/json.

Accept: application/json
X-Api-Client-Id: web_yusuf_xxxxxxxx
X-Api-Client-Secret: {client_secret_dari_navarana}

Catatan Autentikasi

Aspek Keterangan
Login Tidak perlu — credential statis via header
Token expire Tidak ada — credential tidak kedaluwarsa
kode_reseller Otomatis dari credential — jangan kirim di body/query
Rate limit transaksi Per client (default 30 req/menit)
IP whitelist Opsional — dikonfigurasi Navarana saat aktivasi

Format Respons

Semua endpoint mengembalikan JSON dengan format konsisten.

Field Tipe Keterangan
success boolean true jika operasi berhasil diproses
message string Pesan human-readable
data object / array Payload utama ({} atau [])

Response Error Autentikasi

401 — Header auth tidak dikirim

Contoh: GET /products tanpa header autentikasi.

401 Unauthorized 401 Unauthorized
{
  "success": false,
  "message": "Autentikasi diperlukan. Sertakan header X-Api-Client-Id dan X-Api-Client-Secret.",
  "data": []
}
401 — Client ID atau secret salah
401 Unauthorized 401 Unauthorized
{
  "success": false,
  "message": "Kredensial API tidak valid",
  "data": []
}
403 — IP tidak di whitelist
403 Forbidden 403 Forbidden
{
  "success": false,
  "message": "IP tidak diizinkan untuk client API ini",
  "data": []
}
403 — Akses saldo reseller lain

Credential terikat ke kode_reseller saat aktivasi. Contoh: GET /resellers/reseller_lain/saldo

403 Forbidden 403 Forbidden
{
  "success": false,
  "message": "Akses ditolak untuk reseller ini",
  "data": []
}
422 — Validasi gagal
422 Unprocessable Entity 422 Unprocessable Entity
{
  "success": false,
  "message": "The tanggal field is required.",
  "data": {
    "errors": {
      "tanggal": ["The tanggal field is required."]
    }
  }
}
429 — Rate limit transaksi
429 Too Many Requests 429 Too Many Requests
{
  "success": false,
  "message": "Terlalu banyak permintaan transaksi. Coba lagi nanti.",
  "data": []
}

Produk & Harga

GET Auth
{base_url}/operators?kode=PPOB
Query Contoh Keterangan
kode PPOB Kode operator induk (wajib)
200 OK 200 OK
{
  "success": true,
  "message": "OK",
  "data": [
    {
      "kode": "TSEL",
      "nama": "Telkomsel",
      "kode_operator_induk": "PPOB"
    },
    {
      "kode": "XL",
      "nama": "XL Axiata",
      "kode_operator_induk": "PPOB"
    }
  ]
}
GET Auth
{base_url}/products?kode=BYROMNI
Query Contoh Keterangan
kode BYROMNI Kode operator / filter produk
200 OK 200 OK
{
  "success": true,
  "message": "OK",
  "data": [
    {
      "kode": "TS5",
      "nama": "Telkomsel 5.000",
      "kode_operator": "TSEL",
      "harga": 5500,
      "status": "Aktif"
    },
    {
      "kode": "TS10",
      "nama": "Telkomsel 10.000",
      "kode_operator": "TSEL",
      "harga": 10500,
      "status": "Aktif"
    }
  ]
}
GET Auth
{base_url}/price-list?kode_produk=TS5&kode_operator=TSEL

Query opsional. kode_reseller otomatis dari credential Anda.

Query Contoh Keterangan
kode_produk TS5 Filter produk (opsional)
kode_operator TSEL Filter operator (opsional)
200 OK 200 OK
{
  "success": true,
  "message": "OK",
  "data": [
    {
      "kode_produk": "TS5",
      "nama_produk": "Telkomsel 5.000",
      "harga": 5400,
      "harga_jual": 5500
    }
  ]
}

Saldo Reseller

GET Auth
{base_url}/resellers/yusuf/saldo

{kode} di URL harus sama dengan kode_reseller credential Anda.

Sukses 200 OK
{
  "success": true,
  "message": "OK",
  "data": {
    "kode": "yusuf",
    "saldo": 1500000
  }
}
OtomaX gagal 200 OK
{
  "success": false,
  "message": "Reseller tidak ditemukan",
  "data": {
    "kode": "yusuf",
    "saldo": null
  }
}

Transaksi

POST Auth
{base_url}/transactions
Field Wajib Keterangan
kode_produk Ya
qty Ya
tujuan Ya
pin Ya PIN reseller OtomaX
pengirim Ya
refid Dilarang Auto: APP20260529143052A2B3C
kode_reseller Jangan kirim Otomatis dari credential
Request Body
{
  "kode_produk": "TS5",
  "qty": "1",
  "tujuan": "081234567890",
  "pin": "1234",
  "pengirim": "081234567890",
  "tipe_pengirim": "W"
}
Pending (diterima, belum selesai) 200 OK
{
  "success": false,
  "message": "Sukses masuk transaksi",
  "data": {
    "status": "pending",
    "rc": 22,
    "refid": "APP20260529143052A2B3C",
    "trxid": 4522967,
    "sn": null
  }
}
Sukses 200 OK
{
  "success": true,
  "message": "Sukses",
  "data": {
    "status": "success",
    "rc": 20,
    "pesan": "Transaksi berhasil. SN: 1234567890",
    "refid": "APP20260529143052A2B3C",
    "trxid": 4522967,
    "sn": "1234567890"
  }
}
Gagal 200 OK
{
  "success": false,
  "message": "Stok kosong",
  "data": {
    "status": "failed",
    "rc": 45,
    "keterangan": "Stok kosong",
    "refid": "APP20260529143052A2B3C",
    "trxid": null,
    "sn": null
  }
}
Transaksi dobel 200 OK
{
  "success": false,
  "message": "Transaksi dobel (cek transaksi sebelumnya)",
  "data": {
    "status": "pending",
    "rc": 46,
    "pesan": "Transaksi sebelumnya masih pending. Mohon tunggu hasilnya dan jangan kirim ulang dengan refid, produk, dan tujuan yang sama. Cek status menggunakan trxid yang dikembalikan.",
    "refid": "APP20260529143052A2B3C",
    "trxid": 4522960,
    "sn": null
  }
}
Nilai data.status
pending Masih diproses / menunggu jawaban
success Transaksi sukses
failed Transaksi gagal
rc Keterangan
1 Sedang proses
2 Menunggu jawaban
3 Gagal kirim
20 Sukses
40 Gagal
45 Stok kosong
46 Transaksi dobel
47 Produk gangguan
50 Dibatalkan
52 Tujuan salah
53 Tujuan diluar wilayah
54 Kode area tidak cocok
55 Timeout
56 Nomor blacklist
58 Nomor tidak aktif
59 Harga tidak sesuai
61 Qty tidak sesuai
64 Diabaikan
69 Cutoff
200 Proses ulang
GET Auth
{base_url}/transactions/4522967

Cek status transaksi by trxid.

Sukses 200 OK
{
  "success": true,
  "message": "Sukses",
  "data": {
    "status": "success",
    "rc": 20,
    "pesan": "Transaksi berhasil. SN: 1234567890",
    "trxid": 4522967,
    "refid": "APP20260529143052A2B3C",
    "sn": "1234567890",
    "kode_produk": "TS5",
    "tujuan": "081234567890",
    "qty": 1,
    "harga": 5400,
    "tgl_entri": "2026-05-29T14:30:52",
    "saldo_awal": 1500000,
    "saldo_akhir": 1494600
  }
}
Masih pending 200 OK
{
  "success": false,
  "message": "Sedang proses",
  "data": {
    "status": "pending",
    "rc": 1,
    "trxid": 4522967,
    "refid": "APP20260529143052A2B3C",
    "sn": null,
    "kode_produk": "TS5",
    "tujuan": "081234567890",
    "qty": 1,
    "harga": 5400,
    "tgl_entri": "2026-05-29T14:30:52",
    "saldo_awal": 1500000,
    "saldo_akhir": 1494600
  }
}
GET Auth
{base_url}/history?tanggal=2026-05-29

Transaksi gagal

Query Contoh Keterangan
tanggal 2026-05-29 Format YYYY-MM-DD (wajib)
Ada data 200 OK
{
  "success": true,
  "message": "OK",
  "data": {
    "kode_reseller": "yusuf",
    "tanggal": "2026-05-29",
    "total": 2,
    "items": [
      {
        "status": "success",
        "rc": 20,
        "pesan": "Transaksi berhasil. SN: 1234567890",
        "trxid": 4522967,
        "refid": "APP20260529143052A2B3C",
        "sn": "1234567890",
        "kode_produk": "TS5",
        "tujuan": "081234567890",
        "qty": 1,
        "harga": 5400,
        "tgl_entri": "2026-05-29T14:30:52"
      },
      {
        "status": "failed",
        "rc": 45,
        "keterangan": "Stok kosong",
        "trxid": 4522968,
        "refid": "APP20260529150510X9Y8Z7",
        "sn": null,
        "kode_produk": "TS10",
        "tujuan": "081987654321",
        "qty": 1,
        "harga": 10500,
        "tgl_entri": "2026-05-29T15:05:10"
      }
    ]
  }
}
Kosong 200 OK
{
  "success": true,
  "message": "OK",
  "data": {
    "kode_reseller": "yusuf",
    "tanggal": "2026-05-29",
    "total": 0,
    "items": []
  }
}
OtomaX error 502 Bad Gateway
{
  "success": false,
  "message": "Gagal mengambil riwayat transaksi",
  "data": {
    "kode_reseller": "yusuf",
    "tanggal": "2026-05-29",
    "total": 0,
    "items": []
  }
}

Deposit

POST Auth
{base_url}/deposit-tickets

Transaksi gagal

Request Body
{
  "jumlah": "100000",
  "pin": "1234",
  "pengirim": "081234567890",
  "tipe_pengirim": "W"
}
Sukses 200 OK
{
  "success": true,
  "message": "Sukses masuk outbox",
  "data": {
    "status": "success",
    "rc": 21,
    "pesan": "Tiket deposit berhasil dibuat. Silakan transfer sesuai instruksi.",
    "jumlah": "100000",
    "kode_inbox": 12345,
    "kode_outbox": 67890
  }
}
Pending 200 OK
{
  "success": false,
  "message": "Sukses masuk transaksi",
  "data": {
    "status": "pending",
    "rc": 22,
    "jumlah": "100000",
    "kode_inbox": 12345,
    "kode_outbox": 67890
  }
}

Endpoint Public

Endpoint berikut tidak memerlukan autentikasi.

GET Public
{base_url}/health

Transaksi gagal

200 OK 200 OK
{
  "success": true,
  "message": "OK",
  "data": {
    "kode": "APP001",
    "versi": "1.0.0"
  }
}
GET Public
{base_url}/resellers/yusuf

Transaksi gagal

200 OK 200 OK
{
  "success": true,
  "message": "OK",
  "data": {
    "kode": "yusuf",
    "nama": "Yusuf Reseller",
    "saldo": 1500000,
    "status": "Aktif"
  }
}
POST Public
{base_url}/resellers/yusuf/verify-pin

Transaksi gagal

Request Body
{ "pin": "1234" }
PIN valid 200 OK
{
  "success": true,
  "message": "OK",
  "data": {
    "kode": "yusuf"
  }
}
PIN salah 200 OK
{
  "success": false,
  "message": "PIN salah",
  "data": {
    "kode": "yusuf"
  }
}

Contoh Integrasi

cURL

curl -s "https://api.navarana.id/api/products?kode=BYROMNI" \
  -H "Accept: application/json" \
  -H "X-Api-Client-Id: YOUR_CLIENT_ID" \
  -H "X-Api-Client-Secret: YOUR_CLIENT_SECRET"

PHP

$response = $httpClient->get('https://api.navarana.id/api/products', [
    'query' => ['kode' => 'BYROMNI'],
    'headers' => [
        'Accept'            => 'application/json',
        'X-Api-Client-Id'   => $clientId,   // dari konfigurasi server
        'X-Api-Client-Secret' => $clientSecret,
    ],
]);

Alur Transaksi (recommended)

1. POST /transactions → simpan trxid + refid dari response

2. Jika data.status = "pending":

loop GET /transactions/{trxid} tiap 3–5 detik

3. Stop saat status = "success" atau "failed"

Ringkasan Endpoint

Method Path Autentikasi
GET /operators ✅ Wajib
GET /products ✅ Wajib
GET /price-list ✅ Wajib
GET /resellers/{kode}/saldo ✅ Wajib
POST /transactions ✅ Wajib
GET /transactions/{trxid} ✅ Wajib
GET /history ✅ Wajib
POST /deposit-tickets ✅ Wajib
GET /health — Public
GET /resellers/{kode} — Public
POST /resellers/{kode}/verify-pin — Public

success vs data.statussuccess: false dengan data.status: "pending" artinya request diterima tapi transaksi belum selesai. Cek ulang via GET /transactions/{trxid}.

refid — Format APP + YmdHis + 6 karakter random.

Client secret — Simpan di server backend, jangan di frontend browser.

Butuh Akses API?

Hubungi tim Navarana untuk aktivasi kode reseller dan kredensial API.

Hubungi Kami