Carrier’s official API

Mothership API: integration guide

Mothership is a US freight platform that quotes and books LTL and truckload moves, both on its own network and through partner LTL carriers such as ABF, Saia, Old Dominion and TForce. Its REST/JSON API lets you request quotes, buy a rate to create a shipment, follow tracking events, download BOL and POD documents, and sync invoices. It suits shippers and platforms that want instant freight pricing and booking without a carrier-by-carrier integration.

This guide covers Mothership’s own API (api.mothership.com). Credentials come from Mothership, not from FreightAPIs, and we are not affiliated with them.

Want one API key for carrier terminals, NMFC and ports instead? FreightAPIs API docs →

Interface REST/JSONEndpoints 13Reviewed 2026-10-09Open in ChatGPT↗Open in Claude↗

At a glance

CarrierMothership
TypeFreight marketplace
SCACMHPG
InterfaceREST/JSON
AuthenticationStatic bearer token
CapabilitiesAccount check, Rate quote, Transit time, Booking & shipment management, Shipment tracking, Documents (BOL, POD), Invoices

Getting access

  • Create a Mothership user account first, then request API access through Mothership’s developer documentation site (developers.mothership.com), which requires signing in.
  • Mothership generates a static API token for you. Production tokens are also managed from the API settings area of the Mothership dashboard.
  • Booking a shipment charges the default payment method on your Mothership organization, so a payment method must be set up in the dashboard before you can buy rates in production.
  • The documentation reviewed does not list API fees or published rate limits beyond a 429 response when too many shipments are created in a short time.

Authentication

Static bearer token.

  • Send Authorization: Bearer <API_TOKEN> on every request. There is no OAuth exchange and no documented token expiry.
  • Call GET /account to confirm a token works; it returns your company account details.
  • Authentication failures come back with error type UNAUTHENTICATED; a token without access to a resource returns MISSING_PERMISSION.

Environments

Productionhttps://api.mothership.com/beta

Endpoints

Account check

Retrieve the account tied to your token. Useful as a health check when wiring up credentials.

GET/accountReturn company account details for the calling token.

Rate quote

Send pickup and delivery locations, freight lines and a pickup-ready date. Mothership returns a quote ID with an expiry time and a list of rates from its own network and partner carriers, each with price, transit days and service options.

POST/quotesCreate a quote and return the available rates.
Key inputspickup / delivery: address.zip (required), street, city, state; openTime and closeTime (HHmm)pickup / delivery: accessorials[] (e.g. liftgate, residential, inside, limitedAccess, appointment, scheduledDelivery)freight[]: quantity, type (Pallet, Box, Crate…), weight (lb per piece), length, width, height (inches)pickupReadyDate: date (YYYY-MM-DD), time (HHmm)rateResponseTimeoutMs, applyAvailableCredits, declaredFreightValue
Key outputsdata.id (quote ID), data.expiresAtdata.rates[] (id, price, transitDays {minimum, maximum}, estimatedPickupDate, estimatedDeliveryDate, provider, providerScac, services, warnings, coveragePrice)data.metadata (purchasable, invalidFieldsRequiredForPurchase, suggested accessorials)

Transit time

Transit time is part of each rate rather than a separate call. Every rate carries a minimum and maximum transit-day range plus estimated pickup and delivery dates.

POST/quotesRead transitDays and estimated dates from each returned rate.
Key outputsrates[].transitDays.minimum / maximumrates[].estimatedPickupDate, rates[].estimatedDeliveryDate

Booking & shipment management

Turn a quote into a shipment by sending the quote ID and the chosen rate ID. Mothership charges your default payment method and returns a shipment ID (for example MS-prefixed) with an initial status of Unallocated. Shipments can also be listed, fetched and cancelled.

