CEK ONGKIR

API Cek Ongkir: JNE, JNT, SiCepat, dll

Satu GET mengembalikan tarif 10 kurir dan 15 layanan sekaligus, lengkap dengan penanda termurah dan tercepat. Berbasis kode kecamatan, bukan kode kelurahan. Rp 5 per panggilan sukses — panggilan yang gagal tidak ditagih.

10Kurir
15Layanan
7.200+Kecamatan
Rp 5Per panggilan
Kurir yang didukung
JNE Express
JNT Express
JNT Cargo
SiCepat
SAP Express
Ninja Xpress
IDExpress
Lion Parcel
AnterAja
Paxel
JNE Express
JNT Express
JNT Cargo
SiCepat
SAP Express
Ninja Xpress
IDExpress
Lion Parcel
AnterAja
Paxel

Cek Ongkir v2: Berbasis Kode Kecamatan, Mengembalikan quote_id

API Cek Ongkir v2 menghitung tarif pengiriman dari satu kecamatan ke kecamatan lain untuk seluruh kurir yang aktif di akun Anda. Sekali panggil, Anda dapat array rates berisi 15 layanan dari 10 kurir — masing-masing dengan harga, handling_fee, estimasi hari, dan penanda termurah/tercepat.

Dibanding versi sebelumnya yang memakai kode kelurahan 10 digit, v2 memakai kode kecamatan 6 digit yang jauh lebih pendek dan lebih mudah dipetakan dari alamat pengguna. Kode kecamatannya sendiri diambil dari endpoint lokasi bawaan API ini, tidak perlu memanggil API wilayah terpisah.

Dua hal baru yang tidak ada di v1: quote_id dan biaya opsional. quote_id adalah pegangan untuk langkah pemesanan — endpoint pembuatan order sedang disiapkan dan akan memakai ID ini. Biaya opsional mencakup asuransi (kirim item_value dan insurance) serta dimensi paket, yang memengaruhi tarif pada layanan kargo.

Harganya Rp 5 per panggilan sukses, dipotong dari saldo dan hanya setelah tarif benar-benar dikembalikan. Endpoint lokasi dan daftar kurir gratis, jadi penelusuran provinsi–kota–kecamatan tidak menambah biaya.

10 kurir, 15 layanan

JNE, J&T, J&T Cargo, SiCepat, SAP, Ninja, IDExpress, Lion Parcel, AnterAja, dan Paxel dihitung dalam satu panggilan.

Termurah & tercepat ditandai

Setiap item punya is_cheapest dan is_fastest, jadi Anda tidak perlu menyortir sendiri.

Asuransi dan dimensi

Kirim item_value, insurance, atau length/width/height untuk tarif yang lebih presisi.

quote_id untuk pemesanan

Setiap quote punya ID. Endpoint pembuatan order memakai ID ini pada rilis berikutnya.

Mulai dalam 3 Langkah

1
Ambil kode kecamatan

Telusuri /courier/v1/locations/provinces → /cities → /districts. Endpoint lokasi gratis, jadi hasilnya bisa Anda cache sendiri.

2
Panggil /courier/v2/rates

Kirim kode kecamatan asal, tujuan, dan berat. Tambahkan insurance atau dimensi kalau perlu.

3
Tampilkan rates dan simpan quote_id

Array rates sudah menandai mana yang termurah dan tercepat. quote_id dipakai saat endpoint pemesanan rilis.

Dari kode kecamatan sampai daftar tarif siap tampil di checkout.

Sepuluh Kurir dalam Satu Response

Setiap kurir dihitung untuk semua layanannya, bukan hanya layanan reguler.

JNE Express

JNT Express

JNT Cargo

SiCepat

SAP Express

Ninja Xpress

IDExpress

Lion Parcel

AnterAja

Paxel
Daftar live di /courier/v1/couriers

Kode Kecamatan (District Code)

Parameter origin_district_code dan destination_district_code memakai kode kecamatan, misalnya 317405 untuk Kebayoran Lama. Ambil kodenya dengan menelusuri /courier/v1/locations/provinces, lalu /courier/v1/locations/cities?province=31, lalu /courier/v1/locations/districts?city=3174. Ketiganya gratis dan datanya jarang berubah, jadi paling hemat kalau Anda simpan sendiri saat onboarding.

