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.
| Parameter | Required | Default | Description |
|---|---|---|---|
from | Yes | — | Pickup location: postcode + country, city + country, or full address. Example: 5473VG, Netherlands, Amsterdam, NL |
to | Yes | — | Delivery location, same format |
pallets | No | 1 | Number of pallets (whole number) |
weight | No | 250 kg per pallet | Total shipment weight in kg, as a plain number without thousands separators (e.g. 1500) |
height | No | 120 | Pallet height in cm, including the pallet (max 300) |
type | No | euro | euro (120×80), block (120×100), or mini (80×60) |
date | No | Next working day | Pickup date YYYY-MM-DD, tomorrow or later |
format | No | json | text 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"
}
| Field | Meaning |
|---|---|
optionsCount | Number of options Cargors has for this route and load. 0 means no instant rate; request a quote on Cargors |
cheapestAllInPrice | Cheapest all-in price in EUR, excluding VAT. null when optionsCount is 0 |
summary | Ready-made sentence to show a user |
route.*.resolved | The location that was actually priced. Check it matches what you meant |
assumptions | Defaults applied because an input was missing |
book.url | Where 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.
| HTTP | error.code | Cause |
|---|---|---|
| 400 | invalid_from, invalid_to, invalid_pallets, invalid_weight, invalid_height, invalid_type, invalid_date | A parameter is missing or out of range |
| 422 | location_not_found | The location could not be found. Add a postcode and country |
| 422 | invalid_shipment | The load cannot be priced as given (for example, too many pallets for one vehicle) |
| 429 | rate_limited | Rate limit exceeded. Wait retryAfterSeconds (also in the Retry-After header) |
| 503 | pricing_unavailable | Live 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.