Skip to content
Straits

API

The live picture, free. Depth, metered.

The current headline state is free to query with no key: verdicts, prices, counts, the Hormuz Index, and shallow history. CORS is open, and cache headers are set so a polite caller never overruns the upstream feed. Full history, the per-vessel manifest, and the other intelligence feeds are machine-payable per request. If you only need one endpoint, start with /status; it bundles every live indicator the homepage renders.

License: the indicators and metrics we compute (verdicts, day counts, derived ratios, normalized aggregates, baselines, synthesis prose, methodology) are released under CC0 1.0 (public domain). Use them however you like: republish, redistribute, remix, no attribution required (credit is appreciated). The upstream third-party datasets we ingest (AIS broadcast data, EIA petroleum series, IMF PortWatch transit counts, OFAC SDN entries, and the supplementary feeds disclosed on the methodology page) each carry their own terms. We don’t relicense those; if you plan to redistribute raw upstream data, check the original publisher’s terms first.

Snapshot

One bundle, every live indicator. The recommended starting point.

/status

Canonical snapshot

Recomputed at most every 60s; not edge-cached

All-in-one bundle: verdict, live oil prices, IMF PortWatch daily transit count + throughput, AIS concurrent presence overlay, insurance multiple, trade impact, carrier suspensions, pipeline bypass, SPR, gas, and a per-section dataHealth chip. Powers the embed widget; recommended starting point for newsroom integrations.

curl https://straits.live/status

{
  "asOf": "2026-09-09T12:57:14Z",
  "status": "restricted",
  "verdict": { "status": "closed", "short": "Effectively no", "long": "…", "basis": "insurance" },
  "brent": 100.74, "wti": 95.87, "change24h": 2.53,
  "transits": { "count": 6, "baseline": 85, "throughputPct": 7, "asOfDate": "2026-08-30", "asOfAgeDays": 10, "stale": false },
  "insurance": { "multiple": 40, "vlccPremiumLow": 250000, "vlccPremiumHigh": 10000000 },
  "hormuzIndex": { "crisisPressure": { "value": 92 }, "escalationProbability": { "value": 55 } },
  "carrierSuspensions": [ … ],
  "dataHealth": { "ships": { "source": "live" }, "oil": { "source": "live" }, … }
}

Markets & risk

Prices, premiums, odds: what the market is doing right now.

/api/index

Hormuz Index

Recomputed every 5 minutes

Crisis Pressure and Escalation Forecast composites: current reading plus a per-component breakdown for each. Time series is opt-in: append ?history=24h, 7d, or 30d, returned nested at indices.<name>.history (30d resolves to daily points from the historical rollup, the rest to the raw 5-minute series).

Queryhistory (24h | 7d | 30d)

curl https://straits.live/api/index

{
  "asOf": "2026-08-23T13:00:00Z",
  "indices": {
    "crisisPressure": { "value": 94, "band": "extreme", "components": { … } },
    "escalationProbability": { "value": 56, "band": "elevated", "components": { … } }
  }
}

/api/v1/oil

Brent and WTI time-series

Underlying feed every 10 minutes; not cached at the edge, each request reaches the origin

Rolling Brent and WTI prices from intraday front-month futures contracts (Yahoo Finance chart data, continuous quotes as fallback, EIA daily backstop). Companion to /data/oil.csv for programmatic consumers. The points are futures. The latest block normally holds a futures print too, but when the futures feed has been stale for over 2 hours it holds the EIA daily Dated Brent spot close, which can sit well off futures. Tell them apart with latest.sourceKind ("eia" for the spot close, null for futures) and latest.observedAt (the trading day of that close). source and stale are unchanged by it.

Querylimit (the newest N stored points, default 168, max 2000; points are not evenly spaced, so N points cover an irregular span, not a fixed number of hours), since (ISO timestamp; use it for a time window, and pair it with a large limit when the window is long)

curl 'https://straits.live/api/v1/oil?limit=2'

