PARTNER API · VERSI 1.0

Bangun Integrasi Bersama Nujek

Hubungkan aplikasi, marketplace, dan sistem bisnis Anda dengan layanan transportasi dan delivery Nujek melalui Partner API.

Secure by default Built for scale
quick-start.js
01import { NujekClient } from '@nujek/sdk';
02
03const client = new NujekClient({
04baseUrl: process.env.CLIENT_API_BASE_URL,
05apiKey: process.env.CLIENT_API_KEY,
06apiSecret: process.env.CLIENT_API_SECRET,
07});
Request signedin 42ms
Webhook ready6 event types
99.99%API uptime
12M+Orders processed
< 200msAverage response
24/7Developer support
GETTING STARTED

Integrasikan Nujek dalam hitungan menit.

Partner API dirancang untuk membantu Anda mengirim order, melacak perjalanan, dan mengelola komunikasi customer dari satu API yang konsisten.

API-first

RESTful, predictable, dan mudah diintegrasikan.

Secure

HMAC-SHA256 pada setiap request.

Developer-ready

SDK, webhook, dan contoh lengkap.

QUICK START

Dari ide ke request pertama.

Mulai dengan kredensial test dan siapkan integrasi dasar Anda melalui empat langkah sederhana.

01

Daftar sebagai partner

Buat akun partner di Dashboard Nujek dan lengkapi profil bisnis.

02

Buat API client

Dapatkan client key, API secret, dan webhook secret dummy untuk sandbox.

03

Instal SDK atau REST API

Gunakan SDK resmi atau request HTTP langsung sesuai kebutuhan tim Anda.

04

Buat request pertama

Register customer, lalu lanjutkan dengan pricing preview dan order.

javascript
const customer = await client.register({
  name: 'Budi',
  email: 'budi@example.com',
  phone: '081234567890',
});
AUTHENTICATION

Request yang aman, sejak awal.

Setiap request ke Partner API wajib menyertakan empat header. Secret tidak pernah dikirim langsung melalui jaringan.

X-Client-KeyIdentitas API client Anda.
X-TimestampUnix timestamp saat request dibuat.
X-NonceString unik untuk mencegah replay.
X-SignatureHMAC-SHA256 dari canonical request.
http
X-Client-Key: pk_test_demo_123
X-Timestamp: 1726279200
X-Nonce: 8f1c2d...
X-Signature: sha256=9d4a...

Cara membuat signature

Hash body dengan SHA-256, lalu susun canonical string berurutan: timestamp, nonce, HTTP method, path + query, dan body hash. Gunakan API secret untuk membuat HMAC-SHA256.

canonical request
1726279200
8f1c2d...
POST
/api/client/orders
sha256(body)
PARTNER API

Endpoint yang Anda butuhkan.

Semua endpoint menggunakan base URL https://api.nujek.id dan response JSON yang konsisten.

16 endpoints Sandbox readyBase URL: api.nujek.id
POST/api/client/register

Register Customer

Mendaftarkan customer baru ke ekosistem Nujek.

Request

json
{
  "name": "Budi Santoso",
  "email": "budi@example.com",
  "phone": "081234567890"
}

200 · Response

json
{
  "data": {
    "uuid": "cus_01h9...",
    "name": "Budi Santoso",
    "status": "active"
  }
}
javascript
const result = await client.request('POST', '/api/client/register');
GET/api/client/pricing/preview

Pricing Preview

Melihat estimasi harga sebelum membuat order.

Request

query parameters
?service_id=1&origin_latitude=-7.25&origin_longitude=112.76&destination_latitude=-7.26&destination_longitude=112.78

200 · Response

json
{
  "data": { "estimated_fare": 18500, "currency": "IDR" }
}
javascript
const result = await client.request('GET', '/api/client/pricing/preview');
GET/api/client/services

Services

Mendapatkan daftar layanan Nujek yang tersedia.

Request

query parameters
No body required

200 · Response

json
{
  "data": [{ "id": 1, "name": "Nujek Ride" }]
}
javascript
const result = await client.request('GET', '/api/client/services');
GET/api/client/nearby-drivers

Nearby Drivers

Mencari driver aktif di sekitar titik pickup.

Request

