Errors
The Dash API uses conventional HTTP status codes and returns Indonesian-language error messages in a stable envelope you can switch on.
Error envelope
Most endpoints return errors in this shape — a status string or numeric, a top-level error (or message) describing what went wrong, and an errors[] array of per-field validation issues. On the token endpoint errors[] is always present: when there is no per-field detail it carries a single entry echoing message.
Two more fields ride on the single-error shape:
errorCode— a stable, machine-readable code. Branch on it, not onerror: the Indonesian copy can change, the code does not. Every EXPRESS endpoint — Get Quote, Create Delivery, Get Delivery, Cancel Delivery and Notify Driver — returns one on every error it raises, and a500from any endpoint carriesINTERNAL_SERVICE_ERRORwhen nothing more specific applies. Requests refused before they reach an endpoint carry none: a missing or expired token (401), a missingx-client-time-zone(400), a token not allowed on the route (403), and a503while an instance restarts.requestId— quote it when you contact us about a failed request.
- Single error (most endpoints)
- Field validation (auth endpoint)
{
"status": "Failed",
"error": "Lokasi pengantaran terlalu jauh (12.4 km) atau berat paket melebihi batas (30 kg). Sesuaikan jarak pengantaran atau hubungi admin Dash Electric.",
"errorCode": "LOCATION_TOO_FAR",
"requestId": "3f0c9a2e-7b1d-4c55-9e0a-1d2b6f8a4c10"
}
{
"status": 400,
"message": "Terjadi kesalahan pada isian",
"errors": [
{
"field": "client_key",
"message": "Field \"client_key\" tidak boleh kosong"
}
]
}
HTTP status codes
200 OK
Successful request.
400 Bad Request
Payload malformed, unknown field, invalid value, or a business rule such as the schedule window, area coverage or operating hours failed.
401 Unauthorized
Token missing, invalid, or expired.
403 Forbidden
Authenticated, but not allowed to act on this resource (e.g. cancelling a delivery owned by another provider).
404 Not Found
Resource doesn't exist (e.g. unknown deliveryID).
409 Conflict
No eligible courier is free right now (Create Delivery, EXPRESS_DRIVER_UNAVAILABLE). A later retry may succeed.
422 Unprocessable Entity
The destination cannot be served (LOCATION_TOO_FAR), or a state transition is not allowed — delivery already picked up or in a final state.
500 Internal Server Error
Unexpected error on our side (INTERNAL_SERVICE_ERROR unless a more specific code applies).
503 Service Unavailable
Courier availability could not be checked (Create Delivery, EXPRESS_ELIGIBILITY_UNAVAILABLE). Temporary — retry shortly.
Common error messages
The same Indonesian copy is used across endpoints. It is for display: branch on errorCode where one is present.
400Butuh request body.
Empty request body.
400Field tidak dikenali: [<field>]
Request body contains an unrecognised key. The key is interpolated into the message.
400CASH_ADVANCE_AMOUNT_REQUIRED
Cash advance amount required but missing on Create Delivery.
400Ups! Sepertinya waktu pengantaran yang Anda pilih sudah lewat. Yuk, pilih waktu lain yang masih tersedia.
Scheduled time is in the past.
400Pengantaran hanya dapat dijadwalkan dalam rentang hari ini hingga maksimal N hari ke depan
Scheduled time is outside the allowed booking window.
400Layanan tidak tersedia di area ini. Silakan pilih layanan lain.
Origin area not covered for the requested schedule.
400Layanan tidak tersedia pada jam ini
No driver shift covers the requested schedule.
422Lokasi pengantaran terlalu jauh (<km> km) atau berat paket melebihi batas (<kg> kg). Sesuaikan jarak pengantaran atau hubungi admin Dash Electric.
No pricing tier covers the distance or weight. The actual distance / weight are interpolated into the message.
400Koordinat origin perlu ditambahkan
Origin coordinates are missing (Get Quote).
400Koordinat destinasi perlu ditambahkan
Destination coordinates are missing (Get Quote).
400Alamat destinasi perlu ditambahkan
Destination address missing, geocode fallback failed (Get Quote).
404Pengantaran tidak ditemukan.
deliveryID doesn't exist for your workspace.
403Akses tidak diperbolehkan.
Caller is not the owning provider of the delivery (Cancel Delivery).
422Delivery ID sudah selesai diantarkan. Silakan input ulang sebelum upload, hanya bisa untuk delivery yang aktif saja.
Cancel attempted on a delivery already in a final state.
400QRIS deliveries can only be canceled up to PENDING_PICKUP
QRIS-paid delivery is past its cancellable status.
422Pengantaran sudah diambil.
Cancel attempt after the package has already been picked up (PENDING_DELIVERY / IN_DELIVERY).
400Kurir belum ditugaskan untuk antaran ini.
Tried to notify the driver before one was assigned.
400Notifikasi tidak dapat dikirim karena status pengantaran tidak sesuai.
additional-notifications called in a status other than PENDING_PICKUP / PICKING_UP.
401Tidak punya akses
Token invalid or unauthorized for this resource.