{
  "asOf": "2026-06-10T17:23:00Z",
  "count": 2,
  "source": "Intraday Brent / WTI front-month futures contracts …",
  "points": [
    { "t": 1781110302601, "iso": "2026-06-10T16:51:42Z", "brent": 93.99, "wti": 91.06 },
    { "t": 1781112144785, "iso": "2026-06-10T17:22:24Z", "brent": 94.12, "wti": 91.20 }
  ]
}

/api/v1/markets

Prediction-market odds

Underlying feed every 15 minutes

Top Hormuz / Iran-conflict / oil-shock contracts from Kalshi (api.elections.kalshi.com), Polymarket (gamma-api.polymarket.com) and Manifold. Strict keyword filter to avoid sweeping in election or macro contracts. liquidityUsd is null where a venue does not report it (Kalshi). total counts the rows that passed the deadline and venue filters before the limit, limit is the value applied, and truncated is true when total is more than count.

Querylimit (default 50, max 50), venue (kalshi | polymarket | manifold)

curl 'https://straits.live/api/v1/markets?venue=polymarket&limit=1'

{
  "asOf": "2026-06-10T17:23:00Z",
  "count": 1,
  "total": 15,
  "limit": 1,
  "truncated": true,
  "markets": [
    { "id": "polymarket_665374", "venue": "polymarket",
      "title": "Will the U.S. invade Iran before 2027?",
      "probability": 0.175, "volumeUsd": 35039246.83,
      "closeAt": "2026-12-31T00:00:00Z",
      "sourceUrl": "https://polymarket.com/…" }
  ]
}

/api/v1/gas

US gas prices

Refreshed hourly; upstream publishes daily

Per-state regular-grade averages plus a national mean computed across the 50 states + DC.

Querystates (1 / true to include the per-state list; default omitted for payload size)

Throughput

Authoritative daily transit count from IMF PortWatch (chokepoint6 dataset), plus a comparative table across the five global energy chokepoints and two coarser fallback aggregates used when AIS is silent.

/api/v1/transits

IMF PortWatch daily transits

Underlying data publishes weekly (Tue 9 AM ET); re-fetched hourly 12-16 UTC, then 18 and 21 UTC

The dashboard's authoritative throughput figure. Carries the per-type breakdown (tanker, cargo, container, dry bulk, general cargo, Ro-Ro), capacity in deadweight tonnage, the trailing 30-day rolling baseline median, and a separate pre-crisis baseline median (fixed window: the final pre-crisis year, 2025-02-28 to 2026-02-27) used as the stable peacetime anchor. The per-type fields nest: nTotal is nTanker plus nCargo, and nCargo is nContainer plus nDryBulk plus nGeneralCargo plus nRoro, so summing all seven fields double-counts. Not a programmer? The same series is a readable day-by-day table at /how-many-ships-passed-through-the-strait-of-hormuz-today.

Queryhistory (1 / true to include chokepointTransitsHistory rows), limit (default 90, max 365)

curl https://straits.live/api/v1/transits

{
  "asOf": "2026-08-30",
  "generatedAt": "2026-09-09T13:02:00Z",
  "methodology": "IMF PortWatch daily vessel transit count …",
  "latest": {
    "date": "2026-08-30",
    "nTotal": 6, "nTanker": 2, "nCargo": 4, "nContainer": 0,
    "capacity": 70732,
    "baselineMedian": 5,
    "preCrisisBaselineMedian": 85,
    "ma7": 5.57,
    "provisional": false
  }
}

/api/v1/chokepoints

Five-chokepoint comparison

IMF PortWatch daily

Side-by-side daily counts for Hormuz, Bab el-Mandeb, Suez, the Cape of Good Hope, and Malacca, sorted Hormuz first, then by nTotal descending, largest route by vessel count first.

Queryhistory (1 / true to include per-chokepoint daily history[])

/api/v1/hormuz-snapshot

Hormuz fallback aggregate

Retired, frozen at 2026-08-28

