Developer Reference

API Documentation

Everything you need to integrate NMFC data into your application. The REST API accepts JSON requests and returns JSON responses.

Introduction

The NMFC Lookup API provides programmatic access to the National Motor Freight Classification database, Amazon drop point locations, ABF Freight location data, and Central Transport terminal data. All endpoints share a single, consistent REST interface.

Base URL

https://freightapi.dev/api

Response Format

JSON

Authentication

Bearer token

All requests must include a valid API key. Requests without authentication will return 401 Unauthorized.

Authentication

Authenticate by passing your API key in the Authorization header as a Bearer token. API keys are prefixed with nmfc_live_.

Request Header

Authorization: Bearer YOUR_API_KEY

You can generate and manage API keys from your dashboard after signing up. Each key is displayed only once at creation time — store it securely.

curl
curl https://freightapi.dev/api/article/63321 \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"

Rate Limits

API usage is metered monthly per account. When you exceed your plan's limit the API returns 429 Too Many Requests. Limits reset on the first day of each calendar month (UTC).

Plan Requests / Month Notes
Free 5 Good for prototyping
Starter 1,000 For developers building freight tools
Pro 5,000 Production workloads
Enterprise Unlimited SLA + priority support

Every API response includes the following rate-limit headers:

Header Description
X-RateLimit-Limit Maximum requests allowed in the current period
X-RateLimit-Remaining Requests remaining in the current period

Error Codes

The API uses standard HTTP status codes. Error responses always include a JSON body with an error field containing a human-readable message.

Error response
{
  "error": "Invalid API key"
}
Status Meaning Description
200 OK Request succeeded
400 Bad Request Invalid parameters or malformed request body
401 Unauthorized Missing or invalid API key
403 Forbidden Your current plan does not include access to this endpoint
404 Not Found The requested resource does not exist
429 Rate Limit Exceeded You have exceeded your monthly request quota
500 Internal Server Error An unexpected error occurred on our end
NMFC Classification

Full-text search across NMFC articles by keyword, item number, or description fragment. Returns paginated results sorted by relevance.

Request Body

Parameter Type Description
q required string Search query. Minimum 3 characters. Matches article number, description, and grouping name.
page optional number Page number for pagination. Defaults to 1.

Response Fields

Field Type Description
results array Array of matching article objects
total number Total number of matching articles
page number Current page number
totalPages number Total number of pages
results[].article_number string NMFC article number
results[].description string Article description
results[].grouping_name string Commodity grouping name
results[].classification string Freight classification (e.g., "50", "55", "70")
results[].is_canceled boolean Whether the article has been canceled

Code Examples

curl -X POST https://freightapi.dev/api/search \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"q": "frozen food", "page": 1}'
GET /api/article/:num

Get Article

Retrieve complete article data for a single NMFC article, including all sub-items, density classifications, hazardous flags, and cross-reference notes.

URL Parameters

Parameter Type Description
num required string NMFC article number (e.g., 63321). Include only the base number, not the sub-item suffix.

Response Fields

Field Type Description
article_number string NMFC article number
description string Full article description
grouping_name string Commodity grouping name
classification string Freight class when no sub-items are present
is_hazardous boolean Whether the article is classified as hazardous material
is_special_handling boolean Whether the article requires special handling
is_canceled boolean Whether the article has been canceled
canceled_reference string | null Replacement article number, if canceled
note_references string[] Array of note identifiers that apply to this article
tariff_issue string Tariff issue number that introduced or last modified this article
supplement string | null Supplement identifier, if applicable
subItems array List of sub-item objects (see below)
subItems[].item string Sub-item suffix (e.g., "00", "01")
subItems[].description string Sub-item description detailing density or packaging conditions
subItems[].classification string Freight class for this sub-item
subItems[].sort_order number Display ordering index

Code Examples

curl https://freightapi.dev/api/article/63321 \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/rule/:num

Get Rule

Retrieve the full text of a single NMFC rule by its rule number, including all sub-headings and structured description blocks. Requires a Pro or higher plan.

Pro+ required

URL Parameters

