---
title: "Create delivery (EXPRESS)"
method: POST
path: "/express/v1/deliveries"
tags: ["Deliveries"]
---

# Create delivery (EXPRESS)

`POST /express/v1/deliveries`

## Request

- Base URL: `https://api.dashelectric.co`
- URL: `https://api.dashelectric.co/express/v1/deliveries`
- Auth: HTTP bearer

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 `POST /v1/deliveries` path is deprecated 21 May 2026;
new integrations must use `/express/v1/deliveries`. LOGISTIC
deliveries continue to use the legacy path.

## Headers

- `x-client-time-zone` 'Asia/Jakarta' | 'Asia/Makassar' | 'Asia/Jayapura', required

## Request body

- CreateDeliveryRequest
  - `providerOrderID` string, required: Your AWB / order reference. Echoed in every webhook.
  - `serviceCategory` 'EXPRESS' | 'LOGISTIC', required
  - `serviceType` 'INSTANT' | 'SAME_DAY', required
  - `paymentMethod` 'CASH' | 'CASHLESS'
  - `cashOnDelivery` object: Required when paymentMethod = CASH.
    - `amount` integer: COD amount in IDR.
  - `packages` Package[], required
    - `name` string, required
    - `type` 'REGULAR' | 'SPECIAL' | 'SENSITIVE' | 'HIGH_VALUE' | 'OTHER': What the package contains. Optional; surrounding whitespace is trimmed before the value is checked. On Create Delivery an omitted, null, or empty value is stored as REGULAR and returned on Create Delivery and Get Delivery; Get Quote applies no default and echoes back only what was sent. A label only — it does not affect pricing, courier assignment, or batching.
    - `description` string
    - `quantity` integer, required
    - `price` integer: Declared total value in IDR (not unit price). Used for insurance and COD.
    - `weight` number, required: kg
    - `width` number: cm
    - `length` number: cm
    - `height` number: cm
  - `sender` Contact, required
    - `firstName` string, required
    - `lastName` string
    - `companyName` string
    - `email` string, email
    - `phone` string
  - `recipient` Contact, required
    - `firstName` string, required
    - `lastName` string
    - `companyName` string
    - `email` string, email
    - `phone` string
  - `origin` Address
    - `address` string, required
    - `coordinates` Coordinates, required
      - `latitude` number, double, required
      - `longitude` number, double, required
    - `province` string
    - `city` string
    - `district` string
    - `subDistrict` string
    - `postalCode` string
    - `notes` string: Free-form note shown to the driver
  - `destination` Address, required
    - `address` string, required
    - `coordinates` Coordinates, required
      - `latitude` number, double, required
      - `longitude` number, double, required
    - `province` string
    - `city` string
    - `district` string
    - `subDistrict` string
    - `postalCode` string
    - `notes` string: Free-form note shown to the driver
  - `instructions` Instruction[]
    - `type` 'WEBVIEW'
    - `text` string
    - `url` string
  - `schedule` Schedule
    - `pickupTimeFrom` string, date-time
    - `pickupTimeTo` string, date-time

## Response `201`

Delivery created in ALLOCATING

- Delivery
  - `deliveryID` string
  - `providerOrderID` string
  - `providerOutletID` string
  - `paymentMethod` 'CASH' | 'CASHLESS'
  - `status` 'QUEUEING' | 'PREPARING' | 'VERIFIED' | 'NOT_VERIFIED' | 'ALLOCATING' | 'PENDING_PICKUP' | 'PICKING_UP' | 'PENDING_DELIVERY' | 'IN_DELIVERY' | 'COMPLETED' | 'FAILED' | 'CANCELLED'
  - `courier` Courier, nullable
    - `name` string
    - `phone` string
  - `trackingURL` string, nullable: EXPRESS only. Present from IN_DELIVERY onward.
  - `sender` Contact
    - `firstName` string, required
    - `lastName` string
    - `companyName` string
    - `email` string, email
    - `phone` string
  - `recipient` Recipient
    - `firstName` string, required
    - `lastName` string
    - `companyName` string
    - `email` string, email
    - `phone` string
    - `actualRecipientName` string, nullable: Name of the actual person who signed for the package. Populated on COMPLETED.
  - `quote` Quote
    - `service` object
      - `category` 'EXPRESS' | 'LOGISTIC'
      - `type` 'INSTANT' | 'SAME_DAY'
      - `name` string
    - `currency` Currency
      - `code` string
      - `symbol` string
    - `amount` integer: Total fare in IDR.
    - `estimatedTimeline` object
      - `pickup` string, date-time, nullable
      - `dropoff` string, date-time, nullable
    - `distance` number: Distance in meters.
  - `media` Media[]
    - `type` 'PICKUP_PROOF' | 'DELIVERY_PROOF' | 'FAILED_PROOF'
    - `url` string
    - `createdAt` string, date-time
  - `timeline` TimelineEntry[]
    - `status` string
    - `createdAt` string, date-time
  - `createdAt` string, date-time
  - `pickupAt` string, date-time, nullable
  - `completedAt` string, date-time, nullable
  - `failedAt` string, date-time, nullable
  - `failedReason` string, nullable
  - `cancelledAt` string, date-time, nullable
  - `cancelledReason` string, nullable

## Other responses

- `400`: Out of operational hours / area, or bad field
- `404`: Service type not enabled for your workspace
- `422`: Distance SLA exceeded

---

[API](https://skmtc.dev/dashelectric/apis/dash-open-api.md) - [All operations](https://skmtc.dev/dashelectric/apis/dash-open-api/llms.txt) - [OpenAPI document](https://skmtc.dev/dashelectric/apis/dash-open-api/revisions/7544dae33009?raw)
