Free JSON · no key · open CORS

The Dwell Data API

Every number published on The Dwell (the-dwell.com) as free JSON: friction board, port complexes, ship queue, at anchor, truck index, busiest ports, empty share, what ports import, vessel dwell and box and rail dwell. No key, no sign-up, callable from any website or script. The files are rebuilt every time the site rebuilds with new data, so they always match the pages.

Base URL
https://the-dwell.com/api/v1
Auth
None
Format
JSON, UTF-8, GET only
CORS
Access-Control-Allow-Origin: *
Series
16 · 14 key statistics
Data as of
Nov 10, 2026

Quick start

The newest reading of every series, from a terminal:

curl https://the-dwell.com/api/v1/latest.json

Or in JavaScript, from any page:

const res = await fetch("https://the-dwell.com/api/v1/latest.json");
const { data_as_of, data } = await res.json();
for (const row of data) console.log(row.title, row.headline, row.data_through);

Endpoints

GET /api/v1/index.json

API index. What this API is, its license and attribution, the sections it covers, and every endpoint.

Example: https://the-dwell.com/api/v1/index.json

Sample response
{
  "api": "The Dwell Data API",
  "version": "v1",
  "docs": "https://the-dwell.com/api",
  "data_as_of": "2026-11-10",
  "data_as_of_label": "Nov 10, 2026",
  "data_pulled_at": "2026-11-11T14:47:33.427Z",
  "generated_at": "2026-11-11T18:41:17.936Z",
  "attribution": "Credit The Dwell (the-dwell.com) with a visible link to the page the figure came from; every record carries its page_url.",
  "name": "The Dwell Data API",
  "description": "Free JSON for every number published on The Dwell (the-dwell.com): friction board, port complexes, ship queue, at anchor, truck index, busiest ports, empty share, what ports import, vessel dwell, box and rail dwell. U.S. port congestion data: the plain-English congestion board for importers.",
  "publisher": {
    "name": "The Dwell",
    "url": "https://the-dwell.com"
  },
  "auth": "none",
  "cors": "*",
  "format": "application/json; charset=utf-8",
  "license": "Free to use and republish with attribution; no key or sign-up. The underlying figures are public records from the agencies named in each series' provenance; The Dwell collects, checks and publishes them.",
  "update_policy": "Static files rebuilt every time the site rebuilds with new data. data_as_of in each response is the newest observation it holds; data_pulled_at is when the site last pulled its sources.",
  "counts": {
    "series": 16,
    "stats": 14
  },
  "sections": [
    {
      "key": "friction",
      "label": "Friction board",
      "series": 1,
      "example": "https://the-dwell.com/api/v1/series/friction/import-friction.json"
    },
    {
      "key": "port",
      "label": "Port complexes",
      "series": 3,
      "example": "https://the-dwell.com/api/v1/series/port/la-long-beach.json"
    },
    {
      "key": "waiting",
      "label": "Ship queue",
      "series": 3,
      "example": "https://the-dwell.com/api/v1/series/waiting/all-us.json"
    },
    {
      "key": "anchored",
      "label": "At anchor",
      "series": 1,
      "example": "https://the-dwell.com/api/v1/series/anchored/all-coasts.json"
    },
    {
      "key": "pti",
      "label": "Truck index",
      "series": 2,
      "example": "https://the-dwell.com/api/v1/series/pti/la-long-beach.json"
    },
    {
      "key": "busiest",
      "label": "Busiest ports",
      "series": 1,
      "example": "https://the-dwell.com/api/v1/series/busiest/us-container-ports.json"
    },
    {
      "key": "empty",
      "label": "Empty share",
      "series": 1,
      "example": "https://the-dwell.com/api/v1/series/empty/us-container-ports.json"
    },
    {
      "key": "imports",
      "label": "What ports import",
      "series": 1,
      "example": "https://the-dwell.com/api/v1/series/imports/los-angeles.json"
    },
    {
      "key": "dwell",
      "label": "Vessel dwell",
      "series": 1,
      "example": "https://the-dwell.com/api/v1/series/dwell/us-average.json"
    },
    {
      "key": "boxdwell",
      "label": "Box and rail dwell",
      "series": 2,
      "example": "https://the-dwell.com/api/v1/series/boxdwell/los-angeles-import-containers.json"
    }
  ],
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/v1/index.json",
      "url": "https://the-dwell.com/api/v1/index.json",
      "description": "What this API is, its license and attribution, the sections it covers, and every endpoint."
    },
    {
      "method": "GET",
      "path": "/api/v1/latest.json",
      "url": "https://the-dwell.com/api/v1/latest.json",
      "description": "The newest reading of every data page on The Dwell (16 series): the headline value as the site shows it, the newest point of each charted line with its date, whether it is current, and links to its page and full history."
    },
    {
      "method": "GET",
      "path": "/api/v1/stats.json",
      "url": "https://the-dwell.com/api/v1/stats.json",
      "description": "The 14 headline numbers on the the-dwell.com/stats page, each as a quotable sentence with its data date and a ready-made citation."
    },
    {
      "method": "GET",
      "path": "/api/v1/series/{section}/{slug}.json",
      "url": "https://the-dwell.com/api/v1/series/port/la-long-beach.json",
      "description": "Everything behind one data page: every charted point (date + value), the historical band where the page draws one, the page's tables exactly as shown, its source and citation. Find each series_url in latest.json."
    },
    {
      "method": "GET",
      "path": "/api/v1/openapi.json",
      "url": "https://the-dwell.com/api/v1/openapi.json",
      "description": "A machine-readable OpenAPI 3.1 description of these endpoints."
    }
  ]
}

