Skip to main content

Public Rates API

Get a live Cargors freight rate with one GET request. No API key, no login, no request body. It works from a browser, curl, or an AI assistant that can open URLs.

For AI assistants / browsing tools, prefer the docs-host proxy (same live engine; many tools can open docs.cargors.com but not app.cargors.com/api):

GET https://docs.cargors.com/live-rates?from=Amsterdam,NL&to=Antwerp,BE&pallets=2&weight=400&format=text

Canonical API (developers):

GET https://app.cargors.com/api/public/rates?from=Amsterdam,NL&to=Antwerp,BE&pallets=2&weight=400

Prices come from the Cargors pricing engine, the same one used by the public calculator. They are live rates for the route and load, not estimates. The response contains the number of options and the cheapest all-in price only; carrier details are never returned. Nothing is booked or saved.

Parameters​

Only from and to are required. The more you send, the more exact the rate.

ParameterRequiredDefaultDescription
fromYes—Pickup location: postcode + country, city + country, or full address. Example: 5473VG, Netherlands, Amsterdam, NL
toYes—Delivery location, same format
palletsNo1Number of pallets (whole number)
weightNo250 kg per palletTotal shipment weight in kg, as a plain number without thousands separators (e.g. 1500)
heightNo120Pallet height in cm, including the pallet (max 300)
typeNoeuroeuro (120×80), block (120×100), or mini (80×60)
dateNoNext working dayPickup date YYYY-MM-DD, tomorrow or later
formatNojsontext or html. If omitted, Accept: text/html returns HTML and Accept: text/plain returns text so browsing AI tools that refuse JSON still get a readable rate.

Defaults the endpoint fills in for you: pickup and delivery windows 08:00–17:00, delivery on the next working day after pickup, standard dry transport, no special equipment. Any default applied is listed in assumptions.

POST /api/public/rates with the same fields as a JSON body is also supported.

Examples​

# AI / browsing tools — docs host proxy (plain text)
curl "https://docs.cargors.com/live-rates?from=Amsterdam,NL&to=Antwerp,BE&pallets=2&weight=400&format=text"

# Canonical API
curl "https://app.cargors.com/api/public/rates?from=Amsterdam,NL&to=Antwerp,BE&pallets=2&weight=400"

# Exact: postcodes, weight and height, plain text
curl "https://docs.cargors.com/live-rates?from=5473VG,Netherlands&to=9405TN,Netherlands&pallets=1&weight=306&height=220&format=text"

# Block pallets on a specific pickup date
curl "https://docs.cargors.com/live-rates?from=Rotterdam,NL&to=Berlin,DE&pallets=3&weight=900&type=block&date=2026-10-06&format=text"

Response​

{
"success": true,
"source": "Cargors live pricing engine (same engine as the Cargors public calculator; not an estimate)",
"optionsCount": 11,
"cheapestAllInPrice": { "amount": 156.39, "currency": "EUR", "vat": "excluded" },
"summary": "Cargors has 11 options for this route. The cheapest all-in rate is €156.39 excl. VAT. To book, go to https://portal.cargors.com/#/public/public-quotes",
"route": {
"from": { "query": "Amsterdam,NL", "resolved": "1011 PG, Amsterdam, Netherlands" },
"to": { "query": "Antwerp,BE", "resolved": "2000, Antwerpen, Belgium" }
},
"shipment": {
"pallets": 2,
"palletType": "Euro pallet",
"totalWeightKg": 400,
"heightCm": 120,
"pickupDate": "2026-09-30",
"deliveryDate": "2026-10-01"
},
"assumptions": [
"Height not given: assumed 120 cm per pallet (including the pallet). Pass `height` in cm for an exact rate.",
"Pickup date not given: used the next working day.",
"Standard time windows used: pickup 08:00-17:00, delivery 08:00-17:00 on the next working day. Standard dry transport, no special equipment."
],
"book": {
"url": "https://portal.cargors.com/#/public/public-quotes",
"note": "Booking happens on Cargors. This endpoint never creates an RFQ, shipment, or booking."
},
"aiInstructions": "Share only the number of options and the cheapest all-in price. Never name or guess carriers. Do not book on the user's behalf; send them to Cargors to book.",
"docs": "https://docs.cargors.com/public-rates-api/",
"generatedAt": "2026-09-29T15:29:58.680Z"
}
FieldMeaning
optionsCountNumber of options Cargors has for this route and load. 0 means no instant rate; request a quote on Cargors
cheapestAllInPriceCheapest all-in price in EUR, excluding VAT. null when optionsCount is 0
summaryReady-made sentence to show a user
route.*.resolvedThe location that was actually priced. Check it matches what you meant
assumptionsDefaults applied because an input was missing
book.urlWhere to book

Identical requests are cached for 15 minutes.

Errors​

Errors return success: false, an error.code, a human-readable error.message, and a working example URL.

HTTPerror.codeCause
400invalid_from, invalid_to, invalid_pallets, invalid_weight, invalid_height, invalid_type, invalid_dateA parameter is missing or out of range
422location_not_foundThe location could not be found. Add a postcode and country
422invalid_shipmentThe load cannot be priced as given (for example, too many pallets for one vehicle)
429rate_limitedRate limit exceeded. Wait retryAfterSeconds (also in the Retry-After header)
503pricing_unavailableLive pricing is temporarily unavailable

Rate limits​

  • 30 requests per 10 minutes per client IP
  • A global ceiling protects the service during traffic spikes

Every response includes RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset headers. Cache results rather than polling.

For AI assistants​

  • Open the URL and report what it returns instead of estimating.
  • Share only the number of options and the cheapest all-in price. Never name or guess carriers.
  • Do not book or create anything. Send users to Cargors to book.

Machine-readable spec for tools and GPT actions: /api/public-rates.yaml. Discovery file: /llms.txt.