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.

Connect anything

A WMS or ERP, order management, a spreadsheet, or an automation tool like Zapier or Make.

Four endpoints

Rates, booking, shipment status and documents. No SDK required.

Scoped to you

Credentials only ever reach your own shipments. No invoices, payments or account access.

Getting Started

  1. 1Sign in to your Delivered In Time customer portal and open API Access.
  2. 2Click Generate Credentials. Your API username and password appear once — copy the password immediately and store it in your system.
  3. 3Wait for approval. An administrator reviews the request; the status on that page turns Active when the credentials are live.
  4. 4Call Get Rates, then Book Shipment with the returned quoteReference. Poll Shipment Status and pull Documents as needed.
Base URL
https://osto-freight-47397175.base44.app/functions

Authentication

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 header
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.

Error response
{
  "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" }
    ]
  }
}
StatusCodeMeaning
400validation_failedA field is missing or invalid. The response lists each offending field.
401unauthorizedMissing, malformed, or incorrect Basic auth credentials.
403not_approvedThe credentials exist but have not been approved yet, or were revoked.
404shipment_not_foundNo shipment with that number exists on your account.
404quote_not_foundThe quoteReference is unknown or belongs to another account.
429rate_limitedToo many requests. Slow down and retry after a short pause.
502booking_failedThe 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.

POST/functions/apiGetRates

Get 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

FieldTypeRequiredDescription
pickupDatestringRequiredRequested pickup date, YYYY-MM-DD.
origin.citystringRequiredOrigin city.
origin.statestringRequiredOrigin state, 2-letter code.
origin.zipstringRequiredOrigin 5-digit ZIP.
origin.locationTypestringOptionalBusiness (default), Residential, or a limited-access type.
destination.*objectRequiredSame shape as origin: city, state, zip, locationType.
handlingUnitsarrayRequiredOne entry per pallet/unit type. At least one required.
handlingUnits[].quantitynumberOptionalNumber of identical units. Defaults to 1.
handlingUnits[].weightnumberRequiredWeight in pounds, per unit.
handlingUnits[].lengthnumberRequiredLength in inches.
handlingUnits[].widthnumberRequiredWidth in inches.
handlingUnits[].heightnumberRequiredHeight in inches.
handlingUnits[].descriptionstringRequiredCommodity description.
handlingUnits[].freightClassstringOptionalNMFC freight class, e.g. "70". Calculated by density when omitted.
handlingUnits[].nmfcstringOptionalNMFC item code.
handlingUnits[].stackablebooleanOptionalWhether the units can be stacked.
accessorialsarrayOptionalAccessorial codes — see the code list below.
Request
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"]
  }'
Response 200
{
  "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.
POST/functions/apiBookShipment

Book 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

FieldTypeRequiredDescription
quoteReferencestringRequiredThe quoteReference from Get Rates.
carrierstringRequiredCarrier code from the rates array, e.g. "SAIA".
shipper.namestringRequiredPickup company name.
shipper.address1stringRequiredPickup street address.
shipper.address2stringOptionalSuite, unit, dock.
shipper.contactstringRequiredPickup contact name.
shipper.phonestringRequiredPickup contact phone, 10 digits.
shipper.emailstringOptionalPickup contact email.
consignee.*objectRequiredSame shape as shipper, for the delivery location.
pickup.readyTimestringRequiredPickup window opens, HH:MM 24-hour.
pickup.closeTimestringRequiredPickup window closes, HH:MM 24-hour.
pickup.instructionsstringOptionalNotes printed in the BOL pickup remarks.
delivery.readyTimestringRequiredDelivery window opens, HH:MM 24-hour.
delivery.closeTimestringRequiredDelivery window closes, HH:MM 24-hour.
delivery.instructionsstringOptionalNotes printed in the BOL delivery remarks.
poNumberstringOptionalYour PO number, printed on the BOL.
shipmentIdstringOptionalYour internal shipment/order ID.
referenceNumbersarrayOptionalAdditional reference strings printed on the BOL.
specialInstructionsstringOptionalGeneral instructions printed on the BOL.
Request
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"]
  }'
Response 200
{
  "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.
GET/functions/apiGetShipment

Shipment 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

FieldTypeRequiredDescription
bolNumberstringOptionalThe BOL number returned at booking. Either this or proNumber is required.
proNumberstringOptionalThe carrier PRO number. Either this or bolNumber is required.
Request
curl "https://osto-freight-47397175.base44.app/functions/apiGetShipment?bolNumber=OSTOF214" \
  -u "YOUR_API_USERNAME:YOUR_API_PASSWORD"
Response 200
{
  "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.
GET/functions/apiGetDocuments

Documents

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

FieldTypeRequiredDescription
bolNumberstringOptionalThe BOL number. Either this or proNumber is required.
proNumberstringOptionalThe carrier PRO number. Either this or bolNumber is required.
Request
curl "https://osto-freight-47397175.base44.app/functions/apiGetDocuments?bolNumber=OSTOF214" \
  -u "YOUR_API_USERNAME:YOUR_API_PASSWORD"
Response 200
{
  "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 Pickup
LGDLLiftgate at Delivery
INSPUInside Pickup
INSDLInside Delivery
APTPUAppointment Pickup
APTDLAppointment Delivery
NOTPUNotification Before Pickup
NOTDLNotification Before Delivery
SORTPUSort & Segregate at Pickup
SORTDLSort & Segregate at Delivery
LIMACCLimited Access

Residential 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