The upstream port-page aggregates this fed went behind a subscription on 2026-08-28. The endpoint still responds but returns a frozen snapshot from that date, marked "RETIRED FEED, DO NOT READ AS CURRENT". Do not poll this as an AIS fallback; for day-by-day transit counts use /api/v1/transits or the readable table at /how-many-ships-passed-through-the-strait-of-hormuz-today.

/api/v1/cape-snapshot

Cape of Good Hope reroute aggregate

Retired, frozen at 2026-08-28

Same upstream loss as /api/v1/hormuz-snapshot: the source port-page aggregates went behind a subscription on 2026-08-28. The endpoint still responds but returns a frozen snapshot from that date, marked "RETIRED FEED, DO NOT READ AS CURRENT".

Live AIS & vessels

AIS-derived overlay: live presence, port congestion, AIS-gap detection, the OFAC × AIS sanctioned-vessel join, and a fallback vessel manifest when AIS is silent. Persian Gulf bounding box.

/api/v1/ports

Port congestion

Computed every 30 minutes

Live counts at Fujairah, Sohar, Bandar Abbas, and Jebel Ali derived from live AIS positions inside a 10–18 km radius per port. Broken down by status (anchored, transiting) and vessel type.

/api/v1/stranded

Stranded-vessel time-series

Hourly buckets, written every 30 minutes

Anchored-vessel count inside the Persian Gulf bounding box, hourly. Powers the homepage sparkline.

Querylimit (default 168 = 7 days hourly, max 720), since (ISO)

/api/v1/transits-by-type

Transits by vessel type

Hourly buckets, written every 30 minutes

Hourly cross-tab of vessels in transit by vessel type (tanker, cargo, military, other). Pairs with /api/v1/stranded for a full picture of the strait's vessel mix over time. The response carries a methodology field covering how type is resolved and why the military count is a floor.

Querylimit (default 168 = 7 days hourly, max 720), since (ISO)

/api/v1/ais-gaps

Tankers gone dark (count)

Computed every 30 minutes

Free summary: the count of tankers gone dark inside the strait core area plus the 7-day baseline. Filters: type === tanker, totalSightings ≥ 50, last position in lat 24–28 / lng 55–58, last seen 3–24 hours ago. The per-vessel dark-fleet identities are in the premium vessel-intelligence API.

/api/v1/sanctioned-vessels

OFAC SDN cross-join (count)

Cross-join every 15 minutes; OFAC list checked daily and rebuilt when OFAC changes it

Free summary: the count of vessels visible on AIS in the Persian Gulf window whose identity matches an OFAC SDN entry (IMO / normalised-name join; false positives possible). The per-vessel manifest with sanction programs, flag, and call sign is in the premium vessel-intelligence API.

/api/v1/vessels

Vessel manifest (counts)

Computed on a 30-minute AIS window, cached 5 minutes

Free summary: how many vessels are on live AIS right now across the Gulf and Cape routes, broken down by corridor and ship type. The per-vessel manifest with identities is in the premium vessel-intelligence API. ?flagged=1 counts the OFAC-SDN-matched subset.

Queryflagged (1 / true for OFAC-matched only), region (hormuz | cape)

Macro & risk pricing

Hand-curated indicators, reviewed from time to time against trade press, that move slower than oil price but matter more for "is the strait open in any commercial sense?": war-risk insurance, world-oil-at-risk, and the Joint War Committee listed-areas circular.

/api/v1/insurance

War-risk insurance index

Hand-curated; timestamp refreshed weekly

Multiple over the peace-baseline VLCC premium, per-voyage cost in USD from the peacetime baseline to the current crisis high, and the list of P&I clubs and war-risk underwriters that have publicly withdrawn cover, imposed quotas, or refused renewals.

curl https://straits.live/api/v1/insurance

{
  "asOf": "2026-08-05T17:23:00Z",
  "methodology": "War-risk insurance multiple compares …",
  "insurance": {
    "multiple": 30,
    "vlccPremiumLow": 250000,
    "vlccPremiumHigh": 10000000,
    "withdrawnClubs": ["Gard", "Skuld", "North Standard", …],
    "sourceName": "straits.live estimate · carrier advisories, Lloyd's List, TradeWinds, Reuters"
  }
}

/api/v1/trade-impact

World oil & LNG at risk

Hand-curated; timestamp refreshed weekly

EIA/IEA shares of global seaborne oil and LNG that transit the strait, a curated estimate of the daily economic cost, the most-affected importing economies, and the extra voyage days of the Cape reroute.

/api/v1/jwc

JWC Listed Areas

Re-checked every 6 hours

Marine war-risk high-risk-areas designations as published in the industry circular, plus a flag noting whether the latest revision mentions the Arabian Gulf. Drives war-risk premium loads at most London-market underwriters. updatedAt restamps on every check; lastChangedAt moves only when the circular itself changes.

Carriers & bypass routes

Top container carriers' Strait of Hormuz posture and pipeline routes that move crude out of the Gulf without transiting the strait.

/api/v1/carriers

Carrier suspensions

Hand-curated; timestamp refreshed weekly

Top global container carriers (ranked by TEU capacity) and their current posture: suspended, rerouting, limited, or transiting. Includes vessels-trapped count, combined trapped-TEU capacity, and the per-carrier surcharge in USD per TEU. hormuzPosture is the operative field: ≥5 carriers with hormuzPosture "stopped" drives the dashboard's "effectively closed" verdict, counting only rows whose advisoryDate (the carrier's own advisory date) is 60 days old or less.

curl https://straits.live/api/v1/carriers

{
  "asOf": "2026-09-15T17:01:00Z",
  "count": 9,
  "carriers": [
    { "id": "cma-cgm", "carrier": "CMA CGM", "rank": 3, "status": "rerouting",
      "surchargeUsdPerTeu": 950, "vesselsTrapped": 8, "trappedTeu": null,
      "notes": "…", "sourceName": "CMA CGM Q2 earnings call, via WorldCargo News", "sourceUrl": "https://…" }
  ]
}

/api/v1/pipelines

Pipeline bypass

Hand-curated; timestamp refreshed weekly

Petroline (Saudi Arabia → Yanbu) and Habshan-Fujairah (UAE → Gulf of Oman) are the main lines that move crude out of the Gulf without transiting Hormuz. Each row carries nameplate capacity in BPD and current utilisation percent.

Iran financial stress

Open-market USD/IRR rate as a proxy for civilian-side pressure inside Iran.

/api/v1/iran-rate

Tehran open-market USD/IRR

Refreshed hourly

Sell/buy rates in both Toman (1 Toman = 10 Rial) and Rial, plus 24-hour and 7-day percentage deltas off the midRial. The basis field is "direct" for a quoted dollar rate or "cross-aed" when the source is not quoting the dollar and the figure is implied from the UAE dirham rate at the 3.6725 peg.

Editorial briefs

Dated daily briefs: AI-assisted when an API key is configured, curated fallback otherwise.

/api/v1/briefs

Daily briefs archive

Rewritten every few hours, same UTC-dated doc

JSON archive of every brief written by the dailyBrief Cloud Function, keyed by UTC date. Each brief carries 3–6 bullets, a short summary, the day's Brent price plus 24-hour delta, and the day's transit count. source is ai-assisted, curated or mock (the template fallback); before 2026-10-02 ai-assisted briefs carried a vendor-specific value.

Querydate (YYYY-MM-DD for a single brief; 404 if missing), limit (default 30, max 120)

Real-time deltas

Lightweight polling endpoints for client-side updaters and "while-you-were-away" experiences.

/api/v1/tick

Lightweight tick

Recomputed at most every 120s; not edge-cached

Bare-minimum payload polled by the homepage ticker every two minutes: Brent price, 24-hour change, transit and stranded counts, plus a verifiedAt anchor. The Brent price is a futures print, except that when the futures feed has been stale for over 2 hours it is the EIA daily Dated Brent spot close. oil.sourceKind is "eia" for that case (null otherwise) and oil.observedAt is the trading day of the close; oil.source and oil.stale are not flipped for it.

/api/v1/since

"While you were away" deltas

Recomputed at most every 60s; not edge-cached