Parameter Type Description
num required string NMFC rule number (3–6 characters, e.g., 100). Must match a valid rule in the tariff.

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
rule object The rule object
rule.ruleNumber string NMFC rule number
rule.ruleHeader string Short title / header of the rule
rule.ruleSubHeading string Secondary heading providing additional context
rule.ruleDescriptions array Ordered list of description blocks
rule.ruleDescriptions[].type string Block type identifier (e.g., "paragraph", "list")
rule.ruleDescriptions[].title string Optional title for the block
rule.ruleDescriptions[].text string Full text content of the block

Code Examples

curl https://freightapi.dev/api/rule/100 \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/package/:num

Get Package

Retrieve the full details of a single NMFC package definition by its package number, including the applicable tariff issue and all structured description blocks. Requires a Pro or higher plan.

Pro+ required

URL Parameters

Parameter Type Description
num required string NMFC package number (2–6 characters, e.g., 10). Must match a valid package in the tariff.

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
package object The package object
package.packageNumber string NMFC package number
package.packageHeader string Short title / header of the package definition
package.tariffIssue string Tariff issue number that introduced or last modified this package
package.packageDescriptions array Ordered list of description blocks
package.packageDescriptions[].type string Block type identifier (e.g., "paragraph", "list")
package.packageDescriptions[].title string Optional title for the block
package.packageDescriptions[].text string Full text content of the block

Code Examples

curl https://freightapi.dev/api/package/10 \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/history/:num

Get Article Change History

Retrieve the complete change history for a single NMFC article, including every docket, issued date, subject line, and granular change detail records. Requires a Pro or higher plan.

Pro+ required

URL Parameters

Parameter Type Description
num required string NMFC article number (3–10 characters, e.g., 63321). Include only the base number, not the sub-item suffix.

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
articleNumber string The queried NMFC article number
articleChangeHistoryDetails array Ordered list of change history entries
articleChangeHistoryDetails[].docket string Docket identifier associated with this change
articleChangeHistoryDetails[].issuedDate string ISO 8601 date the change was issued
articleChangeHistoryDetails[].subject string Short description of the change subject
articleChangeHistoryDetails[].quickView string One-line summary of the change for display purposes
articleChangeHistoryDetails[].changeDetails array Granular list of individual changes within this entry
articleChangeHistoryDetails[].changeDetails[].description string Narrative description of the individual change
articleChangeHistoryDetails[].changeDetails[].typeOfProvision string Category of provision affected (e.g., "Item", "Note")
articleChangeHistoryDetails[].changeDetails[].item string Primary item identifier affected by the change
articleChangeHistoryDetails[].changeDetails[].alternateItem string Alternate or replacement item number, if applicable
articleChangeHistoryDetails[].changeDetails[].action string Type of action taken (e.g., "Added", "Amended", "Canceled")

Code Examples

curl https://freightapi.dev/api/history/63321 \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
POST /api/density

Density Calculator

Calculate freight density from dimensions and weight. Supports multiple handling units, various dimension units (Inch, Feet, Centimeter, Meter), and weight units (Pound, Kilogram).

Pro plan required

Request Body

Parameter Type Required Description
dimensionType required string Inch, Feet, Centimeter, or Meter
weightType required string Pound or Kilogram
resultUnitType required string PoundsPerCubicFeet or KilogramPerCubicMeter
unitDimensions required array Array of unit dimension objects
unitDimensions[].HandlingUnitCount required number Number of identical handling units
unitDimensions[].length required number Length in specified dimension unit
unitDimensions[].width required number Width in specified dimension unit
unitDimensions[].height required number Height in specified dimension unit
unitDimensions[].handlingUnitWeight required number Total weight of all units combined

Response

Field Type Description
totalHandlingUnitCount number Sum of all handling unit counts
totalHandlingUnitCountVolume number Total volume in result units
totalHandlingUnitWeight number Total weight in result units
totalDensity number Overall density (weight / volume)
unitDimensions[] array Per-unit breakdown with volume and density

Examples

curl -X POST https://freightapi.dev/api/density \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "dimensionType": "Inch",
    "weightType": "Pound",
    "resultUnitType": "PoundsPerCubicFeet",
    "unitDimensions": [{
      "HandlingUnitCount": 1,
      "length": 48, "width": 40, "height": 36,
      "handlingUnitWeight": 500
    }]
  }'
