LNG Carrier tracking API — quality sample 28 Sep 2026

LNG Carrier tracking API — quality sample 28 Sep 2026

You need reliable, developer-friendly LNG carrier tracking to power ETAs, terminal planning, and fleet dashboards. By the end of this post you’ll know exactly which endpoints to call for LNG vessels, how to query live AIS positions and routes, how to batch-track fleets, how to monitor LNG terminal congestion, and how to pull IMO CII emissions ratings using the Vessels API.

Why LNG carrier teams choose this API for AIS-powered tracking

LNG operations are schedule-sensitive. Cargo temperatures, boil-off management, canal slots, and terminal windows leave little room for guesswork. You need live positions, routes, accurate ETAs, and port intelligence in the same integration. Vessels API delivers:

  • 18 REST endpoints covering vessel search, live tracking, fleet ops, port intelligence, IMO CII, and a premium real-time AIS feed
  • One API key, one base URL — no OAuth, no per-endpoint auth differences
  • Consistent JSON with a top-level data object and predictable fields across endpoints
  • Global AIS coverage with near real-time refresh rates
  • A 7-day free trial that scales from indie projects to enterprise fleets

This article focuses on 5 LNG-relevant endpoints you can wire into production quickly:

  • /vessels/search — find LNG carriers by name, IMO, or MMSI with filters
  • /vessels/track — live AIS + 168h history + route + predicted ETA + weather
  • /vessels/fleet — batch positions/routes for dashboards and alerting
  • /ports/congestion and /port/expected-arrivals — terminal wait-times and inbound traffic
  • /vessels/green — IMO CII emissions scoring for ESG/compliance

Quickstart: base URL, auth, and conventions

Base URL: https://vessels-api.com/api/V1. Authenticate with an X-API-Key header on every request. All endpoints are GET except /vessels/fleet (POST with a JSON body). Responses include a top-level data object; examples below show only documented fields and use illustrative values.

  • Auth header: X-API-Key: YOUR_API_KEY
  • Positions are returned in decimal degrees, timestamps in UTC (ISO-8601 or UNIX-like strings depending on your HTTP client parsing)
  • Distances are nautical miles (nm); speeds are knots; courses/headings are degrees
  • Pagination parameters are page and per_page (max 100) where applicable
  • Common errors: 400 (invalid parameter), 401 (missing/invalid key), 404 (not found), 422 (parameter out of range), 429 (rate limit exceeded), 500 (server error)

Find LNG carriers fast with /vessels/search

Use the search endpoint to resolve an IMO/MMSI or discover LNG carriers by fuzzy name with filters. For LNG scenarios, the ship_type filter is your friend when you don’t know identifiers.

cURL example: search LNG carriers by name and flag

curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/search?query=al%20ghuwairiya&ship_type=LNG&flag=Bahamas&per_page=5"

Illustrative JSON snippet

{
"data": {
"vessels": [
{
"imo": "9397361",
"mmsi": "311034700",
"name": "AL GHUWAIRIYA",
"flag": "Bahamas",
"vessel_type": "Liquefied Natural Gas Carrier",
"gross_tonnage": 136400,
"deadweight_tonnage": 93400,
"year_built": 2009,
"length_m": 315,
"width_m": 50
}
],
"pagination": {
"current_page": 1,
"per_page": 5,
"total": 1,
"last_page": 1
}
}
}

Use this response to capture authoritative identifiers (IMO/MMSI) and particulars for your database. Pagination helps you batch through larger result sets; stick to per_page ≤ 100 to stay within documented constraints.

Live LNG tracking and ETAs with /vessels/track

Once you have IMO or MMSI, call /vessels/track for a combined view of current position, a rolling history (up to 168 hours), the active route, predicted ETA, and optional weather overlays. This is the cornerstone for LNG fleet maps and ETA-driven workflows.

cURL example: 48h history with route, ETA, and weather

curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/track?mmsi=311034700&hours=48&include_route=true&include_predicted_eta=true&include_weather=true"

Illustrative JSON response

{
"data": {
"vessel": {
"imo": "9397361",
"mmsi": "311034700",
"name": "AL GHUWAIRIYA"
},
"current_position": {
"latitude": 24.5123,
"longitude": 54.3861,
"speed_knots": 14.3,
"course_degrees": 237,
"heading_degrees": 235,
"navigational_status": "Under way using engine",
"timestamp_utc": "2026-09-28T11:42:00Z",
"destination": "Ras Laffan",
"eta": "2026-09-29T06:00:00Z"
},
"position_history": [
{
"latitude": 24.8321,
"longitude": 54.9956,
"speed_knots": 14.6,
"course_degrees": 236,
"heading_degrees": 235,
"navigational_status": "Under way using engine",
"timestamp_utc": "2026-09-27T23:42:00Z"
}
],
"route": {
"departure_port": "Jebel Ali",
"departure_time": "2026-09-27T09:00:00Z",
"destination_port": "Ras Laffan",
"eta": "2026-09-29T06:00:00Z",
"distance_nm": 292.4,
"avg_speed_knots": 14.2
},
"last_port_visits": [
{
"port_id": "AEJEA",
"port_name": "Jebel Ali",
"arrival_time": "2026-09-26T12:10:00Z",
"departure_time": "2026-09-27T09:00:00Z"
}
]
}
}

