Live AIS vessel position data via API. Pay-as-you-go, no subscription required.
AISbox offers three ways to get vessel position data. Box and Follow create persistent watches that automatically poll for new data every 10 minutes. Track is a one-shot request with no ongoing billing.
Monitor all vessels in a geographic bounding box. When you start a box watch, you get the current positions of every vessel in the area. The watch then polls automatically every 10 minutes, capturing new position data as ships move through the box. You can optionally list up to 10 MMSIs to receive data for those vessels only — you're then charged only for updates in which they report new positions.
Initialization: $5.00 — returns the first snapshot immediately.
Polling: $0.20 per update — charged every 10 minutes, only when new positions are found. No change in data = no charge.
Unlimited updates for a fixed period: $25/day, $150/week, $500/month (28 days). Purchase multiples at the same rate (e.g. 3 days = $75). Extend any time.
Tip: Start with pay-per-use to confirm your bounding box captures the vessels you need, then upgrade to a duration plan.
Follow a single vessel by its MMSI number. Starting a follow creates a watch on that vessel, returning its current position. Like box, the watch then polls every 10 minutes for updated positions as the vessel moves.
Initialization: $5.00 — returns the vessel's current position.
Polling: $0.20 per update — charged every 10 minutes, only when the vessel reports a new position.
Unlimited updates for a fixed period: $25/day, $150/week, $500/month (28 days). Purchase multiples at the same rate (e.g. 3 days = $75). Extend any time.
Tip: Start with pay-per-use to confirm the vessel is available and reporting positions, then upgrade to a duration plan.
Fetch the past 24 hours of position history for a vessel by MMSI. This is a single request — no watch is created, no ongoing billing. You get the data and you're done.
Cost: $5.00 per request.
Box and follow watches run until you explicitly stop them (unbox / unfollow) or your balance runs out. For longer monitoring, purchase a duration plan via buy_plan for unlimited updates at a fixed price. When a plan expires, the watch falls back to pay-per-use billing. Check your active watches, plans, and balance at any time with status.
{
"watch_id": 1,
"data": [
{
"vessel_id": "3f9c2a71d04be5a8",
"mmsi": "538010222",
"vessel_name": "AURORA SPIRIT",
"lat": 27.9506,
"lon": -82.4572,
"speed": 0.1,
"course": 113,
"heading": 227,
"timestamp": "2026-05-16T10:00:00Z"
},
{
"vessel_id": "b81e07c45fa2d390",
"mmsi": null,
"vessel_name": "GULF RUNNER",
"lat": 27.9412,
"lon": -82.4631,
"speed": 8.2,
"course": 44,
"heading": 45,
"timestamp": "2026-05-16T09:58:00Z"
}
],
"balance_cents": 4500,
"next_update_at": "2026-05-16T10:10:00Z"
}
vessel_id identifies a vessel across updates. mmsi is null until it is known — look it up with vessel_mmsi. heading 511 means not available.
{
"watch_id": 2,
"data": {
"vessel_id": "3f9c2a71d04be5a8",
"mmsi": "538010222",
"vessel_name": "AURORA SPIRIT",
"lat": 27.9506,
"lon": -82.4572,
"speed": 0.1,
"course": 113,
"heading": 227,
"timestamp": "2026-05-16T10:00:00Z"
},
"balance_cents": 4500,
"next_update_at": "2026-05-16T10:10:00Z"
}
{
"data": [
[27.9506, -82.4572, 1778929200, 12.5, 227],
[27.9612, -82.4481, 1778925600, 11.8, 225],
[27.9718, -82.4390, 1778922000, 12.1, 224]
],
"balance_cents": 4500
}
Track arrays are: [lat, lon, unix_timestamp, speed, heading]
By paying you agree to the Terms of Service and Refund Policy.
Draw a rectangle on the map to get bbox coordinates for the Box endpoint.
All requests are POST /api with a JSON body containing your key and a type.
Note: Requests that initialize a watch (box, follow) or fetch historical data (track) usually respond within a minute, and never take more than 90 seconds. Set your HTTP client timeout to at least 100 seconds. If no data arrives in time, the request fails and the charge is refunded automatically. Don't retry while a request is still pending: each retry starts a new watch and is charged separately. If your client disconnects, check status to see whether the watch started.
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"box","bbox":[27.5,-83.0,28.0,-82.5]}'
Returns initial vessel positions and a watch_id you'll use for all subsequent calls. Optionally limit it to up to 10 vessels by MMSI. MMSIs we haven't seen before can add up to a minute to the start; an unknown MMSI fails the request and refunds the charge:
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"box","bbox":[27.5,-83.0,28.0,-82.5],
"mmsi_filter":["538010222","367596000"]}'
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"box_data","watch_id":1}'
Returns the most recent snapshot. New data appears every ~10 minutes. Up to 6 requests per 10 minutes per watch.
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"vessel_mmsi","watch_id":1,"vessel_id":"b81e07c45fa2d390"}'
Returns {"vessel_id": "...", "mmsi": "367596000"} for a vessel the watch has seen. Free. An MMSI we already know answers at once; otherwise the lookup can take up to a minute, and you can make 5 of those per 10 minutes. Once found, the vessel carries its MMSI in all later data.
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"unbox","watch_id":1}'
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"follow","mmsi":"538010222"}'
Returns the vessel's current position and a watch_id.
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"follow_data","watch_id":1}'
Returns the most recent position. Up to 6 requests per 10 minutes per watch.
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"unfollow","watch_id":1}'
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"track","mmsi":"538010222"}'
Returns 24 hours of position history. Single request, no watch created.
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"buy_plan","watch_id":1,"plan_type":"day","quantity":3}'
Deducts from your balance and activates immediately.plan_type: day ($25), week ($150), or month ($500, 28 days). quantity: number of units (default 1).
If the subscription already has an active plan, the new time is added to the existing expiry.
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"status"}'
Returns your balance, email, and all watches (active and stopped).
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"rotate_key","email":"[email protected]"}'
Generates a new API key and permanently invalidates the old one. Requires your email as confirmation.
curl -X POST https://aisbox.net/api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"refund"}'
Stops all active watches and refunds your remaining balance to the original payment method.
Build and send requests. Charged operations deduct from your balance.