Rp 5 Per Panggilan Sukses, Tanpa Langganan

Tidak ada tier bulanan dan tidak ada kuota hangus. Saldo dipotong per panggilan yang benar-benar mengembalikan tarif.

Endpoint Lokasi

Rp 0

provinsi · kota · kecamatan

  • • /courier/v1/locations/provinces
  • • /courier/v1/locations/cities
  • • /courier/v1/locations/districts

Lihat Dokumentasi

Daftar Kurir

Rp 0

kode, nama, logo, flag COD

  • • /courier/v1/couriers
  • • Dipakai untuk merender logo di checkout
  • • Ikut daftar kurir aktif di akun Anda

Lihat Dokumentasi

Cara penagihan: saldo dicek sebelum request diteruskan, lalu dipotong Rp 5 hanya setelah kurir mengembalikan tarif. Kalau request gagal — parameter kurang, kecamatan tidak dikenali, atau kurir sedang bermasalah — saldo Anda tidak berkurang. Saldo tidak cukup akan dijawab 402 dengan pesan Insufficient balance for cek ongkir. Please top up.

Lihat Responsnya Sebelum Menulis Kode

Kalkulator di bawah memanggil endpoint yang sama persis dengan yang didokumentasikan di halaman ini — GET /courier/v2/rates, sepuluh kurir, lima belas layanan, berbasis kode kecamatan. Angka yang muncul adalah angka yang akan Anda terima di data.rates.

Dikirim dari
Dikirim ke
Verifikasi

Pilih kecamatan asal dan tujuan, lalu tekan Cek Ongkir.

Butuh versi yang bisa dibagikan ke tim non-teknis? Kalkulator yang sama tersedia sebagai halaman tersendiri di cek ongkir.

Dokumentasi API Cek Ongkir v2

Satu endpoint berbayar untuk tarif, tiga endpoint lokasi dan satu daftar kurir yang gratis.

Authentication

Semua request memerlukan header x-api-co-id berisi API key Anda. Base URL-nya https://use.api.co.id. Dapatkan API key di dashboard.

GET{{base-url}}/courier/v2/rates

Menghitung tarif dari kecamatan asal ke kecamatan tujuan untuk seluruh kurir aktif. Mengembalikan quote_id dan array rates. Ditagih Rp 5 per panggilan sukses.

Parameter Tipe Keterangan
origin_district_code string (wajib) Kode kecamatan asal. Ambil dari /courier/v1/locations/districts.
destination_district_code string (wajib) Kode kecamatan tujuan.
weight number (wajib) Berat paket dalam kilogram, harus lebih besar dari 0.
item_value integer (opsional) Nilai barang dalam Rupiah, dipakai untuk menghitung asuransi.
insurance boolean (opsional) Sertakan insurance_fee per kurir pada hasil.
length integer (opsional) Panjang paket dalam sentimeter.
width integer (opsional) Lebar paket dalam sentimeter.
height integer (opsional) Tinggi paket dalam sentimeter.
Example Request

curl -s -G 'https://use.api.co.id/courier/v2/rates' \
  --data-urlencode 'origin_district_code=317405' \
  --data-urlencode 'destination_district_code=317305' \
  --data-urlencode 'weight=1' \
  -H 'x-api-co-id: YOUR_API_KEY'
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    url := "https://use.api.co.id/courier/v2/rates?origin_district_code=317405&destination_district_code=317305&weight=1"
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        panic(err)
    }
    req.Header.Set("x-api-co-id", "YOUR_API_KEY")
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
<?php

$url = 'https://use.api.co.id/courier/v2/rates?' . http_build_query([
    'origin_district_code' => '317405',
    'destination_district_code' => '317305',
    'weight' => 1,
]);

$context = stream_context_create([
    'http' => [
        'header' => "x-api-co-id: YOUR_API_KEY\r\n",
    ],
]);

