Dokumentasi API

Semua endpoint memakai JSON. Alamat dasar: https://indo-api.biz.id/api

1. Autentikasi

Kirim kunci API di header Authorization. Kunci dibuat di Beranda dan hanya ditampilkan sekali — kami menyimpan hash-nya saja, jadi kunci yang hilang tidak bisa kami tampilkan lagi.

Authorization: Bearer indoapi_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Jangan mengirim kunci lewat query string (?api_key=). Nilainya ikut tercatat di log server dan riwayat browser. Kami memang menolaknya.

Batas: 120 permintaan per menit per kunci.

2. Endpoint

GET /saya — Cek identitas & saldo

Endpoint paling murah untuk memastikan kuncimu benar sebelum menyambungkan sisanya.

Respons

{
  "sukses": true,
  "data": {
    "tenant": { "id": "01k…", "nama": "Toko Melati" },
    "saldo": 250000
  }
}
GET /lokasi?cari=Cihapit — Cari wilayah tujuan

Pakai `id` dari sini untuk cek ongkir dan buat resi. Jangan menebak dari nama kota — satu nama kelurahan bisa ada di banyak kabupaten.

Respons

{
  "sukses": true,
  "data": [
    {
      "id": 4878,
      "kelurahan": "CIHAPIT",
      "kecamatan": "BANDUNG WETAN",
      "kota": "BANDUNG",
      "provinsi": "JAWA BARAT",
      "kode_pos": "40114"
    }
  ]
}
POST /ongkir — Cek ongkir

Berat dalam GRAM. Kirim berat apa adanya — jangan dibulatkan ke kilo, tiap kurir punya aturan pembulatannya sendiri.

Body

{
  "asal": 31501,
  "tujuan": 4878,
  "berat": 1000
}

Respons

{
  "sukses": true,
  "data": [
    { "kurir": "jne", "layanan": "REG", "etd": "2 day", "harga": 18000 },
    { "kurir": "sicepat", "layanan": "REG", "etd": "2-3 day", "harga": 20000 }
  ]
}
POST /resi — Terbitkan resi

`kunci` adalah penanda unik milikmu (mis. nomor invoice). Mengirim ulang permintaan dengan kunci yang sama TIDAK akan menerbitkan resi kedua — aman untuk retry.

Body

{
  "kunci": "INV-001",
  "kurir": "jne",
  "asal": 31501,
  "tujuan": 4878,
  "berat": 1000,
  "barang": "Hijab 2 pcs",
  "nilai_barang": 150000,
  "penerima": {
    "nama": "Siti Rahmawati",
    "telepon": "081234567890",
    "alamat": "Jl. Cihapit No. 12 RT 03"
  }
}

Respons

{
  "sukses": true,
  "data": {
    "nomor": "RS-260811-A1B2C3",
    "resi": "JO0198525197",
    "kurir": "jne",
    "layanan": "REG",
    "berat": 1000,
    "biaya": 18000,
    "status": "terbit"
  }
}
GET /resi/{nomor} — Lihat resi

Memakai `nomor` dari respons pembuatan resi (bukan nomor resi kurir).

3. Kode status

Kode Arti
200 / 201 Berhasil.
401 Kunci API tidak dikirim, salah, atau sudah dicabut.
402 Saldo tidak cukup. Respons memuat kurang — selisih yang perlu diisi. Resi TIDAK diterbitkan.
403 Akun tidak aktif atau diblokir.
404 Data tidak ditemukan.
422 Permintaan tidak valid, atau kurir tak melayani rute itu.
429 Melebihi batas permintaan. Lihat header Retry-After.
503 Layanan kurir sedang tidak bisa dihubungi. Coba lagi.

4. Yang sering keliru

Saldo dipotong SEBELUM resi diminta ke kurir

Kalau saldo kurang, resi tidak pernah diterbitkan sama sekali — kamu tak akan pernah punya resi yang belum terbayar. Kalau kurir gagal setelah saldo terpotong, saldo dikembalikan otomatis.

Selalu kirim `kunci` yang unik dan tetap

Pakai nomor invoice atau id pesananmu. Kalau koneksi putus dan kamu mengulang permintaan, kunci yang sama memastikan resinya tidak terbit dua kali.

Berat dalam gram, apa adanya

Jangan bulatkan ke kilo. Tiap kurir punya ambang pembulatannya sendiri, dan membulatkan lebih dulu bisa membuatmu ditagih satu tingkat lebih mahal.

Harga selalu dihitung ulang di server

Harga yang kamu kirim (kalau ada) diabaikan. Yang berlaku adalah hasil cek ongkir saat resi dibuat.

Siap mencoba?

Buat akun, ambil kunci API, dan terbitkan resi pertamamu.

Daftar