API Reference
REST API for vessel tracking, commodity flow intelligence, risk scoring, and market data across 40 global ports. All endpoints return JSON unless noted otherwise.
https://axiomoverwatch.io/api/v154 endpointsv1Overview
Authentication
All data endpoints require an API key. Pass it via X-API-Key: <YOUR_KEY> header or Authorization: Bearer <YOUR_KEY>. Only /ports, /health, and /billing/plans are public.
Access Tiers
Rate Limiting
All API routes are rate limited to 60 requests per minute per IP address, plus daily limits per tier. Exceeding either returns 429 Too Many Requests.
Response Format
All responses are JSON. Data is wrapped in a descriptive root key. Errors return { "error": "message" } with appropriate HTTP status codes.
Methodology Transparency
Public cargo-estimate validation methodology and latest bias metrics are available at /docs/methodology/cargo-validation.
Port Slugs
Many endpoints accept a port query parameter as a URL-friendly slug (e.g., santos, houston, new-orleans). Use the /ports endpoint to list all available slugs.
Quick Start
# List all ports (public, no key needed) curl https://axiomoverwatch.io/api/v1/ports # Get export estimates (requires API key) curl -H "X-API-Key: YOUR_KEY" \ "https://axiomoverwatch.io/api/v1/estimates?port=santos" # Get high-risk vessels curl -H "X-API-Key: YOUR_KEY" \ "https://axiomoverwatch.io/api/v1/risk/vessels?tier=high" # Get live vessel positions at Houston curl -H "X-API-Key: YOUR_KEY" \ "https://axiomoverwatch.io/api/v1/positions?port=houston"
Ports
List monitored ports across all verticals.
/api/v1/portsList all monitored ports with slug, name, country, and region.
Response: { "ports": [...] }
/api/v1/healthSystem health check. Returns position counts and ingestion status.
Response: { "status", "positions", "vessels", "positions_last_hour" }
Vessels & Positions
Vessel registry and real-time AIS positions.
/api/v1/vesselsSearch vessels by port and type. Returns IMO, name, DWT, flag, dimensions.
Parameters
portstringPort slugtypestringVessel type filterlimitnumberDefault 50, max 200Response: { "vessels": [...] }
/api/v1/positionsLatest AIS positions for all vessels at a port. Includes course, speed, draft, nav status.
Parameters
portstringrequiredPort slugResponse: [{ imo_number, latitude, longitude, speed, course, draft, nav_status, name, vessel_type }]
Export Estimates
Weekly aggregated cargo volume predictions by port.
/api/v1/estimatesWeekly export volume estimates with vessel count, tonnage, confidence, and USDA actuals.
Parameters
portstringPort sluglimitnumberDefault 52, max 200Response: { "estimates": [...] }
Risk Intelligence
13-factor risk scoring, dark fleet detection, STS transfers, loitering, identity changes, and draft anomalies.
/api/v1/risk/vesselsAll risk-scored vessels. Filter by tier, type, or flag.
Parameters
tierstring'critical' | 'high' | 'medium' | 'low'typestringVessel typeflagstringFlag state codelimitnumberDefault 500Response: { "vessels": [...] }
/api/v1/risk/vessel/{imo}Full risk profile for a single vessel including dark events.
Parameters
imostringrequired7-digit IMO number (path param)Response: { "vessel": {...}, "dark_events": [...] }
/api/v1/risk/eventsDark fleet AIS gap events. Filter by tier or vessel.
Parameters
tierstringRisk tier filtervesselstringIMO numberongoingstring'true' for active gaps onlylimitnumberDefault 100, max 500Response: { "events": [...] }
/api/v1/risk/statsAggregate risk statistics: active gaps, critical vessels, hotspots, events by tier.
Response: { "active_gaps", "critical_vessels", "active_hotspots", "new_events_24h", "events_by_tier" }
/api/v1/risk/stsShip-to-ship transfer events with confidence and draft transfer data.
Parameters
confidencestringConfidence level filtervesselstringIMO number (checks both vessels)methodstringDetection methodlimitnumberDefault 100, max 500Response: { "events": [...] }
/api/v1/risk/sts/statsSTS aggregate statistics: total events, by confidence, tonnage, active encounters.
Response: { "total_events", "by_confidence", "total_tonnage", "active_encounters" }
/api/v1/risk/loiteringLoitering events (stationary or slow-roll) with context zones.
Parameters
typestring'stationary' | 'slow_roll'vesselstringIMO numbercontextstringContext zonelimitnumberDefault 100, max 500Response: { "events": [...] }
/api/v1/risk/identityVessel identity change events (flag, name, MMSI).
Parameters
fieldstring'flag' | 'name' | 'mmsi'vesselstringIMO numberlimitnumberDefault 100, max 500Response: { "events": [...] }
/api/v1/risk/identity/historyFull identity history for a vessel.
Parameters
vesselstringrequiredIMO numberResponse: { "history": [...] }
/api/v1/risk/mismatchesDraft mismatch events: directional, magnitude, or zero-change anomalies.
Parameters
typestring'directional' | 'magnitude' | 'zero_change'vesselstringIMO numberportstringPort ID (UUID)limitnumberDefault 100, max 500Response: { "events": [...] }
/api/v1/risk/hotspotsSTS hotspot zones (seeded and auto-discovered).
Parameters
activestringDefault 'true'. Pass 'false' for all.limitnumberDefault 200, max 500Response: { "hotspots": [...] }
/api/v1/risk/baselinesPort-level draft baselines used for anomaly detection.
Response: { "baselines": [...] }
Congestion
Port congestion indices and wait time trends.
/api/v1/congestionLatest congestion snapshot for all ports or a specific port.
Parameters
portstringPort slugvessel_typestringFilter by vessel typeResponse: { "congestion": [...] }
/api/v1/congestion/historyHistorical congestion data for a port.
Parameters
portstringrequiredPort slugdaysnumberDefault 30, max 365vessel_typestringFilter by vessel typeResponse: { "port", "port_name", "days", "vessel_type", "history" }
/api/v1/congestion/refreshAUTHTrigger congestion index recomputation.
Response: { "success", "result" }
Berth Utilization
Berth occupancy rates and turnaround times.
/api/v1/berth-utilizationLatest berth utilization snapshots.
Parameters
portstringPort slugResponse: { "berth_utilization": [...] }
/api/v1/berth-utilization/weeklyWeekly berth utilization trends for a port.
Parameters
portstringrequiredPort slugzone_idstringSpecific zone IDweeksnumberDefault 12, max 52Response: { "port", "port_name", "port_country", "weeks", "berth_utilization_weekly" }
Trade Routes
Trade flow analysis, route shifts, and destination deceptions.
/api/v1/routes/flowsTrade route flows between ports with tonnage and market share.
Parameters
originstringOrigin port IDdestinationstringDestination port IDweekstringWeek start date (ISO)commoditystringCommodity filterlimitnumberDefault 100, max 500Response: { "flows": [...] }
/api/v1/routes/shiftsDetected trade route shifts and deviations.
Parameters
severitystring'moderate' | 'high' | 'critical'originstringOrigin port IDcommoditystringCommodity filterlimitnumberDefault 100, max 500Response: { "shifts": [...] }
/api/v1/routes/deceptionsVessels whose actual destination didn't match declared destination.
Parameters
vesselstringIMO numbersuspiciousstring'true' | 'false'actual_portstringActual port IDlimitnumberDefault 100, max 500Response: { "deceptions": [...] }
Forecasts
Cargo volume forecasts and accuracy tracking.
/api/v1/forecastsCargo volume forecasts by port and methodology.
Parameters
portstringPort slugmethodstring'pipeline' | 'statistical' | 'ml'limitnumberDefault 50, max 200Response: { "forecasts": [...] }
/api/v1/forecasts/accuracyForecast accuracy metrics (MAE, MAPE, directional accuracy).
Parameters
portstringPort slugmethodstringForecast methodResponse: { "accuracy": [...] }
/api/v1/destination-reliabilityVessel destination declaration reliability scores.
Parameters
vesselstringIMO numbertierstring'reliable' | 'moderate' | 'unreliable'limitnumberDefault 100, max 500Response: { "reliability": [...] }
Earnings & Freight
Voyage earnings estimates and freight rate data.
/api/v1/earningsPer-voyage earnings estimates.
Parameters
vesselstringIMO numberportstringPort sluglimitnumberDefault 50, max 200Response: { "earnings": [...] }
/api/v1/earnings/port-revenueWeekly port revenue aggregates.
Parameters
portstringPort sluglimitnumberDefault 52, max 200Response: { "port_revenue": [...] }
/api/v1/freight-ratesFreight rate data by vessel type.
Parameters
vessel_typestringVessel type filterlimitnumberDefault 50, max 200Response: { "freight_rates": [...] }
/api/v1/freight-ratesAUTHSubmit a new freight rate record.
Response: { "freight_rate": {...} }
Emissions
Scope 3 maritime emissions accounting and disclosure-ready exports.
/api/v1/emissionsAUTHPer-voyage and fleet-level CO2 estimates using ton-mile model with uncertainty bounds.
Parameters
imostringFilter by vessel IMOportstringPort slug filterstartstringISO start timestampendstringISO end timestampfuel_typestring'vlsfo' | 'mgo' | 'lng' | 'methanol'distance_nmnumberAssumed voyage distance (nautical miles)speed_knotsnumberAssumed speed for intensity modelgroup_bystring'none' | 'imo' | 'port' | 'commodity'formatstring'json' (default) or 'csv'cursorstringCursor offset for paginationlimitnumberDefault 50, tier-clampedResponse: { "fleet": {...}, "grouped": [...], "voyages": [...], "pagination": {...} }
/api/v1/emissions/reportAUTHCSRD / SEC Scope 3 report export in JSON, CSV, or PDF format.
Parameters
entitystringReporting entity namestartstringISO start timestampendstringISO end timestampimostringFilter by vessel IMOportstringPort slug filterfuel_typestring'vlsfo' | 'mgo' | 'lng' | 'methanol'distance_nmnumberAssumed voyage distance (nautical miles)speed_knotsnumberAssumed speed for intensity modelformatstring'json' (default), 'csv', or 'pdf'Response: { "report": {...}, "voyages": [...], "pagination": {...} } or CSV/PDF file
Fleet Age
Fleet age demographics and aging vessel risk.
/api/v1/fleet-ageFleet age statistics by port, including age buckets and risk percentages.
Parameters
portstringPort slugvessel_typestringVessel type filterResponse: { "fleet_age": [...] }
/api/v1/fleet-age/historyWeekly fleet age trends for a port.
Parameters
portstringrequiredPort slugvessel_typestringVessel type filterweeksnumberDefault 12, max 52Response: { "port", "port_name", "weeks", "vessel_type", "history" }
Satellite Imagery
MODIS + Sentinel-2 NDVI crop health, yield estimates, and production forecasts.
/api/v1/satellite/regionsAll monitored crop regions with latest NDVI and health assessments.
Response: { "regions": [...] }
/api/v1/satellite/healthCrop health assessments with NDVI deviation and yield estimates.
Parameters
regionstringRegion slugstatusstringHealth status filtercropstringCrop typelimitnumberDefault 100, max 500Response: { "assessments": [...] }
/api/v1/satellite/productionProduction forecasts linked to port export estimates.
Parameters
regionstringRegion slugportstringPort slugcropstringCrop typelimitnumberDefault 100, max 500Response: { "forecasts": [...] }
LNG
LNG carrier tracking across 5 terminals.
/api/v1/lngLNG dashboard: carriers at terminals, 7-day volume estimates, departures.
Response: { "carriers_at_terminals", "estimated_volume_7d_tons", "departures_7d", "active_terminals", "total_terminals", "terminals" }
/api/v1/lng/terminalsList all LNG terminals.
Response: { "terminals": [...] }
Mining
Mining terminal tracking: iron ore and coal across 8 terminals.
/api/v1/miningMining dashboard: carriers, volumes, coal vs iron ore departures.
Response: { "carriers_at_terminals", "estimated_volume_7d_tons", "departures_7d", "coal_departures_7d", "iron_ore_departures_7d", "terminals" }
/api/v1/mining/terminalsList all mining terminals.
Response: { "terminals": [...] }
P&I Coverage
Protection & Indemnity club coverage for vessels.
/api/v1/pi-clubsList all P&I clubs with risk tier and IG membership.
Response: { "clubs": [...] }
/api/v1/pi-coverageP&I coverage records for vessels.
Parameters
vesselstringIMO numberResponse: { "coverage": [...] }
/api/v1/pi-coverage/importAUTHBulk import P&I coverage from CSV.
Response: { "rows_processed", "matched", "unmatched_clubs" }
River Levels
Real-time USGS gauge data for waterways critical to grain barge transport.
/api/v1/river-levelsAUTHLive river water levels for Mississippi, Ohio, Illinois, Columbia rivers and Houston. Returns level in feet with status alerts (normal/low/critical/flood).
Response: { "readings": [{ "name", "river", "level_ft", "status", "critical_low_ft", "flood_stage_ft" }], "alerts": [...] }
SAR Satellite
Check Sentinel-1 radar satellite imagery coverage for dark fleet verification.
/api/v1/sar-coverageAUTHQuery Copernicus Sentinel-1 SAR catalog to check if radar imagery exists near a location and time. Used to verify dark fleet events.
Parameters
latnumberrequiredLatitudelngnumberrequiredLongitudedatestringISO date (default: now)radiusnumberSearch radius in km (default 50)Response: { "has_coverage", "products": [{ "name", "start", "size_mb" }], "closest_pass_hours", "verification_potential": "high|medium|low|none" }
Alerts
Platform alerts for sanctions matches, river level warnings, dark fleet events.
/api/v1/alertsAUTHGet active platform alerts. Filter by severity or type.
Parameters
severitystring'critical', 'warning', or 'info'typestring'sanctions_match', 'river_level', 'dark_fleet'unacknowledgedstring'true' to only show unread alertsResponse: { "alerts": [...], "count", "unacknowledged" }
/api/v1/alerts/unifiedAUTHUnified cross-product inbox combining maritime and Locus alerts in a single chronological feed.
Parameters
productstring'all' (default), 'overwatch', or 'locus'severitystring'critical', 'warning', or 'info'watchliststring'true' to only include watched vesselsportfoliostringLocus portfolio id filterstatestring'all' (default), 'open', 'read', 'resolved', 'snoozed'cursorstringISO cursor for paginationlimitnumberDefault 25, max 100Response: { "alerts": [...], "count", "pagination": { "has_more", "next_cursor" }, "filters": {...} }
/api/v1/alerts/unified/stateAUTHSet per-user state for a unified alert (read, resolve, snooze, reopen).
Parameters
alert_idstringrequiredAlert id in source:id format (e.g. dark_event:123)actionstringrequired'read' | 'resolve' | 'snooze' | 'open'snooze_untilstringISO timestamp (optional for snooze; defaults to +24h)Response: { "ok": true, "alert_id", "action", "state": { "read_at", "resolved_at", "snoozed_until" } }
Disruptions
GDELT-sourced news signals about commodity trade disruptions.
/api/v1/disruptionsAUTHReal-time disruption signals from global news: port closures, sanctions, trade disputes, weather events, canal blockages.
Parameters
hoursnumberLookback window (default 24)querystringTitle text filterlimitnumberMax results (default 20)Response: { "signals": [{ "title", "url", "source_name", "published_at", "tone" }], "count", "timespan_hours" }
Market Data
Commodity prices, USDA transport data, and seasonal anomalies.
/api/v1/commodity-pricesWorld Bank commodity benchmark prices (wheat, corn, oil, iron ore, LNG, etc.).
Parameters
commoditystringe.g. 'wheat', 'crude_oil_brent', 'iron_ore'sincestringISO datelimitnumberDefault 100, max 500Response: { "commodity_prices": [...] }
/api/v1/transport-dataUSDA Grain Transportation Report data: barge, rail, and truck volumes.
Parameters
modestring'barge' | 'rail' | 'truck'commoditystringCommodity filterregionstringOrigin region (fuzzy match)sincestringISO datelimitnumberDefault 100, max 500Response: { "transport_data": [...] }
/api/v1/anomaliesSeasonal and trailing anomalies in export volumes.
Parameters
portstringPort IDtypestring'trailing' | 'yoy' | 'seasonal_avg' | 'seasonal_range'severitystring'moderate' | 'high' | 'critical'limitnumberDefault 100, max 500Response: { "anomalies": [...] }
/api/v1/anomalies/maturitySeasonal analysis maturity levels per port (data sufficiency).
Response: { "maturity": [...] }
/api/v1/calibrationVolume estimation calibration data (per-vessel-type and self-calibrated).
Response: { "calibration", "overrides", "self_calibrated", "manual_overrides" }
Trade Flows
Bilateral commodity trade data from UN Comtrade, mirror data discrepancy detection, entity resolution, and sanctions cross-referencing.
/api/v1/trade-flowsAUTHBilateral trade flow data. Use ?view param for different analyses.
Parameters
viewstring'flows' (default) | 'mirror' | 'sanctions' | 'entity'exporterstringExporter country name filterimporterstringImporter country name filtercommoditystringCommodity name filter (e.g. Wheat, Soybeans)periodstringYear filter (e.g. '2024')limitnumberMax results (default 50)Response: { "flows": [...] } or { "discrepancies": [...] } or { "matches": [...] } or { "entities": [...] }
/api/v1/trade-flows?view=mirrorMirror data discrepancies: exporter-reported vs importer-reported volumes for the same commodity/country pair. Large discrepancies signal trade re-routing or misclassification.
Response: { "discrepancies": [{ "exporter_name", "importer_name", "commodity_name", "exported_mt", "imported_mt", "discrepancy_pct", "status" }] }
/api/v1/trade-flows?view=sanctionsVessels matched against OFAC sanctions list via IMO, MMSI, or name-based entity resolution.
Response: { "matches": [{ "imo_number", "vessel_name", "sanctioned_entity", "list_source", "match_type" }], "match_types": { "direct_imo", "mmsi", "name" } }
/api/v1/trade-flows?view=entitySupply chain entity graph: vessels linked to owners, ports, sanctions, P&I coverage, and dark fleet history.
Parameters
imostringFilter by IMO numberResponse: { "entities": [{ "imo_number", "vessel_name", "port_name", "is_sanctioned", "dark_event_count", "risk_score" }] }
Data Export
Download data as CSV files.
/api/v1/exportExport visits or estimates as CSV. Authenticated users get higher limits.
Parameters
portstringPort slugtypestring'visits' | 'estimates' (default: visits)limitnumberDefault 100, max 10000 with authResponse: CSV file (Content-Type: text/csv)
Webhooks
Subscribe to real-time event notifications.
/api/v1/webhooksAUTHList your registered webhooks.
Response: { "webhooks": [...] }
/api/v1/webhooksAUTHRegister a new webhook endpoint. Must be HTTPS.
Response: { "webhook": {...} }
/api/v1/webhooks/slack-testAUTHSend a test notification to a Slack webhook URL.
Response: { "success", "message" }
Admin & Billing
API key management, billing, and subscription plans.
/api/v1/keysAUTHList your API keys.
Response: { "keys": [...] }
/api/v1/keysAUTHCreate a new API key.
Response: { "api_key", "warning" }
/api/v1/billing/plansList available subscription plans with pricing and features.
Response: { "plans": [...] }
/api/v1/billing/entitlementsAUTHResolve current user entitlements across Overwatch and Locus products.
Response: { "entitlements": { "plan", "product", "hasBundle", "canAccessOverwatch", "canAccessLocus" } }
/api/v1/billing/checkoutAUTHCreate a Stripe checkout session for a subscription plan.
Response: { "url" }
SDKs & MCP
Client libraries and AI agent integration.
Python SDK
pip install axiom-overwatchfrom axiom_overwatch import AxiomClient client = AxiomClient(api_key="your-key") positions = client.positions(port="santos") df = client.to_dataframe(positions)
MCP Server (AI Agents)
Give Claude, GPT, or any MCP-compatible AI agent access to maritime intelligence.
AXIOM_API_KEY=your-key npx @axiom/mcp-server12 tools: vessel positions, export estimates, congestion, risk scores, dark fleet events, trade flows, mirror discrepancies, sanctions, commodity prices, forecasts, ports, crop health.
Pricing
All plans include access to every endpoint. Tiers differ in volume, history depth, and features.
Free
$0/mo
- 50 requests / day
- 20 results per call
- 7 days of history
- Port-level data only (no exact coordinates)
- No CSV export
- No webhooks
Starter
$49/mo
- 1,000 requests / day
- 100 results per call
- 90 days of history
- Full coordinates (lat/lon)
- CSV export
- No webhooks
Pro
$199/mo
- 10,000 requests / day
- 500 results per call
- Full history (unlimited)
- Full coordinates (lat/lon)
- CSV export (up to 10k rows)
- Real-time webhooks
- Priority support
Supply Chain Risk
$499/mo
- Unified Overwatch + Locus entitlement
- Cross-domain product access (single account)
- Single Stripe subscription and invoice
- Priority implementation support