Compares the current state to a caller-provided anchor timestamp. Returns a material flag once any of: ≥24h elapsed, |Brent %| ≥ 1, ≥1 event, ≥1 carrier posture change, |transit delta| ≥ 3, or |stranded delta| ≥ 5.

Queryat (required ISO timestamp)

Inventories & reserves

The slow-moving counter-pressure to a fast-moving disruption.

/api/v1/spr

US Strategic Petroleum Reserve

Re-fetched daily 11:00 ET; EIA publishes weekly

Backed by EIA Weekly Petroleum Status Report. Carries the 4-week change so spike-vs-baseline reads correctly.

/api/v1/cushing

Cushing crude stocks

Re-fetched daily 11:30 ET; EIA publishes weekly

Cushing, Oklahoma is the WTI delivery hub. Inventory swings here track the North-American crude balance independent of the Gulf-Coast / SPR picture; pairs with the Brent–WTI spread to indicate whether disruption is global or American-specific.

Events

Indexed strikes, ship incidents, closures, and negotiations.

/api/v1/events

War and diplomacy timeline

Underlying feed every 15 minutes

Indexed strikes, ship incidents, closures, and negotiations. Mirrors the curated Firestore record so consumers see the same source attribution as the homepage timeline. Companion to /data/events.csv and /feed.xml. count is headlines, one row per outlet report; stories (added 8 October 2026) groups the same rows by incident, because several outlets can report one.

Querysince (ISO), type (strike | ship_incident | closure | negotiation), limit (default 50, max 200)

curl 'https://straits.live/api/v1/events?type=strike&limit=2'

{
  "asOf": "2026-05-27T14:30:00Z",
  "count": 1, "stories": 1,
  "events": [
    { "id": "ev_2026-05-26_…", "type": "strike", "severity": "high",
      "occurredAt": "2026-05-26T11:20:00Z",
      "title": "Strike reported on Bandar Abbas refinery",
      "sourceName": "Reuters", "sourceUrl": "https://…" }
  ]
}

Other formats.

For workflows that don’t want JSON: spreadsheet imports, RSS readers, copy-paste embed.

/data

Downloads catalogueEvery CSV/JSON download on one page with per-file licensing. Start here for spreadsheet or notebook work.

/data/status.csv

Status snapshot CSVOne-row snapshot of the current dashboard state: verdict, transits, AIS-dark count, Brent, insurance multiple, JWC, Tehran rate (with tehran_rate_basis: direct, or cross-aed when implied from the dirham rate at the 3.6725 peg), carriers, and data-source health. transits_provisional and transits_ma7 flag a still-revisable newest PortWatch row and give its 7-day mean. brent_usd is a futures print, except that when the futures feed has been stale for over 2 hours it is the EIA daily spot close; brent_basis (futures or eia-spot, appended 8 October 2026) says which. Re-poll daily to build a history in your spreadsheet. events_recent_count counts headlines; events_recent_stories (appended 8 October 2026) groups them into stories. Column order is stable; new columns are appended.

/data/transits.csv

Daily transits CSVIMF PortWatch daily transit history since 2025-02-28 (upstream goes back to 2019), the series the prediction-market reopening contracts resolve on (7-day average vs 60).

/data/hormuz-index.csv

Hormuz Index CSVCrisis Pressure + Escalation Forecast history at 5-minute cadence, last 7 days, with band labels. CC0.

/data/oil.csv

Oil prices CSVBrent + WTI history, suitable for spreadsheet ingest.

/data/events.csv

Events CSVIndexed war and diplomacy events with sourceUrl per row. One row per headline, so one incident can fill several rows.

/feed.xml

Events RSSIndexed strikes, ship incidents, closures, and negotiations as RSS 2.0.

/status/feed.xml

Status flips RSSOne item per change in the operational verdict (open ↔ restricted ↔ closed). Designed for press-monitor ingestion.

/sanctioned-vessels/feed.xml

Sanctioned vessels RSSAIS-observed vessels currently matched against the OFAC SDN list, newest match first.

/briefs/feed.xml

