Thursday 1 October 2026 Day 216 of the Hormuz crisis AIS feed live
hormuz.now Live status and ship traffic in the Strait of Hormuz
Restricted · 9/24h
Open data

Strait of Hormuz data and API

Every number on hormuz.now is free to download and reuse: the live Strait of Hormuz status, daily ship crossings since 20 April 2026, individual crossings, ships waiting and where they say they are going, Gulf port activity and the geography behind the count. No key or sign-up is needed.

Free Strait of Hormuz data under CC BY 4.0

165
days of daily crossing counts
since 20 April 2026
135
commercial crossings in the last 30 days
AIS-visible, distinct ships per direction
1,489
vessels in the live snapshot
refreshed about every 20 seconds
25
Gulf and bypass ports
derived from IMF PortWatch

hormuz.now's own data (the status, crossings, fleet and waiting figures, decoded destinations and GeoJSON) is published under the Creative Commons Attribution 4.0 licence. You may copy, share and adapt it for any purpose, including commercially, as long as you credit hormuz.now with a link.

Figures derived from IMF PortWatch are not ours to license: the port endpoints, tanker tonnage, the stored PortWatch series and the PortWatch columns in our daily files. Credit IMF PortWatch as their source and check its terms before republishing them. Other trackers' figures quoted on the site belong to their publishers.

The API needs no key. Every endpoint answers plain GET requests and sends CORS headers (Access-Control-Allow-Origin: *), so it can be called from a web page. Days are UTC calendar days, and timestamps in JSON are Unix time in milliseconds.

Strait of Hormuz datasets and API endpoints

Definitions →
DatasetWhat it containsFormatURLUpdated
Live statusThe headline status (open, restricted, closed or unknown) with its reason and inputs; crossings today, in the last 24 hours and 7 days; the 7-day average; the last crossing; a fleet summary; feed health; the pre-crisis baseline and the latest PortWatch figures.JSON/status.jsonsame as /api/statusEvery minute
TrafficEvery count window (today, yesterday, the last and previous 24 hours, 7 and 30 days), 90 days of daily totals, 48 hours of hourly totals, monthly averages since 2019 alongside PortWatch, 7-day breakdowns by ship type, flag and corridor, and the calibration.JSON/api/trafficEvery minute
CrossingsIndividual crossings, newest first: ship, type, size, flag, direction, time, corridor and declared destination. Parameters: hours (1 to 9,600; default 24), limit (up to 1,000; default 100), commercial=0 to add small craft, vessel= for one ship's history.JSON/api/crossings?hours=24&commercial=1Every minute
Daily crossingsOne row per UTC day since 20 April 2026: inbound, outbound, total and tanker crossings, the source (live, legacy or mixed), PortWatch's total for the day (blank until published) and a partial-day flag.CSV/api/daily.csvEvery 5 minutes
Daily crossingsThe same days with our 7-day average, plus a definition of what is counted.JSON/api/daily.jsonEvery 5 minutes
Ships, waiting and destinationsPort and anchorage areas (ships waiting and moving, tankers, gas carriers, 30-day trend); the fleet summary; ships in the strait; waiting times (tracking start, median wait by area, longest waits, duration bands); AIS-silent ships; declared destinations and their regions; broadcast messages.JSON/api/areasEvery minute
Gulf ports25 Gulf and bypass ports: port calls, exports and tanker calls a day before the crisis and over the latest 30 days, the share of normal, weekly calls for 30 weeks, the latest date and ships waiting nearby now; plus the tanker tonnage summary for the strait. Derived from IMF PortWatch.JSON/api/portsEvery 30 minutes
One portDaily PortWatch rows for one port since 1 January 2025: port calls (all ships, tankers, container ships, dry bulk) and import and export tonnes (all ships and tankers). The slug is the one in the port's page address.JSON/api/ports/{slug}e.g. /api/ports/ras-tanuraAs PortWatch publishes
One shipA ship's live AIS details (if it is visible now), its side of the counting line, up to 50 crossings, when it became stationary, and its sampled track for the last 48 hours. The ID is the one in the ship's page address.JSON/api/vessel/{id}e.g. /api/vessel/411820Live
GeographyThe counting line, the Gulf of Oman side polygon, the port and anchorage areas and the approximate inbound and outbound shipping lanes.GeoJSON/api/geoRarely
PortWatch strait seriesOur stored copy of IMF PortWatch's daily data for the Strait of Hormuz (chokepoint6) since 2019: transits and deadweight capacity by vessel type.JSON/api/portwatchEvery 6 hours
Live positionsEvery vessel visible in our area now, as compact rows for maps. Without format=compact you get the older, larger format.JSON/api/snapshot?format=compactAbout every 20 seconds
Live streamThe same frames pushed as Server-Sent Events (event: snapshot) whenever a new poll lands, with a keep-alive comment every 20 seconds. Places are limited: when the stream is full it answers 503 with Retry-After, and you should poll the snapshot instead.SSE/api/stream?format=compactAbout every 20 seconds
Atom feedA daily traffic brief for each of the last 14 complete days, and recent status changes.Atom/feed.xmlDaily and on status changes (cached 10 min)
llms.txtA plain-text summary of the site, the current status and links to the key data, for AI assistants.Text/llms.txtWith the status (cached 10 min)
SitemapEvery page, including daily traffic pages, port pages and ship pages.XML/sitemap.xmlAs pages are added (cached 1 h)
Status badgeAn SVG badge with the status and the 24-hour crossing count (how to embed it).SVG/badge.svgWith the status (cached 5 min)

