Terminal49 Vessels API

The Vessels API from Terminal49 — 4 operation(s) for vessels.

GitHub OpenAPI

Operations 4

GET /vessels/{id} Get a vessel using the id #
GET /vessels/{imo} Get a vessel using the imo #
GET /vessels/{id}/future_positions Get vessel future positions #
GET /vessels/{id}/future_positions_with_coordinates Get vessel future positions from coordinates #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/terminal49:terminal49-vessels-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

terminal49-vessels-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Terminal49 API Reference Vessels API
  version: 0.2.0
  contact:
    name: Terminal49 API support
    url: https://www.terminal49.com
    email: support@terminal49.com
  description: 'The Terminal 49 API offers a convenient way to programmatically track your shipments from origin to destination.


    Please enter your API key into the "Variables" tab before using these endpoints within Postman.'
  x-label: Beta
  termsOfService: https://www.terminal49.com/terms
  x-synced-from: https://terminal49.com/docs/openapi.json
  x-synced-at: '2026-08-24T18:47:48.161Z'
servers:
- url: https://api.terminal49.com/v2
  description: Production
security:
- authorization: []
tags:
- name: Vessels
paths:
  /vessels/{id}:
    parameters:
    - schema:
        type: string
      name: id
      in: path
      required: true
    - schema:
        type: string
        format: date-time
        example: '2025-05-20T00:00:00Z'
      name: show_positions[from_timestamp]
      in: query
      description: ISO 8601 timestamp to filter positions from. 7 days by default.
      required: false
    - schema:
        type: string
        format: date-time
        example: '2025-05-24T00:00:00Z'
      name: show_positions[to_timestamp]
      in: query
      description: ISO 8601 timestamp to filter positions up to. Current time by default.
      required: false
    get:
      summary: Get a vessel using the id
      tags:
      - Vessels
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/vessel'
        '403':
          description: Forbidden - Feature not enabled
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        status:
                          type: string
                          example: '403'
                        source:
                          type:
                          - object
                          - 'null'
                        title:
                          type: string
                          example: Forbidden
                        detail:
                          type: string
                          example: Routing data feature is not enabled for this account
      operationId: get-vessels-id
      description: Returns a vessel by id. `show_positions` is a paid feature. Please contact sales@terminal49.com.
  /vessels/{imo}:
    parameters:
    - schema:
        type: string
      name: imo
      in: path
      required: true
    - schema:
        type: string
        format: date-time
        example: '2025-05-20T00:00:00Z'
      name: show_positions[from_timestamp]
      in: query
      description: ISO 8601 timestamp to filter positions from. 7 days by default.
      required: false
    - schema:
        type: string
        format: date-time
        example: '2025-05-24T00:00:00Z'
      name: show_positions[to_timestamp]
      in: query
      description: ISO 8601 timestamp to filter positions up to. Current time by default.
      required: false
    get:
      summary: Get a vessel using the imo
      tags:
      - Vessels
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/vessel'
        '403':
          description: Forbidden - Feature not enabled
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        status:
                          type: string
                          example: '403'
                        source:
                          type:
                          - object
                          - 'null'
                        title:
                          type: string
                          example: Forbidden
                        detail:
                          type: string
                          example: Routing data feature is not enabled for this account
      operationId: get-vessels-imo
      description: Returns a vessel by the given IMO number. `show_positions` is a paid feature. Please contact sales@terminal49.com.
      x-internal: true
  /vessels/{id}/future_positions:
    parameters:
    - schema:
        type: string
      name: id
      in: path
      required: true
    get:
      summary: Get vessel future positions
      tags:
      - Vessels
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/vessel_with_positions'
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                        format: uri
        '403':
          description: Forbidden - Routing data feature is not enabled for this account
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        status:
                          type: string
                          example: '403'
                        title:
                          type: string
                          example: Forbidden
                        detail:
                          type: string
                          example: Routing data feature is not enabled for this account
      operationId: get-vessels-id-future-positions
      description: Returns the estimated route between two ports for a given vessel. The timestamp of the positions has fixed spacing of one minute. This is a paid feature. Please contact sales@terminal49.com.
      parameters:
      - schema:
          type: string
          format: uuid
        in: query
        name: port_id
        description: The destination port id
        required: true
      - schema:
          type: string
          format: uuid
        in: query
        name: previous_port_id
        description: The previous port id
        required: true
  /vessels/{id}/future_positions_with_coordinates:
    parameters:
    - schema:
        type: string
      name: id
      in: path
      required: true
    get:
      summary: Get vessel future positions from coordinates
      tags:
      - Vessels
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/vessel_with_positions'
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                        format: uri
        '403':
          description: Forbidden - Routing data feature is not enabled for this account
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        status:
                          type: string
                          example: '403'
                        title:
                          type: string
                          example: Forbidden
                        detail:
                          type: string
                          example: Routing data feature is not enabled for this account
      operationId: get-vessels-id-future-positions-with-coordinates
      description: Returns the estimated route between two ports for a given vessel from a set of coordinates. The timestamp of the positions has fixed spacing of one minute. This is a paid feature. Please contact sales@terminal49.com.
      parameters:
      - schema:
          type: string
          format: uuid
        in: query
        name: port_id
        description: The destination port id
        required: true
      - schema:
          type: string
          format: uuid
        in: query
        name: previous_port_id
        description: The previous port id
        required: true
      - schema:
          type: number
        in: query
        name: latitude
        description: Starting latitude coordinate
        required: true
      - schema:
          type: number
        in: query
        name: longitude
        description: Starting longitude coordinate
        required: true
