Create a dispatch job. The response carries the job document in PROCESSING with nothing
from the carrier yet; the carrier is tendered asynchronously, so poll the job until
is_terminal is true.
Two request shapes, told apart by rate_id. With it, everything about the shipment comes
from the rate. Without it, the shipment is stated in full and the carrier account is named —
which only an account with COLLECT billing terms may do.
LTL and VLTL are the only modes this surface books today. FTL and PARCEL
dispatch are not yet available here — a rate quoted for either cannot be booked through this
endpoint, even though the rate itself exists.
Rated with both stop contacts? Send only rate_id — the Book a rate example. That is
the case when the rating pickup stop carried company_name, first_name and phone and the
delivery stop company_name and phone, as the create_rating_job example does.
Rated without them? Add origin_contact and/or destination_contact for the stop that
falls short — the Book a rate, adding contacts example.
| Field | Required |
|---|---|
rate_id |
Yes |
origin_contact (company_name, first_name, phone) |
Only if the rating pickup stop carried no contact with all three; not checked here, but the carrier rejects a pickup with nobody to call |
destination_contact (company_name, phone) |
Only if the rating delivery stop carried no contact with both; rejected with 400 missing_delivery_contact otherwise |
origin_planned_window / destination_planned_window |
No — only if the date moved since rating |
references / notes_for_carrier |
No |
No rate to book against? Send the shipment in full — the Book without a rate example. Sending rate_id alongside any of these fields is rejected: the two shapes cannot mix.
| Field | Required |
|---|---|
account_id |
Yes |
provider_code |
Yes |
mode |
Yes |
stops (2 or more) |
Yes |
requested_window on the pickup stop (earliest, latest) |
Yes |
contact.company_name / first_name / phone on the pickup stop |
Yes |
contact.company_name / phone on the delivery stop |
Yes |
handling_units (1 or more) |
Yes |
equipment, accessorials, service_code, carrier_rate_id, gross_weight, total_declared_value, customer_reference_number |
No |
Book the carrier that produced a rate.
Everything about the shipment — the carrier account, the mode, the stops, the freight, the
price — comes from the rate and the rating request behind it. The four override fields exist
because the rate is a snapshot: rating stops routinely carry no contact, and carriers that
reject dates at rating time carry carrier-generated timestamps instead of the window the
customer asked for. So rate_id alone is a complete request only when the rating pickup
contact has company_name, first_name and phone and the delivery contact has
company_name and phone; otherwise send the override for the stop that falls short.
The example sends both, which is the smallest request that always books.
Use this shape whenever you already called Rating. If you have not rated this shipment, use
PublicObjectDispatchRequest instead — sending rate_id is what selects this shape. See
the create_dispatch_job operation description for the full field breakdown.
Successful Response
required | object (DispatchResult) A dispatch job: whether the carrier has answered, and what it said. Polling is the only completion signal, and it is bounded: a dispatch the carrier never
confirms is expired by the stale-dispatch cron, so |
Validation Error
No such rate, or no such dispatch job for this tenant.
The Idempotency-Key is claimed by a create that has not finished.
An unknown internal server issue occured while processing a request. A report is created and logged.
The rating request carried both stop contacts, so the rate is a complete booking.
{- "rate_id": "01HZKD9M4TQ4Z8XW0NKZ6RYX4J"
}{- "data": {
- "capacity_provider": {
- "account_id": "01KBZ91QKW3D9VDP5PVY4HWQ1G",
- "account_name": "ABF - Main"
}, - "carrier_name": "ABF Freight",
- "created_at": "2026-08-19T15:30:32.591Z",
- "errors": [ ],
- "id": "01KBZC9J8Q0000000000000000",
- "is_terminal": false,
- "provider_code": "ABF",
- "references": [
- {
- "qualifier": "BOL_NUMBER",
- "value": "BOL-77120"
}
], - "resource_id": "9f2c1b84-6d3a-4c17-9b0e-2f5a7c48d31e",
- "resource_type": "dispatch_job",
- "status": "PROCESSING"
}
}