TruckTabs API · v1
Everything around a quote: finding the right place, a state's legal limits and permitting offices, the codes a quote accepts, and what each error means.
GEThttps://trucktabs.com/api/v1/me
Your account, this key's name, prefix, scopes and expiry, and your limits. Any key can call it. The response is shown on the overview.
GEThttps://trucktabs.com/api/v1/places?q=Portland&state=OR
Up to five US places matching q (2 to 120 characters), optionally within one state. Send the one you mean in a quote as lat, lng and state, and it is used exactly. Limited to 60 lookups a minute per key.
{
"places": [
{ "label": "Portland, Oregon", "city": "Portland", "state": "OR", "postal_code": null, "lat": 45.5152, "lng": -122.6784 }
]
}GEThttps://trucktabs.com/api/v1/jurisdictions
The states we permit, and whether we have their legal limits on file.
{
"jurisdictions": [
{ "code": "AL", "name": "Alabama", "limits_on_file": true },
{ "code": "AK", "name": "Alaska", "limits_on_file": false },
…
]
}GEThttps://trucktabs.com/api/v1/jurisdictions/{code}/limits
A state's legal size and weight limits and its permitting offices. A load over any of these limits needs an oversize/overweight permit in that state. Dimensions are in inches and weights in pounds. limits is null when we have nothing on file, which is not the same as no limit. An unknown code is 404 NOT_FOUND.
{
"state": "OH",
"state_name": "Ohio",
"limits": {
"width_in": 102,
"height_in": 162,
"length_single_in": 480,
"length_semi_in": 636,
"length_overall_in": null,
"overhang_front_in": 36,
"overhang_rear_in": 48,
"gross_weight_lbs": 80000,
"axle_single_lbs": 20000,
"axle_tandem_lbs": 34000,
"axle_tridem_lbs": 48000,
"axle_single_non_divisible_lbs": 20000,
"axle_tandem_non_divisible_lbs": 34000,
"axle_tridem_non_divisible_lbs": 48000
},
"source_url": "https://…",
"verified_at": "2026-09-06",
"offices": [
{
"label": "Special Hauling Permits",
"permit_type": "osow",
"phone": "…",
"email": null,
"website_url": "https://…",
"portal_url": "https://…",
"weekday_hours": "07:30–17:00",
"saturday_hours": null
}
],
"note": "Dimensions are in inches and weights in pounds. A load exceeding any limit needs an oversize/overweight permit in that state."
}Send the code. The name and the aliases are accepted too, in any case and with any punctuation. An unknown word is refused, never guessed. tractor_trailer and truck_trailer are semis, which need a trailer type, trailer length and axles per unit. Every other type needs total axles and an overall length.
| Code | Name | Also accepted |
|---|---|---|
| all_terrain_vehicle | All Terrain Vehicle | — |
| bus_charter | Bus, Charter | — |
| bus_non_charter | Bus, Non-Charter | — |
| dump_truck | Dump Truck | — |
| mining_truck | Mining Truck | — |
| motor_home | Motor Home | — |
| special_mobile_equipment | Special Mobile Equipment | — |
| straight_truck | Straight Truck | box truck |
| tractor | Tractor | bobtail |
| tractor_trailer | Tractor/Trailer | semi, tractor trailer, semi truck |
| truck_trailer | Truck/Trailer | truck and trailer |
| utility_terrain_vehicle | Utility Terrain Vehicle | — |
| wrecker | Wrecker | — |
| Code | Name | Also accepted |
|---|---|---|
| auto_carrier | Auto Carrier | — |
| conestoga | Conestoga | — |
| double_drop | Double Drop | double drop deck |
| drop_deck_landoll | Drop Deck, Landoll | — |
| dump_trailer | Dump Trailer | — |
| flatbed | Flatbed | — |
| flatbed_b_train | Flatbed, B-Train | — |
| flatbed_conestoga | Flatbed, Conestoga | — |
| flatbed_double | Flatbed, Double | — |
| flatbed_gooseneck | Flatbed, Gooseneck | gooseneck |
| flatbed_hotshot | Flatbed, Hotshot | hotshot |
| flatbed_maxi | Flatbed, Maxi | — |
| hopper_bottom | Hopper Bottom | — |
| lowboy | Lowboy | low boy, lowbed, low bed |
| moving_van | Moving Van | — |
| pneumatic | Pneumatic | — |
| power_only | Power Only | — |
| reefer | Reefer | refrigerated, refrigerated van |
| reefer_intermodal | Reefer, Intermodal | — |
| reefer_logistics | Reefer, Logistics | — |
| rgn | RGN | removable gooseneck |
| step_deck | Step Deck | single drop, drop deck |
| stepdeck_conestoga | Stepdeck, Conestoga | — |
| straight_box_truck | Straight Box Truck | — |
| stretch_trailer | Stretch Trailer | — |
| tanker_aluminum | Tanker, Aluminum | — |
| tanker_intermodal | Tanker, Intermodal | — |
| tanker_steel | Tanker, Steel | — |
| van | Van | dry van |
| van_conestoga | Van, Conestoga | — |
| van_curtain | Van, Curtain | — |
| van_double | Van, Double | — |
| van_hotshot | Van, Hotshot | — |
| van_insulated | Van, Insulated | — |
| van_intermodal | Van, Intermodal | — |
| van_logistics | Van, Logistics | — |
| van_open_top | Van, Open-Top | — |
| van_roller_bed | Van, Roller Bed | — |
| van_triple | Van, Triple | — |
| van_vented | Van, Vented | — |
| Code | Name | Also accepted |
|---|---|---|
| alcohol | Alcohol | — |
| boats | Boats | — |
| construction_farm_equipment | Construction/Farm Equipment | — |
| empty | Empty | — |
| hazardous_materials | Hazardous Materials | — |
| mobile_home | Mobile Home | — |
| modular_home | Modular Home | — |
| other | Other | — |
| portable_buildings | Portable Buildings | — |
| sectional_home | Sectional Home | — |
| vehicle | Vehicle | — |
Every error has the shape { "error": { "code", "message", "details" }, "request_id" }. New codes may be added for new situations; an existing code never changes meaning. An unsupported method gets 405 with an empty body.
| Code | Status | Meaning |
|---|---|---|
| INVALID_JSON | 400 | The body isn't valid JSON, or isn't a JSON object. |
| UNAUTHORIZED | 401 | No key, or the key is unknown, revoked or expired. |
| FORBIDDEN_SCOPE | 403 | The key doesn't have the scope this endpoint needs. details.required_scope says which. |
| CLIENT_SUSPENDED | 403 | API access for your account is suspended. Contact us. |
| NOT_FOUND | 404 | No such resource for your account. |
| IDEMPOTENCY_MISMATCH | 409 | The Idempotency-Key was already used with a different request. |
| IDEMPOTENCY_IN_PROGRESS | 409 | A request with this Idempotency-Key is still running. Retry shortly. |
| PAYLOAD_TOO_LARGE | 413 | The body is larger than 32 KB. |
| UNSUPPORTED_MEDIA_TYPE | 415 | Send the body with Content-Type: application/json. |
| INVALID_INPUT | 422 | Some values are wrong or missing. details.invalid and details.missing list every one. |
| UNSUPPORTED | 422 | The request asks for something we don't quote yet, such as route stops. |
| PLACE_NOT_FOUND | 422 | A place couldn't be found. details.field says which. |
| PLACE_AMBIGUOUS | 422 | A place matches more than one state. details.candidates lists them. |
| PLACE_MISMATCH | 422 | Coordinates aren't in the state sent with them. details.field says which place. |
| UNKNOWN_STATE | 422 | A state code we don't permit. |
| NO_STATES | 422 | The route doesn't cross any state we permit. |
| INCOMPLETE | 422 | The quote couldn't be priced with what was sent. The message says what to add. |
| RATE_LIMITED | 429 | Too many requests. Wait the Retry-After header's seconds. |
| QUOTE_LIMIT_REACHED | 429 | Your daily quote allowance is used. It resets at midnight UTC. |
| INTERNAL | 500 | Something failed on our side. Retry; if it persists, send us the request_id. |
| SAVE_FAILED | 500 | The draft order couldn't be saved, so nothing was created. Retry with the same Idempotency-Key. |
| QUOTE_FAILED | 500 | Pricing failed on our side. Retry with the same Idempotency-Key. |
| ROUTING_FAILED | 502 | Looking up places or miles failed. Retry, or send route.states with miles. |
| ROUTING_UNAVAILABLE | 503 | Place and mileage lookup is unavailable. Send route.states with miles instead. |
| UNAVAILABLE | 503 | This part of the API is briefly unavailable. Wait the Retry-After header's seconds. |