Dikebut API
Satu API key untuk pengiriman (multi-kurir via Komship) + peta & ongkir per jarak (OSM/Google). REST, JSON, ongkir at-cost.
π Quickstart
1. Daftar β Dashboard β API Keys β buat key. 2. Coba hitung jarak:
curl https://dikebut.zenenta.net/api/v1/maps/distance \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"origin": { "lat": -6.2441, "lng": 106.7976 },
"dest": { "lat": -6.3088, "lng": 106.7979 }
}'{ "engine": "osm", "distanceMeters": 8858, "distanceKm": 8.86, "durationSec": 625 }Jarak = jarak tempuh jalan (bukan garis lurus), deterministik β koordinat sama selalu menghasilkan km yang sama (bisa di-cache/audit).
π Autentikasi
Sertakan secret API key di setiap request. Buat di Dashboard β API Keys.
Authorization: Bearer sk_live_xxxxxxxx # atau x-api-key: sk_live_xxxxxxxx
- β’
sk_test_β¦β sandbox (uji coba). - β’
sk_live_β¦β produksi (paket Pro+). - β’ β οΈ Secret key rahasia β pakai dari server, jangan tanam di browser publik.
π¦ JavaScript SDK
SDK ringan (browser + Node, tanpa dependency).
<script src="https://dikebut.zenenta.net/sdk/dikebut.js"></script>
<script>
const dk = new Dikebut({ apiKey: 'sk_live_xxx' });
const d = await dk.maps.distance({ lat:-6.2441, lng:106.7976 }, { lat:-6.3088, lng:106.7979 });
console.log(d.distanceKm, 'km'); // 8.86 km
const g = await dk.maps.geocode('Monas Jakarta');
console.log(g.results[0]); // { lat, lng, label }
</script>const Dikebut = require('dikebut');
const dk = new Dikebut({ apiKey: process.env.DIKEBUT_KEY });
const rate = await dk.distanceRates({ receiver: { lat:-6.3, lng:106.8 } });Komponen peta + pin: Dikebut.mapPicker(el, opts) (Leaflet + tile OSM). Coba di Dashboard β Maps.
πΊοΈ Maps API
Engine default OSM (at-cost). Tambah ?engine=google untuk Google (butuh BYOK key di Pengaturan).
| GET | /maps/geocode?q= | Alamat β kandidat titik (lat,lng,label). |
| GET | /maps/reverse?lat=&lng= | Titik β alamat. |
| POST | /maps/distance | Jarak tempuh jalan + durasi (2 titik). |
| POST | /maps/route | Rute lengkap + geometri (GeoJSON). |
| POST | /maps/matrix | Matriks jarak/durasi (maks 100 pasangan). |
Contoh: rute + geometri
curl https://dikebut.zenenta.net/api/v1/maps/route -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{ "points":[{"lat":-6.24,"lng":106.79},{"lat":-6.31,"lng":106.80}], "geometry":true }'π‘ Presisi terbaik: kirim koordinat (dari pin peta), bukan teks alamat.
π Ongkir per Jarak (Kurir Sendiri)
Untuk merchant yang antar sendiri. Set Titik Asal & tarif di Dashboard β Kurir Per Jarak. Rumus: basePrice + ceil(max(0, kmβfreeRadius)) Γ perKm.
curl https://dikebut.zenenta.net/api/v1/distance-rates -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{ "receiver": { "lat":-6.3088, "lng":106.7979 } }'{ "distanceKm": 8.86, "durationMin": 10, "engine": "osm",
"couriers": [ { "id":"...", "name":"Kurir Toko", "price":29000, "etd":"1-3 jam" } ] }POST /distance-shipments mencatat kiriman kurir-sendiri (tak memotong saldo Dikebut).
π¦ Shipping (multi-kurir via Komship)
Ongkir at-cost ke kurir nasional (JNE, J&T, SiCepatβ¦). Saldo dipotong sebesar ongkir saat buat kiriman.
| GET | /destinations?q= | Cari kode tujuan (destination id). |
| POST | /rates | Hitung ongkir semua kurir. |
| POST | /shipments | Buat kiriman β cek kuota β potong saldo β order kurir. |
| GET | /shipments/:id/track | Lacak resi. |
| GET | /shipments/:id/label | Label/resi. |
| POST | /shipments/:id/pickup Β· /cancel | Pickup / batal (refund). |
curl https://dikebut.zenenta.net/api/v1/shipments -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{
"warehouseId":"wh_xxx",
"receiver":{"name":"Budi","phone":"0812...","address":"Jl Mawar 1, Bandung","destinationId":"12345"},
"courier":"jne","service":"REG","weightGram":1000,"itemValue":50000 }'πͺ Webhook
Set URL di Dashboard β Webhook (Pro+). Kami POST tiap update status, ditandatangani HMAC-SHA256.
POST <url-anda>
x-dikebut-event: shipment.status
x-dikebut-signature: <hmac_sha256(rawBody, signing_secret)>
{ "event":"shipment.status",
"data":{ "id":"...","status":"delivered","awb":"...","courier":"JNE" },
"timestamp":"2026-..." }Verifikasi: hitung HMAC-SHA256 atas raw body dengan signing secret Anda, bandingkan dengan header.
β οΈ Error & Limit
401β API key tidak ada / tidak valid.402β Saldo tidak cukup (shipping) β topup.403β Kuota paket habis (order/maps) / fitur tak termasuk paket.400β Parameter tidak valid (bacamessage).
Kuota Maps/bln: Free 1.000 Β· Starter 10.000 Β· Pro 50.000 Β· Bisnis unlimited. Error selalu { statusCode, message }.