GET /api/v1/latest.json

Latest readings. The newest reading of every data page on The Dwell (16 series): the headline value as the site shows it, the newest point of each charted line with its date, whether it is current, and links to its page and full history.

Example: https://the-dwell.com/api/v1/latest.json

Sample response
{
  "api": "The Dwell Data API",
  "version": "v1",
  "docs": "https://the-dwell.com/api",
  "data_as_of": "2026-11-10",
  "data_as_of_label": "Nov 10, 2026",
  "data_pulled_at": "2026-11-11T14:47:33.427Z",
  "generated_at": "2026-11-11T18:41:17.936Z",
  "attribution": "Credit The Dwell (the-dwell.com) with a visible link to the page the figure came from; every record carries its page_url.",
  "count": 16,
  "data": [
    {
      "id": "friction/import-friction",
      "section": "friction",
      "section_label": "Friction board",
      "title": "The import-friction board",
      "headline": "Flowing",
      "unit": "vessels",
      "data_through": "2026-11-03",
      "date_precision": "weekly",
      "frequency": "Weekly",
      "status": "current",
      "values": [
        {
          "series": "Ships awaiting berth",
          "date": "2026-11-03",
          "value": 2
        }
      ],
      "source": "Ships awaiting berth from MARAD and the Marine Exchange, via BTS. Friction read: The Dwell composite of BTS indicators",
      "page_url": "https://the-dwell.com/friction/import-friction",
      "series_url": "https://the-dwell.com/api/v1/series/friction/import-friction.json"
    },
    {
      "id": "port/la-long-beach",
      "section": "port",
      "section_label": "Port complexes",
      "title": "LA/Long Beach port congestion",
      "headline": "Flowing",
      "unit": "vessels",
      "data_through": "2026-11-03",
      "date_precision": "weekly",
      "frequency": "Weekly and monthly components",
      "status": "current",
      "values": [
        {
          "series": "Ships awaiting berth",
          "date": "2026-11-03",
          "value": 2
        }
      ],
      "source": "The Dwell import-friction read, a composite of BTS supply-chain indicators",
      "page_url": "https://the-dwell.com/port/la-long-beach",
      "series_url": "https://the-dwell.com/api/v1/series/port/la-long-beach.json"
    }
  ]
}

Trimmed to 2 of 16 entries.

GET /api/v1/stats.json

Key statistics. The 14 headline numbers on the the-dwell.com/stats page, each as a quotable sentence with its data date and a ready-made citation.

Example: https://the-dwell.com/api/v1/stats.json