POST/shipmentsBuy a rate from a quote and create the shipment.
GET/shipmentsList your shipments.
GET/shipments/{id}Get one shipment in full.
POST/shipments/{id}/cancelCancel a shipment.
Key inputsquoteIdrateId (must be one of that quote's rates[].id; no other fields are allowed)
Key outputsid (shipment ID)status, priceearliestPickupDate, estimatedDeliveryDatetrackingUrlpickup, delivery, freight

Shipment tracking

Get the tracking event history for a shipment. Events include a timestamp, the current city and state when the carrier supplies them, and the carrier PRO number once one is assigned.

GET/tracking/{shipmentId}Return tracking events for a shipment.
Key outputsdata.results[] (eventType, timestamp, shipmentReferenceNumber, pickupLocationName, deliveryLocationName, city, state, proNumber, status)

Documents (BOL, POD)

List the documents available for a shipment, each with a temporary download URL and its expiry time. A separate call resolves a file ID to its download location through a redirect.

GET/documents/{shipmentId}List available documents with temporary download URLs.
GET/files/{fileId}Redirect (301) to the download location of a file.
Key outputstype (billOfLading, certificateOfInsurance, deliveryReceipt, proofOfDelivery)urlexpiresAt

Invoices

Sync invoices incrementally by asking for everything created or changed since a timestamp, list invoices for a shipment, and fetch full invoice detail with line items, payments, credits and status.

GET/invoices/modified_sinceList invoice IDs created or modified since a timestamp (paginated).
GET/invoices/by_shipment_id/{shipmentId}List invoices linked to one shipment (paginated).
GET/invoices/{invoiceId}Get one invoice with line items, payments and status.
Key inputstimestamp (ISO 8601)limit (1–100, default 10)page (from the previous response's nextPage)
Key outputsinvoices[] (id, lastModifiedAt), hasMore, nextPagetotal, amountDue, paidAmount, creditedAmount (all in cents)status (open, paid, unpaid, pastDue, void), entityType (shipment, claim, statement), entityIdlineItems[] (type such as base-shipment, fuel-surcharge, liftgate; unitAmountCents, totalAmountCents)

Example request

Request a freight quotebash
curl -X POST "https://api.mothership.com/beta/quotes" \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "pickup": { "address": { "street": "100 Main St", "city": "Los Angeles", "state": "CA", "zip": "90027" }, "openTime": "0900", "closeTime": "1700", "accessorials": ["liftgate"] }, "delivery": { "address": { "street": "200 Market St", "city": "Los Angeles", "state": "CA", "zip": "90036" }, "openTime": "0900", "closeTime": "1700", "accessorials": ["residential", "liftgate"] }, "freight": [ { "quantity": 2, "type": "Pallet", "weight": 400, "length": 48, "width": 40, "height": 48, "description": "Boxed apparel" } ], "pickupReadyDate": { "date": "2026-10-15", "time": "0900" } }'

Pick a rate from data.rates, then POST {"quoteId": "<data.id>", "rateId": "<rate id>"} to /shipments before data.expiresAt passes. Check data.metadata.purchasable first.

Integration notes

  • Money uses two units. Quote and shipment prices are in dollars, while every invoice amount (total, amountDue, line items) is in cents. Convert before comparing a quote to its invoice.
  • Quotes expire at expiresAt. Booking with an expired quoteId fails, so re-quote rather than caching quotes for long.
  • A quote can return rates but still not be purchasable. If metadata.purchasable is false, fill in the fields listed in invalidFieldsRequiredForPurchase (for example contact details) and quote again; booking otherwise fails with QUOTE_NOT_PURCHASABLE.
  • Times are 24-hour HHmm strings ("0900"), dates are YYYY-MM-DD, phone numbers are E.164 ("+1..."). Freight weight is pounds per piece and dimensions are whole inches, each at least 1.
  • rateResponseTimeoutMs defaults to 25,000 ms (minimum 5,000). Lowering it speeds up the response but can drop slower carriers from the rate list.
  • Document URLs are temporary. Store the file, not the link, and call the documents endpoint again after expiresAt. POD only appears after delivery.
  • Tracking eventType and status are free text from the carrier, not a fixed enum. Match loosely, and expect city, state and proNumber to be missing on some events.
  • All responses wrap their payload in a data object, including errors, which carry a type such as INVALID_REQUEST, NO_RATES_FOUND, CARGO_TOO_LARGE, PAYMENT_REQUIRED or RATE_LIMIT_EXCEEDED. The rate fields truck and serviceType are deprecated in favor of services.

FAQ

Does Mothership have an API?

Yes. Mothership has a REST/JSON API for freight quotes, booking, tracking, documents and invoices.

How do I get a Mothership API token?

Create a Mothership account, then request API access through the Mothership developer site. Mothership issues a static bearer token that you send in the Authorization header.

Which carriers does the Mothership API quote?

Rates can come from Mothership's own network and from partner LTL carriers including ABF, Central Transport, Forward Air, Old Dominion, Saia, Southeastern, TForce, Ward and XPO. Each rate names its provider and SCAC.

How do I book a shipment with the Mothership API?

Create a quote with POST /quotes, choose a rate, then POST /shipments with the quoteId and rateId. The shipment is charged to your organization's default payment method.

Can I get a proof of delivery from the Mothership API?

Yes. GET /documents/{shipmentId} lists available documents, including billOfLading and proofOfDelivery, each with a temporary download URL. The POD appears once the shipment is delivered.

On FreightAPIs

Official resources

Written from Mothership’s published API documentation and last checked 2026-10-09. FreightAPIs is not affiliated with Mothership; endpoints and access rules can change, so confirm details in the carrier’s own documentation before going live.

Other carrier API guides