Searoutes Vessel Tracking API
Retrieve the latest position of a vessel by IMO or MMSI, look up vessels by name, predict ETAs from AIS, list scheduled port arrivals, and access historical position time series and processed trajectory traces.
Retrieve the latest position of a vessel by IMO or MMSI, look up vessels by name, predict ETAs from AIS, list scheduled port arrivals, and access historical position time series and processed trajectory traces.
openapi: 3.0.1
info:
title: Searoutes API
description: >-
Maritime routing and carbon-emissions REST API. Compute sea routes and
distances, geocode ports and places, calculate multimodal CO2e emissions,
track vessels via AIS, look up carriers and services, and retrieve weather
along routes. All endpoints are served from https://api.searoutes.com and
authenticated with an x-api-key header. Endpoint paths are modeled from the
published Searoutes developer documentation and llms.txt reference index;
request/response schemas are summarized rather than exhaustive.
termsOfService: https://searoutes.com/terms/
contact:
name: Searoutes
email: contact@searoutes.com
url: https://developer.searoutes.com/reference/introduction
version: '2.0'
servers:
- url: https://api.searoutes.com
security:
- ApiKeyAuth: []
tags:
- name: Ocean Routing
description: Sea routes, distances, durations, and voyage plans.
- name: Geocoding
description: Ports, airports, places, areas, postal codes, and nearest points.
- name: CO2 Emissions
description: Multimodal CO2e emission calculations (sea, road, rail, air, inland water).
- name: Vessel
description: AIS vessel positions, ETAs, arrivals, traces, and time series.
- name: Search
description: Carrier and liner-service lookup.
- name: Weather
description: Historical, real-time, and forecasted weather.
paths:
/route/v2/sea/{locations}:
get:
operationId: getSeaRoute
tags:
- Ocean Routing
summary: Get sea route between locations
description: >-
Returns the sea route between a source and target location (and up to 20
waypoints) as coordinate pairs (longitude,latitude) or UN/LOCODEs
separated by semicolons, along with route distance (meters), duration
(milliseconds), and the crossed areas.
parameters:
- $ref: '#/components/parameters/Locations'
- name: continuousCoordinates
in: query
schema:
type: boolean
default: true
- name: allowIceAreas
in: query
schema:
type: boolean
default: false
- name: avoidHRA
in: query
description: Avoid the High Risk Area.
schema:
type: boolean
default: false
- name: avoidSeca
in: query
description: Avoid Sulphur Emission Control Areas.
schema:
type: boolean
default: false
- name: blockAreas
in: query
description: Comma-separated area ids to block.
schema:
type: string
- name: departure
in: query
description: Departure time as a Unix timestamp in milliseconds.
schema:
type: integer
format: int64
- name: imo
in: query
description: Vessel IMO number.
schema:
type: integer
- name: speed
in: query
description: Vessel speed in km/h.
schema:
type: number
- name: speedInKts
in: query
description: Vessel speed in knots.
schema:
type: number
- name: vesselDraft
in: query
description: Vessel draft in meters.
schema:
type: number
responses:
'200':
description: A GeoJSON FeatureCollection describing the route.
content:
application/json:
schema:
$ref: '#/components/schemas/RouteResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/route/v2/sea/{locations}/plan:
get:
operationId: getSeaRoutePlan
tags:
- Ocean Routing
summary: Get a detailed sea route plan
description: >-
Returns a sea route with a leg-by-leg voyage plan including timing based
on the departure time and vessel speed.
parameters:
- $ref: '#/components/parameters/Locations'
- name: departure
in: query
schema:
type: integer
format: int64
- name: speedInKts
in: query
schema:
type: number
responses:
'200':
description: A route plan with timed legs.
content:
application/json:
schema:
$ref: '#/components/schemas/RouteResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/geocoding/v2/all:
get:
operationId: geocodeAll
tags:
- Geocoding
summary: Find all types of locations
description: Search ports, airports, terminals, and postal codes in one call.
parameters:
- $ref: '#/components/parameters/Query'
responses:
'200':
$ref: '#/components/responses/GeocodingResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/geocoding/v2/port:
get:
operationId: geocodePort
tags:
- Geocoding
summary: Find ports by name or locode
parameters:
- $ref: '#/components/parameters/Query'
responses:
'200':
$ref: '#/components/responses/GeocodingResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/geocoding/v2/airport:
get:
operationId: geocodeAirport
tags:
- Geocoding
summary: Search airports by name, locode, or IATA code
parameters:
- $ref: '#/components/parameters/Query'
responses:
'200':
$ref: '#/components/responses/GeocodingResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/geocoding/v2/area:
get:
operationId: geocodeArea
tags:
- Geocoding
summary: Locate routing areas by name
parameters:
- $ref: '#/components/parameters/Query'
responses:
'200':
$ref: '#/components/responses/GeocodingResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/geocoding/v2/zip:
get:
operationId: geocodeZip
tags:
- Geocoding
summary: Retrieve coordinates for postal codes
parameters:
- $ref: '#/components/parameters/Query'
responses:
'200':
$ref: '#/components/responses/GeocodingResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/geocoding/v2/closest:
get:
operationId: geocodeClosest
tags:
- Geocoding
summary: Identify nearest locations from coordinates
parameters:
- name: lat
in: query
required: true
schema:
type: number
- name: lon
in: query
required: true
schema:
type: number
responses:
'200':
$ref: '#/components/responses/GeocodingResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/geocoding/v2/place:
get:
operationId: geocodePlace
tags:
- Geocoding
summary: Check if coordinates are at sea or find the closest sea point
parameters:
- name: lat
in: query
required: true
schema:
type: number
- name: lon
in: query
required: true
schema:
type: number
responses:
'200':
$ref: '#/components/responses/GeocodingResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/shipment:
get:
operationId: getShipmentCo2
tags:
- CO2 Emissions
summary: Get CO2e emissions for a multimodal shipment
description: ISO 14083 / GLEC-accredited multimodal shipment CO2e (v2.1).
parameters:
- name: fromLocode
in: query
schema:
type: string
- name: toLocode
in: query
schema:
type: string
- name: nContainers
in: query
schema:
type: integer
- name: containerSizeTeu
in: query
schema:
type: number
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/vessel:
get:
operationId: getVesselCo2
tags:
- CO2 Emissions
summary: Compute emissions for an ocean voyage by vessel or trade lane
parameters:
- name: imo
in: query
schema:
type: integer
- name: fromLocode
in: query
schema:
type: string
- name: toLocode
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/road:
get:
operationId: getRoadCo2
tags:
- CO2 Emissions
summary: Calculate road transport emissions
parameters:
- $ref: '#/components/parameters/Locations'
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/rail:
get:
operationId: getRailCo2
tags:
- CO2 Emissions
summary: Compute rail journey emissions
parameters:
- $ref: '#/components/parameters/Locations'
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/aircraft:
get:
operationId: getAircraftCo2
tags:
- CO2 Emissions
summary: Determine air cargo or passenger emissions
parameters:
- $ref: '#/components/parameters/Locations'
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/inland-water:
get:
operationId: getInlandWaterCo2
tags:
- CO2 Emissions
summary: Calculate inland waterway emissions
parameters:
- $ref: '#/components/parameters/Locations'
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/run:
post:
operationId: getMilkRunCo2
tags:
- CO2 Emissions
summary: Compute milk-run (collection/delivery) emissions
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/plan:
get:
operationId: getPlanCo2
tags:
- CO2 Emissions
summary: Get CO2e statistics for carriers on a port pair
parameters:
- name: fromLocode
in: query
schema:
type: string
- name: toLocode
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/proformas/{hash}:
get:
operationId: getProformaCo2
tags:
- CO2 Emissions
summary: Retrieve CO2 details for a specific itinerary
parameters:
- name: hash
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/co2/v2/execution/{hash}:
get:
operationId: getExecutionCo2
tags:
- CO2 Emissions
summary: Access CO2e breakdown for an ocean schedule execution
parameters:
- name: hash
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/Co2Response'
'401':
$ref: '#/components/responses/Unauthorized'
/vessel/v2/position:
get:
operationId: getVesselPosition
tags:
- Vessel
summary: Retrieve the latest vessel position via IMO or MMSI
parameters:
- name: imo
in: query
schema:
type: integer
- name: mmsi
in: query
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/VesselResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/vessel/v2/eta:
get:
operationId: getVesselEta
tags:
- Vessel
summary: Get a vessel ETA prediction from AIS
parameters:
- name: imo
in: query
schema:
type: integer
- name: toLocode
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/VesselResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/vessel/v2/arrivals:
get:
operationId: getVesselArrivals
tags:
- Vessel
summary: List scheduled vessel arrivals at a port (beta)
parameters:
- name: locode
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/VesselResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/vessel/v2/name:
get:
operationId: searchVesselByName
tags:
- Vessel
summary: Search vessel information by name
parameters:
- $ref: '#/components/parameters/Query'
responses:
'200':
$ref: '#/components/responses/VesselResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/vessel/v2/timeseries:
get:
operationId: getVesselTimeseries
tags:
- Vessel
summary: Access historical vessel position data between dates
parameters:
- name: imo
in: query
schema:
type: integer
- name: fromDate
in: query
schema:
type: integer
format: int64
- name: toDate
in: query
schema:
type: integer
format: int64
responses:
'200':
$ref: '#/components/responses/VesselResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/vessel/v2/trace:
get:
operationId: getVesselTrace
tags:
- Vessel
summary: Obtain a processed vessel trajectory/route history
parameters:
- name: imo
in: query
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/VesselResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/search/v2/carriers:
get:
operationId: searchCarriers
tags:
- Search
summary: Find maritime carriers by name or SCAC code
parameters:
- $ref: '#/components/parameters/Query'
responses:
'200':
$ref: '#/components/responses/SearchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/search/v2/carrier/{id}:
get:
operationId: getCarrier
tags:
- Search
summary: Retrieve a specific carrier
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/SearchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/search/v2/service:
get:
operationId: searchServices
tags:
- Search
summary: Search services by name with optional carrier filtering
parameters:
- $ref: '#/components/parameters/Query'
- name: carrierId
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/SearchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/search/v2/service/{id}:
get:
operationId: getService
tags:
- Search
summary: Get service details including vessels and ports
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/SearchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/weather/v2/forecast:
get:
operationId: getWeatherForecast
tags:
- Weather
summary: Retrieve bulk weather forecasts (up to 14 days)
parameters:
- name: lat
in: query
required: true
schema:
type: number
- name: lon
in: query
required: true
schema:
type: number
responses:
'200':
$ref: '#/components/responses/WeatherResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/weather/v2/historical:
get:
operationId: getWeatherHistorical
tags:
- Weather
summary: Access historical weather data (2013-present)
parameters:
- name: lat
in: query
required: true
schema:
type: number
- name: lon
in: query
required: true
schema:
type: number
- name: date
in: query
schema:
type: integer
format: int64
responses:
'200':
$ref: '#/components/responses/WeatherResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/weather/v2/track:
post:
operationId: getWeatherAlongTrack
tags:
- Weather
summary: Obtain weather conditions along a specific route
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
$ref: '#/components/responses/WeatherResponse'
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: >-
API key issued on signup and shown on the developer documentation
authentication page. Pass it in the x-api-key request header.
parameters:
Locations:
name: locations
in: path
required: true
description: >-
Coordinate pairs (longitude,latitude) or UN/LOCODEs separated by
semicolons. Up to 20 positions.
schema:
type: string
example: -1.27,50.80;8.83,53.88
Query:
name: query
in: query
required: true
description: Free-text search term (name, code, or locode).
schema:
type: string
responses:
Unauthorized:
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
GeocodingResponse:
description: A GeoJSON FeatureCollection of matching locations.
content:
application/json:
schema:
type: object
Co2Response:
description: CO2e emission results in grams/kilograms with methodology metadata.
content:
application/json:
schema:
type: object
VesselResponse:
description: Vessel AIS data (position, ETA, trace, or time series).
content:
application/json:
schema:
type: object
SearchResponse:
description: Carrier or service search results.
content:
application/json:
schema:
type: object
WeatherResponse:
description: Weather conditions (historical, current, or forecast).
content:
application/json:
schema:
type: object
schemas:
RouteResponse:
type: object
properties:
type:
type: string
example: FeatureCollection
features:
type: array
items:
type: object
properties:
type:
type: string
example: Feature
geometry:
type: object
properties:
type: object
properties:
distance:
type: number
description: Route distance in meters.
duration:
type: number
description: Route duration in milliseconds.
crossedAreas:
type: array
items:
type: string
Error:
type: object
properties:
error:
type: string
message:
type: string