Sample response
{
  "api": "The Dwell Data API",
  "version": "v1",
  "docs": "https://the-dwell.com/api",
  "data_as_of": "2026-11-10",
  "data_as_of_label": "Nov 10, 2026",
  "data_pulled_at": "2026-11-11T14:47:33.427Z",
  "generated_at": "2026-11-11T18:41:17.936Z",
  "attribution": "Credit The Dwell (the-dwell.com) with a visible link to the page the figure came from; every record carries its page_url.",
  "stats_page": "https://the-dwell.com/stats",
  "count": 14,
  "stats": [
    {
      "id": "friction-la-long-beach",
      "label": "LA/Long Beach import-friction read",
      "sentence": "The import-friction read at LA/Long Beach is \"flowing\", a rules-based summary of its ship queue (week of Nov 2, 2026), truck planning-time index (Oct 2026) and loaded-import TEU (Sep 2026) versus their trailing-12-month normal (The Dwell).",
      "data_date": "2026-11-03",
      "date_precision": "weekly",
      "citation": "The import-friction read at LA/Long Beach is \"flowing\" as of week of Nov 2, 2026 (The Dwell). The Dwell. https://the-dwell.com/port/la-long-beach",
      "stats_url": "https://the-dwell.com/stats#friction-la-long-beach",
      "page_url": "https://the-dwell.com/port/la-long-beach",
      "series_url": "https://the-dwell.com/api/v1/series/port/la-long-beach.json",
      "provenance": "The Dwell import-friction read, a composite of BTS supply-chain indicators · Import-friction read and the live metrics behind it · LA/Long Beach · through week of Nov 2, 2026"
    },
    {
      "id": "friction-ny-nj",
      "label": "NY/NJ import-friction read",
      "sentence": "The import-friction read at NY/NJ was \"flowing\" on the latest monthly releases, a rules-based summary of its truck planning-time index (Oct 2026) and loaded-import TEU (Sep 2026) versus their trailing-12-month normal. BTS publishes no weekly ship queue for NY/NJ (The Dwell).",
      "data_date": "2026-10",
      "date_precision": "monthly",
      "citation": "The import-friction read at NY/NJ was \"flowing\" on the monthly data through Oct 2026 (The Dwell). The Dwell. https://the-dwell.com/port/new-york-new-jersey",
      "stats_url": "https://the-dwell.com/stats#friction-ny-nj",
      "page_url": "https://the-dwell.com/port/new-york-new-jersey",
      "series_url": "https://the-dwell.com/api/v1/series/port/new-york-new-jersey.json",
      "provenance": "The Dwell import-friction read, a composite of BTS supply-chain indicators · Import-friction read and the monthly metrics behind it · NY/NJ · through Oct 2026"
    }
  ]
}

Trimmed to 2 of 14 statistics.

GET /api/v1/series/{section}/{slug}.json

One series, full history. Everything behind one data page: every charted point (date + value), the historical band where the page draws one, the page's tables exactly as shown, its source and citation. Find each series_url in latest.json.

Example: https://the-dwell.com/api/v1/series/port/la-long-beach.json

Sample response
{
  "api": "The Dwell Data API",
  "version": "v1",
  "docs": "https://the-dwell.com/api",
  "data_as_of": "2026-11-03",
  "data_as_of_label": "week of Nov 2, 2026",
  "data_pulled_at": "2026-11-11T14:47:33.427Z",
  "generated_at": "2026-11-11T18:41:17.936Z",
  "attribution": "Credit The Dwell (the-dwell.com) with a visible link to the page the figure came from; every record carries its page_url.",
  "id": "port/la-long-beach",
  "section": "port",
  "section_label": "Port complexes",
  "title": "LA/Long Beach port congestion",
  "subtitle": "Import-friction read: Flowing. 2 ships awaiting berth in the week of Nov 2, 2026, against a normal of 1 ship.",
  "description": "LA/Long Beach port congestion: the import-friction read is Flowing. 2 ships awaiting berth in the week of Nov 2, 2026, against a normal of 1 ship.",
  "page_url": "https://the-dwell.com/port/la-long-beach",
  "headline": "Flowing",
  "unit": "vessels",
  "data_through": "2026-11-03",
  "date_precision": "weekly",
  "frequency": "Weekly and monthly components",
  "status": "current",
  "source": "The Dwell import-friction read, a composite of BTS supply-chain indicators",
  "provenance": {
    "source": "The Dwell import-friction read, a composite of BTS supply-chain indicators",
    "series": "Import-friction read and the live metrics behind it",
    "geography": "LA/Long Beach",
    "unit": "vessels",
    "period": "Against a trailing-12-month normal band",
    "lastObservation": "week of Nov 2, 2026",
    "frequency": "Weekly and monthly components"
  },
  "citation": "The import-friction read at LA/Long Beach is \"flowing\" as of week of Nov 2, 2026 (The Dwell). The Dwell. https://the-dwell.com/port/la-long-beach",
  "series": [
    {
      "label": "Ships awaiting berth",
      "unit": "vessels",
      "points": [
        {
          "date": "2026-10-20",
          "value": 2
        },
        {
          "date": "2026-10-27",
          "value": 1
        },
        {
          "date": "2026-11-03",
          "value": 2
        }
      ]
    }
  ],
  "tables": [
    {
      "caption": null,
      "columns": [
        "Metric",
        "Latest",
        "Trailing-12-mo normal",
        "Status",
        "Reading for"
      ],
      "rows": [
        [
          "Ships awaiting berth",
          "2 ships",
          "1 ship",
          "near normal",
          "week of Nov 2, 2026"
        ],
        [
          "Truck planning-time index",
          "2.29",
          "4.01",
          "eased",
          "Oct 2026"
        ],
        [
          "Loaded imports",
          "1,055,086 TEU",
          "848,128 TEU",
          "elevated",
          "Sep 2026"
        ]
      ]
    }
  ]
}

