Developer Documentation
Delivered In Time API
A simple JSON over HTTPS API for pulling LTL freight rates, booking shipments, tracking them and retrieving paperwork — connected to whatever system you already run.
A WMS or ERP, order management, a spreadsheet, or an automation tool like Zapier or Make.
Rates, booking, shipment status and documents. No SDK required.
Credentials only ever reach your own shipments. No invoices, payments or account access.
Getting Started
- 1Sign in to your Delivered In Time customer portal and open API Access.
- 2Click Generate Credentials. Your API username and password appear once — copy the password immediately and store it in your system.
- 3Wait for approval. An administrator reviews the request; the status on that page turns Active when the credentials are live.
- 4Call Get Rates, then Book Shipment with the returned quoteReference. Poll Shipment Status and pull Documents as needed.
https://osto-freight-47397175.base44.app/functionsAuthentication
Every request uses HTTP Basic authentication with your API username and password. Send it on each call — there is no token exchange or session to manage.
Authorization: Basic base64(API_USERNAME:API_PASSWORD) # Most HTTP clients build this for you: curl -u "YOUR_API_USERNAME:YOUR_API_PASSWORD" ...
Requests must be HTTPS. Treat the password like any other secret — store it in your system's credential store, never in client-side code. If it leaks, generate a new pair from the portal; the old one stops working immediately.
Errors & Limits
Successful responses always include success: true. Failures return the matching HTTP status with a machine-readable code and a human message.
{
"success": false,
"error": {
"code": "validation_failed",
"message": "One or more fields are missing or invalid",
"fields": [
{ "field": "origin.zip", "message": "origin.zip must be a 5-digit ZIP" }
]
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | validation_failed | A field is missing or invalid. The response lists each offending field. |
| 401 | unauthorized | Missing, malformed, or incorrect Basic auth credentials. |
| 403 | not_approved | The credentials exist but have not been approved yet, or were revoked. |
| 404 | shipment_not_found | No shipment with that number exists on your account. |
| 404 | quote_not_found | The quoteReference is unknown or belongs to another account. |
| 429 | rate_limited | Too many requests. Slow down and retry after a short pause. |
| 502 | booking_failed | The carrier rejected the booking. The message carries the carrier's reason. |
Requests are rate limited per credential. Quoting is the heaviest call — cache rates you have already retrieved rather than re-quoting the same lane repeatedly. Every call is logged and visible to our support team.
/functions/apiGetRatesGet Rates
Returns live rates from every carrier available on the lane, already priced for your account. The response includes a quoteReference you pass to Book Shipment — rates are only bookable through that reference.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| pickupDate | string | Required | Requested pickup date, YYYY-MM-DD. |
| origin.city | string | Required | Origin city. |
| origin.state | string | Required | Origin state, 2-letter code. |
| origin.zip | string | Required | Origin 5-digit ZIP. |
| origin.locationType | string | Optional | Business (default), Residential, or a limited-access type. |
| destination.* | object | Required | Same shape as origin: city, state, zip, locationType. |
| handlingUnits | array | Required | One entry per pallet/unit type. At least one required. |
| handlingUnits[].quantity | number | Optional | Number of identical units. Defaults to 1. |
| handlingUnits[].weight | number | Required | Weight in pounds, per unit. |
| handlingUnits[].length | number | Required | Length in inches. |
| handlingUnits[].width | number | Required | Width in inches. |
| handlingUnits[].height | number | Required | Height in inches. |
| handlingUnits[].description | string | Required | Commodity description. |
| handlingUnits[].freightClass | string | Optional | NMFC freight class, e.g. "70". Calculated by density when omitted. |
| handlingUnits[].nmfc | string | Optional | NMFC item code. |
| handlingUnits[].stackable | boolean | Optional | Whether the units can be stacked. |
| accessorials | array | Optional | Accessorial codes — see the code list below. |
curl -X POST https://osto-freight-47397175.base44.app/functions/apiGetRates \
-u "YOUR_API_USERNAME:YOUR_API_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"pickupDate": "2026-10-02",
"origin": { "city": "Newark", "state": "NJ", "zip": "07102" },
"destination": { "city": "Atlanta", "state": "GA", "zip": "30303",
"locationType": "Business" },
"handlingUnits": [{
"quantity": 2, "weight": 850,
"length": 48, "width": 40, "height": 50,
"description": "Packaged retail goods",
"freightClass": "70", "stackable": false
}],
"accessorials": ["LGDL"]
}'{
"success": true,
"quoteReference": "DITQ-1001",
"pickupDate": "2026-10-02",
"rates": [
{
"carrier": "SAIA",
"carrierName": "Saia LTL Freight",
"total": 412.87,
"currency": "USD",
"transitDays": 3,
"estimatedDeliveryDate": "2026-10-07",
"quoteNumber": "DITQ-1001"
},
{
"carrier": "ABF",
"carrierName": "ABF Freight",
"total": 468.20,
"currency": "USD",
"transitDays": 2,
"estimatedDeliveryDate": "2026-10-06",
"quoteNumber": "DITQ-1001"
}
]
}- Rates are sorted cheapest first. total is your all-in price in USD — no additional markup is applied at booking.
- quoteReference is the DITQ number for the entire quote and all carrier rates. Carrier-internal quote references are never exposed; pass the DITQ number and selected carrier to book.
- A quoteReference stays bookable as long as the carrier honors the rate; re-quote if the pickup date moves.
- Carriers that fail to return a rate are silently omitted rather than failing the whole request.
/functions/apiBookShipmentBook Shipment
Books one of the carriers returned by Get Rates. The lane, freight and pickup date come from the quoteReference — you supply the street-level shipper and consignee details, pickup and delivery windows, and any references. The response carries the BOL, PRO and pickup number.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| quoteReference | string | Required | The quoteReference from Get Rates. |
| carrier | string | Required | Carrier code from the rates array, e.g. "SAIA". |
| shipper.name | string | Required | Pickup company name. |
| shipper.address1 | string | Required | Pickup street address. |
| shipper.address2 | string | Optional | Suite, unit, dock. |
| shipper.contact | string | Required | Pickup contact name. |
| shipper.phone | string | Required | Pickup contact phone, 10 digits. |
| shipper.email | string | Optional | Pickup contact email. |
| consignee.* | object | Required | Same shape as shipper, for the delivery location. |
| pickup.readyTime | string | Required | Pickup window opens, HH:MM 24-hour. |
| pickup.closeTime | string | Required | Pickup window closes, HH:MM 24-hour. |
| pickup.instructions | string | Optional | Notes printed in the BOL pickup remarks. |
| delivery.readyTime | string | Required | Delivery window opens, HH:MM 24-hour. |
| delivery.closeTime | string | Required | Delivery window closes, HH:MM 24-hour. |
| delivery.instructions | string | Optional | Notes printed in the BOL delivery remarks. |
| poNumber | string | Optional | Your PO number, printed on the BOL. |
| shipmentId | string | Optional | Your internal shipment/order ID. |
| referenceNumbers | array | Optional | Additional reference strings printed on the BOL. |
| specialInstructions | string | Optional | General instructions printed on the BOL. |
curl -X POST https://osto-freight-47397175.base44.app/functions/apiBookShipment \
-u "YOUR_API_USERNAME:YOUR_API_PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"quoteReference": "DITQ-1001",
"carrier": "SAIA",
"shipper": {
"name": "Acme Distribution", "address1": "120 Dock St",
"contact": "Dana Reyes", "phone": "9735550142",
"email": "dock@acme.com"
},
"consignee": {
"name": "Southeast Retail DC", "address1": "900 Peachtree Ind Blvd",
"contact": "Marcus Hall", "phone": "4045550188"
},
"pickup": { "readyTime": "09:00", "closeTime": "16:00",
"instructions": "Use dock 4" },
"delivery": { "readyTime": "08:00", "closeTime": "15:00" },
"poNumber": "PO-88231",
"shipmentId": "WMS-40192",
"referenceNumbers": ["WAVE-7781"]
}'{
"success": true,
"alreadyBooked": false,
"quoteNumber": "DITQ-1001",
"bolNumber": "OSTOF214",
"proNumber": "77137243070",
"pickupNumber": "4412098",
"pickupDate": "2026-10-02",
"carrier": "SAIA",
"total": 412.87,
"currency": "USD",
"shipmentId": "68f3c2b14b2e7d0012ab3499",
"pickupWarning": null
}- Booking is idempotent per quoteReference — repeating the call returns the original shipment with alreadyBooked: true instead of double-booking.
- proNumber and pickupNumber depend on the carrier; some assign them after dispatch, in which case they arrive later via Shipment Status.
- pickupWarning is non-null when the shipment booked but the pickup request needs manual follow-up — the shipment is still valid.
- shipmentId is the Delivered In Time record ID; store it alongside bolNumber for your own reconciliation.
/functions/apiGetShipmentShipment Status
Returns the current numbers, status and dates for one of your shipments. Poll this to keep your own system in sync — hourly is plenty for LTL.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| bolNumber | string | Optional | The BOL number returned at booking. Either this or proNumber is required. |
| proNumber | string | Optional | The carrier PRO number. Either this or bolNumber is required. |
curl "https://osto-freight-47397175.base44.app/functions/apiGetShipment?bolNumber=OSTOF214" \ -u "YOUR_API_USERNAME:YOUR_API_PASSWORD"
{
"success": true,
"shipment": {
"quoteNumber": "DITQ-1001",
"bolNumber": "OSTOF214",
"proNumber": "77137243070",
"pickupNumber": "4412098",
"carrier": "SAIA",
"status": "in_transit",
"trackingStatus": "in_transit",
"voided": false,
"pickupDate": "2026-10-02",
"estimatedDeliveryDate": "2026-10-07",
"deliveryDate": null,
"total": 412.87,
"referenceNumbers": ["PO: PO-88231", "WAVE-7781"],
"documents": [
{ "type": "BOL", "name": "BOL_OSTOF214.pdf" },
{ "type": "Pallet Labels", "name": "Labels_OSTOF214.pdf" }
],
"bookedAt": "2026-09-23T14:22:08.114Z"
}
}- status values: created, onboard, picked_up, in_transit, at_destination, out_for_delivery, delivered, cancelled.
- Parameters can be sent as a query string (GET) or a JSON body (POST) — both are accepted.
- documents lists what is available; call the Documents endpoint to get download links.
/functions/apiGetDocumentsDocuments
Returns time-limited download links for a shipment's paperwork — the Bill of Lading and pallet labels, plus delivery documents such as the POD once the carrier releases them. Anything not yet generated is created on demand.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| bolNumber | string | Optional | The BOL number. Either this or proNumber is required. |
| proNumber | string | Optional | The carrier PRO number. Either this or bolNumber is required. |
curl "https://osto-freight-47397175.base44.app/functions/apiGetDocuments?bolNumber=OSTOF214" \ -u "YOUR_API_USERNAME:YOUR_API_PASSWORD"
{
"success": true,
"bolNumber": "OSTOF214",
"proNumber": "77137243070",
"documents": [
{
"type": "BOL",
"name": "BOL_OSTOF214.pdf",
"url": "https://...signed-url...",
"expiresAt": "2026-09-23T15:22:08.114Z"
},
{
"type": "Pallet Labels",
"name": "Labels_OSTOF214.pdf",
"url": "https://...signed-url...",
"expiresAt": "2026-09-23T15:22:08.114Z"
}
]
}- Links expire one hour after the call — download the file, don't store the URL.
- Every document is a PDF. Fetch the url with a plain GET; no auth header is needed on the signed link.
- The first call for a shipment may take a few extra seconds while the BOL and labels are generated.
Accessorial Codes
Pass these codes in the accessorials array on Get Rates. They are priced into the returned rate and carried through to the booking and BOL.
LGPULiftgate at PickupLGDLLiftgate at DeliveryINSPUInside PickupINSDLInside DeliveryAPTPUAppointment PickupAPTDLAppointment DeliveryNOTPUNotification Before PickupNOTDLNotification Before DeliverySORTPUSort & Segregate at PickupSORTDLSort & Segregate at DeliveryLIMACCLimited AccessResidential and limited-access locations are set throughlocationTypeon the origin or destination rather than an accessorial code.
Need help connecting?
Our team will walk your developers through the integration and get your credentials approved.
Talk to us