FreightUtils · Schema

AdrCalculatorRequest

items[] carries every line. Any single-substance field — un_number, quantity, packing_group, variant_index, unit, basis (or un / qty) — sent at the top level beside items[] is refused with HTTP 400 naming it: never dropped, never applied to a line by guess.

CompanyLogisticsFreightData

Properties

Name Type Description
items array Array of dangerous goods items to calculate.
edition string ADR edition "2025" or "2027"; wins over as_of. Omitted, as_of picks it: before 2027-01-01 ADR 2025; to 2027-06-30 ADR 2027 with an EDITION_TRANSITIONAL notice (ADR 2025 still allowed, 1.6.1.1); from 2
as_of string YYYY-MM-DD the answer is for (default today, UTC). Picks the ADR edition when edition is omitted; echoed in adr_edition, the 1.2 envelope and the check receipt.
View JSON Schema on GitHub

JSON Schema

freightutils-com-adr-calculator-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/freightutils-com/json-schema/freightutils-com-adr-calculator-request-schema.json",
  "title": "AdrCalculatorRequest",
  "description": "items[] carries every line. Any single-substance field — un_number, quantity, packing_group, variant_index, unit, basis (or un / qty) — sent at the top level beside items[] is refused with HTTP 400 naming it: never dropped, never applied to a line by guess.",
  "x-generated": "2026-11-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/freightutils-com-openapi.json#/components/schemas/AdrCalculatorRequest",
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "description": "Array of dangerous goods items to calculate.",
      "items": {
        "type": "object",
        "properties": {
          "un_number": {
            "type": "string",
            "description": "UN number of the substance — or an ID-prefixed air-only number (e.g. ID8000), no Table A entry: counted out of 1.1.3.6 (AIR_ONLY_ID) only with icao_limited_quantity: true (ICAO TI limited quantities, 3.4.9/3.4.10); otherwise BLOCKED."
          },
          "quantity": {
            "type": "number",
            "description": "Quantity in kg or litres, a JSON number ≥ 0 and ≤ 1e9. 0 means not carried: the line is left out (EXCLUDED_NIL) and named in a warning; all zeros is a 400. Text (\"300 kg\"), null or a negative value is a 400 — never scored.",
            "maximum": 1000000000,
            "minimum": 0
          },
          "packing_group": {
            "type": "string",
            "enum": [
              "I",
              "II",
              "III"
            ],
            "description": "Packing group — only needed for a UN number with more than one ADR Table A row (e.g. UN 1789); ignored for single-row UNs. Without it that line is withheld while its siblings are answered. Enough alone when the rows it leaves agree on the verdict fields (UN 1790 PG I)."
          },
          "variant_index": {
            "type": "integer",
            "minimum": 0,
            "description": "ADR Table A variant index (as returned by /api/adr) — pins one row when a UN number has several variants sharing a packing group (concentration bands). Ignored for single-row UN numbers. A JSON integer; anything else is a 400."
          },
          "unit": {
            "type": "string",
            "enum": [
              "L",
              "kg"
            ],
            "description": "OPTIONAL dimension of quantity, checked against the 1.1.3.6.3 basis for the row. Case-insensitive; any other value is a 400."
          },
          "basis": {
            "type": "string",
            "enum": [
              "net",
              "gross"
            ],
            "description": "OPTIONAL. A gross mass on an entry counted by mass is used only as an upper bound of the net mass, and the load is exempt on it only if it clears even so (figure_basis upper_bound_gross); otherwise, and for litres entries, no points. Any other value is a 400."
          },
          "icao_limited_quantity": {
            "type": "boolean",
            "description": "OPTIONAL, on an ID-prefixed line only (on a UN-numbered line it is a 400): true states that the packages are limited quantities conforming to the ICAO Technical Instructions (the 3.4.8 mark, or 3.4.10). Only then is the line counted out of 1.1.3.6 (1.1.3.4.2, 1.1.3.6.5)."
          }
        },
        "required": [
          "un_number",
          "quantity"
        ],
        "additionalProperties": false
      }
    },
    "edition": {
      "type": "string",
      "enum": [
        "2025",
        "2027"
      ],
      "description": "ADR edition \"2025\" or \"2027\"; wins over as_of. Omitted, as_of picks it: before 2027-01-01 ADR 2025; to 2027-06-30 ADR 2027 with an EDITION_TRANSITIONAL notice (ADR 2025 still allowed, 1.6.1.1); from 2027-07-01 ADR 2027 only (2025 refused, EDITION_UNSUPPORTED, 422). /api-docs#adr-editions"
    },
    "as_of": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "YYYY-MM-DD the answer is for (default today, UTC). Picks the ADR edition when edition is omitted; echoed in adr_edition, the 1.2 envelope and the check receipt."
    }
  },
  "required": [
    "items"
  ],
  "additionalProperties": false
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/freightutils-com-adr-calculator-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.