POST /api/item680/:type

Item 680 Calculator

NMFC Item 680 Note calculators for determining freight class by volume, area, or dimension ratio. Three calculator types available: 2a (Volume), 2b (Area), 2c (Ratio).

Pro plan required

URL Parameter

Type Endpoint Description
2aPOST /api/item680/2aVolume: commodity vs package volume comparison
2bPOST /api/item680/2bArea: commodity vs handling platform area comparison
2cPOST /api/item680/2cRatio: height to shortest dimension ratio calculation

Note 2A Request Body (Volume)

Parameter Type Description
commodity.length required number Commodity length
commodity.width required number Commodity width
commodity.height required number Commodity height
package.length required number Package length
package.width required number Package width
package.height required number Package height

Response: commodityVolume, packageVolume, percentageVolumeOccupiedByCommodity, isBelowThreshold

Note 2B Request Body (Area)

Parameter Type Description
commodity.length required number Commodity length
commodity.width required number Commodity width
handlingPlatformType.length required number Platform length
handlingPlatformType.width required number Platform width

Response: commodityArea, liftArea, percentageSurfaceAreaOccupiedByCommodity, isBelowThreshold

Note 2C Request Body (Ratio)

Parameter Type Description
length required number Commodity length
width required number Commodity width (shortest dimension)
height required number Commodity height
liftLength required number Lift platform length
liftWidth required number Lift platform width

Response: ratio, isAboveThreshold, maximumAllowableCalculations

Examples

# Note 2A — Volume comparison
curl -X POST https://freightapi.dev/api/item680/2a \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "commodity": {"length": 46, "width": 40, "height": 330},
    "package": {"length": 48, "width": 40, "height": 35}
  }'

# Note 2B — Area comparison
curl -X POST https://freightapi.dev/api/item680/2b \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "commodity": {"length": 38, "width": 32},
    "handlingPlatformType": {"length": 40, "width": 40}
  }'

# Note 2C — Dimension ratio
curl -X POST https://freightapi.dev/api/item680/2c \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"length":50,"width":42,"height":62,"liftLength":52,"liftWidth":45}'
Amazon Drop Points
GET /api/drop-points?zip=:zip

Get Drop Points by Zip Code

Retrieve Amazon drop-off / pickup locations near a given US zip code, sorted by proximity. Results are paginated (25 per page).

Query Parameters

Parameter Type Description
zip required string 5-digit US zip code (e.g., 90001)
page optional integer Page number for pagination (default: 1)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
zip string The queried zip code
dropPoints array List of nearby drop point locations
dropPoints[].accessPointId string Unique UUID identifier for the drop point
dropPoints[].name string Store name (e.g., "Staples-Torrance")
dropPoints[].chainStoreId string Chain store identifier (e.g., CC0090)
dropPoints[].address object Address with line1, city, state, zipCode, country
dropPoints[].phone string Store phone number
dropPoints[].location object Geocode with latitude and longitude
dropPoints[].timezone string IANA timezone (e.g., US/Pacific)
dropPoints[].operatingHours object Weekly operating hours keyed by day name
dropPoints[].email string Store contact email
dropPoints[].type string Access point type (e.g., HELIX)
dropPoints[].isStaffAssisted boolean Whether staff assistance is available
dropPoints[].tags array Tags (e.g., ["Store"])
total integer Total number of matching drop points
currentPage integer Current page number
totalPages integer Total number of pages

Code Examples

curl "https://freightapi.dev/api/drop-points?zip=90001" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/drop-points/:id

Get Drop Point Detail

Retrieve full details for a single Amazon drop point by its unique access point ID.

URL Parameters

Parameter Type Description
id required string UUID of the access point (e.g., deade3db-2d3a-4ccb-9983-0c695dfbc06a)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
dropPoint object Full drop point object (same structure as items in the dropPoints array above)

Code Examples

curl https://freightapi.dev/api/drop-points/deade3db-2d3a-4ccb-9983-0c695dfbc06a \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"

Search Amazon drop points by name or city. Returns paginated results matching the keyword. Requires a Pro or higher plan.

Pro+ required

Query Parameters

Parameter Type Description
q required string Search keyword (minimum 2 characters). Matches against store name and city.
page optional integer Page number for pagination (default: 1)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
query string The search keyword used
dropPoints array Matching drop point objects
total integer Total number of matching results
currentPage integer Current page number
totalPages integer Total number of pages

Code Examples

curl "https://freightapi.dev/api/drop-points/search?q=Torrance" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
ABF Freight Locations
GET /api/abf-location?zip=:zip&city=:city

ABF Location by ZIP Code

Look up ABF Freight service coverage for a US ZIP code. Returns station info, service type, daily schedule, and transit add-on days.

Query Parameters

Parameter Type Description
zip required string 5-digit US ZIP code
city optional string City name to disambiguate multi-city ZIPs

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
zip string The queried ZIP code
status string served | multi_city | not_served
location object Location with station details (when status=served)
cities array Array of candidate cities (when status=multi_city)
message string Human-readable status message

Code Examples

curl "https://freightapi.dev/api/abf-location?zip=00501" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"

Search ABF Freight locations by city or state. Returns paginated results matching the query. Requires a Starter or higher plan.

Starter+ required

Query Parameters

Parameter Type Description
q required string Search query (minimum 2 characters). Matches city and state.
page optional integer Page number for pagination (default: 1)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
query string The search query used
locations array Matching ABF location objects
total integer Total number of matching results
currentPage integer Current page number
totalPages integer Total number of pages

Code Examples

curl "https://freightapi.dev/api/abf-location/search?q=miami" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/abf-location/station/:num

Station Lookup

Retrieve all ZIP code locations served by a specific ABF Freight station number. Requires a Pro or higher plan.

Pro+ required

URL Parameters

Parameter Type Description
num required string ABF station number
page optional integer Page number for pagination (default: 1)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
stationNumber string The queried station number
locations array Array of ABF location objects served by this station
total integer Total number of locations served
currentPage integer Current page number
totalPages integer Total number of pages

Code Examples

curl "https://freightapi.dev/api/abf-location/station/219" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
POST /api/abf-location/batch

Batch ZIP Lookup

Look up ABF Freight coverage for multiple ZIP codes in a single request. Requires a Pro or higher plan.

Pro+ required

Request Body

Parameter Type Description
zips required string[] Array of 5-digit ZIP codes. Max 20 for Pro, 50 for Enterprise.

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
results object Map of ZIP to {status, location}
summary object {served, multi_city, not_served, total}

Code Examples

curl -X POST "https://freightapi.dev/api/abf-location/batch" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"zips": ["00501", "00907", "90001"]}'
GET /api/abf-location/coverage?state=:state

State Coverage

Retrieve ABF Freight service coverage statistics for a US state. Requires a Pro or higher plan.

Pro+ required

Query Parameters

Parameter Type Description
state required string 2-letter US state code (e.g., TX)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
state string The queried state code
totalLocations integer Total number of served locations in the state
serviceBreakdown object {Direct, DirectViaMarketingPartner, Connect}
unservedZips integer Number of ZIP codes in the state with no ABF service

Code Examples

curl "https://freightapi.dev/api/abf-location/coverage?state=TX" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/abf-location/service-days?zip=:zip

Service Days

Retrieve the pickup and delivery schedule for a specific ZIP code. Requires a Starter or higher plan.

Starter+ required

Query Parameters

Parameter Type Description
zip required string 5-digit US ZIP code
city optional string City name to disambiguate multi-city ZIPs

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
zip string The queried ZIP code
city string City name for this location
state string 2-letter state code
schedule object 7-day pickup/delivery schedule keyed by day name
nextPickupDay string Next available pickup day
nextDeliveryDay string Next available delivery day

Code Examples

curl "https://freightapi.dev/api/abf-location/service-days?zip=47524" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/abf-location/transit-info?origin_zip=:zip&dest_zip=:zip

Transit Info

Retrieve transit add-on day information between an origin and destination ZIP code pair. Requires a Starter or higher plan.

Starter+ required

Query Parameters

Parameter Type Description
origin_zip required string 5-digit origin ZIP code
dest_zip required string 5-digit destination ZIP code

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
origin object Origin location details with station info
destination object Destination location details with station info
totalAddOnDays integer | null Sum of inbound and outbound add-on days, or null if either ZIP is unserved
bothServed boolean Whether both origin and destination are served by ABF

Code Examples

curl "https://freightapi.dev/api/abf-location/transit-info?origin_zip=00501&dest_zip=87012" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/abf-location/carriers?zip=:zip

Carrier Info

Retrieve carrier and service type details for a ZIP code, including SCAC code, service classification, and add-on day counts. Requires a Pro or higher plan.

Pro+ required

Query Parameters

Parameter Type Description
zip required string 5-digit US ZIP code
city optional string City name to disambiguate multi-city ZIPs

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
zip string The queried ZIP code
city string City name for this location
state string 2-letter state code
serviceType string ABF service type (e.g., Direct, Connect)
carrier object {scac, isDirect, isPartner, isConnect}
addOnDays object {inbound, outbound}
stationNumber string Serving ABF station number

Code Examples

curl "https://freightapi.dev/api/abf-location/carriers?zip=87012" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
Central Transport
GET /api/ct-location?zip=:zip&city=:city

CT Location by ZIP Code

Look up Central Transport service coverage for a US ZIP code. Returns terminal info, service type, and timezone data.

Query Parameters

Parameter Type Description
zip required string 5-digit US ZIP code
city optional string City name to disambiguate multi-city ZIPs

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
zip string The queried ZIP code
status string served | multi_city | not_served
location object Location with terminal details (when status=served)
cities array Array of candidate cities (when status=multi_city)
message string Human-readable status message

Code Examples

curl "https://freightapi.dev/api/ct-location?zip=08807" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"

Search Central Transport locations by city or state. Returns paginated results matching the query. Requires a Starter or higher plan.

Starter+ required

Query Parameters

Parameter Type Description
q required string Search query (minimum 2 characters). Matches city and state.
page optional integer Page number for pagination (default: 1)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
query string The search query used
locations array Matching CT location objects
total integer Total number of matching results
currentPage integer Current page number
totalPages integer Total number of pages

Code Examples

curl "https://freightapi.dev/api/ct-location/search?q=dallas" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
GET /api/ct-location/terminal/:num

Terminal Lookup

Retrieve all ZIP code locations served by a specific Central Transport terminal number. Requires a Pro or higher plan.

Pro+ required

URL Parameters

Parameter Type Description
num required string CT terminal number
page optional integer Page number for pagination (default: 1)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
terminalNumber string The queried CT terminal number
locations array Array of CT location objects served by this terminal
total integer Total number of locations served
currentPage integer Current page number
totalPages integer Total number of pages

Code Examples

curl "https://freightapi.dev/api/ct-location/terminal/089" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"
POST /api/ct-location/batch

Batch ZIP Lookup

Look up Central Transport coverage for multiple ZIP codes in a single request. Requires a Pro or higher plan.

Pro+ required

Request Body

Parameter Type Description
zips required string[] Array of 5-digit ZIP codes. Max 20 for Pro, 50 for Enterprise.

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
results object Map of ZIP to {status, location}
summary object {served, multi_city, not_served, total}

Code Examples

curl -X POST "https://freightapi.dev/api/ct-location/batch" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"zips": ["08807", "75201", "90001"]}'
GET /api/ct-location/coverage?state=:state

State Coverage

Retrieve Central Transport service coverage statistics for a US state. Requires a Pro or higher plan.

Pro+ required

Query Parameters

Parameter Type Description
state required string 2-letter US state code (e.g., NJ)

Response Fields

Field Type Description
success boolean Indicates whether the request succeeded
state string The queried state code
totalZips integer Total number of ZIP codes queried in the state
directService integer Number of ZIPs with direct CT service
indirectService integer Number of ZIPs with indirect CT service

Code Examples

curl "https://freightapi.dev/api/ct-location/coverage?state=NJ" \
  -H "Authorization: Bearer nmfc_live_xxxxxxxxxxxxxxxxxxxx"