GET /api/v1/vessels
Search vessels by port and type. Returns IMO, name, DWT, flag, dimensions.
Parameters
Response
GET /api/v1/positions
Latest AIS positions for all vessels at a port. Includes course, speed, draft, nav status.
Parameters
Response
GET /api/v1/positions/latest
Global GeoJSON FeatureCollection of the latest known position for every tracked vessel (~18K). Powers the public live vessel map. Public, no auth required, CDN-cached for 5 minutes (Cache-Control: public, s-maxage=300, stale-while-revalidate=60).
Use this when you want a single global snapshot — for a map, a heatmap, or a periodic dashboard refresh — instead of paging by port. To zoom into a region, supply a bounding box; omit it to get every vessel worldwide.
Parameters
All four bounds must be supplied together; partial bounds are ignored and a global response is returned. Bounding boxes that cross the antimeridian (where
west > east) are supported.
Response
GET /api/v1/ais/{provider}/{imo}/location/latest
Public, no-auth, citable lookup of the latest known position for a single vessel. Reads from a deduped materialized view (one row per IMO per source) and returns a JSON-LD payload that AI ingestion pipelines and academic citations can pick up directly.
Use this when you need a single vessel’s most recent fix and want a stable, machine-readable contract you can reference from a paper, news article, or LLM training pipeline. For port-wide snapshots use /api/v1/positions; for the global feed use /api/v1/positions/latest.
- No API key required.
- Open CORS (
Access-Control-Allow-Origin: *). - IP-keyed rate limiting: 60 requests/minute and 1,000 requests/UTC day.
- Cached at the edge for 60 seconds (
Cache-Control: public, max-age=60). - Released under CC-BY 4.0 with attribution.
https://axiomoverwatch.io/openapi/positions.yaml.
Path parameters
Response headers
Every successful response includes rate-limit headers:
X-RateLimit-Limit-Minute,X-RateLimit-Remaining-MinuteX-RateLimit-Limit-Day,X-RateLimit-Remaining-Day
429 responses include Retry-After (seconds until the offending bucket resets).
Response (200)
freshness_seconds is the age of the position relative to request time. Stale positions (vessel hasn’t broadcast in a while) are still returned — inspect freshness_seconds and timestamp to decide whether to trust the fix. The self-declared destination field is frequently inaccurate or deliberately deceptive; for due-diligence work prefer the paid-tier destination-reliability scoring.
Error responses
Example