openapi: 3.0.3 info: title: Datalastic Maritime API version: '0' description: | REST API for real-time and historical maritime data. AIS vessel tracking, port information, static ship specs, sea routes, marine weather, and a suite of add-on datasets (dry dock, ownership, casualties, inspections, sales and demolitions, engines, classification societies). ## Base URLs | Group | Base URL | |-------|----------| | Most endpoints | `https://api.datalastic.com/api/v0/` | | Extended endpoints (SAT-E, Sea Routes) | `https://api.datalastic.com/api/ext/` | | Maritime report data | `https://api.datalastic.com/api/maritime_reports/` | ## Authentication Send your API key in the `x-api-key` request header. This is the recommended method. The key can also be passed as an `api-key` query parameter. That method remains fully supported for existing integrations but is not recommended for new ones. Keys sent in a URL end up in server logs, proxy logs, and browser history. A header keeps the key out of all three. One key works across every plan. Core Data Feed endpoints are available on all plans. Add-on endpoints require an Add-Ons plan tier. ## Credits Only successful requests deduct credits. Failed lookups, such as a vessel that does not exist, are free. | Plan | Monthly DB credits | |------|--------------------| | Starter | 20,000 | | Experimenter | 80,000 | | Developer Pro | Unlimited | Costs that depend on what comes back, such as per vessel or per record, are reported on every call in the `X-Request-Cost` response header. The rate limit is 600 requests per minute and counts requests, not credits. ## Async report pattern Large datasets are generated asynchronously: 1. **POST** `/api/v0/report` with a JSON body containing `report_type` and any filter params. 2. Read `report_id` from the response (`status: _PENDING_`). 3. **GET** `/api/v0/report?report_id=...` until `status` is `_DONE_`. 4. Download the ZIP from `result_url`. The link is signed and valid for 6 hours. contact: email: support@datalastic.com url: https://datalastic.com license: name: Commercial url: https://datalastic.com/terms-of-services/ servers: - url: https://api.datalastic.com description: Production components: securitySchemes: ApiKeyHeader: type: apiKey in: header name: x-api-key description: | Recommended. Your Datalastic API key, sent as a request header. Obtain it from your account after subscribing to any plan. ApiKeyQuery: type: apiKey in: query name: api-key description: | Legacy. The same API key passed as a query parameter. Still supported for existing integrations, but a header keeps the key out of server logs, proxy logs, and browser history. headers: X-Request-Cost: description: DB credits this request cost. `0` when nothing was billed. schema: type: integer example: 3 X-Requestlimit-Remaining: description: Credits left in the current billing period, after this request. schema: type: integer example: 9497 X-Requestlimit-Limit: description: Total credits in your plan's billing period. schema: type: integer example: 10000 X-Ratelimit-Limit: description: Requests per minute allowed on your key. schema: type: integer example: 600 X-Ratelimit-Remaining: description: Requests still available in the current window. schema: type: integer example: 574 X-Ratelimit-Reset: description: | Seconds until the current window resets. Capacity returns gradually as the window slides, so read the current value rather than predicting it. schema: type: integer example: 29 responses: BadRequest: description: Missing required parameter or invalid parameter value. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' Unauthorized: description: Invalid or expired API key. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' PaymentRequired: description: | API key is valid but the credit balance is exhausted or the subscription has expired. Purchase more credits to continue. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' NotFound: description: Requested vessel, port, or resource was not found. No credits deducted. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' TooManyRequests: description: | More than 600 API calls in a single minute. The response carries a `Retry-After` header with the wait in seconds. Use it for backoff. headers: Retry-After: description: Seconds to wait before retrying. schema: type: integer example: 12 content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' InternalError: description: Server-side error. Retry the request. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' schemas: Meta: type: object properties: duration: type: number format: float description: Server-side query time in seconds. example: 0.012 endpoint: type: string example: /api/v0/vessel success: type: boolean example: true next: type: string description: | Pagination token. Present on paginated endpoints (`/vessel_find`) only when more results exist. Pass it back as the `next` query parameter to fetch the following page. example: 00e32b7a-4067-d6b2-8d73-2bdda4fe72bb VesselLive: type: object properties: uuid: type: string format: uuid example: b8625b67-7142-cfd1-7b85-595cebfe4191 name: type: string example: MAERSK CHENNAI mmsi: type: string example: '566093000' imo: type: string example: '9525338' eni: type: string nullable: true description: European Number of Identification (inland waterways). country_iso: type: string example: SG country_name: type: string example: Singapore type: type: string example: Cargo - Hazard A (Major) type_specific: type: string example: Container Ship lat: type: number format: float example: 6.303473 lon: type: number format: float example: 3.201678 speed: type: number format: float description: Speed over ground in knots. example: 14.2 course: type: number format: float description: Course over ground in degrees (0-360). example: 326 heading: type: number format: float description: True heading in degrees (0-360). example: 226 navigational_status: type: string example: Under way using engine destination: type: string nullable: true example: ROTTERDAM last_position_epoch: type: integer example: 1624127400 last_position_UTC: type: string format: date-time example: '2021-06-20T08:30:00Z' area: type: string nullable: true example: North Sea VesselLivePro: allOf: - $ref: '#/components/schemas/VesselLive' - type: object properties: eta_UTC: type: string format: date-time nullable: true example: '2021-06-25T08:00:00Z' eta_epoch: type: integer nullable: true example: 1624608000 atd_UTC: type: string format: date-time nullable: true description: Actual time of departure. example: '2021-06-11T16:49:00Z' draught_avg: type: number format: float nullable: true description: Current reported draught in metres. example: 9.5 draught_max: type: number format: float nullable: true description: Maximum draught in metres. example: 10.5 destination_port_uuid: type: string format: uuid nullable: true VesselInfo: type: object properties: uuid: type: string format: uuid name: type: string example: MAERSK CHENNAI mmsi: type: string example: '566093000' imo: type: string example: '9525338' callsign: type: string example: 9V9409 country_iso: type: string example: SG country_name: type: string example: Singapore type: type: string example: Cargo - Hazard A (Major) type_specific: type: string example: Container Ship gross_tonnage: type: integer nullable: true example: 50869 deadweight: type: integer nullable: true example: 61614 teu: type: integer nullable: true description: Twenty-foot equivalent unit capacity (container ships only). example: 4500 liquid_gas: type: number nullable: true description: Liquid gas capacity in cubic metres. length: type: number format: float nullable: true description: Length overall in metres. example: 249.12 breadth: type: number format: float nullable: true description: Beam in metres. example: 37.4 draught_avg: type: number format: float nullable: true draught_max: type: number format: float nullable: true speed_avg: type: number format: float nullable: true description: Typical service speed in km/h. speed_max: type: number format: float nullable: true description: Maximum speed in km/h. year_built: type: integer nullable: true example: 2011 home_port: type: string nullable: true example: SINGAPORE VesselHistoryRecord: type: object properties: mmsi: type: string lat: type: number format: float lon: type: number format: float speed: type: number format: float course: type: number format: float heading: type: number format: float navigational_status: type: string nullable: true destination: type: string nullable: true timestamp_UTC: type: string format: date-time example: '2021-09-15T12:34:00Z' timestamp_epoch: type: integer example: 1631709240 Port: type: object properties: uuid: type: string format: uuid example: 37a8ac5b-d126-d7ce-9aca-7b8249c2efd2 port_name: type: string example: ROTTERDAM country_iso: type: string example: NL country_name: type: string example: Netherlands unlocode: type: string example: NLRTM port_type: type: string example: Port lat: type: number format: float example: 51.94331 lon: type: number format: float example: 4.141812 area_lvl1: type: string nullable: true description: Top-level maritime area. example: UK Coast & Atlantic area_lvl2: type: string nullable: true description: Sub maritime area. example: Rotterdam Area terminals: type: array description: | Terminals belonging to this port. Returned by `/api/v0/port`. Absent or empty for ports that have no terminals. items: $ref: '#/components/schemas/Terminal' Terminal: type: object description: A terminal inside a port, as returned in the `terminals` array of `/api/v0/port`. properties: terminal_code: type: string description: Short terminal identifier. example: MPT terminal_name: type: string description: Full terminal name. example: MARIN PORT TERMINAL company_name: type: string nullable: true description: Operator or company name. example: PEREZ TORRES MARITIMA S.L. lat: type: number format: float description: Terminal latitude. example: 42.405278 lon: type: number format: float description: Terminal longitude. example: -8.692778 url: type: string nullable: true description: Terminal website. example: https://www.ptmar.com/en/puertos/puerto-marin address: type: string nullable: true description: Physical address. example: Muelle comercial s/n, 36900 Marin, Pontevedra, Spain DryDock: type: object properties: id: type: integer example: 3 imo: type: string example: '9169122' vessel_name: type: string example: MSC ANNICK special_survey_date: type: string format: date nullable: true example: '2025-09-10' dry_dock_date: type: string format: date nullable: true example: '2025-09-10' iopp_issue_date: type: string format: date nullable: true description: International Oil Pollution Prevention certificate issue date. example: '2021-08-31' iopp_exp_date: type: string format: date nullable: true description: IOPP certificate expiry date. example: '2025-09-10' country_name: type: string nullable: true technical_manager: type: string nullable: true example: MSC Shipmanagement Ltd country_code: type: string nullable: true example: CYP website: type: string nullable: true example: https://mscshipmanagement.com/ email: type: string nullable: true example: safety@mscsmcy.com phone: type: string nullable: true example: +357 25 844 800 address: type: string nullable: true example: MSC House, 8, Spyrou Kyprianou Avenue, Limassol, Cyprus linkedin: type: string nullable: true modified_at: type: string format: date-time example: '2023-09-05T00:00:00Z' MaritimeCompany: type: object properties: id: type: integer example: 7654 short_name: type: string example: Avon Steamship long_name: type: string example: Avon Steamship company_type: type: string example: Independent Shipping country_code: type: string example: USA company_imo: type: string example: '0537883' company_status: type: string example: Active website: type: string nullable: true email: type: string nullable: true phone: type: string nullable: true address: type: string nullable: true example: 2001 Marcus Avenue, North New Hyde Park NY 11042, USA linkedin: type: string nullable: true parent_company_imo: type: string nullable: true parent_company_name: type: string nullable: true modified_at: type: string format: date-time example: '2021-06-25T00:00:00Z' ShipCasualty: type: object properties: id: type: integer example: 1793 imo: type: string example: '9319569' vessel_name: type: string example: VENTO casualty_date: type: string format: date example: '2023-09-03' casualty_type: type: string example: Beached/Grounded casualty_details: type: string description: Full narrative including subsequent update entries. example: Container ship ran onto sandy bar at Cape Ammoglossa, Kos island, Greece. modified_at: type: string format: date-time example: '2023-09-15T00:00:00Z' ShipInspection: type: object properties: id: type: integer example: 10 imo: type: string example: '9362126' vessel_name: type: string example: ESVAGT CASSIOPEIA vessel_type_code: type: string example: Stan flag_code: type: string example: DEN inspection_date: type: string format: date example: '2023-09-05' inspection_authority: type: string example: Norway inspection_port: type: string example: Tananger inspection_type: type: string example: Detailed detention: type: string enum: - 'TRUE' - 'FALSE' example: 'FALSE' ship_deficiencies: type: string description: Number of deficiencies found. example: '4' deficiency_description: type: string description: Semicolon-separated list of deficiency codes and descriptions. example: Structural Conditions; 02109 - Permanent means of access; Not properly maintained technical_ism_manager: type: string nullable: true example: Esvagt A/S country_code: type: string nullable: true example: DEN website: type: string nullable: true email: type: string nullable: true phone: type: string nullable: true address: type: string nullable: true company_imo: type: string nullable: true example: '0792139' modified_at: type: string format: date-time example: '2023-09-05T00:00:00Z' ShipSPD: type: object properties: id: type: integer example: 2 sales_report_date: type: string format: date example: '2023-09-04' imo: type: string example: '9104586' vessel_name: type: string example: ONE HAPPY flag_name: type: string example: Panama vessel_type_code: type: string example: Bulk built_year: type: string example: '1995' dwt_design: type: integer description: Design deadweight tonnage. example: 45455 gt: type: integer description: Gross tonnage. example: 26091 ldt: type: integer description: Lightweight displacement tonnage. example: 7726 seller: type: string nullable: true example: One Navigation Denizcilik AS buyer: type: string nullable: true example: Indian Breakers sales_price_usd_mio: type: number nullable: true description: Sale price in millions USD. sales_price_usd/ldt: type: number nullable: true description: Sale price in USD per LDT. example: 498 destination: type: string nullable: true example: India sales_type: type: string nullable: true example: Sold for demo dry_dock_date: type: string format: date nullable: true example: '2020-07-31' special_survey_date: type: string format: date nullable: true example: '2025-07-31' sales_note: type: string nullable: true previous_sales_record: type: string nullable: true modified_at: type: string format: date-time example: '2023-09-04T00:00:00Z' VesselOwnership: type: object properties: id: type: integer example: 38914 imo: type: string example: '9951783' vessel_name: type: string example: KARLOVASI beneficial_owner: type: string nullable: true example: Samos Steamship Co beneficial_owner_country: type: string nullable: true example: Greece operator: type: string nullable: true example: Samos Steamship Co operator_country: type: string nullable: true example: Greece flag_name: type: string nullable: true vessel_type_code: type: string example: Bulk built_year: type: string example: '2023' buyer: type: string nullable: true dwt_design: type: integer nullable: true example: 63470 class1_code: type: string nullable: true description: Classification society code. technical_manager: type: string nullable: true technical_manager_country: type: string nullable: true commercial_manager: type: string nullable: true example: Samos Steamship Co commercial_manager_country: type: string nullable: true example: Greece modified_at: type: string format: date-time example: '2020-01-01T00:00:00Z' ClassSociety: type: object properties: imo: type: string example: '9950404' vessel_name: type: string example: DARYA RASHMI vessel_type_code: type: string example: Bulk flag_name: type: string nullable: true example: Marshall Islands built_year: type: string example: '2023' dwt_design: type: integer nullable: true example: 82210 special_survey_date: type: string format: date nullable: true dry_dock_date: type: string format: date nullable: true class1_code: type: string nullable: true description: Classification society code (e.g. ABS, LR, DNV). example: ABS beneficial_owner_imo: type: string nullable: true example: '0783189' beneficial_owner: type: string nullable: true example: Chellaram Shipping (Hong Kong) Ltd. technical_manager_imo: type: string nullable: true example: '0783189' technical_manager: type: string nullable: true example: Chellaram Shipping (Hong Kong) Ltd. draft_design: type: number nullable: true description: Design draught in metres. example: 14.5 nt: type: integer nullable: true description: Net tonnage. example: 27155 gt: type: integer nullable: true description: Gross tonnage. example: 44577 loa: type: number nullable: true description: Length overall in metres. example: 229.0 lbp: type: number nullable: true description: Length between perpendiculars in metres. example: 225.5 depth: type: number nullable: true description: Moulded depth in metres. example: 20.35 beam_moduled: type: number nullable: true description: Moulded beam in metres. example: 32.26 engine_builder: type: string nullable: true example: Hudong Heavy Machinery engine_designer: type: string nullable: true example: MAN B&W propulsion_type_code: type: string nullable: true example: MO modified_at: type: string format: date-time example: '2023-10-19T00:00:00Z' VesselEngine: type: object properties: imo: type: string example: '9575149' vessel_name: type: string example: DARYA MAYA vessel_type_code: type: string example: Bulk propulsion_type_code: type: string description: Propulsion type code (e.g. MO = Motor). example: MO mco: type: integer description: Maximum continuous output. example: 8300 mco_unit: type: string example: kW mco_rpm: type: integer description: Engine RPM at MCO. example: 91 trading_category_code: type: string example: Live built_year: type: string example: '2012' gt: type: integer description: Gross tonnage. example: 35812 engine_designation: type: string nullable: true example: 5S60ME-C8 engine_builder: type: string nullable: true example: HHM Shangchuan Diesel engine_designer: type: string nullable: true example: MAN B&W modified_at: type: string format: date-time example: '2023-10-17T00:00:00Z' WeatherReading: type: object description: | One set of conditions. Used for `current` and, as the element type, for the arrays inside `hourly`. Daily aggregates use renamed fields, see the `daily` property of `Weather`. properties: time: type: string description: Timestamp of the reading or forecast step, ISO 8601, GMT. example: '2026-07-24T10:45' interval: type: integer description: Reading window in seconds. Present in `current` only. example: 900 temperature_2m: type: number description: Air temperature at 2 m above surface, in degrees Celsius. precipitation: type: number description: Precipitation amount, in millimetres. weather_code: type: integer nullable: true description: WMO weather interpretation code. wind_speed_10m: type: number description: Wind speed at 10 m above surface, in knots. wind_direction_10m: type: number description: Wind direction at 10 m above surface, in degrees. wind_gusts_10m: type: number description: Wind gusts at 10 m above surface, in knots. cloud_cover: type: number description: Total cloud cover, in percent. relative_humidity_2m: type: number description: Relative humidity at 2 m above surface, in percent. dew_point_2m: type: number description: Dew point at 2 m above surface, in degrees Celsius. apparent_temperature: type: number description: Feels-like temperature, in degrees Celsius. visibility: type: number description: Horizontal visibility, in metres. pressure_msl: type: number description: Air pressure at mean sea level, in hPa. wave_height: type: number description: Significant height of combined waves, in metres. wave_direction: type: number description: Mean direction of combined waves, in degrees. wave_period: type: number description: Mean period of combined waves, in seconds. wind_wave_height: type: number description: Wind wave height, in metres. wind_wave_direction: type: number description: Wind wave direction, in degrees. wind_wave_period: type: number description: Wind wave mean period, in seconds. wind_wave_peak_period: type: number description: Wind wave peak period, in seconds. swell_wave_height: type: number description: Primary swell height, in metres. swell_wave_direction: type: number description: Primary swell direction, in degrees. swell_wave_period: type: number description: Primary swell mean period, in seconds. swell_wave_peak_period: type: number description: Primary swell peak period, in seconds. secondary_swell_wave_height: type: number description: Secondary swell height, in metres. secondary_swell_wave_direction: type: number description: Secondary swell direction, in degrees. secondary_swell_wave_period: type: number description: Secondary swell mean period, in seconds. tertiary_swell_wave_height: type: number description: Tertiary swell height, in metres. Hourly mode only. tertiary_swell_wave_direction: type: number description: Tertiary swell direction, in degrees. Hourly mode only. tertiary_swell_wave_period: type: number description: Tertiary swell mean period, in seconds. Hourly mode only. sea_surface_temperature: type: number description: Sea surface temperature, in degrees Celsius. invert_barometer_height: type: number description: Inverse barometer effect on sea level, in metres. sea_level_height_msl: type: number description: Sea level height above mean sea level, in metres. ocean_current_velocity: type: number description: Ocean current speed, in km/h. ocean_current_direction: type: number description: Ocean current direction, in degrees. Weather: type: object properties: location: type: object description: | GeoJSON Point Feature for the resolved location. `properties.type` is `Coordinates Point`, `Vessel`, or `Port`, with the matching identifying fields populated. properties: type: type: string example: Feature geometry: type: object properties: type: type: string example: Point coordinates: type: array description: '[longitude, latitude]' items: type: number format: float properties: type: object additionalProperties: true weather: type: object description: | The conditions, one section per requested mode. `current` holds a single reading. `hourly` holds a 7-day forecast as one array per field. `daily` holds 7-day aggregates under renamed fields. properties: latitude: type: number format: float longitude: type: number format: float generationtime_ms: type: number format: float utc_offset_seconds: type: integer timezone: type: string example: GMT timezone_abbreviation: type: string example: GMT elevation: type: number format: float current: $ref: '#/components/schemas/WeatherReading' hourly: type: object description: | 7-day hourly forecast. Each key is a field name from `WeatherReading` and each value is an array of readings aligned with the `time` array. additionalProperties: true daily: type: object description: | 7-day daily aggregates. Because these are aggregates rather than instantaneous readings, the fields are renamed: `temperature_2m_max`, `temperature_2m_min`, `apparent_temperature_max`, `apparent_temperature_min`, `precipitation_sum`, `wind_speed_10m_max`, `wind_direction_10m_dominant`, `wind_gusts_10m_max`, `wave_height_max`, `wave_direction_dominant`, `wave_period_max`, `wind_wave_height_max`, `wind_wave_direction_dominant`, `wind_wave_period_max`, `wind_wave_peak_period_max`, `swell_wave_height_max`, `swell_wave_direction_dominant`, `swell_wave_period_max`, `swell_wave_peak_period_max`. Units match the base fields. Humidity, dew point, visibility, pressure, cloud cover, weather code, sea surface temperature, sea level, ocean current, and secondary and tertiary swell have no daily aggregate and appear in `current` and `hourly` only. additionalProperties: true ReportJob: type: object properties: report_id: type: string example: 4ddc14e0-9059-9b86-1156-8efd93f0cfe6 status: type: string description: | Job state. Values are wrapped in underscores. A job can move between `_PENDING_` and `_IN_PROGRESS_` more than once before it finishes. `_FAILED_` is terminal: the report is not retried and never gets a `result_url`. enum: - _PENDING_ - _IN_PROGRESS_ - _DONE_ - _FAILED_ example: _PENDING_ report_type: type: string example: ownership params: description: The filter parameters the job was submitted with. oneOf: - type: object - type: string message: type: string nullable: true description: | Plain-language reason the job failed. Populated when status is `_FAILED_`. example: 'bad parameters: to must be later than from' created_at: type: string format: date-time updated_at: type: string format: date-time result_url: type: string format: uri nullable: true description: | Signed ZIP download URL, populated only when status is `_DONE_`. The link is valid for 6 hours from when it is issued and returns 403 once it expires. Poll the report again for a fresh link. That is free and does not re-run the report. Use the whole URL including its query string, and request it with GET, not HEAD. example: null Stat: type: object properties: user_id: type: string description: Your API key identifier. example: YOUR_API_KEY key_status: type: string description: Key validity. enum: - Valid - Invalid example: Valid requests_made: type: integer description: | Credits used in the current billing period. Stays at `0` on unlimited plans. example: 112 requests_remaining: type: integer description: | Credits remaining in the current billing period. Reports a fixed placeholder value on unlimited plans. Use the free `request_usage` report to review historical consumption instead. example: 888 addons: type: boolean description: '`true` if the Add-Ons package is active on this key.' example: true ErrorResponse: type: object properties: meta: type: object properties: success: type: boolean example: false endpoint: type: string error_message: type: string example: Invalid API key. error_code: type: integer example: 401 VesselLiveProEst: allOf: - $ref: '#/components/schemas/VesselLivePro' - type: object properties: estimated_position: type: object description: AI-estimated current position. Populated when the vessel is out of terrestrial AIS range (inactive for 3+ hours). Based on last known position, destination port, and ETA. properties: lat: type: number format: float description: Estimated latitude. example: 1.5818719819246652 lon: type: number format: float description: Estimated longitude. example: -31.117992949793297 security: - ApiKeyHeader: [] - ApiKeyQuery: [] tags: - name: Live Tracking description: Real-time AIS vessel positions. - name: Historical Vessel Data description: Past AIS positions for a specific vessel. - name: Location Traffic description: All vessels currently within a geographic area. - name: Ship Static Data description: Static vessel specifications and registry search. - name: Ports description: Port search and port detail, including terminals. - name: Weather description: Marine and atmospheric conditions with 7-day forecasts. - name: Reports description: 'Asynchronous bulk data exports. POST to submit a job, GET to poll, download the ZIP via result_url once status is _DONE_. ' - name: Usage description: API credit and request monitoring. - name: Add-ons - Dry Dock description: Planned and completed dry dock periods. - name: Add-ons - Companies description: Maritime company profiles (type, status, contacts, parent company). - name: Add-ons - Casualties description: Incident records with type, date, and narrative. - name: Add-ons - Inspections description: Port State Control inspection and detention records. - name: Add-ons - Sales & Demolitions description: Ship sales, purchase, and demolition records. - name: Add-ons - Ownership description: Beneficial owner, operator, and manager data. - name: Add-ons - Classification description: Class society, survey dates, and structural dimensions. - name: Add-ons - Engines description: Engine designation, builder, designer, and output data. - name: Sea Routes description: Calculate navigable sea routes between ports or coordinates. paths: /api/v0/vessel: get: tags: - Live Tracking summary: Real-time vessel position (basic) description: 'Returns the latest AIS position and key attributes for a single vessel. Identify the vessel by one of: `uuid`, `mmsi`, or `imo`. **Credit cost:** 1 per vessel found. **Typical response time:** ~5 ms. ' operationId: getVessel parameters: - name: uuid in: query schema: type: string format: uuid example: b8625b67-7142-cfd1-7b85-595cebfe4191 - name: mmsi in: query schema: type: string example: '566093000' - name: imo in: query schema: type: string example: '9525338' responses: '200': description: Vessel found. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/VesselLive' meta: $ref: '#/components/schemas/Meta' example: data: uuid: b8625b67-7142-cfd1-7b85-595cebfe4191 name: MAERSK CHENNAI mmsi: '566093000' imo: '9525338' eni: null country_iso: SG country_name: Singapore type: Cargo - Hazard A (Major) type_specific: Container Ship lat: 6.303473 lon: 3.201678 speed: 14.2 course: 326 heading: 226 navigational_status: Under way using engine destination: ROTTERDAM last_position_epoch: 1624127400 last_position_UTC: '2021-06-20T08:30:00Z' area: West Africa meta: duration: 0.005 endpoint: /api/v0/vessel success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/vessel_pro: get: tags: - Live Tracking summary: Real-time vessel position (pro) description: | Extends `/vessel` with ETA (UTC and epoch), ATD, current draught, and a normalised destination port UUID. **Credit cost:** 3 credits. operationId: getVesselPro parameters: - name: uuid in: query schema: type: string format: uuid - name: mmsi in: query schema: type: string - name: imo in: query schema: type: string responses: '200': description: Vessel found with extended data. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/VesselLivePro' meta: $ref: '#/components/schemas/Meta' example: data: uuid: b8625b67-7142-cfd1-7b85-595cebfe4191 name: MAERSK CHENNAI mmsi: '566093000' imo: '9525338' eni: null country_iso: SG country_name: Singapore type: Cargo - Hazard A (Major) type_specific: Container Ship lat: 6.303473 lon: 3.201678 speed: 14.2 course: 326 heading: 226 navigational_status: Under way using engine destination: ROTTERDAM last_position_epoch: 1624127400 last_position_UTC: '2021-06-20T08:30:00Z' area: West Africa eta_UTC: '2021-06-25T08:00:00Z' eta_epoch: 1624608000 atd_UTC: '2021-06-11T16:49:00Z' draught_avg: 9.5 draught_max: 10.5 destination_port_uuid: 37a8ac5b-d126-d7ce-9aca-7b8249c2efd2 meta: duration: 0.91 endpoint: /api/v0/vessel_pro success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/ext/vessel_pro_est: get: tags: - Live Tracking summary: 'SAT-E: estimated vessel position (beyond AIS)' description: 'Returns the same data as `/vessel_pro` plus an `estimated_position` field containing an AI-calculated lat/lon for vessels that are currently out of terrestrial AIS range. The estimate is based on the vessel''s last known position, its reported destination port, and its ETA. Activated automatically when a vessel has been inactive for 3+ hours. Uses the extended base URL `https://api.datalastic.com/api/ext/`. **Credit cost:** 3 credits. Requires an Add-Ons plan tier. ' operationId: getVesselProEst parameters: - name: uuid in: query schema: type: string format: uuid - name: mmsi in: query schema: type: string example: '566093000' - name: imo in: query schema: type: string example: '9525338' responses: '200': description: Vessel found. estimated_position is present when vessel is out of AIS range. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/VesselLiveProEst' meta: $ref: '#/components/schemas/Meta' example: data: uuid: b8625b67-7142-cfd1-7b85-595cebfe4191 name: MAERSK CHENNAI mmsi: '566093000' imo: '9525338' eni: null country_iso: SG country_name: Singapore type: Cargo - Hazard A (Major) type_specific: Container Ship lat: 6.303473 lon: 3.201678 speed: 14.2 course: 326 heading: 226 navigational_status: Under way using engine destination: ROTTERDAM last_position_epoch: 1624127400 last_position_UTC: '2021-06-20T08:30:00Z' area: West Africa eta_UTC: '2021-06-25T08:00:00Z' eta_epoch: 1624608000 atd_UTC: '2021-06-11T16:49:00Z' draught_avg: 9.5 draught_max: 10.5 destination_port_uuid: 37a8ac5b-d126-d7ce-9aca-7b8249c2efd2 estimated_position: lat: 1.5818719819246652 lon: -31.117992949793297 meta: duration: 1.12 endpoint: /api/ext/vessel_pro_est success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/vessel_bulk: get: tags: - Live Tracking summary: Real-time positions for up to 100 vessels description: | Retrieve tracking data for up to 100 vessels in one call by repeating the `mmsi`, `imo`, or `uuid` parameter. Returns the same fields as `/vessel`. Credits are only deducted for vessels successfully retrieved. In rare cases a single identifier matches more than one vessel, for example a placeholder MMSI shared by several ships. This endpoint returns every match and charges per vessel returned. Use `/vessel` when you need exactly one vessel per identifier. **Credit cost:** 1 per vessel returned, capped at 100 credits per request. operationId: getVesselBulk parameters: - name: mmsi in: query description: MMSI number. Repeat the parameter for multiple vessels (max 100 identifiers per request). style: form explode: true schema: type: array items: type: string example: - '566093000' - '235362000' - name: imo in: query description: IMO number. Repeat the parameter for multiple vessels (max 100 identifiers per request). style: form explode: true schema: type: array items: type: string example: - '9249403' - '9321483' - name: uuid in: query description: Datalastic vessel UUID. Repeat the parameter for multiple vessels (max 100 identifiers per request). style: form explode: true schema: type: array items: type: string format: uuid responses: '200': description: Results for all queried vessels. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/VesselLive' meta: $ref: '#/components/schemas/Meta' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/vessel_inradius: get: tags: - Location Traffic summary: All vessels currently within an area description: | Scan a circular area for all vessels currently inside the radius. The centre can be static (`lat` + `lon`, or a port by `port_uuid` / `port_unlocode`) or dynamic, following a vessel by `uuid`, `mmsi`, or `imo`. Pass exactly one centre. The full result set is returned in a single response and `data.total` gives the record count. **Credit cost:** 1 per vessel found, capped at 500 credits per request. operationId: getVesselInRadius parameters: - name: lat in: query description: Centre latitude. Use with lon. schema: type: number format: float example: 51.94331 - name: lon in: query description: Centre longitude. Use with lat. schema: type: number format: float example: 4.141812 - name: port_uuid in: query description: Port UUID as the centre (alternative to lat/lon). schema: type: string format: uuid - name: port_unlocode in: query description: Port UN/LOCODE as the centre (alternative to lat/lon). schema: type: string example: NLRTM - name: uuid in: query description: Vessel UUID as a dynamic centre. The scan follows the vessel's current position. schema: type: string format: uuid - name: mmsi in: query description: Vessel MMSI as a dynamic centre. schema: type: string - name: imo in: query description: Vessel IMO as a dynamic centre. schema: type: string - name: radius in: query required: true description: Search radius in nautical miles. Maximum 50. schema: type: number format: float maximum: 50 example: 10 - name: type in: query description: Filter by vessel type (e.g. Cargo, Tanker). schema: type: string example: Cargo - name: type_specific in: query description: Filter by vessel subtype (e.g. Container Ship). schema: type: string - name: exclude in: query description: Exclude certain vessel types from the result. schema: type: string - name: _empty_ in: query description: Include or exclude vessels with a null type. schema: type: boolean - name: nav_status in: query description: Filter by AIS navigational status code. schema: type: integer responses: '200': description: Vessels found within the area. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/VesselLive' meta: $ref: '#/components/schemas/Meta' example: data: - uuid: b8625b67-7142-cfd1-7b85-595cebfe4191 name: MSC ANNA mmsi: '636016785' imo: '9321483' country_iso: LR country_name: Liberia type: Cargo type_specific: Container Ship lat: 51.9411 lon: 4.1395 speed: 3.1 course: 210 heading: 208 navigational_status: Under way using engine destination: NLRTM last_position_epoch: 1624127300 last_position_UTC: '2021-06-20T08:28:00Z' area: Rotterdam - uuid: c9736c78-e253-d3e2-8c96-606dfc4f5302 name: EVER GIVEN mmsi: '353136000' imo: '9811000' country_iso: PA country_name: Panama type: Cargo type_specific: Container Ship lat: 51.9388 lon: 4.121 speed: 0.0 course: 0 heading: 185 navigational_status: Moored destination: NLRTM last_position_epoch: 1624127100 last_position_UTC: '2021-06-20T08:25:00Z' area: Rotterdam meta: duration: 0.041 endpoint: /api/v0/vessel_inradius success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/weather: get: tags: - Weather summary: Marine and atmospheric weather for a location description: | One weather picture for a location: marine conditions merged with general atmospheric conditions, covering current conditions plus 7-day daily and hourly forecasts. Pass exactly one location group: coordinates (`lat` + `lon`), one vessel identifier (`mmsi`, `imo`, or `uuid`), or one port identifier (`port_unlocode` or `port_uuid`). A vessel identifier resolves dynamically to the ship's last known position. Responses return plain numeric values. The unit of each field is given in that field's description. **Credit cost:** 1 credit per request. operationId: getWeather parameters: - name: lat in: query description: Latitude. Use with lon. schema: type: number format: float example: 60.1685 - name: lon in: query description: Longitude. Use with lat. schema: type: number format: float example: 24.9445 - name: mmsi in: query description: Vessel MMSI. Weather is returned for its last known position. schema: type: string - name: imo in: query description: Vessel IMO. Weather is returned for its last known position. schema: type: string - name: uuid in: query description: Vessel UUID. Weather is returned for its last known position. schema: type: string format: uuid - name: port_unlocode in: query description: Port UN/LOCODE. schema: type: string example: FIHEL - name: port_uuid in: query description: Port UUID. schema: type: string format: uuid - name: mode in: query description: | Which sections to return. Repeat the parameter to combine modes, for example `mode=current&mode=hourly`. style: form explode: true schema: type: array items: type: string enum: - current - daily - hourly default: current responses: '200': description: Weather for the resolved location. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Weather' meta: $ref: '#/components/schemas/Meta' example: data: location: type: Feature geometry: type: Point coordinates: - 24.9445 - 60.1685 properties: type: Port port_name: HELSINKI port_uuid: 7d9ba108-52b4-47d7-a74d-13d4e1a80a51 port_unlocode: FIHEL weather: latitude: 60.16998 longitude: 24.94519 timezone: GMT timezone_abbreviation: GMT utc_offset_seconds: 0 elevation: 0.0 current: time: '2026-07-24T10:45' interval: 900 temperature_2m: 18.9 precipitation: 0.0 weather_code: 3 wind_speed_10m: 6.1 wind_direction_10m: 217 wind_gusts_10m: 16.3 cloud_cover: 100 relative_humidity_2m: 63 dew_point_2m: 11.7 apparent_temperature: 17.8 visibility: 24140.0 pressure_msl: 1010.1 wave_height: 0.08 wave_direction: 224 wave_period: 2.5 sea_surface_temperature: 19.4 ocean_current_velocity: 0.4 ocean_current_direction: 63 meta: duration: 0.021066314 endpoint: /api/v0/weather success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/vessel_history: get: tags: - Historical Vessel Data summary: Historical AIS positions for a vessel description: | Returns a time-series of past AIS positions for one vessel. Use `days` for a relative window, or `from`/`to` for an absolute range. Data is available from 10 August 2021 onward. Only position changes are stored, so a stationary vessel may have gaps. **Credit cost:** 2 credits per calendar date returned. Billing is per date returned, not per day requested. A window of N days usually spans N+1 UTC dates, so `days=1` typically costs 4 credits. Dates with no position data are not charged. operationId: getVesselHistory parameters: - name: mmsi in: query schema: type: string example: '566093000' - name: imo in: query schema: type: string - name: uuid in: query schema: type: string format: uuid - name: days in: query description: Number of days back from today. schema: type: integer minimum: 1 example: 7 - name: from in: query description: Start of date range (yyyy-mm-dd). schema: type: string format: date example: '2026-01-01' - name: to in: query description: End of date range (yyyy-mm-dd). schema: type: string format: date example: '2026-01-31' responses: '200': description: Ordered list of historical position records. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/VesselHistoryRecord' meta: $ref: '#/components/schemas/Meta' example: data: - mmsi: '566093000' lat: 6.303473 lon: 3.201678 speed: 14.2 course: 326 heading: 226 navigational_status: Under way using engine destination: ROTTERDAM timestamp_UTC: '2021-06-20T08:30:00Z' timestamp_epoch: 1624174200 - mmsi: '566093000' lat: 5.891234 lon: 2.987654 speed: 13.8 course: 328 heading: 325 navigational_status: Under way using engine destination: ROTTERDAM timestamp_UTC: '2021-06-20T04:30:00Z' timestamp_epoch: 1624159800 meta: duration: 0.023 endpoint: /api/v0/vessel_history success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/vessel_info: get: tags: - Ship Static Data summary: Static vessel specifications description: 'Returns registry-level data: dimensions, tonnage, TEU capacity, call sign, home port, year built, etc. Does not include live position. **Credit cost:** 1 per vessel found. ' operationId: getVesselInfo parameters: - name: uuid in: query schema: type: string format: uuid example: b8625b67-7142-cfd1-7b85-595cebfe4191 - name: mmsi in: query schema: type: string example: '566093000' - name: imo in: query schema: type: string example: '9525338' responses: '200': description: Static vessel data. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/VesselInfo' meta: $ref: '#/components/schemas/Meta' example: data: uuid: b8625b67-7142-cfd1-7b85-595cebfe4191 name: MAERSK CHENNAI mmsi: '566093000' imo: '9525338' callsign: 9V9409 country_iso: SG country_name: Singapore type: Cargo - Hazard A (Major) type_specific: Container Ship gross_tonnage: 50869 deadweight: 61614 teu: 4500 liquid_gas: null length: 249.12 breadth: 37.4 draught_avg: 9.5 draught_max: 10.5 speed_avg: 37.0 speed_max: 46.3 year_built: 2011 home_port: SINGAPORE meta: duration: 0.008 endpoint: /api/v0/vessel_info success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/vessel_find: get: tags: - Ship Static Data summary: Search vessel registry description: | Search the vessel database by any combination of type, name, dimensions, country, or year built, without needing a specific MMSI or IMO. Returns static specifications for each match. Returns up to 500 results per page. When more results exist, `meta.next` carries a pagination token. Pass it back as the `next` parameter to fetch the following page, and stop when `meta.next` is absent. **Credit cost:** 1 per vessel found, capped at 500 credits per request. operationId: findVessels parameters: - name: name in: query description: Partial or full vessel name. schema: type: string example: MAERSK - name: country_iso in: query description: Flag state ISO 3166-1 alpha-2 code. schema: type: string example: NL - name: type in: query description: Vessel type (e.g. Cargo, Tanker). schema: type: string example: Cargo - name: type_specific in: query description: Vessel subtype (see ship-types reference in the docs). schema: type: string example: Container Ship - name: fuzzy in: query description: '`0` for exact name match (default), `1` for approximate match.' schema: type: integer enum: - 0 - 1 default: 0 - name: _empty_ in: query description: Include or exclude vessels with a null type. schema: type: boolean - name: gross_tonnage_min in: query description: Minimum gross tonnage. schema: type: integer - name: gross_tonnage_max in: query description: Maximum gross tonnage. schema: type: integer - name: deadweight_min in: query description: Minimum deadweight. schema: type: integer - name: deadweight_max in: query description: Maximum deadweight. schema: type: integer - name: length_min in: query description: Minimum length in metres. schema: type: number format: float - name: length_max in: query description: Maximum length in metres. schema: type: number format: float - name: breadth_min in: query description: Minimum breadth in metres. schema: type: number format: float - name: breadth_max in: query description: Maximum breadth in metres. schema: type: number format: float - name: year_built_min in: query description: Earliest year built. schema: type: integer - name: year_built_max in: query description: Latest year built. schema: type: integer - name: next in: query description: | Pagination token from the previous response's `meta.next`. Omit for the first page. schema: type: string responses: '200': description: Matching vessels. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/VesselInfo' meta: $ref: '#/components/schemas/Meta' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/port_find: get: tags: - Ports summary: Find ports by name, country, or UNLOCODE description: | Search the ports database by name, UN/LOCODE, type, country, or geographic area. Fuzzy search finds ports by approximate name. Geographic search returns ports within a radius of a coordinate. A single request can return multiple matches, for example all ports in Italy. **Credit cost:** 1 per port found, capped at 500 credits per request. operationId: findPorts parameters: - name: name in: query description: Full or partial port name. schema: type: string example: rotterdam - name: country_iso in: query schema: type: string example: NL - name: unlocode in: query schema: type: string example: NLRTM - name: uuid in: query schema: type: string format: uuid - name: fuzzy in: query description: '`0` for exact name match (default), `1` for approximate match.' schema: type: integer enum: - 0 - 1 default: 0 - name: port_type in: query description: Filter by port classification. schema: type: string enum: - Port - Anchorage - Marina - Offshore Terminal - Shelter - Demolition Yard - Canal - Fishing Harbour example: Port - name: lat in: query description: Centre latitude. Use with lon and radius. schema: type: number format: float - name: lon in: query description: Centre longitude. Use with lat and radius. schema: type: number format: float - name: radius in: query description: Search radius in nautical miles. Maximum 50. schema: type: number format: float maximum: 50 responses: '200': description: Matching ports. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Port' meta: $ref: '#/components/schemas/Meta' example: data: - uuid: 37a8ac5b-d126-d7ce-9aca-7b8249c2efd2 port_name: ROTTERDAM country_iso: NL country_name: Netherlands unlocode: NLRTM port_type: Port lat: 51.94331 lon: 4.141812 area_lvl1: UK Coast & Atlantic area_lvl2: Rotterdam Area meta: duration: 0.06 endpoint: /api/v0/port_find success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/port: get: tags: - Ports summary: Port info description: | Returns detailed data for one port: UUID, name, country, type, coordinates, and area classification. Identify the port by `uuid` or `unlocode`. When a port has terminals they are included in the `terminals` array of the port object. Not all ports have terminals. **Credit cost:** 1 credit. operationId: getPort parameters: - name: uuid in: query description: Port UUID. Pass this or `unlocode`. schema: type: string format: uuid example: 3713d077-5daa-a40a-60df-1a55f6d5f515 - name: unlocode in: query description: Port UN/LOCODE. Pass this or `uuid`. schema: type: string example: NLRTM responses: '200': description: The requested port, including its terminals when it has any. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Port' meta: $ref: '#/components/schemas/Meta' example: data: uuid: 3713d077-5daa-a40a-60df-1a55f6d5f515 port_name: MARIN country_iso: ES country_name: Spain unlocode: ESMPG port_type: Port lat: 42.40034 lon: -8.695311 area_lvl1: UK Coast & Atlantic area_lvl2: UK Coast & Atlantic terminals: - terminal_code: MPT terminal_name: MARIN PORT TERMINAL company_name: PEREZ TORRES MARITIMA S.L. lat: 42.405278 lon: -8.692778 url: https://www.ptmar.com/en/puertos/puerto-marin address: Muelle comercial s/n, 36900 Marin, Pontevedra, Spain meta: duration: 0.002404252 endpoint: /api/v0/port success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/ext/route: get: tags: - Sea Routes summary: Calculate sea route between two points description: | Calculates the optimal navigable sea route between two points. Each endpoint can be given as coordinates, a port UUID, or a port UN/LOCODE. Returns a GeoJSON LineString with waypoints and the total distance in nautical miles. Uses the extended base URL `https://api.datalastic.com/api/ext/`. **Credit cost:** 1 credit per request. Requires an Add-Ons plan tier. operationId: getSeaRoute parameters: - name: port_unlocode_from in: query description: Origin port UN/LOCODE (alternative to lat_from/lon_from). schema: type: string example: FIHEL - name: port_uuid_from in: query description: Origin port UUID (alternative to lat_from/lon_from). schema: type: string format: uuid - name: lat_from in: query description: Origin latitude. schema: type: number format: float - name: lon_from in: query description: Origin longitude. schema: type: number format: float - name: port_unlocode_to in: query description: Destination port UN/LOCODE (alternative to lat_to/lon_to). schema: type: string - name: port_uuid_to in: query description: Destination port UUID (alternative to lat_to/lon_to). schema: type: string format: uuid - name: lat_to in: query description: Destination latitude. schema: type: number format: float example: 59.437 - name: lon_to in: query description: Destination longitude. schema: type: number format: float example: 24.7536 responses: '200': description: Calculated route with waypoints and total distance. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: object properties: distance_nm: type: number format: float description: Total route distance in nautical miles. waypoints: type: array items: type: object properties: lat: type: number format: float lon: type: number format: float meta: $ref: '#/components/schemas/Meta' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/report: post: tags: - Reports summary: Submit async report job description: | Initiates a bulk data export job. Returns `report_id` immediately with `status: _PENDING_`. Poll `GET /api/v0/report` until `status` is `_DONE_`, then download the ZIP from `result_url`. ### Report types | report_type | Description | Credit cost | |---|---|---| | `vessel_list` | Full vessel registry snapshot | 5,000 | | `port_list` | Full port list snapshot | 500 | | `request_usage` | Your API key usage log | Free | | `inradius_history` | Historical AIS for a zone (max 7-day window, max 50 NM radius) | 1 per unique vessel per calendar day, summed across the date range | | `dry_dock_dates` | Dry dock bulk export | 2,000 | | `companies` | Maritime companies bulk export | 2,000 | | `casualty` | Casualties bulk export | 2,000 | | `inspections` | Inspections bulk export | 2,000 | | `sales_purchase_demolitions` | Sales and demolitions bulk export | 2,000 | | `ownership` | Ownership bulk export | 2,000 | | `class_society` | Classification society bulk export | 2,000 | | `engine` | Engine data bulk export | 2,000 | **Credit cost:** the cost of the requested `report_type`, as listed above. Submitting carries no separate charge on top of that. You are charged once per report. Checking the status of a report you already submitted is free, however many times you do it, and that includes fetching a fresh `result_url` after the previous link expired. A failed report deducts no credits. An existing report cannot be restarted. To change the parameters, submit a new report, which is charged as a new report. operationId: submitReport requestBody: required: true content: application/json: schema: type: object required: - report_type properties: report_type: type: string enum: - vessel_list - port_list - request_usage - inradius_history - dry_dock_dates - companies - casualty - inspections - sales_purchase_demolitions - ownership - class_society - engine lat: type: number format: float description: Required for inradius_history. Centre latitude. example: 51.8951 lon: type: number format: float description: Required for inradius_history. Centre longitude. example: 4.3973 radius: type: integer description: Required for inradius_history. Radius in nautical miles (max 50). example: 10 from: type: string format: date description: Start date yyyy-mm-dd. inradius_history max 7-day window; request_usage max 31 days. example: '2022-07-01' to: type: string format: date description: End date yyyy-mm-dd. example: '2022-07-05' updated_from: type: string format: date description: For add-on bulk reports. Only include records updated on or after this date. example: '2023-01-01' examples: vessel_list: summary: Full vessel registry value: report_type: vessel_list inradius_history: summary: Historical traffic near Rotterdam, 1-5 July 2022 value: report_type: inradius_history lat: 51.8951 lon: 4.3973 radius: 10 from: '2022-07-01' to: '2022-07-05' request_usage: summary: My API usage for December 2022 value: report_type: request_usage from: '2022-12-01' to: '2022-12-31' ownership_bulk: summary: All ownership records updated in 2023 or later value: report_type: ownership updated_from: '2023-01-01' responses: '202': description: Job accepted. Poll with the returned report_id. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/ReportJob' meta: $ref: '#/components/schemas/Meta' example: data: report_id: 4ddc14e0-9059-9b86-1156-8efd93f0cfe6 report_type: inradius_history params: report_type: inradius_history lat: 51.8951 lon: 4.3973 radius: 10 from: '2022-07-01T00:00:00Z' to: '2022-07-05T00:00:00Z' status: _PENDING_ meta: duration: 0.0136832 endpoint: /api/v0/report success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' get: tags: - Reports summary: Poll report status or list all reports description: | Check the status of a report job by `report_id`. Pass `report_id=_all` to list every report generated with your key. When `status` is `_DONE_` the response includes `result_url` for downloading the ZIP. Every status call returns a fresh signed link, valid for another 6 hours. **Credit cost:** free. A report is charged once, when it is submitted. Checking its status afterwards costs nothing, however many times you do it, and neither does collecting a fresh download link. operationId: getReport parameters: - name: report_id in: query required: true description: Report ID from the POST response, or _all to list all. schema: type: string example: rpt_abc123 responses: '200': description: Report status (and download URL when DONE). headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: oneOf: - $ref: '#/components/schemas/ReportJob' - type: array items: $ref: '#/components/schemas/ReportJob' meta: $ref: '#/components/schemas/Meta' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/v0/stat: get: tags: - Usage summary: Check API key status and usage description: | Returns your API key status and credit consumption for the current billing period. Takes no parameters beyond authentication. On unlimited plans `requests_remaining` reports a fixed placeholder value and `requests_made` stays at `0`. Use the free `request_usage` report to review historical consumption. **Credit cost:** free. This endpoint does not deduct credits. operationId: getStat responses: '200': description: API key status and credit usage. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Stat' meta: $ref: '#/components/schemas/Meta' example: data: user_id: YOUR_API_KEY key_status: Valid requests_made: 112 requests_remaining: 888 addons: true meta: duration: 0.004715806 endpoint: /api/v0/stat success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/maritime_reports/dry_dock_dates: get: tags: - Add-ons - Dry Dock summary: Dry dock dates for a vessel description: 'Returns planned and completed dry dock periods, IOPP certificate dates, and technical manager contact details. **Credit cost:** 1 per record returned. Requires an Add-Ons plan tier. For a bulk export of all records, POST to `/api/v0/report` with `report_type: dry_dock_dates`. Bulk reports cost 2,000 credits each. ' operationId: getDryDockDates parameters: - name: imo in: query description: IMO vessel number. schema: type: string example: '9169122' - name: name in: query description: Vessel name. schema: type: string - name: dry_dock_from in: query description: Filter — dry dock date on or after (yyyy-mm-dd). schema: type: string format: date example: '2023-01-01' - name: dry_dock_to in: query description: Filter — dry dock date on or before (yyyy-mm-dd). schema: type: string format: date example: '2025-12-31' responses: '200': description: Dry dock records for the vessel. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/DryDock' meta: $ref: '#/components/schemas/Meta' example: data: - id: 3 imo: '9169122' vessel_name: MSC ANNICK special_survey_date: '2025-09-10' dry_dock_date: '2025-09-10' iopp_issue_date: '2021-08-31' iopp_exp_date: '2025-09-10' country_name: null technical_manager: MSC Shipmanagement Ltd country_code: CYP website: https://mscshipmanagement.com/ email: safety@mscsmcy.com phone: +357 25 844 800 address: MSC House, 8, Spyrou Kyprianou Avenue, Limassol, Cyprus linkedin: https://cy.linkedin.com/in/ravi-amarnath-41215b3b modified_at: '2023-09-05T00:00:00Z' meta: duration: 0.181 endpoint: /api/maritime_reports/dry_dock_dates success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/maritime_reports/companies: get: tags: - Add-ons - Companies summary: Maritime company profile description: 'Returns company type, country, operational status, contact details, and parent company information. Identify by `company_imo` or `name`. **Credit cost:** 1 per company. Requires an Add-Ons plan tier. For a **bulk export**, POST to `/api/v0/report` with `report_type: companies`. Bulk reports cost 2,000 credits each. ' operationId: getMaritimeCompany parameters: - name: company_imo in: query description: IMO company number. schema: type: string example: '0537883' - name: name in: query description: Company name (full or partial). schema: type: string example: Maersk - name: updated_from in: query description: Only return records updated on or after this date (yyyy-mm-dd). schema: type: string format: date responses: '200': description: Matching company records. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/MaritimeCompany' meta: $ref: '#/components/schemas/Meta' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/maritime_reports/casualty: get: tags: - Add-ons - Casualties summary: Ship casualty records description: 'Returns incident records with casualty type, date, and a full narrative including subsequent update entries. **Credit cost:** 1 per record returned. Requires an Add-Ons plan tier. For a **bulk export**, POST to `/api/v0/report` with `report_type: casualty`. Bulk reports cost 2,000 credits each. ' operationId: getShipCasualty parameters: - name: imo in: query description: IMO vessel number. schema: type: string example: '9319569' - name: name in: query description: Vessel name. schema: type: string - name: from in: query description: Start of casualty date range (yyyy-mm-dd). schema: type: string format: date example: '2023-09-01' - name: to in: query description: End of casualty date range (yyyy-mm-dd). schema: type: string format: date responses: '200': description: Matching casualty records. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/ShipCasualty' meta: $ref: '#/components/schemas/Meta' example: data: - id: 1793 imo: '9319569' vessel_name: VENTO casualty_date: '2023-09-03' casualty_type: Beached/Grounded casualty_details: Container ship ran onto sandy bar and grounded at Cape Ammoglossa, Kos island, Greece, Aegean sea, en route from Aliaga to Ashdod. modified_at: '2023-09-15T00:00:00Z' meta: duration: 0.018 endpoint: /api/maritime_reports/casualty success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/maritime_reports/inspections: get: tags: - Add-ons - Inspections summary: Port State Control inspections and detentions description: 'Returns PSC inspection records: authority, port, type, detention flag, deficiency count, and full deficiency descriptions. **Credit cost:** 1 per record returned. Requires an Add-Ons plan tier. For a **bulk export**, POST to `/api/v0/report` with `report_type: inspections`. Bulk reports cost 2,000 credits each. ' operationId: getShipInspections parameters: - name: imo in: query description: IMO vessel number. schema: type: string example: '9362126' - name: name in: query description: Vessel name. schema: type: string - name: from in: query description: Start of inspection date range (yyyy-mm-dd). schema: type: string format: date example: '2023-09-01' - name: to in: query description: End of inspection date range (yyyy-mm-dd). schema: type: string format: date responses: '200': description: Matching inspection records. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/ShipInspection' meta: $ref: '#/components/schemas/Meta' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/maritime_reports/spd: get: tags: - Add-ons - Sales & Demolitions summary: Ship sales, purchase, and demolition records description: 'Returns transaction records: seller, buyer, sale price (total and per LDT), sales type, and dry dock dates at time of sale. **Credit cost:** 1 per record returned. Requires an Add-Ons plan tier. For a **bulk export**, POST to `/api/v0/report` with `report_type: sales_purchase_demolitions`. Bulk reports cost 2,000 credits each. ' operationId: getShipSPD parameters: - name: imo in: query description: IMO vessel number. schema: type: string example: '9104586' - name: name in: query description: Vessel name. schema: type: string - name: from in: query description: Start of sales report date range (yyyy-mm-dd). schema: type: string format: date example: '2023-09-01' - name: to in: query description: End of sales report date range (yyyy-mm-dd). schema: type: string format: date responses: '200': description: Matching sale/demolition records. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/ShipSPD' meta: $ref: '#/components/schemas/Meta' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/maritime_reports/ownership: get: tags: - Add-ons - Ownership summary: Vessel beneficial owner, operator, and manager description: 'Returns beneficial owner chain, operator, technical manager, and commercial manager with country information. Filter by any of these parties, by vessel, or by `updated_from`. **Credit cost:** 1 per record returned. Requires an Add-Ons plan tier. For a **bulk export**, POST to `/api/v0/report` with `report_type: ownership`. Bulk reports cost 2,000 credits each. ' operationId: getVesselOwnership parameters: - name: imo in: query description: IMO vessel number. schema: type: string example: '9951783' - name: name in: query description: Vessel name. schema: type: string - name: beneficial_owner in: query description: Beneficial owner name (partial match). schema: type: string example: Steamship - name: operator in: query description: Operator name. schema: type: string - name: technical_manager in: query description: Technical manager name. schema: type: string - name: commercial_manager in: query description: Commercial manager name. schema: type: string - name: updated_from in: query description: Only return records updated on or after this date (yyyy-mm-dd). schema: type: string format: date responses: '200': description: Matching ownership records. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/VesselOwnership' meta: $ref: '#/components/schemas/Meta' example: data: - id: 38914 imo: '9951783' vessel_name: KARLOVASI beneficial_owner: Samos Steamship Co beneficial_owner_country: Greece operator: Samos Steamship Co operator_country: Greece flag_name: null vessel_type_code: Bulk built_year: '2023' buyer: null dwt_design: 63470 class1_code: null technical_manager: null technical_manager_country: null commercial_manager: Samos Steamship Co commercial_manager_country: Greece modified_at: '2020-01-01T00:00:00Z' meta: duration: 0.011 endpoint: /api/maritime_reports/ownership success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/maritime_reports/class_society: get: tags: - Add-ons - Classification summary: Vessel classification society data description: 'Returns class society code, survey and dry dock dates, full structural dimensions (LOA, LBP, beam, depth), engine builder/designer, and owner/manager references. Set `fuzzy=1` for approximate name matching (e.g. "Erica" also matches "Eric"). **Credit cost:** 1 per record returned. Requires an Add-Ons plan tier. For a **bulk export**, POST to `/api/v0/report` with `report_type: class_society`. Bulk reports cost 2,000 credits each. ' operationId: getClassSociety parameters: - name: imo in: query description: IMO vessel number. schema: type: string example: '9950404' - name: name in: query description: Vessel name. schema: type: string - name: fuzzy in: query description: 0 for exact name match (default), 1 for approximate match. schema: type: integer enum: - 0 - 1 default: 0 - name: beneficial_owner in: query schema: type: string - name: beneficial_owner_imo in: query schema: type: string - name: technical_manager in: query schema: type: string - name: technical_manager_imo in: query schema: type: string - name: updated_from in: query description: Only return records updated on or after this date (yyyy-mm-dd). schema: type: string format: date responses: '200': description: Matching classification society records. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/ClassSociety' meta: $ref: '#/components/schemas/Meta' example: data: - imo: '9950404' vessel_name: DARYA RASHMI vessel_type_code: Bulk flag_name: Marshall Islands built_year: '2023' dwt_design: 82210 special_survey_date: null dry_dock_date: null class1_code: ABS beneficial_owner_imo: '0783189' beneficial_owner: Chellaram Shipping (Hong Kong) Ltd. technical_manager_imo: '0783189' technical_manager: Chellaram Shipping (Hong Kong) Ltd. draft_design: 14.5 nt: 27155 gt: 44577 loa: 229.0 lbp: 225.5 depth: 20.35 beam_moduled: 32.26 engine_builder: Hudong Heavy Machinery engine_designer: MAN B&W propulsion_type_code: MO modified_at: '2023-10-19T00:00:00Z' meta: duration: 0.006 endpoint: /api/maritime_reports/class_society success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError' /api/maritime_reports/engine: get: tags: - Add-ons - Engines summary: Vessel engine specifications description: 'Returns engine designation, builder, designer, maximum continuous output (MCO in kW and RPM), and propulsion type. Set `fuzzy=1` for approximate name matching. **Credit cost:** 1 per record returned. Requires an Add-Ons plan tier. For a **bulk export**, POST to `/api/v0/report` with `report_type: engine`. Bulk reports cost 2,000 credits each. ' operationId: getVesselEngine parameters: - name: imo in: query description: IMO vessel number. schema: type: string example: '9575149' - name: name in: query description: Vessel name (partial match when fuzzy=1). schema: type: string example: DARYA - name: fuzzy in: query description: 0 for exact name match (default), 1 for approximate match. schema: type: integer enum: - 0 - 1 default: 0 example: 1 - name: updated_from in: query description: Only return records updated on or after this date (yyyy-mm-dd). schema: type: string format: date responses: '200': description: Matching vessel engine records. headers: X-Request-Cost: $ref: '#/components/headers/X-Request-Cost' X-Requestlimit-Remaining: $ref: '#/components/headers/X-Requestlimit-Remaining' X-Requestlimit-Limit: $ref: '#/components/headers/X-Requestlimit-Limit' X-Ratelimit-Limit: $ref: '#/components/headers/X-Ratelimit-Limit' X-Ratelimit-Remaining: $ref: '#/components/headers/X-Ratelimit-Remaining' X-Ratelimit-Reset: $ref: '#/components/headers/X-Ratelimit-Reset' content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/VesselEngine' meta: $ref: '#/components/schemas/Meta' example: data: - imo: '9575149' vessel_name: DARYA MAYA vessel_type_code: Bulk propulsion_type_code: MO mco: 8300 mco_unit: kW mco_rpm: 91 trading_category_code: Live built_year: '2012' gt: 35812 engine_designation: 5S60ME-C8 engine_builder: HHM Shangchuan Diesel engine_designer: MAN B&W modified_at: '2023-10-17T00:00:00Z' meta: duration: 0.01 endpoint: /api/maritime_reports/engine success: true '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '402': $ref: '#/components/responses/PaymentRequired' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalError'