/
FreightUtils.com

API Documentation

All FreightUtils calculators are available as free, open REST API endpoints

Last updated: April 2026

πŸ“₯ Download OpenAPI 3.0 Spec (JSON)πŸ“₯ Download Postman Collection

Compatible with Swagger, Postman, and RapidAPI import

Overview

The FreightUtils API is a free, stateless REST API. Every calculator on this site has a corresponding API endpoint. No authentication is required. Responses are JSON. CORS is enabled for all origins.

Base URL: https://www.freightutils.com/api
Download OpenAPI 3.0 Spec (JSON)

Reliability & Support

FreightUtils APIs are hosted on Vercel's global edge network with automatic SSL and CDN caching.

Status
APIs are actively maintained and monitored.
Support
contact@freightutils.com β€” corrections and API issues typically addressed within 2 business days.
Versioning
Reference endpoints (ADR, HS, airlines) include a meta object with data source and edition information. Breaking changes will be announced via the API docs page.
Open Access Tier
No authentication required for casual use. Rate limit: 25 requests per day per IP. Free API keys available for 100/day.
Commercial Access
For production integrations with higher limits, subscribe via RapidAPI or contact us directly.
Free API Key
Get 100 requests/day β€” no credit card required
Enter your email and we'll send you an API key instantly.
Anonymous: 25/day Β· Free key: 100/day Β· Pro: 50,000/month
Need higher limits? See our plans β†’

MCP Server β€” AI Agent Integration

FreightUtils is available as a Model Context Protocol (MCP) server, giving AI agents direct access to all 18 freight calculation and reference tools. The first and only freight MCP server.

Install via npm
npx freightutils-mcp
Or connect via URL
https://www.freightutils.com/api/mcp/mcp
Claude Desktop Configuration
Add to your claude_desktop_config.json:
{ "mcpServers": { "freightutils": { "command": "npx", "args": ["freightutils-mcp"] } } }
What AI agents can do
β€œCalculate loading metres for 20 Euro pallets on an artic trailer”
β€œLook up UN 1203 and check if 200 litres qualifies for ADR exemption”
β€œWhat's the chargeable weight for 2 boxes 120Γ—80Γ—100cm at 500kg?”
β€œFind the airline with AWB prefix 176”
β€œHow many boxes 40Γ—30Γ—25cm fit on a Euro pallet?”
npmGitHub

Get Started in 2 Minutes

// FreightUtils API β€” JavaScript example
// Calculate loading metres for 10 Euro pallets

const response = await fetch(
  'https://www.freightutils.com/api/ldm?pallet=euro&qty=10'
);
const data = await response.json();

console.log(`LDM: ${data.ldm}`);
console.log(`Utilisation: ${data.utilisation_percent}%`);
console.log(`Fits: ${data.fits}`);

All endpoints work the same way. No auth, no signup. Full reference below ↓

POST/api/shipment/summaryShipment Summary (Composite)
Flagship Endpoint

Composite endpoint that chains CBM, chargeable weight, LDM, ADR compliance, and UK duty/VAT estimation into a single call. Accepts a unified Shipment object and returns comprehensive results based on transport mode.

Mode Parameter

ModeCalculations Included
roadCBM, LDM, pallet spaces, trailer utilisation, road chargeable weight (1 LDM = 1,750 kg), vehicle suggestion
airCBM, volumetric weight (1 CBM = 167 kg), air chargeable weight
seaCBM, revenue tonnes (W/M at 1 CBM = 1,000 kg), container suggestion
multimodalAll of the above β€” road, air, and sea calculations combined

Example Request

Mixed 3-item road shipment with a DG item and HS code:

curl -X POST "https://www.freightutils.com/api/shipment/summary" \ -H "Content-Type: application/json" \ -d '{ "mode": "road", "origin": { "country": "DE", "locode": "DEHAM" }, "destination": { "country": "GB", "locode": "GBFXT" }, "incoterm": "CIF", "freight_cost": 850, "insurance_cost": 120, "items": [ { "description": "Machine parts on Euro pallets", "length": 120, "width": 80, "height": 110, "weight": 480, "quantity": 6, "stackable": false, "pallet_type": "euro", "hsCode": "847989", "customs_value": 12000 }, { "description": "Cleaning solvent (DG)", "length": 60, "width": 40, "height": 50, "weight": 25, "quantity": 4, "unNumber": "1993" }, { "description": "Spare filters", "length": 40, "width": 30, "height": 20, "weight": 8, "quantity": 10, "stackable": true } ] }'

Example Response

{ "mode": "road", "item_count": 3, "totals": { "pieces": 20, "grossWeight": 3060, "volumeCBM": 7.28, "chargeableWeight": 3060, "billing_basis": "weight" }, "modeSpecific": { "loadingMetres": 4.0, "pallet_spaces": 10, "trailerUtilisation": 29.41, "suggested_vehicle": "13.6m Artic Trailer", "chargeable_weight_road": 7000 }, "compliance": { "hasDangerousGoods": true, "adrFlags": { "unNumbers": ["1993"], "totalPoints": 300, "exemptionApplicable": true } }, "customs": { "hsCodesPresent": true, "canEstimateUkDuty": true, "dutyEstimate": { "cif_value": 12970, "duty_rate": "1.7%", "duty_amount": 220.49, "vat_rate": "20%", "vat_amount": 2638.1, "totalTaxes": 2858.59 } }, "warnings": [], "disclaimer": "Estimates only β€” verify with carrier and customs broker", "dataVersion": { "adr": "UNECE ADR 2025", "hs": "WCO HS 2022", "duty": "GOV.UK Trade Tariff API" } }

Pro tier endpoint. Free tier: 25 calls/day. Subscribe for higher limits.

GET/api/ldmLoading Metres Calculator

Calculate the loading metres (LDM) required for a consignment on a UK/EU road freight trailer.

Parameters

ParameterTypeRequiredDescriptionDefault
lengthnumberYes*Pallet length in millimetresβ€”
widthnumberYes*Pallet width in millimetresβ€”
palletstringNo*Preset: euro, uk, half, quarter. Replaces length/width.β€”
qtyintegerNoNumber of pallets1
stackablebooleanNoWhether pallets can be stackedfalse
stack2 or 3NoMax stack height (used when stackable=true)2
weightnumberNoWeight per pallet in kgnull
vehiclestringNoartic, rigid10, rigid75, luton, us53 (53ft US/Canada), us48 (48ft US), customartic
vehicle_lengthnumberNoCustom vehicle length in metres (required when vehicle=custom)β€”

* Either pallet (preset ID) or both length and width must be provided.

Example Requests

12 Euro pallets on an artic:

GET /api/ldm?pallet=euro&qty=12&vehicle=artic

Custom dimensions, stackable, with weight check:

GET /api/ldm?length=1200&width=1000&qty=5&stackable=true&stack=2&weight=300&vehicle=rigid10

cURL example:

curl "https://www.freightutils.com/api/ldm?pallet=euro&qty=12&vehicle=artic"

US 53ft trailer:

curl "https://www.freightutils.com/api/ldm?pallet=euro&qty=20&vehicle=us53"

Response

{ "ldm": 4.8, "vehicle": { "name": "13.6m Artic Trailer", "length_m": 13.6, "max_payload_kg": 24000 }, "utilisation_percent": 35.29, "pallet_spaces": { "used": 12, "available": 33 }, "total_weight_kg": null, "fits": true, "warnings": [], "meta": { "inputs": { "length_mm": 1200, "width_mm": 800, "qty": 12, "stackable": false, "stack_factor": 2, "weight_per_pallet_kg": null, "vehicle": "artic" } } }
GET/api/cbmCubic Metres Calculator

Calculate the cubic metre (CBM) volume of a shipment. Returns total CBM plus equivalents in cubic feet, litres, and cubic inches.

Parameters

ParameterTypeRequiredDescriptionDefault
lnumberYesLength of one piece in centimetresβ€”
wnumberYesWidth of one piece in centimetresβ€”
hnumberYesHeight of one piece in centimetresβ€”
pcsintegerNoNumber of identical pieces1

Example Request

5 boxes, 120Γ—80Γ—100 cm each:

curl "https://www.freightutils.com/api/cbm?l=120&w=80&h=100&pcs=5"
{ "cbm_per_piece": 0.96, "total_cbm": 4.8, "total_volume_m3": 4.8, "cubic_feet": 169.5106, "litres": 4800, "cubic_inches": 292913.8, "pieces": 5, "meta": { "inputs": { "length_cm": 120, "width_cm": 80, "height_cm": 100, "pieces": 5 } } }
GET/api/chargeable-weightAir Freight Chargeable Weight

Calculate air freight chargeable weight β€” whichever is higher between actual gross weight and volumetric (dimensional) weight. Supports custom volumetric factors for all carriers.

Parameters

ParameterTypeRequiredDescriptionDefault
lnumberYesLength of one piece in centimetresβ€”
wnumberYesWidth of one piece in centimetresβ€”
hnumberYesHeight of one piece in centimetresβ€”
gwnumberYesTotal gross weight of all pieces in kgβ€”
pcsintegerNoNumber of identical pieces1
factorintegerNoVolumetric divisor: 6000 (IATA standard), 5000 (express carriers)6000

Example Request

2 pieces, 120Γ—80Γ—100 cm, 500 kg total, IATA factor:

curl "https://www.freightutils.com/api/chargeable-weight?l=120&w=80&h=100&gw=500&pcs=2&factor=6000"
{ "chargeable_weight_kg": 500, "basis": "actual", "gross_weight_kg": 500, "volumetric_weight_kg": 320, "volumetric_weight_per_piece_kg": 160, "cbm": 1.92, "ratio": 3.84, "factor": 6000, "pieces": 2, "meta": { "inputs": { "length_cm": 120, "width_cm": 80, "height_cm": 100, "gross_weight_kg": 500, "pieces": 2, "factor": 6000 } } }
GET/api/palletPallet Box Fitting Calculator

Calculate how many boxes fit on a pallet using a layer-based algorithm. Returns boxes per layer, number of layers, total boxes, orientation used, and volume/weight analysis. Optional weight constraint caps the result at the pallet's maximum payload.

Parameters

ParameterTypeRequiredDescriptionDefault
plnumberYesPallet length in centimetresβ€”
pwnumberYesPallet width in centimetresβ€”
pmhnumberYesMaximum total stack height in centimetres (floor to top of cargo)β€”
blnumberYesBox length in centimetresβ€”
bwnumberYesBox width in centimetresβ€”
bhnumberYesBox height in centimetresβ€”
phnumberNoPallet board/deck height in cm β€” deducted from usable height15
bwtnumberNoWeight per box in kg β€” enables weight constraint calculationβ€”
mpwnumberNoMaximum pallet payload weight in kg β€” caps result if weight exceededβ€”
rotatebooleanNoAllow 90Β° rotation of boxes for best fit. Pass false to disable.true

Example Request

curl "https://www.freightutils.com/api/pallet?pl=120&pw=80&pmh=220&bl=40&bw=30&bh=25&bwt=5&mpw=1500"
{ "boxes_per_layer": 8, "layers": 8, "total_boxes": 64, "orientation": "original", "boxes_per_row": 3, "boxes_per_col": 2, "usable_height_cm": 205, "utilisation_percent": 62.5, "total_box_volume_cbm": 0.192, "pallet_volume_cbm": 1.968, "wasted_space_cbm": 1.776, "weight_limited": false, "total_weight_kg": 320, "remaining_weight_capacity_kg": 1180, "meta": { "inputs": { "pallet_length_cm": 120, "pallet_width_cm": 80, "pallet_max_height_cm": 220, "pallet_height_cm": 15, "box_length_cm": 40, "box_width_cm": 30, "box_height_cm": 25, "box_weight_kg": 5, "max_payload_weight_kg": 1500, "allow_rotation": true } } }
GET/api/adrADR 2025 Dangerous Goods Lookup

Look up ADR 2025 dangerous goods by UN number, search by substance name, or filter by hazard class. The dataset contains 2,939 entries from the ADR 2025 Dangerous Goods List (Table A). Responses are cached for 1 hour (s-maxage=3600).

Query Modes

ParameterTypeDescriptionMax results
unstringExact UN number lookup. Accepts 1203, UN1203, or 01203.1
searchstringCase-insensitive partial match on the proper shipping name. Min 2 characters. Also accepts q as an alias.50
classstringFilter by ADR hazard class (e.g. 3, 6.1, 1.1).100

Provide exactly one parameter per request. Omitting all parameters returns a 400 with usage hints.

Example Requests

Exact UN number lookup:

curl "https://www.freightutils.com/api/adr?un=1203"
{ "count": 1, "results": [ { "un_number": "1203", "proper_shipping_name": "MOTOR SPIRIT or GASOLINE or PETROL", "class": "3", "classification_code": "F1", "packing_group": "II", "labels": "3", "special_provisions": "243 534 664", "limited_quantity": "1 L", "excepted_quantity": "E2", "transport_category": "2", "tunnel_restriction_code": "(D/E)", "hazard_identification_number": "33", "variant_index": 0, "variant_count": 1 } ], "meta": { "source": "UNECE ADR 2025, licensed from Labeline.com", "edition": "ADR 2025", "entries": 2939 } }

Search by substance name:

curl "https://www.freightutils.com/api/adr?search=acetone"
{ "count": 3, "results": [ ... ] }

Filter by hazard class:

curl "https://www.freightutils.com/api/adr?class=3"
{ "count": 50, "results": [ ... ] }
GETPOST/api/adr-calculatorADR 1.1.3.6 Exemption Calculator

Calculate whether the ADR 1.1.3.6 small load exemption applies to a dangerous goods consignment. Supports single-substance GET queries and multi-substance POST requests. Checks both total points threshold (1,000) and per-substance quantity limits per ADR 1.1.3.6.3.

GET β€” Single Substance

ParameterTypeRequiredDescription
unstringYesUN number (e.g. 1203)
qtynumberYesQuantity in kg or litres

Example β€” 200 litres of petrol:

curl "https://www.freightutils.com/api/adr-calculator?un=1203&qty=200"
{ "items": [ { "un_number": "1203", "proper_shipping_name": "MOTOR SPIRIT or GASOLINE or PETROL", "class": "3", "transport_category": "2", "quantity": 200, "multiplier": 3, "points": 600 } ], "total_points": 600, "threshold": 1000, "exempt": true, "has_category_zero": false, "has_quantity_exceedance": false, "warnings": [], "message": "1.1.3.6 exemption applies" }

POST β€” Multi-Substance Load

Request body:

POST /api/adr-calculator Content-Type: application/json { "items": [ { "un_number": "1203", "quantity": 200 }, { "un_number": "1090", "quantity": 50 } ] }

Response structure is identical to the GET endpoint, with multiple items in the array.

Response Fields

FieldTypeDescription
transport_categorystringADR transport category (0–4)
multipliernumber | nullPoints multiplier for the category (null for cat 0)
pointsnumber | nullquantity Γ— multiplier
total_pointsnumberSum of all substance points
exemptbooleantrue if total ≀ 1,000 AND no cat 0 AND no quantity exceedance
has_category_zerobooleantrue if any substance is transport category 0
has_quantity_exceedancebooleantrue if any substance exceeds its per-category max quantity
warningsstring[]Human-readable warning messages for limit violations
POST/api/adr/lq-checkADR Limited & Excepted Quantity Checker

Check whether dangerous goods qualify for ADR Limited Quantity (Chapter 3.4) or Excepted Quantity (Chapter 3.5) concessions. Accepts up to 20 items per request and returns per-item pass/fail status against ADR Table A limits.

Request Body

FieldTypeRequiredDescription
modestringNolq (default) or eq
itemsarrayYes1–20 items to check
items[].un_numberstringYesUN number (e.g. 1203)
items[].quantitynumberYesQuantity per inner packaging
items[].unitstringNoml, L (default), g, or kg
items[].inner_packaging_qtynumberNoNumber of inner packagings per outer (EQ mode only)

Example β€” check LQ for 0.5 L of petrol:

curl -X POST https://www.freightutils.com/api/adr/lq-check \ -H "Content-Type: application/json" \ -d '{"mode":"lq","items":[{"un_number":"1203","quantity":0.5,"unit":"L"}]}'
{ "mode": "lq", "overall_status": "qualifies", "items": [ { "un_number": "1203", "substance": "MOTOR SPIRIT or GASOLINE or PETROL", "class": "3", "packing_group": "II", "lq_limit": "1 L", "lq_limit_value": 1, "lq_limit_unit": "L", "eq_code": "E2", "quantity_entered": 0.5, "unit_entered": "L", "status": "within_limit", "reason": "0.5 L is within the LQ limit of 1 L per inner packaging" } ], "summary": { "total_items": 1, "qualifying": 1, "exceeding": 0, "not_permitted": 0 }, "references": { "adr_chapter": "3.4", "table": "3.2 Column 7a" } }

Response Fields

FieldTypeDescription
modestringlq or eq
overall_statusstringqualifies, does_not_qualify, or partial
items[]arrayPer-item results with substance info, limits, and pass/fail
items[].statusstringwithin_limit, exceeds_limit, or not_permitted
summaryobjectCounts of qualifying, exceeding, and not-permitted items
referencesobjectADR chapter and table references
GET/api/airlinesAirline Codes & AWB Prefix Lookup

Search airlines by name, IATA code, ICAO code, AWB prefix, or country. The dataset contains6,352 airlines including 390 cargo airlines with AWB prefixes.

Query Modes

ParameterTypeDescriptionMatch
qstringGeneral search β€” matches name, codes, prefix, country. Smart: 2–3 digits match prefix only, 2–3 letters match IATA/ICAO only, 4+ chars search all fields.Smart
iatastringIATA 2-letter code (e.g. EK)Exact
icaostringICAO 3-letter code (e.g. UAE)Exact
prefixstringAWB 3-digit prefix (e.g. 176)Exact
countrystringCountry name (e.g. Germany)Partial

Example Requests

AWB prefix lookup:

curl "https://www.freightutils.com/api/airlines?prefix=176"
{ "count": 1, "results": [ { "slug": "emirates", "airline_name": "Emirates", "iata_code": "EK", "icao_code": "UAE", "awb_prefix": ["176"], "callsign": "EMIRATES", "country": "United Arab Emirates", "has_cargo": true, "aliases": ["Emirates SkyCargo"], "verified": true } ], "meta": { "source": "Public IATA/ICAO data, cross-referenced", "airlines": 6352, "last_verified": "April 2026" } }

IATA code lookup:

curl "https://www.freightutils.com/api/airlines?iata=EK"

Name search:

curl "https://www.freightutils.com/api/airlines?q=emirates"

Response Fields

FieldTypeDescription
slugstringURL-friendly identifier
airline_namestringOfficial airline name
iata_codestring | null2-character IATA designator
icao_codestring | null3-character ICAO designator
awb_prefixstring[] | null3-digit AWB prefix(es) β€” array, some airlines have multiple
callsignstring | nullRadio callsign for ATC communication
countrystring | nullCountry of registration
has_cargobooleantrue if airline has AWB prefix(es)
aliasesstring[] | nullAlternative names (e.g. cargo division name)
verifiedbooleantrue if prefix confirmed from multiple independent sources
GET/api/incotermsINCOTERMS 2020 Lookup

Look up INCOTERMS 2020 trade terms. Returns all 11 terms by default, or filter by code or transport category. Each term includes seller/buyer responsibilities, risk and cost transfer points, insurance obligations, and practical guidance.

Parameters

ParameterTypeDescription
codestringINCOTERM code (e.g. FOB, CIF, DDP)
categorystringFilter by transport mode: any_mode or sea_only

Omit all parameters to return all 11 INCOTERMS 2020 terms.

Example Requests

Single term lookup:

curl "https://www.freightutils.com/api/incoterms?code=FOB"
{ "code": "FOB", "name": "Free on Board", "slug": "fob-free-on-board", "category": "sea_only", "summary": "Seller delivers goods on board the vessel at port of shipment. One of the most commonly used terms.", "seller_responsibility": "Deliver goods on board the vessel at named port. Export clearance. Loading costs.", "buyer_responsibility": "Main sea freight, insurance, import clearance, duties.", "risk_transfer": "When goods are on board the vessel at port of shipment.", "cost_transfer": "At port of shipment, once loaded on board.", "insurance": "No obligation on either party.", "export_clearance": "Seller.", "import_clearance": "Buyer.", "best_for": "Sea freight where buyer wants to arrange their own shipping and insurance. Very commonly used in international trade.", "watch_out": "Sea and inland waterway ONLY. Despite being widely used, FOB is technically incorrect for containerised cargo..." }

Filter by transport category:

curl "https://www.freightutils.com/api/incoterms?category=sea_only"

All terms:

curl "https://www.freightutils.com/api/incoterms"
GET/api/containersContainer Capacity Reference

Shipping container specifications β€” internal/external dimensions, weights, door openings, and pallet capacity for all 10 standard ISO container types. Optionally calculate how many items fit in a specific container.

Query Modes

ParameterTypeRequiredDescription
typestringNoContainer slug (e.g. 20ft-standard, 40ft-high-cube). Omit to list all.
lnumberNoItem length in cm (requires type + w + h)
wnumberNoItem width in cm
hnumberNoItem height in cm
wtnumberNoItem weight in kg
qtyintegerNoNumber of items

Example Requests

List all containers:

curl "https://www.freightutils.com/api/containers"

Single container specs:

curl "https://www.freightutils.com/api/containers?type=40ft-high-cube"

Loading calculation β€” how many 60Γ—40Γ—40cm boxes fit in a 40ft HC:

curl "https://www.freightutils.com/api/containers?type=40ft-high-cube&l=60&w=40&h=40&wt=15&qty=500"
{ "container": { "name": "40ft High Cube", "slug": "40ft-high-cube", ... }, "loading": { "fits_lengthwise": 20, "fits_widthwise": 5, "fits_height": 6, "max_items": 600, "requested_qty": 500, "fits": true, "total_weight_kg": 7500, "within_payload": true, "utilisation_percent": 63.2 } }
GET/api/convertUnit Converter

Convert between freight-relevant units β€” weights, volumes, lengths, and freight-specific conversions (CBM to chargeable weight, CBM to freight tonnes).

Parameters

ParameterTypeRequiredDescription
valuenumberYesThe number to convert
fromstringYesSource unit code
tostringYesTarget unit code

Supported Unit Codes

GroupCodes
Weightkg, lbs, oz, tonnes, short_tons, long_tons
Volumecbm, cuft, cuin, litres, gal_us, gal_uk
Lengthcm, inches, m, feet, mm
Freightchargeable_kg (target only, from=cbm), freight_tonnes (target only, from=cbm)

Example Requests

Standard conversion:

curl "https://www.freightutils.com/api/convert?value=100&from=kg&to=lbs"
{ "input": { "value": 100, "unit": "kg", "name": "Kilograms" }, "result": { "value": 220.462442, "unit": "lbs", "name": "Pounds" }, "formula": "Kilograms Γ— 2.204624 = Pounds" }

CBM to chargeable weight (IATA 6000 divisor):

curl "https://www.freightutils.com/api/convert?value=10&from=cbm&to=chargeable_kg"
{ "input": { "value": 10, "unit": "cbm", "name": "Cubic Metres" }, "result": { "value": 1666.7, "unit": "chargeable_kg", "name": "Chargeable Weight (kg)" }, "formula": "Cubic Metres Γ— 166.67 = Chargeable Weight (kg)", "note": "IATA volumetric weight: 1 CBM = 166.67 kg (divisor 6000)..." }

CBM to freight tonnes (W/M rule):

curl "https://www.freightutils.com/api/convert?value=5&from=cbm&to=freight_tonnes"
GET/api/hsHS Code Lookup

Search and browse Harmonized System (HS 2022) commodity codes. Supports text search by product description, exact code lookup with ancestor chain, and section browsing. Covers all 6,940 codes across 21 sections and 97 chapters.

Query Modes

ParameterTypeDescriptionMax results
qstringCase-insensitive search on descriptions and codes. Min 2 characters.50
codestringExact HS code lookup (2, 4, or 6 digit). Returns full details with ancestor chain and children.1
sectionstringBrowse by section (Roman numeral, e.g. II). Returns all chapters in that section.All

Provide exactly one parameter per request. Omitting all parameters returns a 400 with usage hints.

Example Requests

Search by description:

curl "https://www.freightutils.com/api/hs?q=coffee"
{ "query": "coffee", "results": [ { "hscode": "0901", "description": "Coffee, whether or not roasted...", "level": 4, "section": "II", "parent": "09" } ], "count": 12 }

Code lookup with ancestors:

curl "https://www.freightutils.com/api/hs?code=090111"
{ "hscode": "090111", "description": "Coffee; not roasted, not decaffeinated", "level": 6, "section": "II", "parent": "0901", "ancestors": [ { "hscode": "09", "description": "Coffee, tea, mate and spices", "level": 2 }, { "hscode": "0901", "description": "Coffee, whether or not roasted...", "level": 4 } ], "children": [], "sectionName": "Vegetable products" }

Browse section:

curl "https://www.freightutils.com/api/hs?section=II"
POST/api/consignmentMulti-Item Consignment Calculator

Calculate total CBM, gross weight, LDM, and chargeable weight across multiple mixed items in a single consignment. Supports road, air, and sea modes with mode-specific chargeable weight calculations.

Request Body (JSON)

FieldTypeRequiredDescription
modestringNoroad (default), air, or sea
itemsarrayYes1–50 item objects (see below)

Item Object Fields

FieldTypeRequiredDescription
lengthnumberYesLength in cm
widthnumberYesWidth in cm
heightnumberYesHeight in cm
quantityintegerNoNumber of items (default: 1)
grossWeightnumberNoGross weight per item in kg
stackablebooleanNoWhether items can be stacked (default: false)
pallet_typestringNoeuro, uk, us, custom, none
descriptionstringNoItem description

Example Request

curl -X POST "https://www.freightutils.com/api/consignment" \ -H "Content-Type: application/json" \ -d '{ "mode": "air", "items": [ { "length": 120, "width": 80, "height": 100, "quantity": 4, "grossWeight": 300 }, { "length": 60, "width": 40, "height": 50, "quantity": 10, "grossWeight": 15 } ]}'
{ "mode": "air", "item_count": 2, "totalPieces": 14, "totalGrossWeight": 1350, "totalCBM": 5.04, "chargeableWeight": 1350, "billing_basis": "weight", "volumetricWeight": 841.68, "items": [ ... ] }
POST/api/dutyUK Import Duty & VAT Estimator

Estimate UK import duty and VAT for a commodity code using live GOV.UK Trade Tariff data. Accepts customs value, origin country, freight/insurance costs, and INCOTERM for CIF adjustment.

Request Body (JSON)

FieldTypeRequiredDescription
commodity_codestringYesHS/tariff code (min 6 digits)
origin_countrystringYesISO 2-letter country code (e.g. CN, DE)
customs_valuenumberYesGoods value in GBP
freight_costnumberNoFreight cost in GBP (added to CIF value)
insurance_costnumberNoInsurance cost in GBP (added to CIF value)
incotermstringNoINCOTERM (e.g. FOB, CIF, EXW)

Example Request

curl -X POST "https://www.freightutils.com/api/duty" \ -H "Content-Type: application/json" \ -d '{ "commodity_code": "847989", "origin_country": "CN", "customs_value": 10000, "freight_cost": 500, "insurance_cost": 50, "incoterm": "FOB" }'
{ "commodity_code": "847989", "origin_country": "CN", "cif_value": 10550, "duty_rate": "1.7%", "duty_amount": 179.35, "vat_rate": "20%", "vat_amount": 2145.87, "totalTaxes": 2325.22, "preferentialRate": false, "meta": { "source": "GOV.UK Trade Tariff API", "licence": "Open Government Licence v3" } }
GET/api/unlocodeUN/LOCODE Lookup

Search and look up UN/LOCODE transport locations β€” 116,129+ seaports, airports, rail terminals, inland depots, and border crossings worldwide. Responses are cached for 24 hours.

Query Modes

ParameterTypeDescription
codestringExact UN/LOCODE lookup (e.g. GBLHR, NLRTM)
qstringSearch by name (e.g. rotterdam, heathrow)
countrystringFilter by country code (e.g. GB, NL)
functionstringFilter by function: port, airport, rail, road, icd, border
limitintegerMax results (1–100, default: 20)

Example Requests

Search by name:

curl "https://www.freightutils.com/api/unlocode?q=rotterdam"
{ "query": "rotterdam", "count": 3, "results": [ { "locode": "NLRTM", "name": "Rotterdam", "country": "NL", "subdivision": "ZH", "functions": ["port", "rail", "road"], "coordinates": { "lat": 51.92, "lon": 4.48 } } ], "meta": { "source": "UNECE UN/LOCODE 2024-2 (PDDL)", "total_entries": 116129 } }

Exact code lookup:

curl "https://www.freightutils.com/api/unlocode?code=GBLHR"

Filter by country and function:

curl "https://www.freightutils.com/api/unlocode?country=GB&function=port&limit=10"
GET/api/uldAir Freight ULD Types

Look up air freight Unit Load Device (ULD) specifications. 15 types including LD3 (AKE), PMC main deck pallet, temperature-controlled containers, and more. Returns dimensions, weights, volume, and aircraft compatibility.

Parameters

ParameterTypeDescription
typestringULD code or slug (e.g. AKE, PMC). Omit to list all.
categorystringFilter: container, pallet, or special
deckstringFilter by deck: lower or main

Example Requests

Single ULD lookup:

curl "https://www.freightutils.com/api/uld?type=AKE"

Filter by category:

curl "https://www.freightutils.com/api/uld?category=pallet"

All ULD types:

curl "https://www.freightutils.com/api/uld"
GET/api/vehiclesVehicle & Trailer Types

Look up road freight vehicle and trailer specifications. 17 types covering articulated trailers, rigid trucks, and vans. Returns internal dimensions, payload limits, pallet capacity, and features.

Parameters

ParameterTypeDescription
slugstringVehicle slug (e.g. standard-curtainsider). Omit to list all.
categorystringFilter: articulated, rigid, or van
regionstringFilter: EU or US

Example Requests

Single vehicle lookup:

curl "https://www.freightutils.com/api/vehicles?slug=standard-curtainsider"

Filter by category:

curl "https://www.freightutils.com/api/vehicles?category=articulated"

Filter by region:

curl "https://www.freightutils.com/api/vehicles?region=EU"

HTTP Status Codes

CodeMeaning
200Success β€” calculation result returned as JSON
400Bad Request β€” missing or invalid parameters. Check the error message in the response.
404Not Found β€” no results for the given query (airlines and ADR endpoints)
405Method Not Allowed β€” only GET (or POST for /api/adr-calculator, /api/adr/lq-check, /api/shipment/summary) is supported
500Internal Server Error β€” unexpected error, please report via GitHub

Field Naming

All endpoints use snake_case field names in responses (e.g. internal_length_cm, max_gross_kg). POST request bodies on /api/duty and /api/consignment accept either casing for backwards compatibility β€” snake_case is the documented form.

Rate Limiting

The API is free to use. Anonymous rate limit: 25 requests per day per IP. Free API key: 100 requests per day. Pro: 50,000 requests per month.

Error Responses

All endpoints return standard HTTP error codes with a descriptive JSON error message:

400Bad Requestβ€” Missing or invalid parameters
{"error": "Missing required parameter: l (length in cm)"}
404Not Foundβ€” Resource does not exist
{"error": "No ADR entry found for UN number 9999"}
500Server Errorβ€” Unexpected error
{"error": "Internal server error"}

Platform Commitments

Five pages that spell out what you can rely on:

Changelog
Every release, with an RSS feed.
Status
Current health plus 24h and 7d uptime.
Roadmap
Shipped, in progress, and what’s next.
Versioning Policy
Breaking-change contract and semver.
Deprecation Policy
3-month minimum notice with migration guides.

Source Code & Issue Reporting

FreightUtils is open source. Report bugs, request features, or contribute on GitHub: github.com/SoapyRED/freighttools. For data corrections or API support, email contact@freightutils.com.