Daily briefs RSSDated daily briefs on the Strait of Hormuz crisis. Each brief is rewritten as events move, settles at the end of the UTC day, then stays online and citable by date.

/embed

Embed widgetCopy-paste iframe with live status badge for journalists and bloggers.

Premium.

Machine-payable endpoints for AI agents and pipelines, priced per request and settled in USDC over the x402 protocol. No key, no account, no subscription: an unpaid request returns HTTP 402 with the price, your client signs the payment and retries. The free summary tier above stays free; these endpoints add the depth, full history, and per-vessel intelligence the summary withholds.

Roadmap: USDC on Base is the live settlement rail today. Payment in XRP and RLUSD over XRPL x402, the agentic-payments standard Ripple joined the x402 Foundation to back, is being wired in as a second rail.

/api/premium/vessels

Vessel intelligence

$0.02 per request

The live-AIS vessel manifest (MMSI-keyed, with a best-effort flag derived from the MMSI MID), the OFAC-sanctioned vessels the AIS feed lists in the Gulf (last fix up to 12 hours old, aged per row) with program detail, per-vessel risk bands, latest raw AIS positions, the top AIS-dark hulls with the full dark count alongside, and OFAC + UK sanctions reference-list sizes. Per-IMO multi-body sanction detail is in the single-vessel dossier.

/api/premium/history/{feed}

Full-resolution history

$0.01 per request

Feeds: stranded and ais-gaps (hourly buckets with gaps, up to a full year; the free windows stop at 30 days and none), index-5min (both Hormuz indices at 5-minute cadence with the pre-rails weighted average, ?days= 1 to 7 a page (a larger value is cut to 7, and the response says so); ?before=<ISO> with the response’s nextBefore pages back through the full 5-minute history), and transits (daily PortWatch history since 2025-02-28 (upstream goes back to 2019), enriched per day with the trailing 7-day moving average, deviation from the pre-crisis baseline, and headroom to the reopening-resolution threshold, the analytics the free raw CSV omits). One contract for all four series.

/api/premium/snapshot

One-call snapshot

$0.02 per request

The entire dashboard state in a single response: verdict, oil, transits, insurance, carriers, pipelines, ports, events, prediction markets, both indices with component audit, and the full daily brief.

/api/premium/brief

Daily brief, structured

$0.01 per request

The AI-assisted situation brief as structured JSON: prose summary, bullets, and the day’s key figures, by date or latest, with archive access. The prose itself is free on /report; this is the stable machine contract.

/api/premium/vessel/{imo}

Single-vessel dossier

$0.02 per request

One vessel by IMO: the unified multi-body sanctions view (every body that lists it: US OFAC and the UK/FCDO list, with the UK row adding owner/operator, flag, tonnage, ship type, year built, and Date Designated), merged identity, per-vessel risk band, and dark-activity (AIS-gap) record. Resolves for IMOs listed by OFAC or the UK, or with a dark-activity record.

/api/premium/export

Bulk history export

$0.25 per request

Every requested series (index-5min, stranded, ais-gaps, transits) in one archive, as JSON or multi-section CSV. stranded and ais-gaps cap at 365 days of retained history; transits returns its full retained history instead (daily since 2025-02-28 and growing), carrying the same per-day analytics (7-day MA, baseline deviation, reopening-threshold headroom) as the per-feed history call. index-5min is 5-minute for the last 7 days and daily open, close, min, max, mean and band before that (from the daily rollup, closed days only); its resolution, window and note fields say so, and ticks older than the 7-day window come from the per-feed history call with ?before=. ?feeds= to select, ?format=csv for the download.

/api/premium/stream/session

Real-time stream session

$0.05 per request

POST to buy a short-lived signed token, then open a Server-Sent Events connection at /api/premium/stream?token= to receive ticks, Hormuz Index moves, and events live instead of polling. One payment buys one bounded streaming window.

/api/premium/webhooks

Threshold-alert webhooks

$0.50 per request

POST a target URL to receive a signed webhook whenever the verdict flips, a Hormuz Index band crosses up, or a monitored threshold breaches. One payment funds 30 days or 100 deliveries, whichever comes first.

/api/premium/hormuz/flags

Hormuz flag rollup

$0.01 per request

The flag states of the live-AIS Persian Gulf vessel population ranked by vessel count, each with a per-flag sanctioned tally, plus distinct-flag count and sanctioned share. Flags are derived best-effort from the MMSI MID (ITU-T M.585) and the payload is quality-gated on live AIS. Operators and inbound/outbound direction are omitted, not faked: no operator field is stored and per-vessel transit direction is not tracked.

/api/premium/hormuz/risk-screen

Shadow-fleet risk screen

$0.02 per request

The live-AIS Persian Gulf vessel population as one ranked, compliance-grade screen, worst-first. Every hull carries its risk band and the typed reasons behind it (ofac_sdn, ais_dark, foc_tanker, imo_spoofed: a tanker or cargo ship whose IMO fails its check digit) plus which sanctions bodies list it (US OFAC and/or UK/FCDO). A transparent rules engine, not ML, fusing OFAC SDN, live AIS, AIS-dark gaps, and detection of tankers and cargo ships whose IMO fails its check digit, which the flag rollup only aggregates and the single-vessel dossier resolves one IMO at a time. UK/FCDO listings show per hull and in counts.sanctioned; only an OFAC listing raises the band. counts cover the screened population, that is every hull seen on AIS inside the active window, not every hull ever tracked; the rows are the flagged hulls (high + moderate) by default, ?all=1 adds the cleared low band. Quality-gated on live AIS.

/api/premium/bunker

Bunker & marine-fuel prices

$0.02 per request

Current VLSFO, IFO380, and MGO delivered bunker prices ($/tonne) for Fujairah, benchmarked against Singapore and Rotterdam, plus the derived Fujairah premium over each hub. Fujairah is the world’s #2-3 bunkering hub, just outside the strait and the physical fueling alternative when transit is disrupted, so its spread over the global benchmarks is a physical-commodity read on Hormuz stress that the Brent and insurance signals do not capture. Current snapshot, refreshed every 6 hours.

/api/premium/risk-premium

War-risk premium nowcast

$0.05 per request

A live modeled war-risk insurance multiple (Nx over the peace baseline, on the published 1x to 80x scale) for moving a tanker through the strait, recomputed every 5 minutes from throughput deviation (IMF PortWatch), the escalation forecast (Polymarket, Kalshi, Manifold, Brent-WTI spread), crude implied volatility (OVX), and event pressure (GDELT, PGSA). The insurance market’s own figure is deliberately kept out of the model, so the number is an independent read; the standing straits.live insurance-estimate multiple is carried alongside as a static reference (it is set manually and rarely changes), not as a live comparator. Also returns a modeled VLCC war-premium band and a confidence that degrades when driver feeds are stale or escalation-market volume is thin. A modeled situational-awareness indicator, not an insurance quote.

Who buys this

The meter is for workloads the free summary cannot serve on its own:

  • Compliance and sanctions screening. The vessel and single-vessel endpoints return the full manifest with OFAC matches and program detail, keyed by MMSI and IMO, so a screening pipeline can clear or flag a hull without scraping a maritime tracking site or the OFAC list itself.
  • Backtesting and quant research. Full-resolution history and the bulk export return the Hormuz Index (5-minute for the last 7 days in the export, daily before that; the history call pages the full 5-minute record), stranded, AIS-gap, and transit series (hourly history capped at one year, actual depth growing daily) in one archive, ready to load into a model instead of paging a rate-limited feed for a week.
  • Agent and ops automation. Threshold webhooks, the SSE stream, and the MCP connector let an agent act on a verdict flip or an index band crossing the moment it happens, rather than polling the summary on a timer.

Free vs premium

The exact delta, so you can decide with open eyes. The live headline of every series is free to read on the site and in the summary API; premium buys full history, the per-vessel manifest, and the intelligence the summary withholds.

