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 provide an MMSI filter list to receive data for specific vessels only.
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": [
{
"mmsi": "538010222",
"lat": 27.9506,
"lon": -82.4572,
"speed": 0.1,
"heading": 227,
"course": 113.9,
"vessel_name": "AURORA SPIRIT",
"timestamp": "2026-05-16T10:00:00"
},
{
"mmsi": "367596000",
"lat": 27.9412,
"lon": -82.4631,
"speed": 8.2,
"heading": 45,
"course": 44.7,
"vessel_name": "GULF RUNNER",
"timestamp": "2026-05-16T09:58:00"
}
],
"balance_cents": 4500,
"next_update_at": "2026-05-16T10:10:00Z"
}
{
"watch_id": 2,
"data": {
"lat": 27.9506,
"lon": -82.4572,
"speed": 0.1,
"heading": 227
},
"balance_cents": 4500,
"next_update_at": "2026-05-16T10:10:00Z"
}
{
"data": [
[27.9506, -82.4572, 1747393200, 12.5, 227],
[27.9612, -82.4481, 1747389600, 11.8, 225],
[27.9718, -82.4390, 1747386000, 12.1, 224]
],
"balance_cents": 4500
}
Track arrays are: [lat, lon, unix_timestamp, speed, heading]
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) may take 10–20 seconds to respond. Set your HTTP client timeout to at least 30 seconds. Do not retry or abort — you will be charged on the first request regardless.
curl -X POST /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 filter by MMSI:
curl -X POST /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 /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. Call as often as you like.
curl -X POST /api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"unbox","watch_id":1}'
curl -X POST /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 /api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"follow_data","watch_id":1}'
Returns the most recent position. Call as often as you like.
curl -X POST /api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"unfollow","watch_id":1}'
curl -X POST /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 /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 /api -H "Content-Type: application/json" \
-d '{"key":"ak_...","type":"status"}'
Returns your balance, email, and all watches (active and stopped).
curl -X POST /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 /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.