Vessels API

This guide provides detailed instructions on how to use the gfw-api-python-client to access information about vessels. The Vessels API allows you to search for vessels, retrieve lists of vessels by their IDs, and get detailed information for a specific vessel, drawing from various datasets like identity, authorizations, and ownership. Here is a Jupyter Notebook version of this guide with more usage examples.

Prerequisites

  • You have installed the gfw-api-python-client. Refer to the Getting Started guide for installation instructions.

Getting Started

To interact with the Vessels endpoints, you first need to instantiate the gfw.Client and then access the vessels resource:

import os

import gfwapiclient as gfw


access_token = os.environ.get(
    "GFW_API_ACCESS_TOKEN",
    "<OR_PASTE_YOUR_GFW_API_ACCESS_TOKEN_HERE>",
)

gfw_client = gfw.Client(
    access_token=access_token,
)

The gfw_client.vessels object provides methods to search for and retrieve vessel information. Each of these methods returns a result object, which offers convenient ways to access the data as Pydantic models using .data() or as pandas DataFrames using .df().

Searching for Vessels (search_vessels)

The search_vessels() method allows you to find vessels based on a query and various filters within specified datasets.

vessel_search_result = await gfw_client.vessels.search_vessels(
    where="ssvid='775998121' AND shipname='DON TITO'",
    datasets=["public-global-vessel-identity:latest"],
    includes=["MATCH_CRITERIA", "OWNERSHIP"],
)

Access the list of vessel as Pydantic models

vessel_search_data = vessel_search_result.data()
vessel = vessel_search_data[-1]
print((vessel.dataset, vessel.self_reported_info[-1].id))
print(vessel.model_dump())

Output:

('public-global-vessel-identity:v3.0', 'bae8f325c-cf0a-01fe-6d1a-9a275588d4ff')

Access the vessels as a DataFrame

vessel_search_df = vessel_search_result.df()
print(vessel_search_df.info())
print(vessel_search_df.head())

Output:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 8 columns):
 #   Column                          Non-Null Count  Dtype
---  ------                          --------------  -----
 0   dataset                         2 non-null      object
 1   registry_info_total_records     2 non-null      int64
 2   registry_info                   2 non-null      object
 3   registry_owners                 2 non-null      object
 4   registry_public_authorizations  0 non-null      object
 5   combined_sources_info           2 non-null      object
 6   self_reported_info              2 non-null      object
 7   matchCriteria                   2 non-null      object
dtypes: int64(1), object(7)
memory usage: 260.0+ bytes

Getting a List of Vessels by IDs (get_vessels_by_ids)

The get_vessels_by_ids() method retrieves information for a list of vessels given their GFW Vessel IDs.

vessels_result = await gfw_client.vessels.get_vessels_by_ids(
    ids=[
        "8c7304226-6c71-edbe-0b63-c246734b3c01",
        "6583c51e3-3626-5638-866a-f47c3bc7ef7c",
        "71e7da672-2451-17da-b239-857831602eca",
    ],
    datasets=["public-global-vessel-identity:latest"],
)

Access the list of vessel as Pydantic models

vessels_data = vessels_result.data()
vessel = vessels_data[-1]
print((vessel.dataset, vessel.self_reported_info[-1].id))
print(vessel.model_dump())

Output:

('public-global-vessel-identity:v3.0', '0cb77880e-ee49-2ce4-a849-c0b413b6ec89')

Access the vessels as a DataFrame

vessel_search_df = vessels_result.df()
print(vessel_search_df.info())
print(vessel_search_df.head())

Output:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 7 columns):
 #   Column                          Non-Null Count  Dtype
---  ------                          --------------  -----
 0   dataset                         3 non-null      object
 1   registry_info_total_records     3 non-null      int64
 2   registry_info                   3 non-null      object
 3   registry_owners                 3 non-null      object
 4   registry_public_authorizations  3 non-null      object
 5   combined_sources_info           3 non-null      object
 6   self_reported_info              3 non-null      object
dtypes: int64(1), object(6)
memory usage: 300.0+ bytes

Getting a Vessel by ID (get_vessel_by_id)

The get_vessel_by_id() method retrieves detailed information for a specific vessel using its GFW Vessel ID.

vessel_result = await gfw_client.vessels.get_vessel_by_id(
    id="c54923e64-46f3-9338-9dcb-ff09724077a3",
    dataset="public-global-vessel-identity:latest",
)

Access the vessel as Pydantic model

vessel = vessel_result.data()
print((vessel.dataset, vessel.self_reported_info[-1].id))
print(vessel.model_dump())

Output:

('public-global-vessel-identity:v3.0', 'c54923e64-46f3-9338-9dcb-ff09724077a3')

Access the vessel as a DataFrame

vessel_df = vessel_result.df()
print(vessel_df.info())
print(vessel_df.head())

Output:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 7 columns):
 #   Column                          Non-Null Count  Dtype
---  ------                          --------------  -----
 0   dataset                         1 non-null      object
 1   registry_info_total_records     1 non-null      int64
 2   registry_info                   1 non-null      object
 3   registry_owners                 1 non-null      object
 4   registry_public_authorizations  1 non-null      object
 5   combined_sources_info           1 non-null      object
 6   self_reported_info              1 non-null      object
dtypes: int64(1), object(6)
memory usage: 188.0+ bytes

Next Steps

Explore the Usage Guides for other API resources to understand how you can combine vessel data with information about events, and more. Check out the following resources: