Create delivery
Places a booking on the Dash Express fleet. Returns a deliveryID
in status ALLOCATING. The driver is assigned asynchronously —
track progress via webhooks.
The legacy path POST /v1/deliveries (category chosen via
serviceCategory) is deprecated (21 May 2026) and
will be obsoleted on 21 November 2026. New integrations must
use /express/v1/deliveries.
Request body
EXPRESS, LOGISTIC. This page documents EXPRESS.INSTANT or SAME_DAY. Must match a tier returned by the quote.CASH or CASHLESS. Default CASHLESS.paymentMethod = "CASH". Contains amount (IDR).REGULAR, SPECIAL, SENSITIVE, HIGH_VALUE, OTHER. Omitted, null, or empty is stored as REGULAR. See Package type.EXPRESS; optional for LOGISTIC.true on an INSTANT delivery without schedule to get the 409 EXPRESS_DRIVER_UNAVAILABLE refusal. Rejected in Production. See Testing a refused booking in Sandbox.Package type
packages[].type labels what is inside the package. It is optional and accepts exactly five values — REGULAR, SPECIAL, SENSITIVE, HIGH_VALUE, OTHER. Omit it, or send null or an empty string, and the package is stored as REGULAR. Anything else is rejected with 400. Surrounding whitespace is trimmed before the value is checked, so " HIGH_VALUE " is accepted as HIGH_VALUE — on this endpoint and on Get delivery quote.
The stored value is returned per package by this endpoint and by Get delivery details.
"packages": [
{ "name": "Cincin emas", "type": "HIGH_VALUE", "quantity": 1, "weight": 0.1 }
]
type is a label only. Sending HIGH_VALUE does
not change the fare, the courier chosen, or how the delivery
is batched with others — the value is recorded and echoed back, nothing else.
If a package needs special handling, arrange it with Dash Ops.
Cash on Delivery
When paymentMethod is CASH, pass a cashOnDelivery.amount in IDR. The driver collects this on handover.
{
"paymentMethod": "CASH",
"cashOnDelivery": { "amount": 250000 }
}
Instructions
Optional per-delivery instruction shown to the driver. At most one instruction is supported today. Setting type: "WEBVIEW" opens the URL inside the courier app.
"instructions": [
{
"type": "WEBVIEW",
"text": "Please do something on this delivery",
"url": "https://example.com/runbook"
}
]
Testing a refused booking in Sandbox
Sandbox never runs the courier check, so a Sandbox booking is never refused for lack of couriers on its own. Add "forceUnavailable": true to the body to make Create Delivery return the 409 EXPRESS_DRIVER_UNAVAILABLE refusal, so you can build and test your retry path before the check is enabled for your account in Production.
- Sandbox,
true,INSTANTwithoutschedule— refused with409 EXPRESS_DRIVER_UNAVAILABLE. Nothing is booked and no webhook is sent. This works whether or not the courier check is enabled for your account. - Sandbox,
true,SAME_DAYor withschedule— ignored. The courier check never applies to these, so the delivery is created as usual. - Sandbox,
false,nullor omitted — ignored; the delivery is created as usual. - Sandbox, any other value —
400 VALIDATION_FAILED,Field `forceUnavailable` harus berupa boolean. - Production — rejected with
400 UNKNOWN_FIELD,Field tidak dikenali: [forceUnavailable], so it can never affect a real booking. Remove it before going live.
"serviceType": "INSTANT",
"forceUnavailable": true
To get an available quote in Sandbox before you book, see sandboxAvailability on Get delivery quote.
Error responses
Delivery created in ALLOCATING. Courier is assigned
asynchronously.
Every error below carries an errorCode — branch on it. The error message is Indonesian display copy and may change. Refusals before the request reaches this endpoint (token, timezone header) carry none — see Errors.
Butuh request body.Field tidak dikenali: [<field>]serviceType other than INSTANT / SAME_DAY, coordinates outside ±90 / ±180, and a packages[].type outside the accepted list.amount.x-client-time-zone that is not a recognised IANA zone.Ups! Sepertinya waktu pengantaran yang Anda pilih sudah lewat. Yuk, pilih waktu lain yang masih tersedia.Pengantaran hanya dapat dijadwalkan dalam rentang hari ini hingga maksimal N hari ke depanLayanan tidak tersedia di area ini. Silakan pilih layanan lain.Layanan tidak tersedia pada jam iniforceUnavailable: true. Kurir belum tersedia.Rute tidak ditemukan. Pastikan rute antar titik sesuai.).requestId when contacting us.Layanan sedang tidak dapat diproses. Silakan coba beberapa saat lagi.