Skip to main content
An endpoint is one HTTP method and path, such as GET /deliveries. Add the path to the base URL:
The interactive endpoint pages in the navigation contain every field, example, header, and possible response. This page helps you choose the endpoint you need.

Choose an endpoint

GET means read data. POST means calculate, create, or change something. Text inside braces is a value you replace. For example:

Common workflows

Create a delivery quickly

Use POST /deliveries with an inline recipient. This creates or reuses the recipient and address while creating the delivery. See the quickstart.

Reuse a recipient on many deliveries

  1. POST /recipients and save the returned rcp_... ID.
  2. POST /recipients/{recipient_id}/addresses and save the returned adr_... ID.
  3. Send both IDs in each later POST /deliveries request.
Use this approach when the same customer receives multiple deliveries.

Show a delivery-history page

  1. Call GET /deliveries with filters such as status or external_id.
  2. Follow meta.next_cursor while meta.has_more is true.
  3. Call GET /deliveries/{delivery_id} for one full snapshot.
  4. Call GET /deliveries/{delivery_id}/events for its public timeline.

Cancel a delivery

Call POST /deliveries/{delivery_id}/cancel. Cancellation works only before pickup. Cancelling an already-cancelled delivery returns the same cancelled delivery. Cancelling after pickup returns 409 DELIVERY_NOT_CANCELLABLE.

Visibility rules

Recipients and addresses belong to the HaulStow business, so two developer applications for the same business can reuse them. Deliveries belong to the developer application that created them. Another application receives 404 instead of learning that the delivery exists. The public delivery model intentionally excludes cargo contents, line items, rider details, internal operational state, platform notes, settlement data, and fee overrides.

IDs and filters

The letters at the beginning of an ID tell you what it identifies: Copy IDs exactly. Do not remove the prefix or try to use an internal order ID.

Filters and pages

Delivery lists accept status, external_id, created_after, created_before, cursor, and limit. Recipient lists accept cursor and limit. Cursors are opaque and must be passed back unchanged. Example: list the first 25 in-transit deliveries:
Example: find the delivery attached to your own order number:
See polling and pagination for how to use next_cursor.