SeriesFreePremium
Stranded history30 days hourly (/api/v1/stranded)Hourly, capped at one year, growing
AIS-gap (dark fleet)Count + 7-day baselineDark-fleet identities + hourly, capped at one year, growing
Vessel manifestCounts by corridor & ship typeFull manifest, identities, raw AIS
Sanctioned vesselsCount onlyFull manifest + OFAC sanction detail
Shadow-fleet risk screenAggregate band counts onlyEvery hull ranked, with reasons + OFAC/UK matches
Index history, 5-min7 days at 5-min (value + weighted average), 30 days daily, recomputed at most every 60s, not edge-cachedFull 5-min history in 30-day pages (before=), never cached; daily rollup in the bulk export
Dashboard state3+ calls, each recomputed every 60-120s, not edge-cachedOne call, never cached
Daily briefSame prose (/api/v1/briefs, /report)Dated JSON contract, never cached

Pricing is deliberately micro. The live picture stays free to read on the site and in the summary API; the meter covers depth, full history, and per-vessel intelligence, so an agent pays a cent for one stable, machine-payable contract instead of stitching and scraping.

Paying from code

Any x402-capable client works, including the LangChain, CrewAI, and MCP payment adapters. Plain JavaScript:

import { wrapFetchWithPayment, x402Client } from '@x402/fetch'
import { registerExactEvmScheme } from '@x402/evm/exact/client'
import { privateKeyToAccount } from 'viem/accounts'

const client = new x402Client()
registerExactEvmScheme(client, {
  signer: privateKeyToAccount(process.env.WALLET_KEY),
})
const payFetch = wrapFetchWithPayment(fetch, client)

const res = await payFetch(
  'https://straits.live/api/premium/snapshot',
)
const data = await res.json()

Payments settle in USDC on Base. A response carries a PAYMENT-RESPONSE header with the on-chain transaction for your records.

MCP connector

Ten of these products are exposed as paid MCP tools (streamable HTTP) at https://straits.live/api/mcp, so an MCP-native agent can add straits.live as a remote connector instead of writing HTTP and wallet code. Tools: hormuz_vessels, hormuz_vessel_dossier, hormuz_risk_screen, hormuz_flags, hormuz_history, hormuz_export, hormuz_snapshot, hormuz_brief, hormuz_bunker, hormuz_risk_premium, same prices as above (the stream and webhook SKUs are HTTP-only). An unpaid call returns the x402 challenge as a JSON-RPC payment-required error; clients built on @x402/mcp sign and retry automatically.

Conventions.

Every JSON endpoint returns a top-level schema URL (the canonical address of the response shape) and an asOf timestamp, the time of the data in the response (null when the feed has none). The v1 endpoints also return generatedAt, the time the response was built, which is later than asOf whenever the data is cached or the feed is slow. On the curated routes (pipelines, carriers, trade-impact) asOf is the date of the newest row and oldestAuthoredAt the date of the oldest. Time-series payloads use unix-millisecond keys for chart libraries and a parallel iso string for human inspection. Empty results return a valid envelope with an empty array, never a 404.

When an upstream feed is unreachable, the affected endpoint returns the most recent successful payload with its existing asOf. The /status response surfaces a per-section dataHealth chip so consumers can detect stale-but-served values. The staleness threshold is per feed, matched to that feed’s own publishing cadence, not a single 24-hour rule: an intraday price is downgraded to source: "stale" within the hour, while a weekly curated indicator stays "curated" for days. Read each section’s verifiedAt for the actual age rather than inferring one from the chip.

Attribution is appreciated but not required. If you cite a value, link to the originating source on /methodology; Straits is an aggregator, not the system of record.

Reader-funded

The summary tier in this catalogue is free to query, with no key and no rate card; the only limit is 60 requests a minute per IP. If it just saved you a scraping afternoon, the servers that answer it run on about $83 a month from readers. One-time, by card or in XRP; no account, no recurring charge.

October running costs: about $83. No ad networks; readers are the only funding

Chip in →

← Back to live tracker Methodology → Press kit →

API: JSON endpoints for the Hormuz live monitor | Straits