query parameters
?latitude=-7.250445&longitude=112.768845&radius=5

200 · Response

json
{
  "data": [{ "driver_uuid": "drv_01...", "distance_km": 0.8 }]
}
javascript
const result = await client.request('GET', '/api/client/nearby-drivers');
POST/api/client/geocoding/reverse

Reverse Geocoding

Mengubah koordinat menjadi alamat yang mudah dibaca.

Request

json
{
  "latitude": -7.250445,
  "longitude": 112.768845
}

200 · Response

json
{
  "data": { "address": "Surabaya, Jawa Timur" }
}
javascript
const result = await client.request('POST', '/api/client/geocoding/reverse');
POST/api/client/routing/distance

Routing Distance

Menghitung jarak dan estimasi durasi perjalanan.

Request

json
{
  "origin": { "latitude": -7.25, "longitude": 112.76 },
  "destination": { "latitude": -7.26, "longitude": 112.78 }
}

200 · Response

json
{
  "data": { "distance_m": 2140, "duration_s": 480 }
}
javascript
const result = await client.request('POST', '/api/client/routing/distance');
POST/api/client/orders

Create Order

Membuat order baru untuk customer.

Request

json
{
  "customer_uuid": "cus_01h9...",
  "service_id": 1,
  "routes": [{ "latitude": -7.25, "longitude": 112.76 }]
}

200 · Response

json
{
  "data": { "order_uuid": "ord_01h9...", "status": "PENDING" }
}
javascript
const result = await client.request('POST', '/api/client/orders');
GET/api/client/orders

List Orders

Mengambil daftar order milik partner.

Request

query parameters
?status=finished&page=1&limit=20

200 · Response

json
{
  "data": [], "meta": { "page": 1, "total": 0 }
}
javascript
const result = await client.request('GET', '/api/client/orders');
GET/api/client/orders/{order_uuid}

Get Order Detail

Melihat detail dan status order tertentu.

Request

query parameters
No body required

200 · Response

json
{
  "data": { "order_uuid": "ord_01h9...", "status": "FINISHED" }
}
javascript
const result = await client.request('GET', '/api/client/orders/{order_uuid}');
POST/api/client/orders/{order_uuid}/cancel

Cancel Order

Membatalkan order sesuai aturan pembatalan.

Request

json
{ "reason": "customer_request" }

200 · Response

json
{ "data": { "status": "CANCELLED" } }
javascript
const result = await client.request('POST', '/api/client/orders/{order_uuid}/cancel');
POST/api/client/orders/{order_uuid}/review-driver

Review Driver

Mengirim rating dan ulasan untuk driver.

Request

json
{ "rating": 5, "comment": "Perjalanan nyaman" }

200 · Response

json
{ "data": { "review_uuid": "rev_01..." } }
javascript
const result = await client.request('POST', '/api/client/orders/{order_uuid}/review-driver');
POST/api/client/reviews

Review Application

Mengirim feedback tentang pengalaman integrasi aplikasi.

Request

json
{ "rating": 5, "message": "API sangat mudah digunakan" }

200 · Response

json
{ "data": { "received": true } }
javascript
const result = await client.request('POST', '/api/client/reviews');
GET/api/client/orders/{order_uuid}/chat/customer_driver/messages

List Chat Messages

Mengambil riwayat chat customer dan driver.

Request

query parameters
?page=1&limit=50

200 · Response

json
{ "data": [{ "message": "Saya sudah di lobby" }] }
javascript
const result = await client.request('GET', '/api/client/orders/{order_uuid}/chat/customer_driver/messages');
POST/api/client/orders/{order_uuid}/chat/customer_driver/messages

Send Chat Message

Mengirim pesan teks ke percakapan order.

Request

json
{ "message": "Driver sudah sampai?" }

200 · Response

json
{ "data": { "message_uuid": "msg_01..." } }
javascript
const result = await client.request('POST', '/api/client/orders/{order_uuid}/chat/customer_driver/messages');
POST/api/client/orders/{order_uuid}/chat/customer_driver/read

Mark Chat as Read

Menandai pesan percakapan sebagai sudah dibaca.

Request

json
{ "message_uuids": ["msg_01..."] }

200 · Response

