MarineTraffic Ports Information API

Port-centric analytics: expected port arrivals (`/expectedarrivals`), predictive arrivals using MarineTraffic's destination model (`/predictive-arrivals`), and port-congestion intelligence (`/port-congestion`) with anchorage-time, in-port-time, vessels-in-port, and call-count metrics aggregated by market or ship class for a given port and ISO week.

MarineTraffic Ports Information API is one of 8 APIs that MarineTraffic publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 1 JSON Schema definition.

Tagged areas include AIS, Maritime, Ports, Port Congestion, and Predictive Arrivals. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, 1 Naftiko capability spec, and 1 JSON Schema.

OpenAPI Specification

marine-traffic-ports-info-openapi.yml Raw ↑
openapi: 3.0.2
info:
  title: MarineTraffic Ports Information API
  version: 1.0.0
  description: Expected port arrivals, predictive arrivals, and port congestion intelligence powered by live AIS, port-call
    history, and predictive routing.
  contact:
    name: MarineTraffic
    url: https://www.marinetraffic.com/
servers:
- url: https://services.marinetraffic.com/api
tags:
- name: Ports Information
paths:
  /expectedarrivals/{api_key}:
    get:
      tags:
      - Ports Information
      summary: Expected Port Arrivals
      description: "Get expected arrivals to a specific port. </br></br> <b>Notes</b> <ul>\n    <li>**SPEED** returned in\
        \ (knots x10) and **TIMESTAMP** in UTC</li>\n    <li>Use either **TIMESPAN** or **FROMDATE/TODATE** in order to look\
        \ for expected arrivals in a specific date range</li>\n    <li>Information about <a href=\"https://support.marinetraffic.com/en/articles/9552860-what-kind-of-information-is-ais-transmitted\"\
        >AIS-transmitted data</a></li>\n    <li>The <b>frequency of allowed API calls</b> is specific to your API key and\
        \ is detailed in your contract as a number of successful calls per time period. For example “2 calls per minute”.\
        \ </br>Regardless of this agreed limit, each API key is technically restricted to a maximum of 100 total (including\
        \ successful and unsuccessful) requests per minute to ensure system stability.</li>\n</ul>"
      operationId: expectedarrivals
      parameters:
      - $ref: '#/components/parameters/api_key'
      - $ref: '#/components/parameters/v_VI02'
      - $ref: '#/components/parameters/portid_VI02'
      - $ref: '#/components/parameters/timespan_VI02'
      - $ref: '#/components/parameters/days_last_signal_VI02'
      - $ref: '#/components/parameters/fromdate_VI02'
      - $ref: '#/components/parameters/todate_VI02'
      - $ref: '#/components/parameters/fromportid_VI02'
      - $ref: '#/components/parameters/shiptype_VI02'
      - $ref: '#/components/parameters/dwt_min_VI02'
      - $ref: '#/components/parameters/dwt_max_VI02'
      - $ref: '#/components/parameters/gt_min_VI02'
      - $ref: '#/components/parameters/gt_max_VI02'
      - $ref: '#/components/parameters/msgtype_VI02'
      - $ref: '#/components/parameters/protocol_new'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/200_vi02_default'
                - $ref: '#/components/schemas/200_vi02_extended'
            application/xml:
              schema:
                oneOf:
                - $ref: '#/components/schemas/200_vi02_default'
                - $ref: '#/components/schemas/200_vi02_extended'
              examples:
                Default:
                  summary: Simple
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<ETA>\n    <VESSEL_ETA MMSI=\"229001000\"\
                    \ IMO=\"7827213\" SHIP_ID=\"\" SHIPNAME=\"\" LAT=\"37.938690\" LON=\"23.634480\" SPEED=\"0\" COURSE=\"\
                    129\" STATUS=\"5\" PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"\
                    GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\"\
                    \ ETA=\"2021-03-14T05:40:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T08:58:08\"/>\n   \
                    \ <VESSEL_ETA MMSI=\"201100129\" IMO=\"\" SHIP_ID=\"\" SHIPNAME=\"\" LAT=\"37.943630\" LON=\"23.631900\"\
                    \ SPEED=\"0\" COURSE=\"0\" STATUS=\"5\" PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\"\
                    \ CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"\" NEXT_PORT_UNLOCODE=\"\" NEXT_PORT_NAME=\"\" NEXT_PORT_COUNTRY=\"\
                    \" ETA=\"2020-10-26T08:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T08:57:24\"/>\n  \
                    \  <VESSEL_ETA MMSI=\"636092659\" IMO=\"\" SHIP_ID=\"\" SHIPNAME=\"\" LAT=\"37.949450\" LON=\"23.601120\"\
                    \ SPEED=\"0\" COURSE=\"0\" STATUS=\"5\" PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\"\
                    \ CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\"\
                    \ NEXT_PORT_COUNTRY=\"GR\" ETA=\"2020-10-18T10:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T08:55:08\"\
                    />\n    <VESSEL_ETA MMSI=\"241683000\" IMO=\"\" SHIP_ID=\"\" SHIPNAME=\"\" LAT=\"37.949330\" LON=\"23.599670\"\
                    \ SPEED=\"0\" COURSE=\"333\" STATUS=\"5\" PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\"\
                    \ CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\"\
                    \ NEXT_PORT_COUNTRY=\"GR\" ETA=\"2020-09-08T12:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T09:00:03\"\
                    />\n    <VESSEL_ETA MMSI=\"241654000\" IMO=\"\" SHIP_ID=\"\" SHIPNAME=\"\" LAT=\"37.952920\" LON=\"23.581480\"\
                    \ SPEED=\"0\" COURSE=\"106\" STATUS=\"5\" PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\"\
                    \ CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\"\
                    \ NEXT_PORT_COUNTRY=\"GR\" ETA=\"2020-05-07T11:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T08:57:57\"\
                    />\n</ETA>"
                Extended:
                  summary: Extended
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<ETA>\n    <VESSEL_ETA IMO=\"7827213\"\
                    \ MMSI=\"229001000\" SHIPNAME=\"CELESTYAL CRYSTAL\" SHIP_ID=\"\" TYPE_NAME=\"Passenger Ship\" SHIPTYPE=\"\
                    36\" CALLSIGN=\"9HA2978\" FLAG=\"MT\" LENGTH=\"162\" WIDTH=\"24\" DRAUGHT=\"61\" GRT=\"25611\" DWT=\"\
                    1703\" YEAR_BUILT=\"1980\" LAT=\"37.938690\" LON=\"23.634480\" SPEED=\"0\" COURSE=\"129\" STATUS=\"5\"\
                    \ ETA=\"2021-03-14T05:40:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"17208\" LAST_PORT=\"KUSADASI\"\
                    \ LAST_PORT_UNLOCODE=\"TRKUS\" LAST_PORT_COUNTRY=\"TR\" LAST_PORT_TIME=\"2020-03-13T17:38:00\" PORT_ID=\"\
                    1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"\
                    GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" TIMESTAMP=\"2020-10-30T08:58:08\"/>\n    <VESSEL_ETA\
                    \ IMO=\"8843886\" MMSI=\"201100129\" SHIPNAME=\"EDRO IV\" SHIP_ID=\"\" TYPE_NAME=\"General Cargo\" SHIPTYPE=\"\
                    0\" CALLSIGN=\"ZADL2\" FLAG=\"AL\" LENGTH=\"89.97\" WIDTH=\"12.37\" DRAUGHT=\"34\" GRT=\"2138\" DWT=\"\
                    2850\" YEAR_BUILT=\"1983\" LAT=\"37.943630\" LON=\"23.631900\" SPEED=\"0\" COURSE=\"0\" STATUS=\"5\" ETA=\"\
                    2020-10-26T08:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"118\" LAST_PORT=\"VALLETTA\" LAST_PORT_UNLOCODE=\"\
                    MTMLA\" LAST_PORT_COUNTRY=\"MT\" LAST_PORT_TIME=\"2020-10-21T16:41:00\" PORT_ID=\"1\" PORT_UNLOCODE=\"\
                    GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"\" NEXT_PORT_UNLOCODE=\"\"\
                    \ NEXT_PORT_NAME=\"\" NEXT_PORT_COUNTRY=\"\" TIMESTAMP=\"2020-10-30T08:57:24\"/>\n    <VESSEL_ETA IMO=\"\
                    9394040\" MMSI=\"636092659\" SHIPNAME=\"NORIENT SATURN\" SHIP_ID=\"\" TYPE_NAME=\"Oil/Chemical Tanker\"\
                    \ SHIPTYPE=\"80\" CALLSIGN=\"D5JP2\" FLAG=\"LR\" LENGTH=\"180\" WIDTH=\"32.24\" DRAUGHT=\"68\" GRT=\"\
                    25864\" DWT=\"40435\" YEAR_BUILT=\"2007\" LAT=\"37.949450\" LON=\"23.601120\" SPEED=\"0\" COURSE=\"0\"\
                    \ STATUS=\"5\" ETA=\"2020-10-18T10:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"1351\" LAST_PORT=\"\
                    ALGER\" LAST_PORT_UNLOCODE=\"DZALG\" LAST_PORT_COUNTRY=\"DZ\" LAST_PORT_TIME=\"2020-10-14T11:28:00\" PORT_ID=\"\
                    1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"\
                    GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" TIMESTAMP=\"2020-10-30T08:55:08\"/>\n    <VESSEL_ETA\
                    \ IMO=\"9087867\" MMSI=\"241683000\" SHIPNAME=\"AITENS\" SHIP_ID=\"\" TYPE_NAME=\"Oil Products Tanker\"\
                    \ SHIPTYPE=\"80\" CALLSIGN=\"SVCU7\" FLAG=\"GR\" LENGTH=\"104.7\" WIDTH=\"15.4\" DRAUGHT=\"50\" GRT=\"\
                    3586\" DWT=\"5196\" YEAR_BUILT=\"1993\" LAT=\"37.949330\" LON=\"23.599670\" SPEED=\"0\" COURSE=\"333\"\
                    \ STATUS=\"5\" ETA=\"2020-09-08T12:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"23935\" LAST_PORT=\"\
                    KALI LIMENES ANCH\" LAST_PORT_UNLOCODE=\"\" LAST_PORT_COUNTRY=\"GR\" LAST_PORT_TIME=\"2020-09-07T15:11:00\"\
                    \ PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"\
                    1\" NEXT_PORT_UNLOCODE=\"GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" TIMESTAMP=\"2020-10-30T09:00:03\"\
                    />\n    <VESSEL_ETA IMO=\"9036868\" MMSI=\"241654000\" SHIPNAME=\"APTERA\" SHIP_ID=\"\" TYPE_NAME=\"Oil\
                    \ Products Tanker\" SHIPTYPE=\"80\" CALLSIGN=\"SVDE7\" FLAG=\"GR\" LENGTH=\"105.02\" WIDTH=\"15.5\" DRAUGHT=\"\
                    58\" GRT=\"2975\" DWT=\"5260\" YEAR_BUILT=\"1991\" LAT=\"37.952920\" LON=\"23.581480\" SPEED=\"0\" COURSE=\"\
                    106\" STATUS=\"5\" ETA=\"2020-05-07T11:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"1\" LAST_PORT=\"\
                    PIRAEUS\" LAST_PORT_UNLOCODE=\"GRPIR\" LAST_PORT_COUNTRY=\"GR\" LAST_PORT_TIME=\"2020-10-27T18:36:00\"\
                    \ PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"\
                    1\" NEXT_PORT_UNLOCODE=\"GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" TIMESTAMP=\"2020-10-30T08:57:57\"\
                    />\n</ETA>"
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/400_vi02_missing_or_invalid_port_identifier'
            application/xml:
              schema:
                $ref: '#/components/schemas/400_vi02_missing_or_invalid_port_identifier'
              examples:
                Missing or invalid port identifier:
                  summary: Missing or invalid port identifier
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<RESPONSE>\n    <STATUS>\n       \
                    \ <ERROR CODE=\"2a5\" DESCRIPTION=\"PORT OR COUNTRY MISSING\"/>\n    </STATUS>\n</RESPONSE>"
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/429_too_many_requests'
            application/xml:
              schema:
                $ref: '#/components/schemas/429_too_many_requests'
              examples:
                Area out of bound:
                  summary: Too Many Requests
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<RESPONSE>\n    <STATUS>\n       \
                    \ <ERROR CODE=\"1r\" DESCRIPTION=\"TOO MANY REQUESTS\"/>\n    </STATUS>\n</RESPONSE>"
  '/expectedarrivals/{api_key} ':
    get:
      tags:
      - Ports Information
      summary: Expected Country Arrivals
      description: "Get expected arrivals to a specific country. </br></br> <b>Notes</b> <ul>\n    <li>**SPEED** returned\
        \ in (knots x10) and **TIMESTAMP** in UTC</li>\n    <li>Use either **TIMESPAN** or **FROMDATE/TODATE** in order to\
        \ look for expected arrivals in a specific date range</li>\n    <li>Information about <a href=\"https://support.marinetraffic.com/en/articles/9552860-what-kind-of-information-is-ais-transmitted\"\
        >AIS-transmitted data</a></li>\n    <li>The <b>frequency of allowed API calls</b> is specific to your API key and\
        \ is detailed in your contract as a number of successful calls per time period. For example “2 calls per minute”.\
        \ </br>Regardless of this agreed limit, each API key is technically restricted to a maximum of 100 total (including\
        \ successful and unsuccessful) requests per minute to ensure system stability.</li>\n</ul>"
      operationId: expectedarrivals_
      parameters:
      - $ref: '#/components/parameters/api_key'
      - $ref: '#/components/parameters/v_VI02'
      - $ref: '#/components/parameters/country_VI02'
      - $ref: '#/components/parameters/timespan_VI02'
      - $ref: '#/components/parameters/days_last_signal_VI02'
      - $ref: '#/components/parameters/fromdate_VI02'
      - $ref: '#/components/parameters/todate_VI02'
      - $ref: '#/components/parameters/fromportid_VI02'
      - $ref: '#/components/parameters/shiptype_VI02'
      - $ref: '#/components/parameters/dwt_min_VI02'
      - $ref: '#/components/parameters/dwt_max_VI02'
      - $ref: '#/components/parameters/gt_min_VI02'
      - $ref: '#/components/parameters/gt_max_VI02'
      - $ref: '#/components/parameters/msgtype_VI02'
      - $ref: '#/components/parameters/protocol_new'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/200_vi02_default'
                - $ref: '#/components/schemas/200_vi02_extended'
            application/xml:
              schema:
                oneOf:
                - $ref: '#/components/schemas/200_vi02_default'
                - $ref: '#/components/schemas/200_vi02_extended'
              examples:
                Default:
                  summary: Simple
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<ETA>\n    <VESSEL_ETA MMSI=\"229001000\"\
                    \ IMO=\"\" SHIP_ID=\"\" SHIPNAME=\"\" LAT=\"37.938690\" LON=\"23.634480\" SPEED=\"0\" COURSE=\"129\" STATUS=\"\
                    5\" PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"\
                    1\" NEXT_PORT_UNLOCODE=\"GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" ETA=\"2021-03-14T05:40:00\"\
                    \ ETA_CALC=\"\" ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T08:58:08\"/>\n    <VESSEL_ETA MMSI=\"201100129\"\
                    \ IMO=\"\" SHIP_ID=\"\" SHIPNAME=\"\" LAT=\"37.943630\" LON=\"23.631900\" SPEED=\"0\" COURSE=\"0\" STATUS=\"\
                    5\" PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"\
                    \" NEXT_PORT_UNLOCODE=\"\" NEXT_PORT_NAME=\"\" NEXT_PORT_COUNTRY=\"\" ETA=\"2020-10-26T08:00:00\" ETA_CALC=\"\
                    \" ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T08:57:24\"/>\n    <VESSEL_ETA MMSI=\"636092659\" IMO=\"\" SHIP_ID=\"\
                    \" SHIPNAME=\"\" LAT=\"37.949450\" LON=\"23.601120\" SPEED=\"0\" COURSE=\"0\" STATUS=\"5\" PORT_ID=\"\
                    1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"\
                    GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" ETA=\"2020-10-18T10:00:00\" ETA_CALC=\"\"\
                    \ ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T08:55:08\"/>\n    <VESSEL_ETA MMSI=\"241683000\" IMO=\"\" SHIP_ID=\"\
                    \" SHIPNAME=\"\" =\"37.949330\" LON=\"23.599670\" SPEED=\"0\" COURSE=\"333\" STATUS=\"5\" PORT_ID=\"1\"\
                    \ PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"\
                    GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" ETA=\"2020-09-08T12:00:00\" ETA_CALC=\"\"\
                    \ ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T09:00:03\"/>\n    <VESSEL_ETA MMSI=\"241654000\" IMO=\"\" SHIP_ID=\"\
                    \" SHIPNAME=\"\" LAT=\"37.952920\" LON=\"23.581480\" SPEED=\"0\" COURSE=\"106\" STATUS=\"5\" PORT_ID=\"\
                    1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"\
                    GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" ETA=\"2020-05-07T11:00:00\" ETA_CALC=\"\"\
                    \ ETA_UPDATED=\"\" TIMESTAMP=\"2020-10-30T08:57:57\"/>\n</ETA>"
                Extended:
                  summary: Extended
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<ETA>\n    <VESSEL_ETA IMO=\"7827213\"\
                    \ MMSI=\"229001000\" SHIPNAME=\"CELESTYAL CRYSTAL\" SHIP_ID=\"\" TYPE_NAME=\"Passenger Ship\" SHIPTYPE=\"\
                    36\" CALLSIGN=\"9HA2978\" FLAG=\"MT\" LENGTH=\"162\" WIDTH=\"24\" DRAUGHT=\"61\" GRT=\"25611\" DWT=\"\
                    1703\" YEAR_BUILT=\"1980\" LAT=\"37.938690\" LON=\"23.634480\" SPEED=\"0\" COURSE=\"129\" STATUS=\"5\"\
                    \ ETA=\"2021-03-14T05:40:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"17208\" LAST_PORT=\"KUSADASI\"\
                    \ LAST_PORT_UNLOCODE=\"TRKUS\" LAST_PORT_COUNTRY=\"TR\" LAST_PORT_TIME=\"2020-03-13T17:38:00\" PORT_ID=\"\
                    1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"\
                    GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" TIMESTAMP=\"2020-10-30T08:58:08\"/>\n    <VESSEL_ETA\
                    \ IMO=\"8843886\" MMSI=\"201100129\" SHIPNAME=\"EDRO IV\" SHIP_ID=\"\" TYPE_NAME=\"General Cargo\" SHIPTYPE=\"\
                    0\" CALLSIGN=\"ZADL2\" FLAG=\"AL\" LENGTH=\"89.97\" WIDTH=\"12.37\" DRAUGHT=\"34\" GRT=\"2138\" DWT=\"\
                    2850\" YEAR_BUILT=\"1983\" LAT=\"37.943630\" LON=\"23.631900\" SPEED=\"0\" COURSE=\"0\" STATUS=\"5\" ETA=\"\
                    2020-10-26T08:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"118\" LAST_PORT=\"VALLETTA\" LAST_PORT_UNLOCODE=\"\
                    MTMLA\" LAST_PORT_COUNTRY=\"MT\" LAST_PORT_TIME=\"2020-10-21T16:41:00\" PORT_ID=\"1\" PORT_UNLOCODE=\"\
                    GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"\" NEXT_PORT_UNLOCODE=\"\"\
                    \ NEXT_PORT_NAME=\"\" NEXT_PORT_COUNTRY=\"\" TIMESTAMP=\"2020-10-30T08:57:24\"/>\n    <VESSEL_ETA IMO=\"\
                    9394040\" MMSI=\"636092659\" SHIPNAME=\"NORIENT SATURN\" SHIP_ID=\"\" TYPE_NAME=\"Oil/Chemical Tanker\"\
                    \ SHIPTYPE=\"80\" CALLSIGN=\"D5JP2\" FLAG=\"LR\" LENGTH=\"180\" WIDTH=\"32.24\" DRAUGHT=\"68\" GRT=\"\
                    25864\" DWT=\"40435\" YEAR_BUILT=\"2007\" LAT=\"37.949450\" LON=\"23.601120\" SPEED=\"0\" COURSE=\"0\"\
                    \ STATUS=\"5\" ETA=\"2020-10-18T10:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"1351\" LAST_PORT=\"\
                    ALGER\" LAST_PORT_UNLOCODE=\"DZALG\" LAST_PORT_COUNTRY=\"DZ\" LAST_PORT_TIME=\"2020-10-14T11:28:00\" PORT_ID=\"\
                    1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"\
                    GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" TIMESTAMP=\"2020-10-30T08:55:08\"/>\n    <VESSEL_ETA\
                    \ IMO=\"9087867\" MMSI=\"241683000\" SHIPNAME=\"AITENS\" SHIP_ID=\"\" =\"Oil Products Tanker\" SHIPTYPE=\"\
                    80\" CALLSIGN=\"SVCU7\" FLAG=\"GR\" LENGTH=\"104.7\" WIDTH=\"15.4\" DRAUGHT=\"50\" GRT=\"3586\" DWT=\"\
                    5196\" YEAR_BUILT=\"1993\" LAT=\"37.949330\" LON=\"23.599670\" SPEED=\"0\" COURSE=\"333\" STATUS=\"5\"\
                    \ ETA=\"2020-09-08T12:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"23935\" LAST_PORT=\"KALI LIMENES\
                    \ ANCH\" LAST_PORT_UNLOCODE=\"\" LAST_PORT_COUNTRY=\"GR\" LAST_PORT_TIME=\"2020-09-07T15:11:00\" PORT_ID=\"\
                    1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"1\" NEXT_PORT_UNLOCODE=\"\
                    GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" TIMESTAMP=\"2020-10-30T09:00:03\"/>\n    <VESSEL_ETA\
                    \ IMO=\"9036868\" MMSI=\"241654000\" SHIPNAME=\"APTERA\" SHIP_ID=\"\" TYPE_NAME=\"Oil Products Tanker\"\
                    \ SHIPTYPE=\"80\" CALLSIGN=\"SVDE7\" FLAG=\"GR\" LENGTH=\"105.02\" WIDTH=\"15.5\" DRAUGHT=\"58\" GRT=\"\
                    2975\" DWT=\"5260\" YEAR_BUILT=\"1991\" LAT=\"37.952920\" LON=\"23.581480\" SPEED=\"0\" COURSE=\"106\"\
                    \ STATUS=\"5\" ETA=\"2020-05-07T11:00:00\" ETA_CALC=\"\" ETA_UPDATED=\"\" LAST_PORT_ID=\"1\" LAST_PORT=\"\
                    PIRAEUS\" LAST_PORT_UNLOCODE=\"GRPIR\" LAST_PORT_COUNTRY=\"GR\" LAST_PORT_TIME=\"2020-10-27T18:36:00\"\
                    \ PORT_ID=\"1\" PORT_UNLOCODE=\"GRPIR\" CURRENT_PORT=\"PIRAEUS\" CURRENT_PORT_COUNTRY=\"GR\" NEXT_PORT_ID=\"\
                    1\" NEXT_PORT_UNLOCODE=\"GRPIR\" NEXT_PORT_NAME=\"PIRAEUS\" NEXT_PORT_COUNTRY=\"GR\" TIMESTAMP=\"2020-10-30T08:57:57\"\
                    />\n</ETA>"
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/400_vi02_missing_or_invalid_port_identifier'
            application/xml:
              schema:
                $ref: '#/components/schemas/400_vi02_missing_or_invalid_port_identifier'
              examples:
                Missing or invalid port identifier:
                  summary: Missing or invalid port identifier
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<RESPONSE>\n    <STATUS>\n       \
                    \ <ERROR CODE=\"2a5\" DESCRIPTION=\"PORT OR COUNTRY MISSING\"/>\n    </STATUS>\n</RESPONSE>"
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/429_too_many_requests'
            application/xml:
              schema:
                $ref: '#/components/schemas/429_too_many_requests'
              examples:
                Area out of bound:
                  summary: Too Many Requests
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<RESPONSE>\n    <STATUS>\n       \
                    \ <ERROR CODE=\"1r\" DESCRIPTION=\"TOO MANY REQUESTS\"/>\n    </STATUS>\n</RESPONSE>"
  /predictive-arrivals/{api_key}:
    get:
      tags:
      - Ports Information
      summary: Predictive Port Arrivals
      description: "Receive a prediction of the vessels likely to arrive to a specific port. </br></br> <b>Notes</b> <ul>\n\
        \    <li>More information about input parameters: <a href=\"https://support.marinetraffic.com/en/articles/9552918-how-does-marinetraffic-categorise-commercial-market-and-commercial-size-class\"\
        >MARKET</a>, <a href=\"https://support.marinetraffic.com/en/articles/9552918-how-does-marinetraffic-categorise-commercial-market-and-commercial-size-class\"\
        >SHIPCLASS</a></li>\n    <li>The <b>frequency of allowed API calls</b> is specific to your API key and is detailed\
        \ in your contract as a number of successful calls per time period. For example “2 calls per minute”. </br>Regardless\
        \ of this agreed limit, each API key is technically restricted to a maximum of 100 total (including successful and\
        \ unsuccessful) requests per minute to ensure system stability.</li>\n</ul>"
      operationId: predictive-arrivals
      parameters:
      - $ref: '#/components/parameters/api_key'
      - $ref: '#/components/parameters/portid_VI05'
      - $ref: '#/components/parameters/market_VI05'
      - $ref: '#/components/parameters/shipclass_VI05'
      - $ref: '#/components/parameters/probability_VI05'
      - $ref: '#/components/parameters/protocol'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/200_vi05_default'
            application/xml:
              schema:
                $ref: '#/components/schemas/200_vi05_default'
              examples:
                Default:
                  summary: Simple
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<PredictiveArrivals>\n    <PredictiveArrival\
                    \ IMO=\"9020340\" SHIP_ID=\"337987\" MMSI=\"271041000\" SHIPNAME=\"MARTINE A\" MARKET=\"CONTAINER SHIPS\"\
                    \ SHIPCLASS=\"FEEDER\" FROM_PORT_ID=\"1379\" FROM_PORT=\"BIZERTE\" NEXT_PORT_ID=\"1\" NEXT_PORT=\"PIRAEUS\"\
                    \ NEXT_AREA=\"EMED\" NEXT_PORT_PROB=\"1.000\" NEXT_AREA_PROB=\"1.000\"/>\n    <PredictiveArrival IMO=\"\
                    9357810\" SHIP_ID=\"712465\" MMSI=\"538003142\" SHIPNAME=\"EF EMIRA\" MARKET=\"CONTAINER SHIPS\" SHIPCLASS=\"\
                    FEEDER\" FROM_PORT_ID=\"528\" FROM_PORT=\"ANCONA\" NEXT_PORT_ID=\"1\" NEXT_PORT=\"PIRAEUS\" NEXT_AREA=\"\
                    EMED\" NEXT_PORT_PROB=\"1.000\" NEXT_AREA_PROB=\"1.000\"/>\n    <PredictiveArrival IMO=\"9213595\" SHIP_ID=\"\
                    362664\" MMSI=\"304927000\" SHIPNAME=\"LUHNAU\" MARKET=\"DRY BREAKBULK\" SHIPCLASS=\"HANDYSIZE\" FROM_PORT_ID=\"\
                    34\" FROM_PORT=\"CORINTH\" NEXT_PORT_ID=\"1\" NEXT_PORT=\"PIRAEUS\" NEXT_AREA=\"EMED\" NEXT_PORT_PROB=\"\
                    1.000\" NEXT_AREA_PROB=\"1.000\"/>\n    <PredictiveArrival IMO=\"9321902\" SHIP_ID=\"124854\" MMSI=\"\
                    255806318\" SHIPNAME=\"NORDSUMMER\" MARKET=\"CONTAINER SHIPS\" SHIPCLASS=\"PANAMAX\" FROM_PORT_ID=\"119\"\
                    \ FROM_PORT=\"MARSAXLOKK\" NEXT_PORT_ID=\"1\" NEXT_PORT=\"PIRAEUS\" NEXT_AREA=\"EMED\" NEXT_PORT_PROB=\"\
                    1.000\" NEXT_AREA_PROB=\"1.000\"/>\n    <PredictiveArrival IMO=\"9004487\" SHIP_ID=\"348156\" MMSI=\"\
                    374732000\" SHIPNAME=\"STARRY M\" MARKET=\"DRY BREAKBULK\" SHIPCLASS=\"HANDYSIZE\" FROM_PORT_ID=\"3321\"\
                    \ FROM_PORT=\"ANTALYA\" NEXT_PORT_ID=\"1\" NEXT_PORT=\"PIRAEUS\" NEXT_AREA=\"EMED\" NEXT_PORT_PROB=\"\
                    1.000\" NEXT_AREA_PROB=\"1.000\"/>\n</PredictiveArrivals>"
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/400_vi05_missing_or_invalid_port_identifier'
            application/xml:
              schema:
                $ref: '#/components/schemas/400_vi05_missing_or_invalid_port_identifier'
              examples:
                Missing or invalid port identifier:
                  summary: Missing or invalid port identifier
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<RESPONSE>\n    <STATUS>\n       \
                    \ <ERROR CODE=\"1\" DESCRIPTION=\"INCORRECT CALL-CHECK PARAMETERS\"/>\n    </STATUS>\n</RESPONSE>"
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/429_too_many_requests'
            application/xml:
              schema:
                $ref: '#/components/schemas/429_too_many_requests'
              examples:
                Area out of bound:
                  summary: Too Many Requests
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<RESPONSE>\n    <STATUS>\n       \
                    \ <ERROR CODE=\"1r\" DESCRIPTION=\"TOO MANY REQUESTS\"/>\n    </STATUS>\n</RESPONSE>"
  /port-congestion/{api_key}:
    get:
      tags:
      - Ports Information
      summary: Port Congestion
      description: "Receive the Port Congestion for a specific period of time. </br></br> <b>Notes</b> <ul>\n    <li>More\
        \ information about input parameters: <a href=\"https://support.marinetraffic.com/en/articles/9552918-how-does-marinetraffic-categorise-commercial-market-and-commercial-size-class\"\
        >MARKET</a>, <a href=\"https://support.marinetraffic.com/en/articles/9552918-how-does-marinetraffic-categorise-commercial-market-and-commercial-size-class\"\
        >SHIPCLASS</a></li>\n    <li>**NOT ALLOWED** combinations in request</li>\n      <ul>\n        <li>agg_market:1 **and**\
        \ agg_shipclass:0</li>\n        <li>agg_market:1 **and** agg_port:1</li>\n        <li>agg_shipclass:1 **and** agg_port:1</li>\n\
        \        <li>agg_market:1 **and** shipclass (specific value in shipclass e.g. POST PANAMAX)</li>\n      </ul>\n  \
        \  <li>The <b>frequency of allowed API calls</b> is specific to your API key and is detailed in your contract as a\
        \ number of successful calls per time period. For example “2 calls per minute”. </br>Regardless of this agreed limit,\
        \ each API key is technically restricted to a maximum of 100 total (including successful and unsuccessful) requests\
        \ per minute to ensure system stability.</li>\n</ul>"
      operationId: port-congestion
      parameters:
      - $ref: '#/components/parameters/api_key'
      - $ref: '#/components/parameters/portid_VI06'
      - $ref: '#/components/parameters/year_VI06'
      - $ref: '#/components/parameters/week_VI06'
      - $ref: '#/components/parameters/market_VI06'
      - $ref: '#/components/parameters/shipclass_VI06'
      - $ref: '#/components/parameters/agg_port_VI06'
      - $ref: '#/components/parameters/agg_market_VI06'
      - $ref: '#/components/parameters/agg_shipclass_VI06'
      - $ref: '#/components/parameters/time_anch_VI06'
      - $ref: '#/components/parameters/time_port_VI06'
      - $ref: '#/components/parameters/vessels_VI06'
      - $ref: '#/components/parameters/calls_VI06'
      - $ref: '#/components/parameters/time_anch_stdev_VI06'
      - $ref: '#/components/parameters/time_anch_diff_VI06'
      - $ref: '#/components/parameters/time_anch_diff_perc_VI06'
      - $ref: '#/components/parameters/time_port_stdev_VI06'
      - $ref: '#/components/parameters/time_port_diff_VI06'
      - $ref: '#/components/parameters/time_port_diff_perc_VI06'
      - $ref: '#/components/parameters/protocol'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/200_vi06_default'
            application/xml:
              schema:
                $ref: '#/components/schemas/200_vi06_default'
              examples:
                Default:
                  summary: Simple
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<PORTCONGESTION>\n    <PORT PORT_ID=\"\
                    1766\" YEAR=\"2020\" WEEK=\"8\" MARKET=\"DRY BULK\" SHIPCLASS=\"HANDYSIZE\" TIME_ANCH=\"\" TIME_PORT=\"\
                    3.4\" VESSELS=\"2\" CALLS=\"2\" TIME_ANCH_STDEV=\"\" TIME_ANCH_DIFF=\"\" TIME_ANCH_DIFF_PERC=\"\" TIME_PORT_STDEV=\"\
                    3.5\" TIME_PORT_DIFF=\"-9.9\" TIME_PORT_DIFF_PERC=\"-74.4\"/>\n</PORTCONGESTION>"
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/400_vi06_mandatory_field_missing'
            application/xml:
              schema:
                $ref: '#/components/schemas/400_vi06_mandatory_field_missing'
              examples:
                Mandatory field missing:
                  summary: Mandatory field missing
                  value: "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<RESPONSE>\n    <STATUS>\n       \
                    \ <ERROR CODE=\"2a9\" DESCRIPTION=\"MANDATORY FIELD MISSING portid\"/>\n    </STATUS>\n</RESPONSE>"
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/429_too_many_requests'
            application/xml:
              schema:
                $ref: '#/components/schemas/429_too_many_requests'
              examples:
   

# --- truncated at 32 KB (109 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/marine-traffic/refs/heads/main/openapi/marine-traffic-ports-info-openapi.yml