What to use from this payload

  • data.current_position.* for the live map marker, including speed_knots and course_degrees for vector plotting
  • data.position_history[] for track tails; limit to recent points for performance
  • data.route.distance_nm and avg_speed_knots for progress bars and buffer calculations
  • data.current_position.eta and route.eta to drive terminal notifications and truck gate planning
  • data.last_port_visits[] to reconcile recent port calls

Tip: cache the /vessels/track response for 30–60 seconds in fleet dashboards. If you receive 429, back off exponentially and resume normal polling. All timestamps are UTC; convert to terminal-local timezones at render.

JavaScript example: fetch and normalize ETA for a dashboard

async function getLNGTrack(mmsi) {
const url = new URL("https://vessels-api.com/api/V1/vessels/track");
url.searchParams.set("mmsi", mmsi);
url.searchParams.set("hours", "36");
url.searchParams.set("include_route", "true");
url.searchParams.set("include_predicted_eta", "true");

const res = await fetch(url.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
});
if (!res.ok) {
throw new Error(`Track error: ${res.status}`);
}
const json = await res.json();
const d = json.data;

// Minimal normalization for a dashboard card
return {
name: d.vessel?.name,
imo: d.vessel?.imo,
mmsi: d.vessel?.mmsi,
lat: d.current_position?.latitude,
lon: d.current_position?.longitude,
sog_kn: d.current_position?.speed_knots,
cog_deg: d.current_position?.course_degrees,
nav_status: d.current_position?.navigational_status,
eta_utc: d.current_position?.eta || d.route?.eta,
route: {
from: d.route?.departure_port,
to: d.route?.destination_port,
distance_nm: d.route?.distance_nm,
avg_speed_knots: d.route?.avg_speed_knots
},
lastFixUtc: d.current_position?.timestamp_utc
};
}

// Example usage
getLNGTrack("311034700")
.then(data => console.log("LNG track:", data))
.catch(err => console.error(err));

Fleet operations: batch LNG positions with /vessels/fleet

When instrumenting a control room view or alerting pipeline, you want one call that returns multiple LNG carriers’ positions and routes. Use POST /vessels/fleet. It accepts a list of vessels (IMO and/or MMSI) and optional include flags.

cURL example: two-vessel fleet snapshot

curl -s -X POST \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"vessels": [
{ "imo": "9397361" },
{ "mmsi": "311034700" }
],
"include_positions": true,
"include_routes": true
}' \
"https://vessels-api.com/api/V1/vessels/fleet"

Illustrative JSON snippet

{
"data": {
"fleet": {
"total_vessels": 2,
"vessels_at_sea": 2,
"vessels_in_port": 0
},
"vessels": [
{
"imo": "9397361",
"mmsi": "311034700",
"name": "AL GHUWAIRIYA",
"position": {
"latitude": 24.5123,
"longitude": 54.3861,
"timestamp_utc": "2026-09-28T11:42:00Z"
},
"route": {
"departure_port": "Jebel Ali",
"destination_port": "Ras Laffan",
"eta": "2026-09-29T06:00:00Z",
"distance_nm": 292.4,
"avg_speed_knots": 14.2
}
}
]
}
}

Use data.fleet for global widgets (at sea vs. in port), and data.vessels[] to render per-vessel cards. This endpoint cuts round-trips versus calling /vessels/track repeatedly. For 10–50 vessels, polling every 60–120 seconds is a good starting cadence.

Port intelligence for LNG terminals

LNG terminals operate with narrow berthing windows. Two endpoints help you anticipate congestion and inbound lineups: /ports/congestion for real-time wait-time stats, and /port/expected-arrivals to see which vessels are heading in with ETAs and origin ports.

/ports/congestion: congestion snapshot and wait-time statistics

curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/ports/congestion?port_id=QATARL&period=7d"
{
"data": {
"port_id": "QATARL",
"port_name": "Ras Laffan",
"period": "7d",
"snapshot": {
"vessels_in_anchorage": 6,
"vessels_at_berth": 8
},
"statistics": {
"avg_wait_time_hours_last_7d": 14.8,
"max_wait_time_hours_last_7d": 28.5,
"avg_berth_time_hours_last_7d": 19.3,
"port_calls_count": 73
}
}
}

Use snapshot.* for “right now” widgets, and statistics.* for SLA risk scoring. Pair this with your vessel’s route.eta to flag early departures or slow-steaming recommendations.

/port/expected-arrivals: inbound lineup with ETAs and origins

curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/port/expected-arrivals?port=QATARL"
{
"data": {
"port_id": "QATARL",
"port_name": "Ras Laffan",
"expected_arrivals": [
{
"mmsi": "311034700",
"imo": "9397361",
"name": "AL GHUWAIRIYA",
"vessel_type": "Liquefied Natural Gas Carrier",
"eta": "2026-09-29T06:00:00Z",
"departure_port": "Jebel Ali"
}
],
"total": 1
}
}

Combine expected arrivals with congestion statistics to compute likely anchorage delays and advise chartering or terminal ops. All ETAs are in UTC; convert on display and keep your backend calculations in UTC to avoid DST pitfalls.

ESG and compliance: IMO CII scoring for LNG carriers

Many LNG programs include ESG targets. Use /vessels/green to retrieve distance sailed, estimated emissions, and the computed CII rating over a selectable period. The endpoint references IMO MEPC.339(76) and returns ratings from A (best) to E (worst).

cURL example: 30-day CII for a single LNG carrier

curl -s -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/green?mmsi=311034700&period=30d"
{
"data": {
"imo": "9397361",
"mmsi": "311034700",
"name": "AL GHUWAIRIYA",
"period": "30d",
"distance_nm": 4832.7,
"estimated_emissions": {
"co2_tons": 1243.2,
"co2_per_nm": 0.2573
},
"cii": {
"score": 1.83,
"rating": "B",
"year": 2026,
"regulation_reference": "IMO MEPC.339(76)"
}
}
}

Feed this into your sustainability dashboard and alert when ratings drift below targets. For fleets, iterate over identifiers and aggregate by operator or trade lane.

Operational patterns that work for LNG tracking

  • Polling cadence: 30–120 seconds for fleet views; 10–15 minutes for port stats. Decrease frequency off-hours or when vessels are in port.
  • Backoff and retries: On 429, exponentially back off and resume steady-state polling; log 400/422 to catch parameter issues early.
  • Caching: Cache /vessels/search results and vessel particulars for hours or days; particulars seldom change.
  • Pagination: Respect per_page ≤ 100 on /vessels/search and iterate with page to cover the full set.
  • Units and time: Keep all math in UTC and nautical units; convert units and timezones only at the UI boundary.

End-to-end snippet: from name to live ETA

This compact flow searches a vessel by name with an LNG filter, extracts the MMSI, and fetches its live track with predicted ETA.

// 1) Resolve LNG carrier MMSI
const searchUrl = "https://vessels-api.com/api/V1/vessels/search?query=al%20ghuwairiya&ship_type=LNG&per_page=1";

const headers = { "X-API-Key": "YOUR_API_KEY" };

const searchRes = await fetch(searchUrl, { headers });
const searchJson = await searchRes.json();
const mmsi = searchJson.data.vessels?.[0]?.mmsi;
if (!mmsi) throw new Error("Vessel not found");

// 2) Fetch live track with predicted ETA
const trackUrl = `https://vessels-api.com/api/V1/vessels/track?mmsi=${encodeURIComponent(mmsi)}&hours=24&include_route=true&include_predicted_eta=true`;
const trackRes = await fetch(trackUrl, { headers });
const track = await trackRes.json();

// 3) Read essential fields
const d = track.data;
console.log({
name: d.vessel.name,
lat: d.current_position.latitude,
lon: d.current_position.longitude,
eta_utc: d.current_position.eta || d.route?.eta,
destination: d.current_position.destination || d.route?.destination_port
});

What’s next

For production teams, wire these endpoints into your fleet service: ingest search identifiers once, poll /vessels/track for the active fleet, use /vessels/fleet for dashboards, and overlay /ports/congestion + /port/expected-arrivals for terminal risk. Add /vessels/green to keep ESG in view. If you prefer a model context format for tools and automations, explore the MCP.

FAQ

Q: Do I have to use IMO or MMSI for tracking?
A: Either works. If you start from a name, resolve to identifiers via /vessels/search, then pass imo or mmsi to /vessels/track and /vessels/green.

Q: How far back can I request position history?
A: Use the hours parameter on /vessels/track; the maximum is 168 (seven days).

Q: Can I get multiple vessels in one call?
A: Yes. POST /vessels/fleet with an array of {imo, mmsi} objects. Include positions and routes with include_positions/include_routes.

Q: What timezone are timestamps?
A: All timestamps are UTC. Convert to local timezones at render.

Q: How do I monitor a terminal’s current congestion and inbound lineup?
A: Call /ports/congestion with port_id for a real-time snapshot and wait-time statistics, and /port/expected-arrivals to list vessels heading to that port with ETAs and origin ports.

Start building your LNG tracking workflow with a simple header and a single base URL. Explore the endpoints in the Documentation, try them live via the MCP, and get your API key to ship your integration: Register.

Ready to get started?

Get your API key and start tracking vessels in minutes.

Get API Key

Related posts