The freight rate API
Price a truckload between any two places in the lower 48 with one GET request. 8 truck types, monthly history since December 2003. It works without a key; a free key raises the limit.
Request
curl "https://lanecost.com/api/v1/estimate?origin=chicago-il&destination=atlanta-ga&equipment=dry-van"- Base URL
- https://lanecost.com/api/v1
- Auth
- None needed. A free key raises the limit.
- Limit
- 60 requests a minute per IP address, or 600 with a key
- CORS
- Open: call it from a browser
- Spec
- OpenAPI 3.1
Response
{
"data": {
"origin": {
"slug": "chicago-il",
"city": "Chicago",
"state": "IL"
},
"destination": {
"slug": "atlanta-ga",
"city": "Atlanta",
"state": "GA"
},
"miles": 691,
"month": "2026-10",
"estimates": [
{
"equipment": "dry-van",
"name": "53' dry van",
"totalUsd": 3035,
"lowUsd": 2701,
"highUsd": 3369,
"ratePerMile": 4.39,
"linehaulUsd": 2400,
"fuelUsd": 635,
"transitDays": 2
}
],
"url": "https://lanecost.com/lanes/chicago-il-to-atlanta-ga"
},
"meta": {
"apiVersion": "v1",
"indexMonth": "2026-10",
"dataUpdated": "2026-11-13",
"basis": "modeled_estimate",
"docs": "https://lanecost.com/developers"
}
}What the numbers mean
Every price is a modeled estimate of the all-in cost of one full load: linehaul plus fuel, for standard freight picked up a few days out. It is not a quote or an offer to haul freight. lowUsd and highUsd give the typical range. How the estimate works.
Prices are in US dollars. Months are YYYY-MM. Places are a city and state (Chicago, IL, chicago-il or Chicago, Illinois) or a 5-digit ZIP; a city alone picks the largest of that name, and the response says which place was used. Truck types are dry-van, reefer, flatbed, step-deck, power-only, hotshot, box-truck, sprinter-van.
Responses and errors
A success is { "data": …, "meta": … }. meta.indexMonth is the latest month the index covers and meta.dataUpdated is when its source data was last refreshed.
A failure is { "error": { "code", "message", "param" } } with a matching status: 400 invalid_parameter, 404 place_not_found or not_found, 401 invalid_api_key, 429 rate_limited (wait the Retry-After seconds).
Version 1 only adds fields. Anything that would break a client ships as a new version.
Get a free key
You do not need a key to start. A key raises your limit from 60 to 600 requests a minute, counted per key instead of per IP address, so a shared office or cloud IP does not eat your budget.
Send it in a header, never in the URL:
curl -H "Authorization: Bearer lc_live_…" "https://lanecost.com/api/v1/rates"X-API-Key: lc_live_… works too. The same key works for the MCP server. Keep it on your server: a key in browser code is visible to everyone.
Your key
Copy it now. It is shown once and we keep only a hash of it.
Send it as Authorization: Bearer <key> for 600 requests a minute.
Use it from an AI tool
Lane Cost runs a Model Context Protocol (MCP) server, so an assistant can look up rates itself. It works without a key and has the same data, limits and optional key as the API.
MCP server
https://lanecost.com/mcp
In Claude, ChatGPT or any app that accepts a remote MCP server, add this URL as a custom connector. It uses Streamable HTTP and needs no sign-in.
Claude Code
claude mcp add --transport http lanecost https://lanecost.com/mcpWith a key, add --header "Authorization: Bearer lc_live_…".
Cursor and other JSON configs
{
"mcpServers": {
"lanecost": {
"url": "https://lanecost.com/mcp"
}
}
}Tools it offers
- estimate_lane_rateEstimate a truckload lane
- get_lane_rate_historyA lane's price history
- get_national_ratesNational truckload rates
- get_rate_historyRate history for a truck type
- get_state_ratesTruckload rates by state
- list_equipmentTruck types
- get_diesel_priceDiesel price
- search_placesFind a place
Without MCP
- Custom GPTs and function calling: import the OpenAPI spec as an action or tool definition. Every operation has a name and description written for a model.
- Agents that browse: llms.txt lists the endpoints, and every endpoint is a plain GET that returns JSON.
Terms of use
- Free to use, in commercial and non-commercial products, within the rate limits.
- Credit the source. Where you show these figures to people, say they come from Lane Cost and link to lanecost.com.
- Call them estimates. Do not present a figure as a quote, a bid or an offer to haul freight.
- No warranty. The figures are modeled and can be wrong for a given load. Do not rely on them alone to price or book freight.
- We may change limits, or revoke a key that abuses the service.
Endpoints
GET /api/v1/estimate
Estimate a lane
The all-in cost of one full truckload between two places, for every truck type or one. Linehaul plus fuel, standard freight, picked up a few days out.
| Parameter | Required | Value |
|---|---|---|
| origin | Yes | A city and state (Chicago, IL, chicago-il or Chicago, Illinois) or a 5-digit ZIP. A city alone picks the largest of that name. The response says which place was used. |
| destination | Yes | A city and state (Chicago, IL, chicago-il or Chicago, Illinois) or a 5-digit ZIP. A city alone picks the largest of that name. The response says which place was used. |
| equipment | No | Limit the answer to one truck type. Default: all. |
| month | No | Price the lane as of an earlier month, YYYY-MM from 2003-12. Default: the latest month. |
GET /api/v1/estimate/history
A lane's monthly history
The same estimate for every month since 2003-12, for one truck type.
| Parameter | Required | Value |
|---|---|---|
| origin | Yes | A city and state (Chicago, IL, chicago-il or Chicago, Illinois) or a 5-digit ZIP. A city alone picks the largest of that name. The response says which place was used. |
| destination | Yes | A city and state (Chicago, IL, chicago-il or Chicago, Illinois) or a 5-digit ZIP. A city alone picks the largest of that name. The response says which place was used. |
| equipment | No | Truck type. Default: dry-van. |
/api/v1/estimate/history?origin=chicago-il&destination=atlanta-ga&equipment=dry-van
GET /api/v1/rates
National rates
This month's national average rate per mile for every truck type, on a 750-mile haul, with 1, 3 and 12-month changes.
GET /api/v1/rates/{equipment}
One truck type, with history
The rate per mile for one truck type and its monthly history since 2003-12: national, or for freight leaving or entering one state.
| Parameter | Required | Value |
|---|---|---|
| equipment | Yes | Truck type. |
| state | No | Two-letter code of a lower-48 state. Default: national. |
| direction | No | With state: freight leaving the state or entering it. Default: outbound. |
GET /api/v1/states
Rates by state
Outbound and inbound rate per mile for each of the lower 48 states and DC, for one truck type.
| Parameter | Required | Value |
|---|---|---|
| equipment | No | Truck type. Default: dry-van. |
GET /api/v1/equipment
Truck types
The truck types the index prices, with deck size and capacity. The `equipment` value is the one every other endpoint takes.
GET /api/v1/diesel
Diesel price
The US average on-highway diesel price (EIA): the latest week, and each month since 2003-12. It is the fuel input to every estimate.
GET /api/v1/places
Find a place
City-name or ZIP-prefix search. Returns the slugs the estimate endpoints take.
| Parameter | Required | Value |
|---|---|---|
| q | Yes | Start of a city name (optionally with a state: spring il), or three or more digits of a ZIP. |