Trimmed: the live response carries all 306 points, the full table.

GET /api/v1/openapi.json

OpenAPI description. A machine-readable OpenAPI 3.1 description of these endpoints.

Example: https://the-dwell.com/api/v1/openapi.json

Sample response
{
  "openapi": "3.1.0",
  "info": {
    "title": "The Dwell Data API",
    "version": "1.0.0",
    "description": "Free JSON for every number published on The Dwell (the-dwell.com): friction board, port complexes, ship queue, at anchor, truck index, busiest ports, empty share, what ports import, vessel dwell, box and rail dwell. U.S. port congestion data: the plain-English congestion board for importers. No key needed. Credit The Dwell (the-dwell.com) with a visible link to the page the figure came from; every record carries its page_url.",
    "license": {
      "name": "Free to use with attribution",
      "url": "https://the-dwell.com/api"
    }
  },
  "servers": [
    {
      "url": "https://the-dwell.com/api/v1"
    }
  ],
  "externalDocs": {
    "description": "Docs",
    "url": "https://the-dwell.com/api"
  },
  "paths": {
    "/index.json": {
      "get": {
        "operationId": "getIndex",
  ...

First lines only.

What's in it

One series file per data page on the site, at https://the-dwell.com/api/v1/series/{section}/{slug}.json. Every valid pair is listed in latest.json (its id and series_url fields).

SectionSeriesExample
Friction boardOne plain read per port complex, flowing, some pressure, or congested, built by a fixed rule from where its ship queue and truck planning-time index sit against their trailing-12-month normal, with loaded-import TEU counted only alongside them. 1 The import-friction board
Port complexesThe complex hub pages: the import-friction read at LA/Long Beach, NY/NJ and Savannah and the live metrics behind each, the ship queue, the truck planning-time index, and loaded-import TEU, in one place. 3 LA/Long Beach port congestion
Ship queueContainer ships awaiting berth, the count of ships waiting offshore for a berth to open, weekly from MARAD and the Marine Exchange. This is a queue, not a dwell time, and it is the most current congestion signal on the site. 3 All US container ports ships awaiting berth
At anchorContainer ships at anchor off the East, Gulf and West Coast ports, weekly. The coast-wide anchorage count — related to but broader than a single complex's berth queue, and the widest early-warning lens the public record carries. 1 US ships at anchor, all coasts
Truck indexThe truck planning-time index around each complex, the FHWA measure of how much longer a drayage trip takes than free-flow. The truck-side congestion signal, monthly. 2 LA/Long Beach truck planning-time index
Busiest portsThe tracked US container ports ranked by loaded-import volume, year to date and latest month, in TEU, with each port's month split into loaded imports, loaded exports and empties. One canonical ranking, updated in place: the import-demand read, not a congestion reading. 1 Busiest US container ports by import volume
Empty shareThe empty-container share of monthly box volume at each tracked US port: repositioned empties as a share of loaded imports, loaded exports and empties. A trade-imbalance and equipment-flow read, never a congestion signal. 1 Empty-container share by US port
What ports importWhat actually comes in through a port, by commodity chapter, from the U.S. Census International Trade data — customs value and containerized weight. A Los Angeles pilot; a separate data system from the container-count (TEU) pages. 1 What the Port of Los Angeles imports
Vessel dwellThe classic pandemic-era congestion number: the national average time a container ship sat at a US berth, AIS-derived, in hours. BTS reported it through mid-2023; this is a labeled historical page, never a current reading. 1 US average vessel dwell at berth
Box and rail dwellThe Port of Los Angeles daily import-container inventory, split by dwell age (0-4, 5-8 and 9-plus days), and the import boxes waiting for on-dock rail at Los Angeles and Long Beach side by side. Daily counts by age, never an average dwell time or vessel dwell. 2 Los Angeles import-container dwell

Fields every response carries

In latest.json and each series file, headline is the value exactly as the site shows it (with its unit), values / series carry the raw numbers with their dates, and status is current or not_current. A series that is out of season or not recently quoted says so, with last_quoted, rather than passing an old reading off as today's. See an example series.

Use, credit and limits

Free to use and republish with attribution; no key or sign-up. The underlying figures are public records from the agencies named in each series' provenance; The Dwell collects, checks and publishes them.

Attribution: Credit The Dwell (the-dwell.com) with a visible link to the page the figure came from; every record carries its page_url.

No rate limit is set and there is nothing to sign up for: the files are static and served from Cloudflare's network. Please cache responses rather than polling; they change only when the site rebuilds. Fields are only ever added within v1, never renamed or removed. Questions or a series you need: contact us. How each number is collected: methodology.