In /api/crossings, hours is rounded up to 1, 6, 12, 24, 48, 72, 168, 336, 720, 2,160, 4,320 or 9,600 and limit to 25, 100, 250, 500 or 1,000, so that responses can be cached. Lists leave out side changes first seen after an AIS gap of more than 72 hours, which we do not count; a single ship's history (vessel=) includes them, marked "counted": false. Days labelled legacy are reconstructed from an earlier tracking method (details).

Quick start

curl -s https://hormuz.now/status.json
curl -s "https://hormuz.now/api/crossings?hours=24&commercial=1"
curl -s https://hormuz.now/api/daily.csv -o hormuz-daily.csv

Example: the status.json response

Live file →

An abbreviated example of /status.json. The values are illustrative, not current, and … marks fields left out; open the live file for the full response.

Example response (abbreviated)

{
  "generatedAt": 1790740000000,
  "status": {
    "level": "restricted",
    "label": "Restricted",
    "sublabel": "Severely restricted",
    "reason": "AIS-visible commercial traffic is about 5% of normal: 4.0 a day over the past week, against 84.8 before the crisis. …",
    "source": "auto",
    "pct": 4.7,
    "ais24": 3,
    "ais7": 4,
    "ais7Equiv": 3.6,
    "baseline": 84.8,
    "estimated": false,
    "health": "live",
    "dayCount": 215,
    "crisisStart": "2026-02-28",
    "asOf": 1790740000000,
    …
  },
  "today":   { "in": 1, "out": 0, "total": 1, "tankers": 1, … },
  "last24h": { "in": 2, "out": 1, "total": 3, "tankers": 1, … },
  "last7d":  { "in": 18, "out": 10, "total": 28, "tankers": 14, … },
  "avg7d": 4,
  "lastCrossing": { "vesselId": "…", "name": "…", "dir": "in", "dirLabel": "Inbound (westbound, into the Gulf)", "t": 1790735700000, … },
  "fleet": { "vessels": 1456, "commercial": 793, "tankers": 419, "lng": 4, "waitingGulf": 178, "waitingOman": 467 },
  "feed": { "health": "live", "lastGood": 1790739990000, "vessels": 1456, "coverage24h": 0.98, … },
  "baseline": { "daily": 84.8, "tankers": 47.6, "computed": true, … },
  "portwatch": { "available": true, "latestDate": "2026-09-27", "latest": 1, "last7Avg": 3.1, … },
  "license": "CC BY 4.0 — hormuz.now; PortWatch data © IMF PortWatch",
  "source": "https://hormuz.now/methodology"
}
FieldMeaning
status.levelopen, restricted, closed or unknown. Unknown means our data is insufficient, not that the strait is closed. label and sublabel are the display words.
status.sourceauto when computed by the published rule, manual when an editor has pinned it (with editorNote and editorUrl).
status.pctThe AIS-visible 7-day average as a percentage of the pre-crisis baseline.
status.ais7, ais7EquivThe 7-day average of crossings a day on our line, and the same scaled to IMF PortWatch's count.
last24h.totalDistinct commercial ships that crossed in the last 24 hours (in plus out). in is inbound (westbound, into the Gulf); out is outbound (eastbound, to the Gulf of Oman).
feed.healthlive, delayed or stale. Treat figures with care when the feed is not live.
generatedAt, asOf, tUnix time in milliseconds (UTC).

Embed the live Strait of Hormuz status badge

Badge →

Add the live status and the number of commercial ships that crossed in the last 24 hours to any web page or README. The badge is an SVG image that follows the status automatically, is cached for 5 minutes and can be loaded from any site.

Strait of Hormuz status badge: Restricted, 9 commercial ships crossed in the last 24 hours

HTML

<a href="https://hormuz.now/"><img src="https://hormuz.now/badge.svg" alt="Strait of Hormuz live status from hormuz.now" height="20"></a>

Markdown

[![Strait of Hormuz live status](https://hormuz.now/badge.svg)](https://hormuz.now/)

Select a snippet and copy it into your page. The link back to hormuz.now is the credit the licence asks for.

Caching, ETags and fair use

Every response except the live stream carries a Cache-Control header and an ETag. Send the ETag back in an If-None-Match header and you get an empty 304 Not Modified when nothing has changed.

Please cache. Live positions change about every 20 seconds and the report behind everything else is rebuilt once a minute, so polling more often gains nothing. For moving ships, use the stream rather than polling the snapshot faster than every 20 seconds. Keeping to these intervals keeps the service free and fast for everyone.

DataChangesCached for
Live positionsAbout every 20 s10 s
StatusEvery minute30 s
Traffic, crossings, areasEvery minute60 s
Daily CSV and JSONEvery minute5 min
BadgeWith the status5 min
PortsEvery 30 minutes10 min
PortWatch series, GeoJSONEvery 6 hours or less often1 h

How to credit hormuz.now

Methodology →

A short credit with a link is enough. For example:

  • Our data: Source: hormuz.now (CC BY 4.0), linking to https://hormuz.now or to the page you used.
  • Port and tanker tonnage figures: Source: IMF PortWatch, via hormuz.now.
  • Charts: say what is counted, for example AIS-visible commercial crossings of the Strait of Hormuz.

When you republish the numbers, please keep their caveats. Our counts are AIS-visible: ships with their transponders off are missed, and all-source trackers report much higher traffic (why counts differ). Destinations are declared by crews and can be wrong. PortWatch figures are estimates published several days late, so give their date. Waits that began before our tracking started are "at least" figures, and a status of unknown means missing data, not a closed strait. Nothing here is navigational, security, legal or investment advice.

Definitions for every figure are in how hormuz.now works; the questions people ask most are answered in the FAQ.

Live AIS data as of · 1,489 vessels visible in the region. Counts are AIS-visible only and miss ships running dark. How we count.