TruckTabs API · v1

Reference

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.

Your key

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.

Places

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.

200 OK
{
  "places": [
    { "label": "Portland, Oregon", "city": "Portland", "state": "OR", "postal_code": null, "lat": 45.5152, "lng": -122.6784 }
  ]
}

States

GEThttps://trucktabs.com/api/v1/jurisdictions

The states we permit, and whether we have their legal limits on file.

200 OK
{
  "jurisdictions": [
    { "code": "AL", "name": "Alabama", "limits_on_file": true },
    { "code": "AK", "name": "Alaska", "limits_on_file": false },
    …
  ]
}

A state's legal limits

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.

200 OK · illustrative values
{
  "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."
}

Vehicle types

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.

CodeNameAlso accepted
all_terrain_vehicleAll Terrain Vehicle—
bus_charterBus, Charter—
bus_non_charterBus, Non-Charter—
dump_truckDump Truck—
mining_truckMining Truck—
motor_homeMotor Home—
special_mobile_equipmentSpecial Mobile Equipment—
straight_truckStraight Truckbox truck
tractorTractorbobtail
tractor_trailerTractor/Trailersemi, tractor trailer, semi truck
truck_trailerTruck/Trailertruck and trailer
utility_terrain_vehicleUtility Terrain Vehicle—
wreckerWrecker—

Trailer types

CodeNameAlso accepted
auto_carrierAuto Carrier—
conestogaConestoga—
double_dropDouble Dropdouble drop deck
drop_deck_landollDrop Deck, Landoll—
dump_trailerDump Trailer—
flatbedFlatbed—
flatbed_b_trainFlatbed, B-Train—
flatbed_conestogaFlatbed, Conestoga—
flatbed_doubleFlatbed, Double—
flatbed_gooseneckFlatbed, Gooseneckgooseneck
flatbed_hotshotFlatbed, Hotshothotshot
flatbed_maxiFlatbed, Maxi—
hopper_bottomHopper Bottom—
lowboyLowboylow boy, lowbed, low bed
moving_vanMoving Van—
pneumaticPneumatic—
power_onlyPower Only—
reeferReeferrefrigerated, refrigerated van
reefer_intermodalReefer, Intermodal—
reefer_logisticsReefer, Logistics—
rgnRGNremovable gooseneck
step_deckStep Decksingle drop, drop deck
stepdeck_conestogaStepdeck, Conestoga—
straight_box_truckStraight Box Truck—
stretch_trailerStretch Trailer—
tanker_aluminumTanker, Aluminum—
tanker_intermodalTanker, Intermodal—
tanker_steelTanker, Steel—
vanVandry van
van_conestogaVan, Conestoga—
van_curtainVan, Curtain—
van_doubleVan, Double—
van_hotshotVan, Hotshot—
van_insulatedVan, Insulated—
van_intermodalVan, Intermodal—
van_logisticsVan, Logistics—
van_open_topVan, Open-Top—
van_roller_bedVan, Roller Bed—
van_tripleVan, Triple—
van_ventedVan, Vented—

Load categories

CodeNameAlso accepted
alcoholAlcohol—
boatsBoats—
construction_farm_equipmentConstruction/Farm Equipment—
emptyEmpty—
hazardous_materialsHazardous Materials—
mobile_homeMobile Home—
modular_homeModular Home—
otherOther—
portable_buildingsPortable Buildings—
sectional_homeSectional Home—
vehicleVehicle—

Error codes

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.

CodeStatusMeaning
INVALID_JSON400The body isn't valid JSON, or isn't a JSON object.
UNAUTHORIZED401No key, or the key is unknown, revoked or expired.
FORBIDDEN_SCOPE403The key doesn't have the scope this endpoint needs. details.required_scope says which.
CLIENT_SUSPENDED403API access for your account is suspended. Contact us.
NOT_FOUND404No such resource for your account.
IDEMPOTENCY_MISMATCH409The Idempotency-Key was already used with a different request.
IDEMPOTENCY_IN_PROGRESS409A request with this Idempotency-Key is still running. Retry shortly.
PAYLOAD_TOO_LARGE413The body is larger than 32 KB.
UNSUPPORTED_MEDIA_TYPE415Send the body with Content-Type: application/json.
INVALID_INPUT422Some values are wrong or missing. details.invalid and details.missing list every one.
UNSUPPORTED422The request asks for something we don't quote yet, such as route stops.
PLACE_NOT_FOUND422A place couldn't be found. details.field says which.
PLACE_AMBIGUOUS422A place matches more than one state. details.candidates lists them.
PLACE_MISMATCH422Coordinates aren't in the state sent with them. details.field says which place.
UNKNOWN_STATE422A state code we don't permit.
NO_STATES422The route doesn't cross any state we permit.
INCOMPLETE422The quote couldn't be priced with what was sent. The message says what to add.
RATE_LIMITED429Too many requests. Wait the Retry-After header's seconds.
QUOTE_LIMIT_REACHED429Your daily quote allowance is used. It resets at midnight UTC.
INTERNAL500Something failed on our side. Retry; if it persists, send us the request_id.
SAVE_FAILED500The draft order couldn't be saved, so nothing was created. Retry with the same Idempotency-Key.
QUOTE_FAILED500Pricing failed on our side. Retry with the same Idempotency-Key.
ROUTING_FAILED502Looking up places or miles failed. Retry, or send route.states with miles.
ROUTING_UNAVAILABLE503Place and mileage lookup is unavailable. Send route.states with miles instead.
UNAVAILABLE503This part of the API is briefly unavailable. Wait the Retry-After header's seconds.