---
title: "Container Capacity Reference"
method: GET
path: "/api/containers"
tags: ["Reference Data"]
---

# Container Capacity Reference

`GET /api/containers`

## Request

- Base URL: `https://www.freightutils.com`
- URL: `https://www.freightutils.com/api/containers`
- Auth: none declared

Shipping container specifications for all 10 standard ISO container types. Returns dimensions, weights, door openings, and pallet capacity. Optionally calculate how many items of given dimensions fit in a specific container.

## Query parameters

- `type` '20ft-standard' | '40ft-standard' | '20ft-high-cube' | '40ft-high-cube' | '20ft-open-top' | '40ft-open-top' | '20ft-flat-rack' | '40ft-flat-rack' | '20ft-reefer' | '40ft-reefer'
- `l` number
- `w` number
- `h` number
- `wt` number
- `qty` integer
- `view` 'summary'
- `offset` integer
- `limit` integer

## Response `200`

Container specifications or loading calculation result.

- union
  - ContainerListResponse
    - `count` integer, required: Number of containers.
    - `results` ContainerSpec[], required
      - `name` string, required: Container type name.
      - `slug` string, required: URL-friendly identifier.
      - `internal_length_cm` number, required: Internal length in cm.
      - `internal_width_cm` number, required: Internal width in cm.
      - `internal_height_cm` number, nullable, required: Internal height in cm. NULL on open decks (flat racks) — no roof, so no bounding height. Read height_basis to learn what a null means. Never 0: a zero here would make a length x width x height calculation return zero volume.
      - `external_length_cm` number: External length in cm.
      - `external_width_cm` number: External width in cm.
      - `external_height_cm` number: External height in cm.
      - `door_width_cm` number, nullable: Door opening width in cm.
      - `door_height_cm` number, nullable: Door opening height in cm.
      - `capacity_cbm` number, nullable, required: Internal volume in CBM. NULL on open decks (flat racks), which have no roof and no side walls and therefore no cubic capacity — read capacity_basis, and use deck_area_sqm instead. Never 0.
      - `tare_weightKg` number, required: Empty container weight in kg.
      - `max_gross_kg` number, required: Maximum gross weight in kg.
      - `max_payload_kg` number, required: Maximum cargo weight in kg.
      - `euro_pallets` string, required: DEPRECATED — use euro_pallets_min / euro_pallets_max. A string, and sometimes an EN-DASH range such as "23–24", so Number() returns NaN and parseInt() silently discards the upper bound. Kept unchanged for back-compat and now derived from the numeric pair. Will be removed in a future major version.
      - `gma_pallets` string, required: DEPRECATED — use gma_pallets_min / gma_pallets_max. A numeric value stored as a string. Kept unchanged for back-compat and now derived from the numeric pair. Will be removed in a future major version.
      - `euro_pallets_min` integer, required: EUR pallets (1200x800mm) that fit — the conservative figure. Always numeric. Replaces euro_pallets.
      - `euro_pallets_max` integer, nullable: Upper bound when the achievable EUR-pallet count is genuinely a range (depends on overhang tolerance and whether the last row is turned). Null when the figure is exact.
      - `gma_pallets_min` integer, required: GMA pallets (48x40in) that fit — the conservative figure. Always numeric. Replaces gma_pallets.
      - `gma_pallets_max` integer, nullable: Upper bound when the GMA-pallet count is a range; null when exact.
      - `deck_area_sqm` number, nullable: Deck area in m² — the meaningful capacity figure for an open deck (flat racks), where a cubic capacity does not exist. Null on enclosed containers.
      - `pallet_capacity_basis` 'floor-positions' | 'weight-limited' | 'industry-convention' | 'unverified', required: Which constraint the pallet counts express. Container counts are 'industry-convention' because published figures assume a pinwheel load and exceed an aligned-row tiling of the same floor.
      - `height_basis` 'unbounded-open-top' | 'constrained-removable-roof' | 'varies-by-configuration' | 'unverified', required: What internal_height_cm means, INCLUDING what a null means. 'unbounded-open-top' = no roof, so no height constraint exists (flat racks; height is null). 'constrained-removable-roof' = a real roof-fitted height on a unit whose roof comes off (open tops). Never infer this from open_top.
      - `open_top` boolean, required: Affirmative physical fact: the unit has no fixed roof. NOT the discriminator for what a null height means — read height_basis for that.
      - `capacity_basis` 'carrier-published' | 'computed-from-internal-dimensions' | 'not-applicable-open-deck' | 'unverified', required: What capacity_cbm is. Carrier-published capacities do NOT equal length x width x height, so an agent computing volume from dimensions and an agent reading capacity_cbm will differ; this says which figure is held. 'not-applicable-open-deck' means capacity_cbm is null because the unit is unbounded.
      - `max_gross_basis` 'carrier-published' | 'iso-668-series-1' | 'unverified', required: Which authority max_gross_kg comes from. 'iso-668-series-1' is a regulatory ceiling and is frequently LOWER than what carriers actually operate — where it applies, max_payload_kg (derived as max gross minus tare) understates usable payload.
      - `description` string: Container description.
      - `notes` string: Usage notes.
    - `_source` SourceEnvelope: Additive provenance citation for the dataset or method behind this response, from FreightUtils' single provenance source of truth. Shapes: reference, methodology (calculators), or reference with provenance_status:'pending-verification'. Fields appear only when a real value exists.
      - `type` 'reference' | 'methodology', required
      - `authority` string
      - `dataset` string
      - `source_url` string
      - `data_vintage` string
      - `licence` string
      - `retrieved_via` string
      - `standard` string
      - `reference` string
      - `computed_by` string
      - `provenance_status` 'pending-verification'
      - `dataset_edition` string: Edition this response is served from (editioned reference datasets only), e.g. 'UN/LOCODE 2025-1'.
      - `authority_current_edition` string: The authority's current in-force edition at the last check. Differs from dataset_edition only when the served data lags the authority.
      - `checked_at` string: YYYY-MM-DD of the last served-vs-authority edition comparison (on-demand checker, staleness-guarded).
  - ContainerSpec
    - `name` string, required: Container type name.
    - `slug` string, required: URL-friendly identifier.
    - `internal_length_cm` number, required: Internal length in cm.
    - `internal_width_cm` number, required: Internal width in cm.
    - `internal_height_cm` number, nullable, required: Internal height in cm. NULL on open decks (flat racks) — no roof, so no bounding height. Read height_basis to learn what a null means. Never 0: a zero here would make a length x width x height calculation return zero volume.
    - `external_length_cm` number: External length in cm.
    - `external_width_cm` number: External width in cm.
    - `external_height_cm` number: External height in cm.
    - `door_width_cm` number, nullable: Door opening width in cm.
    - `door_height_cm` number, nullable: Door opening height in cm.
    - `capacity_cbm` number, nullable, required: Internal volume in CBM. NULL on open decks (flat racks), which have no roof and no side walls and therefore no cubic capacity — read capacity_basis, and use deck_area_sqm instead. Never 0.
    - `tare_weightKg` number, required: Empty container weight in kg.
    - `max_gross_kg` number, required: Maximum gross weight in kg.
    - `max_payload_kg` number, required: Maximum cargo weight in kg.
    - `euro_pallets` string, required: DEPRECATED — use euro_pallets_min / euro_pallets_max. A string, and sometimes an EN-DASH range such as "23–24", so Number() returns NaN and parseInt() silently discards the upper bound. Kept unchanged for back-compat and now derived from the numeric pair. Will be removed in a future major version.
    - `gma_pallets` string, required: DEPRECATED — use gma_pallets_min / gma_pallets_max. A numeric value stored as a string. Kept unchanged for back-compat and now derived from the numeric pair. Will be removed in a future major version.
    - `euro_pallets_min` integer, required: EUR pallets (1200x800mm) that fit — the conservative figure. Always numeric. Replaces euro_pallets.
    - `euro_pallets_max` integer, nullable: Upper bound when the achievable EUR-pallet count is genuinely a range (depends on overhang tolerance and whether the last row is turned). Null when the figure is exact.
    - `gma_pallets_min` integer, required: GMA pallets (48x40in) that fit — the conservative figure. Always numeric. Replaces gma_pallets.
    - `gma_pallets_max` integer, nullable: Upper bound when the GMA-pallet count is a range; null when exact.
    - `deck_area_sqm` number, nullable: Deck area in m² — the meaningful capacity figure for an open deck (flat racks), where a cubic capacity does not exist. Null on enclosed containers.
    - `pallet_capacity_basis` 'floor-positions' | 'weight-limited' | 'industry-convention' | 'unverified', required: Which constraint the pallet counts express. Container counts are 'industry-convention' because published figures assume a pinwheel load and exceed an aligned-row tiling of the same floor.
    - `height_basis` 'unbounded-open-top' | 'constrained-removable-roof' | 'varies-by-configuration' | 'unverified', required: What internal_height_cm means, INCLUDING what a null means. 'unbounded-open-top' = no roof, so no height constraint exists (flat racks; height is null). 'constrained-removable-roof' = a real roof-fitted height on a unit whose roof comes off (open tops). Never infer this from open_top.
    - `open_top` boolean, required: Affirmative physical fact: the unit has no fixed roof. NOT the discriminator for what a null height means — read height_basis for that.
    - `capacity_basis` 'carrier-published' | 'computed-from-internal-dimensions' | 'not-applicable-open-deck' | 'unverified', required: What capacity_cbm is. Carrier-published capacities do NOT equal length x width x height, so an agent computing volume from dimensions and an agent reading capacity_cbm will differ; this says which figure is held. 'not-applicable-open-deck' means capacity_cbm is null because the unit is unbounded.
    - `max_gross_basis` 'carrier-published' | 'iso-668-series-1' | 'unverified', required: Which authority max_gross_kg comes from. 'iso-668-series-1' is a regulatory ceiling and is frequently LOWER than what carriers actually operate — where it applies, max_payload_kg (derived as max gross minus tare) understates usable payload.
    - `description` string: Container description.
    - `notes` string: Usage notes.
  - ContainerLoadingResponse
    - `container` ContainerSpec, required
      - `name` string, required: Container type name.
      - `slug` string, required: URL-friendly identifier.
      - `internal_length_cm` number, required: Internal length in cm.
      - `internal_width_cm` number, required: Internal width in cm.
      - `internal_height_cm` number, nullable, required: Internal height in cm. NULL on open decks (flat racks) — no roof, so no bounding height. Read height_basis to learn what a null means. Never 0: a zero here would make a length x width x height calculation return zero volume.
      - `external_length_cm` number: External length in cm.
      - `external_width_cm` number: External width in cm.
      - `external_height_cm` number: External height in cm.
      - `door_width_cm` number, nullable: Door opening width in cm.
      - `door_height_cm` number, nullable: Door opening height in cm.
      - `capacity_cbm` number, nullable, required: Internal volume in CBM. NULL on open decks (flat racks), which have no roof and no side walls and therefore no cubic capacity — read capacity_basis, and use deck_area_sqm instead. Never 0.
      - `tare_weightKg` number, required: Empty container weight in kg.
      - `max_gross_kg` number, required: Maximum gross weight in kg.
      - `max_payload_kg` number, required: Maximum cargo weight in kg.
      - `euro_pallets` string, required: DEPRECATED — use euro_pallets_min / euro_pallets_max. A string, and sometimes an EN-DASH range such as "23–24", so Number() returns NaN and parseInt() silently discards the upper bound. Kept unchanged for back-compat and now derived from the numeric pair. Will be removed in a future major version.
      - `gma_pallets` string, required: DEPRECATED — use gma_pallets_min / gma_pallets_max. A numeric value stored as a string. Kept unchanged for back-compat and now derived from the numeric pair. Will be removed in a future major version.
      - `euro_pallets_min` integer, required: EUR pallets (1200x800mm) that fit — the conservative figure. Always numeric. Replaces euro_pallets.
      - `euro_pallets_max` integer, nullable: Upper bound when the achievable EUR-pallet count is genuinely a range (depends on overhang tolerance and whether the last row is turned). Null when the figure is exact.
      - `gma_pallets_min` integer, required: GMA pallets (48x40in) that fit — the conservative figure. Always numeric. Replaces gma_pallets.
      - `gma_pallets_max` integer, nullable: Upper bound when the GMA-pallet count is a range; null when exact.
      - `deck_area_sqm` number, nullable: Deck area in m² — the meaningful capacity figure for an open deck (flat racks), where a cubic capacity does not exist. Null on enclosed containers.
      - `pallet_capacity_basis` 'floor-positions' | 'weight-limited' | 'industry-convention' | 'unverified', required: Which constraint the pallet counts express. Container counts are 'industry-convention' because published figures assume a pinwheel load and exceed an aligned-row tiling of the same floor.
      - `height_basis` 'unbounded-open-top' | 'constrained-removable-roof' | 'varies-by-configuration' | 'unverified', required: What internal_height_cm means, INCLUDING what a null means. 'unbounded-open-top' = no roof, so no height constraint exists (flat racks; height is null). 'constrained-removable-roof' = a real roof-fitted height on a unit whose roof comes off (open tops). Never infer this from open_top.
      - `open_top` boolean, required: Affirmative physical fact: the unit has no fixed roof. NOT the discriminator for what a null height means — read height_basis for that.
      - `capacity_basis` 'carrier-published' | 'computed-from-internal-dimensions' | 'not-applicable-open-deck' | 'unverified', required: What capacity_cbm is. Carrier-published capacities do NOT equal length x width x height, so an agent computing volume from dimensions and an agent reading capacity_cbm will differ; this says which figure is held. 'not-applicable-open-deck' means capacity_cbm is null because the unit is unbounded.
      - `max_gross_basis` 'carrier-published' | 'iso-668-series-1' | 'unverified', required: Which authority max_gross_kg comes from. 'iso-668-series-1' is a regulatory ceiling and is frequently LOWER than what carriers actually operate — where it applies, max_payload_kg (derived as max gross minus tare) understates usable payload.
      - `description` string: Container description.
      - `notes` string: Usage notes.
    - `loading` object, required
      - `fits_lengthwise` integer: Items fitting along the length.
      - `fits_widthwise` integer: Items fitting along the width.
      - `fits_height` integer: Items fitting in height.
      - `max_items` integer: Maximum items that physically fit.
      - `requested_qty` integer: Quantity requested.
      - `fits` boolean: Whether all requested items fit.
      - `total_weight_kg` number: Total weight of loaded items.
      - `within_payload` boolean: Whether total weight is within payload limit.
      - `utilisation_percent` number: Volume utilisation percentage.
    - `_source` SourceEnvelope: Additive provenance citation for the dataset or method behind this response, from FreightUtils' single provenance source of truth. Shapes: reference, methodology (calculators), or reference with provenance_status:'pending-verification'. Fields appear only when a real value exists.
      - `type` 'reference' | 'methodology', required
      - `authority` string
      - `dataset` string
      - `source_url` string
      - `data_vintage` string
      - `licence` string
      - `retrieved_via` string
      - `standard` string
      - `reference` string
      - `computed_by` string
      - `provenance_status` 'pending-verification'
      - `dataset_edition` string: Edition this response is served from (editioned reference datasets only), e.g. 'UN/LOCODE 2025-1'.
      - `authority_current_edition` string: The authority's current in-force edition at the last check. Differs from dataset_edition only when the served data lags the authority.
      - `checked_at` string: YYYY-MM-DD of the last served-vs-authority edition comparison (on-demand checker, staleness-guarded).

## Other responses

- `400`: Invalid parameters.
- `404`: Container type not found.

---

[API](https://skmtc.dev/freightutils/apis/freightutils-api.md) · [All operations](https://skmtc.dev/freightutils/apis/freightutils-api/llms.txt) · [OpenAPI document](https://skmtc.dev/freightutils/apis/freightutils-api/revisions/6607bb3cea90?raw)