components:
  schemas:
    vessel_with_positions:
      title: Vessel with positions model
      type: object
      properties:
        id:
          type: string
          format: uuid
        type:
          type: string
          enum:
          - vessel
        attributes:
          type: object
          properties:
            name:
              type: string
              description: The name of the ship or vessel
            imo:
              type:
              - string
              - 'null'
              description: International Maritime Organization (IMO) number
            mmsi:
              type:
              - string
              - 'null'
              description: Maritime Mobile Service Identity (MMSI)
            latitude:
              type:
              - number
              - 'null'
              description: The current latitude position of the vessel
            longitude:
              type:
              - number
              - 'null'
              description: The current longitude position of the vessel
            nautical_speed_knots:
              type:
              - number
              - 'null'
              description: The current speed of the ship in knots (nautical miles per hour)
            navigational_heading_degrees:
              type:
              - number
              - 'null'
              description: The current heading of the ship in degrees, where 0 is North, 90 is East, 180 is South, and 270 is West
            position_timestamp:
              type:
              - string
              - 'null'
              format: date-time
              description: The timestamp of when the ship's position was last recorded, in ISO 8601 date and time format
            positions:
              type: array
              description: Array of estimated future positions
              items:
                type: object
                properties:
                  latitude:
                    type: number
                  longitude:
                    type: number
                  heading:
                    type:
                    - number
                    - 'null'
                  timestamp:
                    type: string
                    format: date-time
                  estimated:
                    type: boolean
                required:
                - latitude
                - longitude
                - timestamp
                - estimated
      required:
      - id
      - type
      - attributes
    vessel:
      title: vessel
      type: object
      properties:
        id:
          type: string
          format: uuid
        type:
          type: string
          enum:
          - vessel
        attributes:
          type: object
          properties:
            name:
              type: string
              description: The name of the ship or vessel
              example: Ever Given
            imo:
              type:
              - string
              - 'null'
              description: International Maritime Organization (IMO) number
              example: '9811000'
            mmsi:
              type:
              - string
              - 'null'
              description: Maritime Mobile Service Identity (MMSI)
              example: '353136000'
            latitude:
              type:
              - number
              - 'null'
              description: The current latitude position of the vessel
              example: 25.29845
            longitude:
              type:
              - number
              - 'null'
              description: The current longitude position of the vessel
              example: 121.217
            nautical_speed_knots:
              type:
              - number
              - 'null'
              description: The current speed of the ship in knots (nautical miles per hour)
              example: 90
            navigational_heading_degrees:
              type:
              - number
              - 'null'
              description: The current heading of the ship in degrees, where 0 is North, 90 is East, 180 is South, and 270 is West
              example: 194
            position_timestamp:
              type:
              - string
              - 'null'
              description: The timestamp of when the ship's position was last recorded, in ISO 8601 date and time format
              example: '2023-07-28T14:01:37Z'
            positions:
              type:
              - array
              - 'null'
              description: An array of historical position data for the vessel. Only included if `show_positions` is true.
              items:
                type: object
                properties:
                  latitude:
                    type: number
                    example: 1.477285
                  longitude:
                    type: number
                    example: 104.535533333
                  heading:
                    type:
                    - number
                    - 'null'
                    example: 51
                  timestamp:
                    type: string
                    format: date-time
                    example: '2025-05-23T19:14:22Z'
                  estimated:
                    type: boolean
                    example: false
  securitySchemes:
    authorization:
      name: Authorization
      type: apiKey
      in: header
      description: 'Use a Terminal49 API key in the `Authorization` header with the `Token` prefix.


        `Authorization: Token YOUR_API_KEY`'
x-tagGroups:
- name: End Points
  tags:
  - Shipments
  - Containers
  - Custom Field Definitions
  - Custom Field Options
  - Custom Fields
  - Tracking Requests
  - Webhooks
  - Webhook Notifications
  - Metro Areas
  - Documents
  - Email Submissions
  - Document Schemas
  - Search
- name: Routing (Paid)
  tags:
  - Routing (Paid)