Booking Check

The call an intake agent makes between reading a booking and creating the job: what is missing, what the job needs, what stops it — each line with its source.

Road · API and MCP

What it answers

An agent that reads bookings from email or a portal has to decide, before it creates the job, whether the booking is complete and whether anything in it cannot work. The booking check takes the booking’s fields as structured data and answers in three lists. Missing names each field the booking lacks, with the calculation that cannot run without it. Needs gives what the job needs as booked: the places resolved, the volume, gross and chargeable weight, the loading metres, whether the load fits the booked vehicle, and for dangerous goods the result of the ADR consignment check, check by check. Stops lists what does not hold as booked: a place code that does not resolve, a vehicle that cannot take the load, a dangerous-goods line the consignment check refuses or a check it fails.

The verdict is one of three words: no_blocker_found, missing_information or blocker_found. A field that is missing does not stop the rest: everything that can be answered is answered, so an agent can send one message back to the customer asking for what is missing. Units are always stated with the figures (mm, cm, m or in; kg, g, t or lb), so a pallet in centimetres and the same numbers in inches can never both look complete.

The check adds no rule of its own. Every line is the answer of a calculator or lookup that already runs on this site, and it carries that engine’s source. What no engine answers yet — a piece’s height against the vehicle’s internal height, a load of several footprints on one floor, air and sea bookings — is listed under not_checked, never guessed.

The engines it calls

What it does not do

Not a booking system: it reads no email or document and gives no rate, no route, no drivers' hours and no legal clearance. no_blocker_found means no engine found a blocker in the fields sent — nothing more. Nothing is stored.

No party name, address, contact detail or free text is asked for. If one is sent it is ignored: the answer counts it and never repeats it. The receipt is a hash of what the check was given and what it answered, by the same mechanism as the other checks, and it is never stored — for a keyed call or an anonymous one.

A worked call

Ten Euro pallets, Manchester to Hamburg, on a 13.6 m curtainsider. The request:

curl -s -X POST https://www.freightutils.com/api/booking-check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $FREIGHTUTILS_API_KEY" \
  -d '{"mode":"road","origin":"GBMNC","destination":"DEHAM","pieces":[{"quantity":10,"dims":{"l":120,"w":80,"h":150,"unit":"cm"},"weight":{"value":300,"unit":"kg"},"stackable":false}],"vehicle":"standard-curtainsider"}'

The answer, as this site computes it (2,737 bytes; send "detail": true for each engine’s full answer):

{
  "envelope_version": "1.2",
  "ok": true,
  "status": "ok",
  "missing_inputs": [],
  "edition": null,
  "as_of": "2026-11-14",
  "result": {
    "verdict": "no_blocker_found",
    "mode": "road",
    "missing": [],
    "needs": [
      {
        "item": "origin",
        "value": "GBMNC — Manchester, GB (UN/LOCODE)",
        "engine": "unlocode_lookup",
        "source": "UNECE UN/LOCODE 2025-1 — © UNECE, CC BY 4.0 (as UNECE states for UN/CEFACT standards)"
      },
      {
        "item": "destination",
        "value": "DEHAM — Hamburg, DE (UN/LOCODE)",
        "engine": "unlocode_lookup",
        "source": "UNECE UN/LOCODE 2025-1 — © UNECE, CC BY 4.0 (as UNECE states for UN/CEFACT standards)"
      },
      {
        "item": "volume",
        "value": "14.4 m³",
        "engine": "consignment_calculator",
        "source": "EU/UK road groupage convention"
      },
      {
        "item": "gross_weight",
        "value": "3000 kg (10 pieces)",
        "engine": "consignment_calculator",
        "source": "EU/UK road groupage convention"
      },
      {
        "item": "loading_metres",
        "value": "4 LDM",
        "engine": "consignment_calculator",
        "source": "EU/UK road groupage convention"
      },
      {
        "item": "chargeable_weight",
        "value": "7000 kg (volume basis)",
        "engine": "consignment_calculator",
        "source": "EU/UK road groupage convention — road: greater of gross weight and loading metres x 1,750 kg (1 LDM = 1,750 kg, a groupage convention — hauliers vary)"
      },
      {
        "item": "vehicle_fit",
        "value": "fits Standard Curtainsider 13.6m: 4 LDM of 13.6 m, 10 of 33 floor positions, 3000 of 24000 kg payload",
        "engine": "ldm_calculator",
        "source": "EU Directive 96/53/EC, UK DVSA, 49 CFR (regulatory limits); the loading-metre convention (ldm_calculator)"
      }
    ],
    "stops": [],
    "not_checked": [
      "each piece's height and width against the vehicle's internal dimensions: no engine answers it yet"
    ],
    "fields_not_read": {
      "names": [],
      "party_or_free_text_fields_ignored": 0
    },
    "scope": "Not a booking system: it reads no email or document and gives no rate, no route, no drivers' hours and no legal clearance. no_blocker_found means no engine found a blocker in the fields sent — nothing more. Nothing is stored."
  },
  "confidence": {
    "level": "high",
    "basis": "deterministic"
  },
  "_source": {
    "name": "FreightUtils published methodology",
    "checked": "request-time",
    "provenance_status": "computed",
    "source_url": "https://www.freightutils.com/methodology"
  },
  "citation": {
    "text": "Booking check (v0, road): no_blocker_found — 0 missing, 7 needs, 0 stops. Engines: unlocode_lookup, consignment_calculator, ldm_calculator; each line cites its engine's source.",
    "qualifier": "Best-effort reference and calculation, not legal, customs or dangerous-goods compliance advice and not a regulatory authority: verify against the current source before acting."
  },
  "_meta": {
    "receipt": {
      "stored": false,
      "reason": "never_stored",
      "schema_version": "receipt.v2",
      "receipt_hash": "sha256:913a355b86e2c2cf4c09e09aacb00e28c1d3c463650685bf1ea7e490755922af",
      "created_at": "2026-11-14T19:44:12.770Z"
    }
  }
}

The same tool is on the hosted MCP server as booking_check, with the same arguments. The full contract is in the API reference.

Best-effort reference and calculation, not legal, customs or dangerous-goods compliance advice and not a regulatory authority: verify against the current source before acting.

Related Tools
Consignment Calculator→LDM Calculator→ADR Consignment Check→UN/LOCODE Lookup→