Skip to content

Credits and plans

Each successful response (HTTP 200) costs credits; errors, 404s and refused requests cost nothing. Credits reset at the start of each UTC month. All your keys share one allowance, and the bigger allowance applies when you hold more than one plan: allowances never add up.

PlanCredits a monthRequests per secondCommercial usePrice
Sandbox2,5001No, personal useFree
Plus allowance5,0002No, personal useIncluded in the personal plan
Pro allowance25,0005Internal business useIncluded in the personal plan
Developer25,0005Yes, including in your productsUS$19/month
Growth250,00020Yes, including in your productsUS$99/month
Scale2,500,00050Yes, including in your productsUS$399/month

Compare plans

Cost per request

EndpointCreditsKey required
GET /api/v1/vessels/{id}1Works without a key
GET /api/v1/ports/{unlocode}1Works without a key
GET /api/v1/companies/{entityId}1Works without a key
GET /api/v1/flags/{iso2}1Works without a key
GET /api/v1/wrecks/{id}1Works without a key
GET /api/v1/search1Key required
GET /api/v1/ports1Key required
GET /api/v1/sanctions/{list}1Key required
GET /api/v1/vessels/{id}/track1per day of trackKey required
GET /api/v1/screen1per vesselKey required
GET /api/v1/waterways1Key required
GET /api/v1/usage0Key required
GET /api/v1/me/feed1Key required

History: the last 24 hours of a track are open to every plan, including the free Sandbox key. Older windows need history in your plan: Plus 365 days, Developer 30 days, Growth 2 years, Pro and Scale everything Voydar holds (position history starts on 1 June 2026; positions older than 90 days are served from the archive at 10-minute resolution, without navigational status). A request beyond your plan answers 403 history_not_in_plan; if the archive cannot answer, 503 archive_unavailable, not charged.

Every keyed response carries X-Credits-Limit, X-Credits-Used, X-Credits-Remaining, X-Credits-Cost, X-Credits-Reset, X-RateLimit-Limit, X-RateLimit-Remaining, X-Seadar-Tier and X-Seadar-Commercial-Use. GET /api/v1/usage returns the same numbers as JSON, free.

Usage is counted on each server and written in batches every few seconds, so a burst spread over many servers can go slightly past the allowance before it is refused, and the account page can trail live traffic by about 10 seconds. Rate limits allow a burst of twice the per-second rate.

Errors

Errors are JSON with "error" (a stable code), "message" and "docs".

StatusCodeMeaning
400invalid_parameterA query parameter is out of range or malformed.
401api_key_requiredThis endpoint needs a key.
401invalid_keyThe key is malformed, unknown, revoked or rotated.
402credits_exhaustedThis month's credits are used up. The body has resetsAt and an upgrade link.
403history_not_in_planThe track window reaches further back than your plan's history. The body has maxHours and an upgrade link.
404not_foundNo such entity (free).
429rate_limitedToo many requests. Wait for the Retry-After header (seconds).
451not_licensed_for_apiThe data's sources do not permit API redistribution (only when full enforcement is switched on).
503auth_unavailableKeys cannot be checked right now. Retry after a few seconds.

Why a field is withheld

A fact can be free to read on a Voydar page and still not be ours to redistribute. Each section of a response names the sources behind it and is included only when every one of them permits redistribution through an API. Everything else is listed under "withheld" with its sources and a reason, so you can see what exists and why it is not served.

Your plan changes how much you can ask for, never what a response contains: no key, plan or payment unlocks a withheld field. Rights come from each source's licence.

Withheld today: live AIS positions from feeds without redistribution terms (AISstream, BarentsWatch) and the port calls and chokepoint transit counts derived from them, data from Beacon contributor stations (the contributor licence is awaiting confirmation), ship particulars from the legacy vessel load (no field-level source), photos and Wikipedia text. Served: sanctions lists, US Coast Guard inspections, EU MRV emissions, GLEIF, Wikidata, UN/LOCODE, NGA, and positions from Digitraffic, Kystverket and NOAA.

Reasons: source_not_licensed_for_api (a source's API right is not granted) and rights_registry_unavailable (the rights registry could not be read, so nothing is served: the API fails closed).

A withheld section
"withheld": [
  { "section": "lastPosition", "sources": ["aisstream"], "reason": "source_not_licensed_for_api" }
]

Caching

Responses are built from a shared cache that refreshes at most every 15 minutes (lists and search: 1 hour). Keyed responses are marked private and never stored by shared caches; keyless entity lookups are cached at the edge for 15 minutes.