$response = file_get_contents($url, false, $context);
echo $response;
// Node.js 18+ (fetch built-in)
(async () => {
  const params = new URLSearchParams({
    origin_district_code: '317405',
    destination_district_code: '317305',
    weight: '1',
  });
  const res = await fetch(
    `https://use.api.co.id/courier/v2/rates?${params}`,
    { headers: { 'x-api-co-id': 'YOUR_API_KEY' } }
  );
  const { data } = await res.json();
  const cheapest = data.rates.find((r) => r.is_cheapest);
  console.log(data.quote_id, cheapest);
})();
<?php

use Illuminate\Support\Facades\Http;

$response = Http::withHeaders([
    'x-api-co-id' => 'YOUR_API_KEY',
])->get('https://use.api.co.id/courier/v2/rates', [
    'origin_district_code' => '317405',
    'destination_district_code' => '317305',
    'weight' => 1,
]);

return $response->json('data.rates');
Example Response (Success)
{
  "is_success": true,
  "message": "Success",
  "data": {
    "quote_id": "q_8f3c1a9e2b7d4c05",
    "rates": [
      {
        "courier_code": "jne",
        "courier_name": "JNE Express",
        "courier_image": "https://use.api.co.id/couriers/jne.png",
        "service_code": "REG",
        "service_name": "Reguler",
        "service_type": "Standard",
        "etd": "1-3",
        "est": 3,
        "is_cod": false,
        "normal_price": 12000,
        "is_cheapest": false,
        "is_fastest": false,
        "price": 10000,
        "handling_fee": 500,
        "insurance_fee": 0,
        "total_price": 10500
      },
      {
        "courier_code": "ninja",
        "courier_name": "Ninja Express",
        "courier_image": null,
        "service_code": "NSTD",
        "service_name": "Standard",
        "service_type": "Regular",
        "etd": "1-4",
        "est": 4,
        "is_cod": false,
        "normal_price": 5000,
        "is_cheapest": true,
        "is_fastest": false,
        "price": 4900,
        "handling_fee": 0,
        "insurance_fee": 0,
        "total_price": 4900
      }
    ]
  }
}
Error HTTP Pesan Perbaikan
Parameter kurang 400 origin_district_code (or sender_address_id), destination_district_code, and weight are required Lengkapi ketiga parameter wajib.
API key hilang 401 API key required in x-api-co-id header Tambahkan header x-api-co-id dengan API key dari dashboard.
Saldo tidak cukup 402 Insufficient balance for cek ongkir. Please top up. Top up saldo di dashboard lalu ulangi request.
Terlalu banyak request 429 Rate limit exceeded. Please try again later Beri jeda antar panggilan atau cache hasil per pasangan kecamatan.
GETEndpoint pendukung — gratis

Dipakai untuk menemukan kode kecamatan dan merender logo kurir. Tidak memotong saldo.

Path Keterangan Contoh item
/courier/v1/locations/provinces Daftar provinsi. Tanpa parameter. {"code": "31", "name": "DKI Jakarta"}
/courier/v1/locations/cities Daftar kota/kabupaten dalam satu provinsi. Wajib province. {"code": "3174", "name": "Jakarta Selatan"}
/courier/v1/locations/districts Daftar kecamatan dalam satu kota/kabupaten. Wajib city. code di sini yang dipakai sebagai district code. {"code": "317405", "name": "Kebayoran Lama"}
/courier/v1/couriers Daftar kurir aktif beserta logo dan flag COD. {"code": "jne", "name": "JNE Express", "logo": "…", "cod": true}

Satu endpoint untuk tarif sepuluh kurir

Alih-alih mendaftar dan berintegrasi ke sistem tiap ekspedisi satu per satu, Anda cukup memanggil satu endpoint dan menerima tarif dari sepuluh kurir sekaligus. Kirim kode kecamatan asal, kode kecamatan tujuan, dan berat paket; API mengembalikan setiap kombinasi kurir dan layanan yang bisa melayani rute tersebut. Untuk checkout e-commerce, ini berarti daftar opsi pengiriman muncul dalam satu round trip, bukan sepuluh.

Perhitungannya sampai level kecamatan, jadi ongkir yang tampil ke pembeli lebih dekat ke tarif sebenarnya dibanding tarif per kota.