json
{ "data": { "updated": 1 } }
javascript
const result = await client.request('POST', '/api/client/orders/{order_uuid}/chat/customer_driver/read');
POST/api/client/orders/{order_uuid}/chat/customer_driver/images

Send Chat Image

Mengirim gambar ke percakapan customer dan driver.

Request

json
multipart/form-data
file: receipt.png

200 · Response

json
{ "data": { "image_url": "https://cdn.nujek.id/..." } }
javascript
const result = await client.request('POST', '/api/client/orders/{order_uuid}/chat/customer_driver/images');
BOOKING ORDER

Jadwalkan perjalanan dari jauh hari.

Booking order memudahkan customer merencanakan perjalanan dengan waktu pickup yang sudah ditentukan.

json
{
  "customer_uuid": "customer-uuid",
  "client_request_id": "request-uuid",
  "service_id": 1,
  "sub_service_id": 1,
  "payment_method_id": 1,
  "regency_id": "7171",
  "booking_at": "2026-09-14T10:00:00+08:00",
  "routes": [
    { "latitude": -7.250445, "longitude": 112.768845, "address": "Pickup" },
    { "latitude": -7.260000, "longitude": 112.780000, "address": "Tujuan" }
  ]
}

Aturan penting

booking_at harus RFC 3339 dan berada di masa depan.
Booking order tidak boleh mengirim driver_uuid.
Status awal adalah BOOKING.
Setelah diakuisisi driver, status menjadi BOOKING_ACCEPTED.
BOOKINGBOOKING_ACCEPTEDON_THE_WAYFINISHED
WEBHOOKS

Event real-time untuk alur bisnis Anda.

Terima update status order tanpa polling. Verifikasi raw body sebelum memproses event apa pun.

Live events
http
X-Webhook-Id: wh_01h9...
X-Webhook-Timestamp: 1726279200
X-Webhook-Signature: sha256=...
javascript
import { parseWebhook, verifyWebhook } from '@nujek/sdk';

const valid = verifyWebhook({
  webhookSecret: process.env.CLIENT_WEBHOOK_SECRET,
  timestamp: req.headers['x-webhook-timestamp'],
  deliveryId: req.headers['x-webhook-id'],
  rawBody,
  signature: req.headers['x-webhook-signature'],
});

if (!valid) { res.writeHead(401).end(); return; }
const event = parseWebhook(rawBody);

Event yang tersedia

chat.messageorder lifecycle
order.createdorder lifecycle
driver.acceptedreal-time update
order.finishedreal-time update
order.cancelledreal-time update
order.sos_createdreal-time update

Webhook best practice. Verifikasi signature menggunakan raw body, gunakan X-Webhook-Id sebagai idempotency key, balas HTTP 2xx setelah event diterima, dan siapkan retry handling untuk delivery yang gagal.

SDK

Tools yang mengikuti ritme tim Anda.

SDK resmi menangani detail repetitif supaya Anda bisa fokus membangun pengalaman terbaik untuk customer.

Latest

Go SDK

Client ringan dengan dukungan context dan net/http.

go get github.com/Nujek/sdk-nujek-go
Go ≥1.21GitHub
Coming soon

Python SDK

SDK Python belum tersedia dan sedang kami siapkan.

Python ≥3.10
HMAC signing otomatis Error handling Order & Chat API Webhook verification Reverse geocoding Nearby drivers Application review
Changelog terbaru: Node.js SDK v0.6.0
ERROR HANDLING

Pesan error yang bisa ditindaklanjuti.

Gunakan HTTP status dan error code untuk membuat fallback yang jelas di aplikasi Anda.

json
{
  "message": "Validation failed",
  "errors": {
    "email": ["invalid email"]
  }
}
json
{
  "error": {
    "code": "INVALID_SIGNATURE",
    "message": "Signature salah",
    "fields": { "signature": "invalid" }
  }
}
400Bad Request
401Unauthorized
403Forbidden
404Not Found
409Conflict
422Validation Error
500Internal Server Error
PARTNER WITH NUJEK

Siap menghubungkan bisnis Anda dengan Nujek?

Mulai integrasi Anda hari ini dan hadirkan pengalaman delivery yang lebih baik.

Daftar sebagai Partner Hubungi Tim Integrasi