Cuma mau menghitung ongkir sekali tanpa menulis kode? Pakai kalkulator cek ongkir kami — gratis, tanpa daftar, dan memakai API yang sama persis dengan yang didokumentasikan di halaman ini.

Kurir dan layanan yang didukung

Sepuluh kurir, lima belas layanan:

  • JNE Express — REG dan YES
  • J&T Express — EZ
  • J&T Cargo — Cargo
  • SiCepat — Regular dan BEST
  • SAP Express — Reguler
  • Ninja Xpress — Standard
  • IDExpress — Standard dan Cargo
  • Lion Parcel — Regpack dan Bigpack
  • AnterAja — Reguler dan Same Day
  • Paxel — Sameday

Daftar yang benar-benar aktif untuk akun Anda selalu bisa dicek lewat GET /courier/v1/couriers, dan itu yang sebaiknya Anda pakai untuk merender pilihan di checkout.

Apa bedanya dengan versi kode kelurahan

Versi lama memakai kode kelurahan 10 digit yang harus diambil dari API Wilayah Indonesia. Versi kedua memakai kode kecamatan 6 digit yang sudah tersedia di dalam API ini sendiri, lewat /courier/v1/locations/districts. Selain lebih pendek, kode kecamatan lebih stabil dan lebih mudah dicocokkan dengan alamat yang diketik pengguna.

Bentuk response-nya juga berubah. Dulu data.couriers berisi satu baris per kurir; sekarang data.rates berisi satu baris per layanan, sehingga JNE REG dan JNE YES muncul terpisah dengan harga masing-masing. Ditambah quote_id, penanda is_cheapest dan is_fastest, serta handling_fee dan insurance_fee yang sebelumnya tidak ada.

Model harganya ikut berubah dari langganan bulanan menjadi Rp 5 per panggilan sukses yang dipotong dari saldo.

Mengambil tarif JNE lewat API

Tarif JNE keluar dari panggilan GET /courier/v2/rates yang sama, tanpa integrasi terpisah ke sistem JNE. Dua layanannya dihitung sekaligus: REG untuk pengiriman reguler dan YES untuk yang butuh sampai lebih cepat. Keduanya muncul sebagai baris terpisah di rates, masing-masing dengan etd dan price, jadi Anda bisa menampilkan dua pilihan JNE ke pembeli tanpa memanggil API dua kali.

Mengambil tarif SAP Express lewat API

SAP Express dihitung lewat endpoint yang sama dengan kurir lain. SAP termasuk kurir yang tarifnya jarang tersedia lengkap di satu tempat, dan di sini tidak butuh perlakuan khusus — cukup kirim pasangan kode kecamatan dan berat, lalu baca baris dengan courier_code bernilai sap.

Mengambil tarif SiCepat lewat API

SiCepat mengembalikan dua layanan: Regular dan BEST. Karena perhitungannya antar kecamatan, pasangan origin_district_code dan destination_district_code menentukan tarif sampai level kecamatan. Kurir yang tidak melayani rute tersebut tidak muncul di rates, jadi Anda tidak perlu menyaring hasil kosong sendiri.

Cara integrasi API cek ongkir multi-kurir

Polanya REST standar api.co.id: satu GET /courier/v2/rates, autentikasi lewat header x-api-co-id: YOUR_API_KEY, response JSON. Tiga parameter wajib — origin_district_code, destination_district_code, dan weight — lalu baca array data.rates. Contoh request dalam cURL, Go, PHP, Node.js, dan Laravel ada di dokumentasi di halaman ini.

Satu saran praktis: simpan hasil /courier/v1/locations/districts di database Anda sendiri saat onboarding. Endpoint itu gratis dan datanya jarang berubah, sehingga pencarian kecamatan di form alamat bisa berjalan lokal dan hanya panggilan tarif yang menyentuh saldo.

Butuh data wilayah untuk keperluan lain di luar ongkir? Lihat Indonesia Regional API dan Reverse Geocoding API.

Contoh penggunaan

  • Checkout e-commerce: tampilkan opsi ongkir otomatis begitu pembeli memilih alamat, dengan opsi termurah sudah ditandai.
  • Marketplace multi-seller: hitung ongkir dari gudang tiap penjual dengan kode kecamatan masing-masing.
  • Aplikasi logistik: bandingkan tarif lintas kurir sebelum memilih layanan, lalu simpan quote_id untuk langkah pemesanan.

Lihat juga daftar harga seluruh produk api.co.id.

Pertanyaan Umum tentang API Cek Ongkir v2

Kode kecamatan, quote_id, penagihan, dan hal-hal yang berubah dari versi sebelumnya.

Apa itu API Cek Ongkir v2?▼

API Cek Ongkir v2 menghitung tarif pengiriman antar kecamatan di Indonesia untuk sepuluh kurir sekaligus: JNE, J&T Express, J&T Cargo, SiCepat, SAP Express, Ninja Xpress, IDExpress, Lion Parcel, AnterAja, dan Paxel. Satu panggilan mengembalikan lima belas layanan lengkap dengan harga, estimasi hari, dan penanda termurah serta tercepat.

Apa bedanya dengan versi sebelumnya?▼

Versi lama memakai kode kelurahan 10 digit dari API Wilayah Indonesia dan mengembalikan satu baris per kurir. Versi kedua memakai kode kecamatan 6 digit dari endpoint lokasi bawaan, mengembalikan satu baris per layanan, dan menambahkan quote_id, penanda termurah/tercepat, handling_fee, serta insurance_fee. Harganya juga berubah dari langganan bulanan menjadi Rp 5 per panggilan sukses.

Berapa biayanya?▼

Rp 5 per panggilan sukses ke /courier/v2/rates, dipotong dari saldo. Panggilan yang gagal tidak ditagih. Endpoint lokasi dan daftar kurir gratis.

Bagaimana cara mendapatkan kode kecamatan?▼

Telusuri tiga endpoint gratis secara berurutan: /courier/v1/locations/provinces untuk daftar provinsi, lalu /courier/v1/locations/cities?province= untuk kota atau kabupaten, lalu /courier/v1/locations/districts?city= untuk kecamatan. Nilai code pada langkah terakhir itulah yang dipakai sebagai origin_district_code dan destination_district_code.

Apa itu quote_id dan untuk apa?▼

quote_id adalah penanda untuk satu hasil perhitungan tarif. Endpoint pembuatan order sedang disiapkan dan akan memakai ID ini sebagai langkah pertama, sehingga tarif yang ditampilkan ke pembeli dan tarif yang dipesan berasal dari perhitungan yang sama.

Bagaimana cara memilih opsi termurah atau tercepat?▼

Setiap item di array rates punya field boolean is_cheapest dan is_fastest. Anda cukup mencari item yang bernilai true, tidak perlu menyortir sendiri. Kalau ingin urutan penuh, gunakan field price atau est.

Bisa menghitung biaya asuransi?▼

Bisa. Kirim item_value berisi nilai barang dalam Rupiah dan insurance bernilai true, lalu baca insurance_fee dan total_price di tiap item rates. Tanpa kedua parameter itu, insurance_fee bernilai nol.

Apakah mendukung COD?▼

Field is_cod sudah ada di setiap item rates untuk menandai layanan yang secara prinsip mendukung COD, tetapi tarif COD belum diaktifkan pada endpoint ini. Selama belum aktif, yang dikembalikan hanya layanan non-COD.

Bergabung dengan 8.000+ pengguna yang sudah mengandalkan API kami untuk operasional bisnis.

8.000+
Pengguna
100+
Bisnis
8jt+
Panggilan API
99,9%
Uptime SLA

Dipercaya oleh 100+ bisnis di berbagai industri

Dari instansi pemerintah, teknologi, dan pendidikan sampai kesehatan dan telekomunikasi, mencakup 8 sektor industri di seluruh Indonesia.

Mulai Cek Ongkir v2 Hari Ini

Rp 5 per panggilan sukses untuk sepuluh kurir dan lima belas layanan. Tidak ada langganan, tidak ada kuota hangus.

Dapatkan API Key

Ditinjau oleh CTO Api.co.idDiperbarui 2 September 2026
Scroll to Top