Skylight GraphQL API Reference

This page will help you get up and running with Skylight’s GraphQL API. The API can be used to retrieve the same maritime events that are available in Skylight's web interface.

The Skylight API provides response data in a JSON format. If you are interested in retrieving data from Skylight as a map layer, please see the following post on Events in Google Earth.

Before getting started, you will need to have valid login credentials for Skylight. These can be the same credentials that you use for the Skylight web interface.

If you do not already have a Skylight account, please contact us to request an account.

For more information about the Skylight platform, please visit our website.

API Endpoints
# Production:
https://api.skylight.earth/graphql
Headers
Authorization: Bearer <YOUR_TOKEN_HERE>

Authentication

To authenticate with the Skylight API, you will need to include a valid Skylight username and password in a getToken request:

curl -X POST \
    -H "Content-Type: application/json" \
    -d '{"query":"{getToken(username: \"YOUR_SKYLIGHT_USERNAME\", password: \"YOUR_SKYLIGHT_PASSWORD\") \
    {access_token expires_in}}"}' \
    https://api.skylight.earth/graphql

The response will contain an access_token value to be used in subsequent API requests:

{
  "data": {
    "getToken": {
      "access_token": "YYOdIqB48ZDS3OJpWHJxrjku1Gh0Yl",
      "expires_in": 86400
    }
  }
}

Once you have an access_token, you can use it to authenticate your requests by including the access token in the Authorization header:

curl -X POST \
    -H 'Authorization: Bearer $ACCESS_TOKEN' \
    -H "Content-Type: application/json" \
    -d '{"query":"{vessel(vesselId: \"B:735058020:1719441624:822782:817302\"){vessel_id flag flag_code mmsi}}"}' \
    https://api.skylight.earth/graphql

Access tokens are valid for 24 hours from the time of issue. Requesting a new access token will automatically revoke any previously issued tokens.


Data Retention

Skylight aims to make data available as soon as possible after receiving it. In order to optimize for this near-real-time use case, we only store data for 540 days (approximately 18 months) after which we delete it.

To support this, our APIs enforce that your query does not request data older than 540 days.

Vector Tile APIs

Many clients of Skylight want to be able to quickly visualize large amounts of geospatial data on a map. One way to do this efficiently is to use vector tiles. The Skylight API in particular supports the use of Mapbox Vector Tiles for several of our datasets.

The Vector Tile APIs use the same request object structure as their corresponding GraphQL APIs, but the response is formatted in a protobuf encoded vector tile of the geometry features with a subset of the properties attached to each feature. For vector tile APIs, submit the request query as a json encoded string in the query parameter in the URL.

The following rules apply to all vector tile endpoints:

  • Path Parameters z, x, y: These represent the grid location of the tile being requested. These values will typically be provided by your mapping library. These values are used to determine the bounding box of the tile being requested, and replace the intersectsGeometry parameter in the GraphQL API. You cannot use the intersectsGeometry parameter when requesting vector tiles.
  • Query Parameters limit, offset, sortBy, and sortDirection: These parameters are not available for vector tile requests, as vector tiles always include all features within that tile, and the results are unsorted.

Event Vector Tiles

  • URL: https://api.skylight.earth/vectorTiles/eventsV2/{z}/{x}/{y}
  • Corresponding GraphQL API: searchEventsV2.
  • Vector Tile Restrictions: Due to the extremely large nature of this dataset, all queries must be EITHER:
    • Limited to a specific vessel via the vesselId, mmsi, or trackId filters on vesselMain.
    • OR, limited in duration to 30 days or less via the startTime and endTime parameters.

An example query and the resulting vector tile visualized in Skylight:

curl --get "https://api.skylight.earth/vectorTiles/eventsV2/6/47/34" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--data-urlencode 'query={
  "startTime":{
    "gte":"2025-01-28T19:43:48.029Z",
    "lte":"2025-01-30T19:43:48.029Z"
  },
  "eventType":{
    "inc":[
       "standard_rendezvous","dark_rendezvous","fishing_activity_history",
       "viirs","sar_sentinel1","eo_sentinel2","eo_landsat_8_9"
    ]
  }
}'

Example Vector Tile Image

Satellite Frame Vector Tiles

  • URL: https://api.skylight.earth/vectorTiles/satelliteFrames/{z}/{x}/{y}
  • Corresponding GraphQL API: searchSatelliteFramesV2.
  • Vector Tile Restrictions: All queries MUST include a time filter on collectedAt, createdAt or updatedAt. This time range must be 30 days or less.

An example query and the resulting vector tile visualized in Skylight:

  curl --get "https://api.skylight.earth/vectorTiles/satelliteFrames/5/31/15" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --data-urlencode 'query={
    "collectedAt":{"gte":"2025-03-08T17:51:27.082Z","lte":"2025-03-09T17:51:27.082Z"},
    "eventType":{"inc":["sar_sentinel1","eo_sentinel2","eo_landsat_8_9"]},
    "status":{"eq":"Completed"}
  }'

Example Vector Tile Image


Pagination

There are two ways to paginate through datasets using the Skylight API:

Search After is a methodology of paginating by using a field with a unique and sortable value, and paginating by using the sort field as a filter in future queries. For example to search for all events that occurred on September 1st, 2024, you would apply a date filter to the startTime field, and sort the results by created in ascending order. After each page, update the created.gt filter to the created of the last record in the previous page.

searchEventsV2(input: {
    startTime: { gte: "2024-09-01T00:00:00Z", lt: "2024-09-02T00:00:00Z"},
    sortBy: created,
    sortDirection: asc
}) {
    records {
        events {
            eventId
            created
        }
    }
}

And then find the maximum created timestamp from the first page and use that as the created.gt value for the next page:

searchEventsV2(input: {
    startTime: { gte: "2024-09-01T00:00:00Z", lt: "2024-09-02T00:00:00Z"},
    created: { gt: "2024-09-01T01:12:34Z"},
    sortBy: created,
    sortDirection: asc
}) {
    records { 
        events {
            eventId
            created
        } 
    }
}

2. Limit / Offset

We do also support traditional paginating through datasets with limit and offset parameters. However, we restrict limit + offset to 10,000 records, and performance of those later queries will degrade as the offset increases. We recommend using Search After if you are loading all pages in a programmatic way. Limit / Offset can be more appropriate for User Interfaces where a user is manually paginating through the data, and likely to only look at a few pages.

searchEventsV2(input: {
startTime: { gte: "2024-09-01T00:00:00Z", lt: "2024-09-02T00:00:00Z"},
limit: 100,
offset: 400
}) {
    records { /* Your fields here */ }
}

Using Snapshots for Consistent Pagination

Several datasets within Skylight are updated at a very high frequency and so paginating may result in missing or duplicated results dependent on the paging strategy. To provide a consistent snapshot of the data, we expose a snapshotId field on these datasets to request the backend database to provide a consistent snapshot of the data.

For the first request, send the value of "true" for the snapshotId field to request a new snapshot. The snapshotId will be returned in the meta.snapshotId field of the response:

searchEventsV2(input: {
    startTime: { gte: "2024-09-01T00:00:00Z", lt: "2024-09-02T00:00:00Z"},
    snapshotId: "true"
}) {
    records { /* Your fields here */ }
    meta { snapshotId }
}

For subsequent requests, use the snapshotId value returned in the meta.snapshotId:

searchEventsV2(input: {
    startTime: { gte: "2024-09-01T00:00:00Z", lt: "2024-09-02T00:00:00Z"},
    snapshotId: "1234567890"
}) {
    records { /* Your field here */ }
    meta { snapshotId }
}

A snapshot is kept open for 1 minute after a request, as long as you are making additional requests with the same snapshotId the snapshot will remain open. If you do not make a request within 1 minute, the snapshot will be be closed.

Snapshots are only available on frequently updated datasets that contain the snapshotId field in the input of the search query. If the snapshotId field is not present in the input, then the dataset does not support snapshots.

Change Log

This change log tracks updates to the Skylight API.

August 12, 2025

  • Added new endpoint searchVessels which replaces the vessels endpoint and provides significantly more capabilities for searching vessels.

March 10, 2025

March 5, 2025

  • Removed the deprecated value detection from the EventType enum (for specific detection event types, use the satellite-specific event type: viirs, sar_sentinel1, eo_sentinel2, eo_landsat_8_9).

January 28, 2025

November 13, 2024

  • Added documentation for how to paginate through large result sets.

October 28, 2024

Queries

event

Use the searchEventsV2 query instead
Description

Returns a specific event by event_id

Response

Returns an Event

Arguments
Name Description
eventId - ID! Event ID (unique to the Skylight platform)

Example

Query
query Event($eventId: ID!) {
  event(eventId: $eventId) {
    event_id
    event_type
    start {
      point {
        ...PointFragment
      }
      time
    }
    vessels {
      vessel_0 {
        ...EmbeddedVesselFragment
      }
      vessel_1 {
        ...EmbeddedVesselFragment
      }
    }
    event_details {
      average_speed
      data_source
      distance
      duration
      correlated
      estimated_length
      image_url
      meters_per_pixel
      orientation
      entry_speed
      entry_heading
      end_heading
      visit_type
      radiance_nw
      nanowatts
      satellite_name
      scan_angle
      vendor_vessel {
        ...VendorVesselFragment
      }
    }
    end {
      point {
        ...PointFragment
      }
      time
    }
    user_params {
      params_id
      user_id
      aoi_id
      speed_min
      speed_max
      display_unit
      filter_type
      min_distance
      min_duration
    }
  }
}
Variables
{"eventId": "B:224083590:1639013658:1643050:882604:1723421649:1723423470"}
Response
{
  "data": {
    "event": {
      "event_id": "A:2:B:574818815:1583069236:2869119:991497:B:941001963:1681300510:2891104:996132:1723418820",
      "event_type": "standard_rendezvous",
      "start": "'point': { 'lat': -20.695788333333333, 'lon': -105.37488166666667},",
      "vessels": "'vessel_0': { 'vessel_id': 'B:232301543:1697131710:676214:725822', 'track_id': 'B:232301543:1697131710:676214:725822'}",
      "event_details": "'data_source': 'noaa', 'nanowatts': 16.51",
      "end": "'point': { 'lat': 17.78}",
      "user_params": "'aoi_id': '5823daa5-e036-4c6c-acae-e20bdbdc7175', 'user_id': '6120123fbc8f8661da8a5332'"
    }
  }
}

eventConfig

Description

Fetches the list of event types available to this client.

  • Anonymous Users can see all event types available to logged in users, however can only query those with permissionLevel: Anonymous
  • API Clients can only access event types with availableOverApi: true
Response

Returns an EventConfigOutput

Example

Query
query EventConfig {
  eventConfig {
    records {
      eventTypeId
      eventTitle
      eventTypeDescription
      eventIconUrl
      groupId
      eventSubTypeId
      displayDuration
      displayInProgress
      availableOverApi
      notifications
      permissionLevel
      showSatelliteFrames
      showSatelliteImageChip
      showSatelliteEstimatedAttributes
    }
  }
}
Response
{"data": {"eventConfig": {"records": [EventConfig]}}}

events

Use the searchEventsV2 query instead
Description

Returns events by event_type. A maximum of 10,000 events are returned

Response

Returns an Events

Arguments
Name Description
aoiId - String Filter results to events that occurred within the given AOI (Area of Interest) ID (unique to the Skylight platform)
detectionType - DetectionType See detectionType below for list of options
vesselCategory - [VesselCategory] Vessel category from AIS
countryCodes - String Filter results to events that include a vessel with the given ISO 3166-1 alpha-3 country codes. Separate each code using '|'. example: USA or USA|CHN. To include vessels with no country, use code 'N/A'
countryCodesExclude - String ISO 3166-1 alpha-3 country codes to exclude. Separate each code using '|'. example: USA or USA|CHN. To exclude vessels with no country, use code 'N/A'
eventTypes - [EventType]! See eventTypes below for list of options
inProgressStatus - Boolean Event is currently in progress (true or false)
pageSize - Int For paginated results, number of items to return per page. Default = 25
pageNum - Int For paginated results, return a specific page. Default = 1
polygon - String GeoJSON spatial filter expressed as an array of geo-coordinates
startTime - String Filter results to events that started after the specified time. Value must be an ISO 8601 formatted timestamp
endTime - String Filter results to events that started before the specified time. Value must be an ISO 8601 formatted timestamp
vesselId - String Filter results to events that contain a specific vessel by Vessel ID (unique to the Skylight platform)

Example

Query
query Events(
  $aoiId: String,
  $detectionType: DetectionType,
  $vesselCategory: [VesselCategory],
  $countryCodes: String,
  $countryCodesExclude: String,
  $eventTypes: [EventType]!,
  $inProgressStatus: Boolean,
  $pageSize: Int,
  $pageNum: Int,
  $polygon: String,
  $startTime: String,
  $endTime: String,
  $vesselId: String
) {
  events(
    aoiId: $aoiId,
    detectionType: $detectionType,
    vesselCategory: $vesselCategory,
    countryCodes: $countryCodes,
    countryCodesExclude: $countryCodesExclude,
    eventTypes: $eventTypes,
    inProgressStatus: $inProgressStatus,
    pageSize: $pageSize,
    pageNum: $pageNum,
    polygon: $polygon,
    startTime: $startTime,
    endTime: $endTime,
    vesselId: $vesselId
  ) {
    items {
      event_id
      event_type
      start {
        ...StartEndFragment
      }
      vessels {
        ...EmbeddedVesselsFragment
      }
      event_details {
        ...EventDetailsFragment
      }
      end {
        ...StartEndFragment
      }
      user_params {
        ...UserParamsFragment
      }
    }
    meta {
      pageNum
      total
      pageSize
    }
  }
}
Variables
{
  "aoiId": "68d4c7d2-5971-4b34-8d81-173f21e20b09",
  "detectionType": "ais_correlated",
  "vesselCategory": "cargo",
  "countryCodes": "TTO|BRB|SUR|GUY",
  "countryCodesExclude": "ESP|FRA|ITA|PRT",
  "eventTypes": "[ standard_rendezvous, dark_rendezvous ]",
  "inProgressStatus": false,
  "pageSize": 10,
  "pageNum": 3,
  "polygon": [[[100, -5], [100, 5], [120, 5], [120, -5], [100, -5]]],
  "startTime": "2023-02-20T00:47:43+00:00",
  "endTime": "2024-02-20T00:02:23+00:00",
  "vesselId": "B:477855500:1683545750:2148570:580209"
}
Response
{
  "data": {
    "events": {
      "items": [
        "'event_id': 'S1A_IW_GRDH_1SDV_20240122T000056_20240122T000121_052212_064FD2_E31E.SAFE_7', 'event_type': 'detection', 'start': { 'time': '2024-01-22T00:00:56.745000+00:00' }"
      ],
      "meta": "'pageSize': 1, 'pageNum': 1, 'total': 1504913"
    }
  }
}

getCurrentUser

Description

Get user details for the currently authenticated user account

Beta
This route is in beta and may change in the future.
Response

Returns a User

Example

Query
query GetCurrentUser {
  getCurrentUser {
    id
    email
    role
    name
    title
    organization
    engagement
    department
    createdByEmail
    createdAt
    lastLoginAt
    tosAcceptedAt
    groupIds
    annotationProjects
    previousEmails
    passwordSetAt
  }
}
Response
{
  "data": {
    "getCurrentUser": {
      "id": "6753a2757a980b1e24652a41",
      "email": "annotator123@skylight.com",
      "role": "Admin",
      "name": "Michael Douglas",
      "title": "Annotator",
      "organization": "Fisheries",
      "engagement": "Vulcan",
      "department": "Annotation Project",
      "createdByEmail": "skylight-admin@allenai.org",
      "createdAt": "2024-12-07T01:18:45.363618Z",
      "lastLoginAt": "2024-12-07T01:18:45.363618Z",
      "tosAcceptedAt": "2024-12-07T01:18:45.363618Z",
      "groupIds": ["Fisheries Group"],
      "annotationProjects": [
        "sampled_trajectories_1",
        "sampled_trajectories_2"
      ],
      "previousEmails": ["previous_email@allenai.org"],
      "passwordSetAt": null
    }
  }
}

getNearestCoastline

Description

Fast and precise distance to shoreline calculations backed by Ai2's Lighthouse project.

This API provides 10-meter resolution coastline data for the entire globe, and can be used to efficiently classify position points. This is the same API that Skylight uses internally for much of our distance-to-shore calculations.

This API is available without authentication, but is rate-limited to 1 request per second. Higher rate-limits are available for authenticated users.

Response

Returns a GetNearestCoastlineResponse!

Arguments
Name Description
input - GetNearestCoastlineInput!

Example

Query
query GetNearestCoastline($input: GetNearestCoastlineInput!) {
  getNearestCoastline(input: $input) {
    records {
      coordinate {
        ...PointFragment
      }
      distanceToCoastMeters
      landCoverClass
      nearestCoastalPoint {
        ...PointFragment
      }
    }
    version
  }
}
Variables
{"input": GetNearestCoastlineInput}
Response
{
  "data": {
    "getNearestCoastline": {
      "records": [GetNearestCoastlineRecord],
      "version": "2024-11-12T00:25:16.667195"
    }
  }
}

getToken

Description

Get access Bearer token for authentication. This token is valid for 24 hours, or until another login session is started.

Response

Returns a Token

Arguments
Name Description
username - String! User email address
password - String! User password

Example

Query
query GetToken(
  $username: String!,
  $password: String!
) {
  getToken(
    username: $username,
    password: $password
  ) {
    access_token
    expires_in
    refresh_token
    token_type
  }
}
Variables
{"username": "my_username@gmail.com", "password": "m#P52s@ap$V"}
Response
{
  "data": {
    "getToken": {
      "access_token": "zOrUKsEIlqTGxNbFMdKwRvTO9utjuA",
      "expires_in": 86400,
      "refresh_token": "2fPyXZTWXggd3Bjw0Doc2QyCzn9n79",
      "token_type": "Bearer"
    }
  }
}

getTrajectoryClassification

Response

Returns a TrajectoryClassification

Arguments
Name Description
input - GetTrajectoryInput!

Example

Query
query GetTrajectoryClassification($input: GetTrajectoryInput!) {
  getTrajectoryClassification(input: $input) {
    model
    subpath {
      subpathId
      trackId
      mmsi
      meanSog
      cog
      numPositions
      startTime
      endTime
      startLocation {
        ...PointFragment
      }
      endLocation {
        ...PointFragment
      }
      pathGeometry {
        ...GeometryFragment
      }
      midpointGeometry {
        ...PointFragment
      }
      midpointCog
      activityClassification
      createdAt
      updatedAt
    }
    trajectory {
      trackId
    }
    trajectoryParams {
      model
      subpathId
      trackId
      format
    }
  }
}
Variables
{"input": GetTrajectoryInput}
Response
{
  "data": {
    "getTrajectoryClassification": {
      "model": "atlas_activity",
      "subpath": TrackSubpath,
      "trajectory": Trajectory,
      "trajectoryParams": TrajectoryParams
    }
  }
}

getVesselHistory

Description

Fetch a vessel's history of metadata by MMSI over time.

Vessel identities can change over time depending on transmissions or registry information. This returns a list of metadata records for a given vessel over time.

Response

Returns a GetVesselHistoryOutput

Arguments
Name Description
input - GetVesselHistoryInput!

Example

Query
query GetVesselHistory($input: GetVesselHistoryInput!) {
  getVesselHistory(input: $input) {
    records {
      mmsi
      history {
        ...VesselHistorySourcedEntriesFragment
      }
    }
    meta {
      pageNum
      total
      pageSize
    }
  }
}
Variables
{"input": GetVesselHistoryInput}
Response
{
  "data": {
    "getVesselHistory": {
      "records": [
        {
          "mmsi": "273445480",
          "history": [
            {
              "source": "AIS",
              "entries": [
                {
                  "id": "ais-123",
                  "imo": 1234567,
                  "callSign": "5BCK4",
                  "vesselName": "Ocean Carrier 1",
                  "flag": "USA",
                  "lengthMeters": 200,
                  "widthMeters": 30,
                  "effectiveFrom": "2024-01-15T10:30:00Z",
                  "effectiveTo": "2024-01-16T15:45:00Z",
                  "isMostRecent": false
                },
                {
                  "id": "ais-124",
                  "imo": 2222222,
                  "callSign": "5BCK4",
                  "vesselName": "Ocean Carrier 1",
                  "vesselType": "CARGO",
                  "flag": "USA",
                  "lengthMeters": 200,
                  "widthMeters": 30,
                  "effectiveFrom": "2024-01-16T15:45:00Z",
                  "effectiveTo": null,
                  "isMostRecent": true
                }
              ]
            },
            {
              "source": "GFW",
              "entries": [
                {
                  "id": "gfw-123",
                  "vesselName": "Ocean Carrier 1",
                  "imo": 1234567,
                  "callSign": "5BCK4",
                  "vesselType": "TUNA_PURSE_SEINES",
                  "gearType": ["SET_LONGLINES"],
                  "tonnageGT": 5000,
                  "flag": "USA",
                  "ownerships": [
                    {
                      "owner": "Ocean Shipping Co",
                      "ownerFlag": "USA",
                      "ownerSource": "IMO",
                      "startTime": "2024-01-15T10:30:00Z",
                      "endTime": "2024-01-16T15:45:00Z"
                    }
                  ],
                  "authorizations": [
                    {
                      "source": "ICCAT",
                      "startTime": "2024-01-15T10:30:00Z",
                      "endTime": "2024-01-16T15:45:00Z"
                    }
                  ],
                  "effectiveFrom": "2022-01-15T10:30:00Z",
                  "effectiveTo": null,
                  "isMostRecent": true
                }
              ]
            }
          ]
        }
      ],
      "meta": {"total": 1, "limit": 10, "offset": 0, "hasMore": false}
    }
  }
}

predictVesselLocations

Description
Beta
This route is in beta and may change in the future.

Predicts the location of a vessel at a given time. If no time is specified, the current time is used.

Response

Returns a VesselLocationPredictionOutput

Arguments
Name Description
input - VesselLocationPredictionInput!

Example

Query
query PredictVesselLocations($input: VesselLocationPredictionInput!) {
  predictVesselLocations(input: $input) {
    records {
      trackId
      origin {
        ...LastKnownPositionFragment
      }
      prediction {
        ...GeometryFragment
      }
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": VesselLocationPredictionInput}
Response
{
  "data": {
    "predictVesselLocations": {
      "records": [VesselLocationPrediction],
      "meta": MetaV2
    }
  }
}

satelliteFrame

Use the searchSatelliteFramesV2 query instead
Description

Returns satellite frame by frameId

Response

Returns a SatelliteFrame

Arguments
Name Description
frameId - String Frame ID (unique to the Skylight platform)

Example

Query
query SatelliteFrame($frameId: String) {
  satelliteFrame(frameId: $frameId) {
    targets {
      dark_count
      correlated_count
    }
    data_source
    vendor_id
    frame_id
    collected_at
    frame_extents {
      type
      coordinates
      geometries {
        ...GeometryFragment
      }
    }
    created
    updated
  }
}
Variables
{"frameId": "89df8216001cfc89fc0f3e6aeee50e41203505ee"}
Response
{
  "data": {
    "satelliteFrame": {
      "targets": "'correlated_count': 3, 'dark_count': 4",
      "data_source": "sentinel1",
      "vendor_id": "S1A_IW_GRDH_1SDV_20240801T000005_20240801T000030_055012_06B3B6_DFA6.SAFE",
      "frame_id": "70920c186ebf8cf91e26fa39ad1d84798c151a29",
      "collected_at": "2024-08-01T00:00:05.673426Z",
      "frame_extents": "'coordinates': [[[ 149.72206068616023, 8.132910271150813 ], [ 149.7157847342396, 7.140816954677312 ], [ 150.7085993421091, 7.133901712573143 ], [ 150.71715846458056, 8.125022545190241 ], [ 149.72206068616023, 8.132910271150813 ]]], 'type': 'Polygon' }",
      "created": "2024-08-01T03:49:49.158082Z",
      "updated": "2024-08-01T03:49:49.158082Z"
    }
  }
}

satelliteFrames

Use the searchSatelliteFramesV2 query instead
Description

Returns satellite frames, representing the spatial extent of the data frame captured by a satellite's sensors or cameras. Individual frames may contain zero or more vessel detections, including detections that have been correlated with AIS.

Response

Returns a SatelliteFrames

Arguments
Name Description
startTime - String Filter results to frames that were collected after the specified time. Value must be an ISO 8601 formatted timestamp
endTime - String Filter results to frames that were collected before the specified time. Value must be an ISO 8601 formatted timestamp
pageSize - Int For paginated results, number of items to return per page. Default = 25
pageNum - Int For paginated results, request a specific page number. Default = 1
eventTypes - [FrameEventType] Event types to filter by. Default = [sar_sentinel1, eo_sentinel2]
polygon - [Float] GeoJSON spatial filter expressed as an array of geo-coordinates. Specifying this field causes only satellite frames which overlap this polygon to be returned.

Example

Query
query SatelliteFrames(
  $startTime: String,
  $endTime: String,
  $pageSize: Int,
  $pageNum: Int,
  $eventTypes: [FrameEventType],
  $polygon: [Float]
) {
  satelliteFrames(
    startTime: $startTime,
    endTime: $endTime,
    pageSize: $pageSize,
    pageNum: $pageNum,
    eventTypes: $eventTypes,
    polygon: $polygon
  ) {
    items {
      targets {
        ...SatelliteFrameTargetsFragment
      }
      data_source
      vendor_id
      frame_id
      collected_at
      frame_extents {
        ...GeometryFragment
      }
      created
      updated
    }
    meta {
      pageNum
      total
      pageSize
    }
  }
}
Variables
{
  "startTime": "2023-02-20T11:24:47.137000+00:00",
  "endTime": "2024-02-13T08:11:12.146000+00:00",
  "pageSize": 10,
  "pageNum": 5,
  "eventTypes": ["sar_sentinel1", "eo_sentinel2"],
  "polygon": [[[100, -5], [100, 5], [120, 5], [120, -5], [100, -5]]]
}
Response
{
  "data": {
    "satelliteFrames": {
      "items": [
        "{ 'targets': { 'correlated_count':3, 'dark_count':107 }, 'data_source':'sentinel1', 'vendor_id':'S1A_IW_GRDH_1SDV_20240813T000004_20240813T000029_055187_06B9EC_7D70.SAFE', 'frame_id':'0fbb541ec9cf8c5f4ba63ffa41bab089be0c9a17', 'collected_at':'2024-08-13T00:00:04.781000Z', 'frame_extents':{ 'coordinates':[[[ -89.15052, 20.4076 ],[ -86.712234, 20.841209 ], [ -87.004501, 22.347897 ], [ -89.468567, 21.917629 ], [ -89.15052, 20.4076 ]]], 'type':'Polygon' }, 'created':'2024-08-13T09:49:59.520600Z', 'updated':'2024-08-13T09:49:59.540989Z' }"
      ],
      "meta": "'pageNum': 1. 'pageSize': 0, 'total': 1312"
    }
  }
}

searchAOIs

Description

Search for Areas of Interest (AOIs)

Beta
This route is in beta and may change in the future.

This query filters AOIs by the user ID associated with the API token. However, if the query specifies id.eq or id.inc, the user ID filter is not applied, which allows AOIs to be shared with other users.

Response

Returns a SearchAOIsOutput

Arguments
Name Description
input - SearchAOIsInput!

Example

Query
query SearchAOIs($input: SearchAOIsInput!) {
  searchAOIs(input: $input) {
    records {
      id
      userId
      accessibleBy
      properties {
        ...AoiPropertiesV2Fragment
      }
      status
      geometry {
        ...GeometryFragment
      }
      createdAt
      updatedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": SearchAOIsInput}
Response
{
  "data": {
    "searchAOIs": {
      "records": [
        {
          "userId": "66172431e2e75df065654449",
          "accessibleBy": ["66172431e2e75df065654449"],
          "properties": {
            "aoiId": "5139d9dc-a182-4735-b177-d8b40102fac7",
            "aoiType": "custom aoi",
            "name": "test123",
            "bounds": [
              -9.951789469291498,
              1.8919712867309215,
              -9.030892650559167,
              2.831652158503914
            ],
            "areaKm2": 6126.362265270218,
            "description": null,
            "uploadedFile": null
          },
          "status": "active",
          "createdAt": "2024-04-16T20:01:41Z",
          "updatedAt": "2024-04-16T20:01:41Z",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [-9.363982989249422, 2.831652158503914],
                [-9.951789469291498, 2.6750847687409163],
                [-9.569715257264846, 1.8919712867309215],
                [-9.030892650559167, 2.03883641740741],
                [-9.363982989249422, 2.831652158503914]
              ]
            ]
          }
        }
      ],
      "meta": {"total": 1}
    }
  }
}

searchAPIKeys

Description

Search for API keys belonging to the authenticated user.

Superusers can search API keys across all users by providing a userId filter.

Response

Returns an ApiKeysOutput

Arguments
Name Description
input - SearchApiKeysInput!

Example

Query
query SearchAPIKeys($input: SearchApiKeysInput!) {
  searchAPIKeys(input: $input) {
    records {
      id
      userId
      keyName
      status
      createdAt
      updatedAt
      lastUsedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": SearchApiKeysInput}
Response
{
  "data": {
    "searchAPIKeys": {
      "records": [
        {
          "id": "65a1b2c3d4e5f6789abcdef0",
          "userId": "6120123fbc8f8661da8a5332",
          "keyName": "My Production API Key",
          "status": "active",
          "createdAt": "2025-07-11T18:21:15.684000Z",
          "updatedAt": "2025-07-11T18:21:15.684000Z",
          "lastUsedAt": "2025-07-11T18:25:30.123456Z"
        },
        {
          "id": "65b2c3d4e5f6789abcdef012",
          "userId": "6120123fbc8f8661da8a5332",
          "keyName": "Development Testing Key",
          "status": "active",
          "createdAt": "2025-07-10T08:15:22.456789Z",
          "updatedAt": "2025-07-10T08:15:22.456789Z",
          "lastUsedAt": null
        },
        {
          "id": "65c3d4e5f6789abcdef01234",
          "userId": "6120123fbc8f8661da8a5332",
          "keyName": "Old Integration Key",
          "status": "deleted",
          "createdAt": "2025-07-01T12:00:00.000000Z",
          "updatedAt": "2025-07-05T16:30:45.789012Z",
          "lastUsedAt": "2025-07-05T16:25:30.567890Z"
        }
      ],
      "meta": {"pageNum": 1, "total": 3, "pageSize": 10}
    }
  }
}

searchAoiFeatureConfigurations

Description

Search for Aoi feature configurations. Aoi feature configurations are used to specify when speed range and Aoi entry events should be generated. This returns a list of Aoi feature configurations that match the search criteria. Only records associated with the authenticated session are returned.

Arguments
Name Description
input - SearchAoiFeatureConfigurationsInput!

Example

Query
query SearchAoiFeatureConfigurations($input: SearchAoiFeatureConfigurationsInput!) {
  searchAoiFeatureConfigurations(input: $input) {
    records {
      id
      aoiId
      featureType
      userId
      featureParameters {
        ...SpeedRangeFeatureParametersFragment
      }
      createdAt
    }
    meta {
      pageNum
      total
      pageSize
    }
  }
}
Variables
{"input": SearchAoiFeatureConfigurationsInput}
Response
{
  "data": {
    "searchAoiFeatureConfigurations": {
      "records": [AoiFeatureConfiguration],
      "meta": Meta
    }
  }
}

searchEngagements

Description

Get a list of user engagements.

Response

Returns a SearchEngagementsOutput

Arguments
Name Description
input - SearchEngagementsInput!

Example

Query
query SearchEngagements($input: SearchEngagementsInput!) {
  searchEngagements(input: $input) {
    records {
      name
    }
    meta {
      pageNum
      total
      pageSize
    }
  }
}
Variables
{"input": SearchEngagementsInput}
Response
{
  "data": {
    "searchEngagements": {
      "records": [Engagement],
      "meta": Meta
    }
  }
}

searchEventFeedbacks

Description

Event Feedback allows users to provide their feedback on events in the Skylight System. In the Skylight web application this is captured through the 👍/ 🤷/ 👎 buttons on the event details card.

Event feedback is composed of three user-provided fields:

  • rating: is a GOOD, UNSURE, BAD value representing the overall user sentiment about the event.
  • comments is a full text field that allows the user to explain why they made that choice.
  • additional_context is provided to allow structured text that a user selects to help further categorize their feedback. For example after saying that a satellite vessel detection is BAD, there might be options for cloud, wave, other to help gather structured information about why the satellite image is bad.

A single user can only provide a single feedback per event, changing their response will overwrite their previous feedback.

Beta
This route is in beta and may change in the future.
Response

Returns a SearchEventFeedbacksOutput

Arguments
Name Description
id - KeywordFilter ID of the event feedback
eventId - KeywordFilter ID of the event associated with the feedback
eventType - KeywordFilter Event type associated with the feedback. For valid values, see: EventType
comments - StringFilter A user provided string about the feedback. This is unstructured and can be anything the user wants to provide.
rating - KeywordFilter

Feedback rating. Valid values:

  • GOOD
  • BAD
  • UNSURE
additionalContext - StringFilter Clarifying information on the selected feedback rating. This is typically a fixed number of allowed values per event type.
userId - KeywordFilter ID of the user that created the feedback
email - StringFilter Email address of the user that created the feedback
updatedAt - DateFilter Timestamp of last update to the feedback
limit - Int Limit results displayed per page. Default value is 300. Default = 300
offset - Int Offset into paginated results. Default value is 0. Default = 0
sortBy - EventFeedbackSortBy Sort event feedback by the specified field. Default = updatedAt
sortDirection - SortDirection Sort direction. Default = asc
searchQuery - String

Simultaneously search across all of these fields:

  • additionalContext
  • comments
  • email
  • eventType
  • rating

Example

Query
query SearchEventFeedbacks(
  $id: KeywordFilter,
  $eventId: KeywordFilter,
  $eventType: KeywordFilter,
  $comments: StringFilter,
  $rating: KeywordFilter,
  $additionalContext: StringFilter,
  $userId: KeywordFilter,
  $email: StringFilter,
  $updatedAt: DateFilter,
  $limit: Int,
  $offset: Int,
  $sortBy: EventFeedbackSortBy,
  $sortDirection: SortDirection,
  $searchQuery: String
) {
  searchEventFeedbacks(
    id: $id,
    eventId: $eventId,
    eventType: $eventType,
    comments: $comments,
    rating: $rating,
    additionalContext: $additionalContext,
    userId: $userId,
    email: $email,
    updatedAt: $updatedAt,
    limit: $limit,
    offset: $offset,
    sortBy: $sortBy,
    sortDirection: $sortDirection,
    searchQuery: $searchQuery
  ) {
    records {
      id
      eventId
      eventType
      comments
      rating
      additionalContext
      imageUrl
      userId
      email
      updatedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{
  "id": KeywordFilter,
  "eventId": KeywordFilter,
  "eventType": KeywordFilter,
  "comments": StringFilter,
  "rating": KeywordFilter,
  "additionalContext": StringFilter,
  "userId": KeywordFilter,
  "email": StringFilter,
  "updatedAt": DateFilter,
  "limit": 300,
  "offset": 0,
  "sortBy": "updatedAt",
  "sortDirection": "asc",
  "searchQuery": "xyz789"
}
Response
{
  "data": {
    "searchEventFeedbacks": {
      "records": [EventFeedback],
      "meta": MetaV2
    }
  }
}

searchEventsV2

Description

Search for Events. See the documentation on the EventV2 type to better understand the fields and data available on each event type.

Also available as a Vector Tile Endpoint.

Response

Returns a SearchEventsV2Output

Arguments
Name Description
input - SearchEventsV2Input!

Example

Query
query SearchEventsV2($input: SearchEventsV2Input!) {
  searchEventsV2(input: $input) {
    records {
      eventId
      eventType
      start {
        ...StartEndFragment
      }
      end {
        ...StartEndFragment
      }
      expiresAt
      latest {
        ...StartEndFragment
      }
      vessels {
        ...EventV2VesselsFragment
      }
      eventDetails {
        ... on RfMaxarDetectionEventDetails {
          ...RfMaxarDetectionEventDetailsFragment
        }
        ... on ViirsEventDetails {
          ...ViirsEventDetailsFragment
        }
        ... on ImageryMetadataEventDetails {
          ...ImageryMetadataEventDetailsFragment
        }
        ... on MaxarDetectionEventDetails {
          ...MaxarDetectionEventDetailsFragment
        }
        ... on SpeedRangeEventDetails {
          ...SpeedRangeEventDetailsFragment
        }
        ... on FishingEventDetails {
          ...FishingEventDetailsFragment
        }
        ... on AoiVisitEventDetails {
          ...AoiVisitEventDetailsFragment
        }
        ... on DarkRendezvousEventDetails {
          ...DarkRendezvousEventDetailsFragment
        }
        ... on StandardRendezvousEventDetails {
          ...StandardRendezvousEventDetailsFragment
        }
        ... on PortVisitEventDetails {
          ...PortVisitEventDetailsFragment
        }
      }
      aoiFeatureConfiguration {
        ...AoiFeatureConfigurationMatchFragment
      }
      createdAt
      updatedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": SearchEventsV2Input}
Response
{
  "data": {
    "searchEventsV2": {
      "records": [EventV2],
      "meta": MetaV2
    }
  }
}

searchLastKnownPositions

Description
Beta
This route is in beta and may change in the future.

Search for LastKnownPositions. See the documentation on the LastKnownPosition type to better understand the fields and data available.

Also available as a Vector Tile endpoint.

Response

Returns a SearchLastKnownPositionsOutput

Arguments
Name Description
input - SearchLastKnownPositionsInput

Example

Query
query SearchLastKnownPositions($input: SearchLastKnownPositionsInput) {
  searchLastKnownPositions(input: $input) {
    records {
      trackId
      mmsi
      speedOverGround
      courseOverGround
      location {
        ...PointFragment
      }
      sentAt
      receivedAt
      heading
      navigationStatus
      rateOfTurn
      messageType
      aisClass
      positionCount
      distanceToCoastM
      atlasEntityType
      ageOfPositionSeconds
      createdAt
      updatedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": SearchLastKnownPositionsInput}
Response
{
  "data": {
    "searchLastKnownPositions": {
      "records": [LastKnownPosition],
      "meta": MetaV2
    }
  }
}

searchOrganizations

Description

Get a list of user organizations.

Response

Returns a SearchOrganizationsOutput

Arguments
Name Description
input - SearchOrganizationsInput!

Example

Query
query SearchOrganizations($input: SearchOrganizationsInput!) {
  searchOrganizations(input: $input) {
    records {
      name
    }
    meta {
      pageNum
      total
      pageSize
    }
  }
}
Variables
{"input": SearchOrganizationsInput}
Response
{
  "data": {
    "searchOrganizations": {
      "records": [Organization],
      "meta": Meta
    }
  }
}

searchSatelliteFramesV2

Description

Search for SatelliteFrameV2s. See the documentation on the SatelliteFrameV2 type to better understand the fields and data available on each event type.

Also available as a Vector Tile Endpoint.

Response

Returns a SearchSatelliteFramesV2Output

Arguments
Name Description
input - SearchSatelliteFramesV2Input!

Example

Query
query SearchSatelliteFramesV2($input: SearchSatelliteFramesV2Input!) {
  searchSatelliteFramesV2(input: $input) {
    records {
      frameId
      vendorId
      dataSource
      collectedAt
      createdAt
      updatedAt
      eventType
      geometry {
        ...GeometryFragment
      }
      status
      numDetections {
        ...SatelliteFrameNumDetectionsFragment
      }
      inferenceVersion
      frameMetadata {
        ... on LandsatProduct {
          ...LandsatProductFragment
        }
        ... on MaxarProduct {
          ...MaxarProductFragment
        }
        ... on SentinelProduct {
          ...SentinelProductFragment
        }
        ... on ViirsProduct {
          ...ViirsProductFragment
        }
      }
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": SearchSatelliteFramesV2Input}
Response
{
  "data": {
    "searchSatelliteFramesV2": {
      "records": [SatelliteFrameV2],
      "meta": MetaV2
    }
  }
}

searchSatelliteTips

Response

Returns a SearchSatelliteTipsOutput

Arguments
Name Description
input - SearchSatelliteTipsInput!

Example

Query
query SearchSatelliteTips($input: SearchSatelliteTipsInput!) {
  searchSatelliteTips(input: $input) {
    records {
      id
      status
      tipVendorName
      tipVendorId
      tipVendorFrameId
      tipVendorFrameIds
      tipVendorStatus
      tipVendorErrorMessage
      observationPoint {
        ...GeometryFragment
      }
      observationTime
      observationExpiration
      savedSearchId
      savedSearchName
      aoiId
      aoiName
      sourceEventId
      sourceEventType
      detectionEvents {
        ...SatelliteTipDetectionEventFragment
      }
      submittedByUserId
      submittedByUsername
      createdAt
      updatedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": SearchSatelliteTipsInput}
Response
{
  "data": {
    "searchSatelliteTips": {
      "records": [SatelliteTip],
      "meta": MetaV2
    }
  }
}

searchTrackSubpaths

Description

Search for Track Subpaths. Track Subpaths are generated from AIS positions, and represent a vessel's movement.

Searching for Subpaths require at least one of the following:

  • One or more specific track_id or mmsi values provided via the eq or inc options.
  • OR A maximum time range of 1 month and an intersects_geometry search area of less than 1000 km^2.

Also available as a Vector Tile endpoint.

Beta
This route is in beta and may change in the future.
Response

Returns a SearchTracksSubpathOutput

Arguments
Name Description
subpathId - KeywordFilter Track Subpath ID filter. Will return a track subpath with the specified subpathId
trackId - KeywordFilter Track ID filter. Will return all Track Subpaths with the specified trackId. Unique to the Skylight platform
mmsi - IntFilter MMSI filter
meanSog - FloatFilter Mean speed over ground (SOG) filter, in km/h
startTime - DateFilter Start Time filter
endTime - DateFilter End Time filter
intersectsGeometry - GeometryInput Intersects Geometry filter. GeoJSON spatial filter expressed as a Geojson formatted Polygon. Specifying this field causes only tracks which intersect with this polygon to be returned. Not available for vector tile endpoint
activityClassification - ActivityClassificationKeywordFilter Activity Classification Filter. Can be any value of TrackSubpathActivityClassification
geometryField - TrackSubpathGeometryField Geometry Field. Only used for vector tiles to indicate which field to base the geometry coordinates around. Can be: path_geometry or midpoint_geometry
createdAt - DateFilter Filter by the createdAt field on the Track Subpath. This is the timestamp that the record was intiially inserted into the Skylight Database
updatedAt - DateFilter Filter by the updatedAt timestamp on the Track Subpath records. Track Subpaths are typically updated once when they are complete and then once when they are classified.
numPositions - IntFilter Number of AIS position messages received during this Track Subpath
limit - Int Limit the number of results displayed per page (default 10)
offset - Int Offset into paginated results
sortBy - TrackSubpathSortBy Sort Tracks by the specified field
sortDirection - SortDirection Sort direction. Default = asc
snapshotId - String Snapshot Id used for pagination. Pass a value of true on the first request to request a new snapshot to be generated. The snapshotId will be returned in the meta {} object of the response.
includePositions - Boolean Whether to include raw AIS positions. This is only allowed if a single subpath_id or (track_id AND start_time AND end_time) is provided

Example

Query
query SearchTrackSubpaths(
  $subpathId: KeywordFilter,
  $trackId: KeywordFilter,
  $mmsi: IntFilter,
  $meanSog: FloatFilter,
  $startTime: DateFilter,
  $endTime: DateFilter,
  $intersectsGeometry: GeometryInput,
  $activityClassification: ActivityClassificationKeywordFilter,
  $geometryField: TrackSubpathGeometryField,
  $createdAt: DateFilter,
  $updatedAt: DateFilter,
  $numPositions: IntFilter,
  $limit: Int,
  $offset: Int,
  $sortBy: TrackSubpathSortBy,
  $sortDirection: SortDirection,
  $snapshotId: String,
  $includePositions: Boolean
) {
  searchTrackSubpaths(
    subpathId: $subpathId,
    trackId: $trackId,
    mmsi: $mmsi,
    meanSog: $meanSog,
    startTime: $startTime,
    endTime: $endTime,
    intersectsGeometry: $intersectsGeometry,
    activityClassification: $activityClassification,
    geometryField: $geometryField,
    createdAt: $createdAt,
    updatedAt: $updatedAt,
    numPositions: $numPositions,
    limit: $limit,
    offset: $offset,
    sortBy: $sortBy,
    sortDirection: $sortDirection,
    snapshotId: $snapshotId,
    includePositions: $includePositions
  ) {
    records {
      subpathId
      trackId
      mmsi
      meanSog
      cog
      numPositions
      startTime
      endTime
      startLocation {
        ...PointFragment
      }
      endLocation {
        ...PointFragment
      }
      pathGeometry {
        ...GeometryFragment
      }
      midpointGeometry {
        ...PointFragment
      }
      midpointCog
      activityClassification
      createdAt
      updatedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{
  "subpathId": {"eq": "d5011951-d323-4e64-9cf5-1f767ffb2bed"},
  "trackId": {"eq": "B:563034920:1709283241:2837054:903124"},
  "mmsi": {"eq": 368156470},
  "meanSog": {"gt": 10},
  "startTime": {"gte": "2021-01-01T00:00:00Z"},
  "endTime": {"lte": "2021-01-01T00:00:00Z"},
  "intersectsGeometry": {
    "type": "Polygon",
    "coordinates": [[[100, -5], [100, 5], [120, 5], [120, -5], [100, -5]]]
  },
  "activityClassification": {"eq": "transiting"},
  "geometryField": "\"eq\": 'path_geometry'}",
  "createdAt": {"lte": "2021-01-01T00:00:00Z"},
  "updatedAt": {"lte": "2021-01-01T00:00:00Z"},
  "numPositions": {"gte": 10},
  "limit": 10,
  "offset": 0,
  "sortBy": "start_time",
  "sortDirection": "asc",
  "snapshotId": "eyJ0cmFja0lk",
  "includePositions": false
}
Response
{
  "data": {
    "searchTrackSubpaths": {
      "records": [TrackSubpath],
      "meta": MetaV2
    }
  }
}

searchUsers

Description

Search for users.

The ability to search for users is limited by a caller's role. If a caller has the role

  • Superadmin: Search can be used without limitations
  • Admin: Search is limited to the users in the caller's organization
  • User: Search is unavailable
Beta
This route is in beta and may change in the future.
Response

Returns a SearchUsersOutput

Arguments
Name Description
input - SearchUsersInput!

Example

Query
query SearchUsers($input: SearchUsersInput!) {
  searchUsers(input: $input) {
    records {
      id
      email
      role
      name
      title
      organization
      engagement
      department
      createdByEmail
      createdAt
      lastLoginAt
      tosAcceptedAt
      groupIds
      annotationProjects
      previousEmails
      passwordSetAt
    }
    meta {
      pageNum
      total
      pageSize
    }
  }
}
Variables
{"input": SearchUsersInput}
Response
{
  "data": {
    "searchUsers": {
      "records": [
        {
          "id": "6272db97005abff9a96d68e3",
          "email": "testUser@skylight.com",
          "role": "User",
          "name": "Michael Douglas",
          "title": "Maritime Security Adviser",
          "organization": "Expertise France",
          "engagement": "Support to West Africa Integrated Maritime Security Project (SWAIMS)\"",
          "department": "SWAIMS / Techincal Assitance Team",
          "createdByEmail": null,
          "createdAt": "2023-10-15T13:00:06Z",
          "lastLoginAt": null,
          "tosAcceptedAt": "2023-10-15T13:00:06Z",
          "groupIds": null,
          "annotationProjects": null,
          "previousEmails": [],
          "passwordSetAt": null
        }
      ],
      "meta": {"pageNum": null, "total": 11, "pageSize": null}
    }
  }
}

searchVessels

Description

Search for vessel records. Search filters are applied to all historical metadata records for a vessel. Vessels are returned if any historical record matches. When a time range filter is provided using effectiveFrom or effectiveTo, only records within that range are considered. If multiple historical records match for a given vessel, only the most recent one is returned.

Response

Returns a SearchVesselsOutput

Arguments
Name Description
input - SearchVesselsInput!

Example

Query
query SearchVessels($input: SearchVesselsInput!) {
  searchVessels(input: $input) {
    records {
      mmsi
      vesselLegacyId
      imo {
        ...VesselV2StringFieldFragment
      }
      callSign {
        ...VesselV2StringFieldFragment
      }
      vesselName {
        ...VesselV2StringFieldFragment
      }
      flag {
        ...VesselV2StringFieldFragment
      }
      vesselType {
        ...VesselV2VesselTypeFieldFragment
      }
      gearTypes {
        ...VesselV2GearTypesFieldFragment
      }
      lengthMeters {
        ...VesselV2FloatFieldFragment
      }
      widthMeters {
        ...VesselV2FloatFieldFragment
      }
      tonnageGt {
        ...VesselV2FloatFieldFragment
      }
      authorizations {
        ...VesselV2AuthorizationsFragment
      }
      owners {
        ...VesselV2OwnersFragment
      }
      effectiveTo {
        ...VesselV2StringFieldFragment
      }
      effectiveFrom {
        ...VesselV2StringFieldFragment
      }
    }
    meta {
      pageNum
      total
      pageSize
    }
  }
}
Variables
{"input": SearchVesselsInput}
Response
{
  "data": {
    "searchVessels": {
      "records": [
        {
          "mmsi": "419956492",
          "imo": [
            {"value": "1234567", "source": "AIS"},
            {"value": "1234567", "source": "GFW"}
          ],
          "callSign": [
            {"value": "5BCK4", "source": "AIS"},
            {"value": "5BCK4", "source": "GFW"}
          ],
          "vesselName": [
            {"value": "Ocean Carrier 1", "source": "AIS"},
            {"value": "Ocean Carrier 12", "source": "GFW"}
          ],
          "vesselType": [
            {"value": "FISHING", "source": "AIS"},
            {"value": "FISHING", "source": "GFW"}
          ],
          "flag": [
            {"value": "PAN", "source": "AIS"},
            {"value": "PAN", "source": "GFW"}
          ],
          "widthMeters": [{"value": 20, "source": "AIS"}],
          "lengthMeters": [
            {"value": 100, "source": "AIS"},
            {"value": 99, "source": "GFW"}
          ],
          "tonnageGt": [{"value": 5000, "source": "GFW"}],
          "gearTypes": [{"value": ["SQUID_JIGGER"], "source": "GFW"}],
          "effectiveFrom": [
            {"value": "2019-04-19T06:35:45Z", "source": "GFW"},
            {"value": "2020-04-30T04:40:00Z", "source": "AIS"}
          ],
          "owners": [
            {
              "value": [
                {
                  "ownerName": "Ocean Shipping Co",
                  "flag": "PAN",
                  "ownerSource": "ICCAT",
                  "firstVerifiedOn": "2019-04-19T06:35:45Z",
                  "lastVerifiedOn": "2025-01-31T01:49:26Z"
                }
              ],
              "source": "GFW"
            }
          ],
          "authorizations": [
            {
              "value": [
                {
                  "firstVerifiedOn": "2018-05-09T00:00:00Z",
                  "lastVerifiedOn": "2025-01-01T00:00:00Z",
                  "authorizationSource": "ICCAT"
                }
              ],
              "source": "GFW"
            }
          ]
        }
      ],
      "meta": {"total": 1, "limit": 10, "offset": 0, "hasMore": false}
    }
  }
}

trackByEventId

Use searchTrackSubpaths instead.
Description

Get vessel tracks by eventId. Track segments are generated from AIS positions, and represent a vessel's movement. Tracks display 48 hours prior to the time of the event itself, and up to 48 hours after the event.

Response

Returns [Track]

Arguments
Name Description
eventId - String! Event ID (unique to the Skylight platform)

Example

Query
query TrackByEventId($eventId: String!) {
  trackByEventId(eventId: $eventId) {
    properties {
      cog
      mean_sog
      segment_type
      track_id
      start {
        ...StartEndFragment
      }
      end {
        ...StartEndFragment
      }
    }
    geometry {
      coordinates
      type
    }
  }
}
Variables
{"eventId": "B:224083590:1639013658:1643050:882604:1723421649:1723423470"}
Response
{
  "data": {
    "trackByEventId": [
      {
        "properties": "{ 'cog': 114.5999984741211, 'mean_sog': 6.019, 'end': { 'point': { 'lat': 3.31772, 'lon': -18.810928333333333 }, 'time': '2024-03-03T03:32:31+00:00' }, 'start': { 'point': { 'lat': 3.314005, 'lon': -18.812306666666668 }, 'time': '2024-03-03T03:25:58+00:00' }, 'segment_type': 'TRAVEL', 'track_id': 'B:224083590:1639013658:1643050:882604' }",
        "geometry": "{ 'coordinates': [[ -18.812306666666668, 3.314005 ], [ -18.810928333333333, 3.31772 ]], 'type': 'LineString' }"
      }
    ]
  }
}

vessel

Description

Returns vessel by vesselId

Response

Returns a Vessel

Arguments
Name Description
vesselId - String Vessel ID (unique to the Skylight platform)
mmsi - Int Maritime Mobile Service Identity number
imo - Int International Maritime Organization number
callSign - String Filter to vessels with a specific call sign as reported over AIS static messages. Used for ship radio communications.

Example

Query
query Vessel(
  $vesselId: String,
  $mmsi: Int,
  $imo: Int,
  $callSign: String
) {
  vessel(
    vesselId: $vesselId,
    mmsi: $mmsi,
    imo: $imo,
    callSign: $callSign
  ) {
    ais_type
    ais_vessel_type
    beneficial_owner
    beneficial_owner_country_code
    call_sign
    country_codes
    flag
    flag_code
    imo
    length
    mmsi
    name
    operator
    owner
    owner_country_code
    primary_gear_type
    secondary_gear_type
    tonnage
    vessel_category
    vessel_class
    vessel_id
    vessel_type
    width
  }
}
Variables
{
  "vesselId": "B:224587000:1715446092:1667778:960438",
  "mmsi": 368156470,
  "imo": 734228700,
  "callSign": "HC6695"
}
Response
{
  "data": {
    "vessel": {
      "ais_type": 30,
      "ais_vessel_type": "Fishing",
      "beneficial_owner": null,
      "beneficial_owner_country_code": null,
      "call_sign": "HPYR",
      "country_codes": ["['ESP'],"],
      "flag": "Spain",
      "flag_code": "ESP",
      "imo": 224933000,
      "length": 28,
      "mmsi": 224933000,
      "name": "AGIOS NIKOLAUS",
      "operator": null,
      "owner": null,
      "owner_country_code": null,
      "primary_gear_type": null,
      "secondary_gear_type": null,
      "tonnage": null,
      "vessel_category": "fishing",
      "vessel_class": "vessel",
      "vessel_id": "B:224933000:1681376115:1580146:1000022",
      "vessel_type": "other fishing",
      "width": 10
    }
  }
}

Mutations

createAOI

Description
Beta
This route is in beta and may change in the future.
Response

Returns an AOIv2

Arguments
Name Description
input - CreateAOIInput!

Example

Query
mutation CreateAOI($input: CreateAOIInput!) {
  createAOI(input: $input) {
    id
    userId
    accessibleBy
    properties {
      aoiId
      aoiType
      name
      bounds
      areaKm2
      description
      uploadedFile
    }
    status
    geometry {
      type
      coordinates
      geometries {
        ...GeometryFragment
      }
    }
    createdAt
    updatedAt
  }
}
Variables
{"input": CreateAOIInput}
Response
{
  "data": {
    "createAOI": {
      "id": "1c1ea98b-9120-414a-a38f-e6e25964edf3",
      "userId": "66172431e2e75df065654449",
      "accessibleBy": ["66172431e2e75df065654449"],
      "properties": {
        "aoiId": "5139d9dc-a182-4735-b177-d8b40102fac7",
        "aoiType": "custom aoi",
        "name": "test123",
        "bounds": [
          -9.951789469291498,
          1.8919712867309215,
          -9.030892650559167,
          2.831652158503914
        ],
        "areaKm2": 6126.362265270218,
        "description": null,
        "uploadedFile": null
      },
      "status": "active",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [-9.363982989249422, 2.831652158503914],
            [-9.951789469291498, 2.6750847687409163],
            [-9.569715257264846, 1.8919712867309215],
            [-9.030892650559167, 2.03883641740741],
            [-9.363982989249422, 2.831652158503914]
          ]
        ]
      },
      "createdAt": "2024-04-16T20:01:41Z",
      "updatedAt": "2024-04-16T20:01:41Z"
    }
  }
}

createAPIKey

Description

Create a new API key for the authenticated user.

Returns the plain text API key which must be stored by the user as it will not be shown again.

Response

Returns a CreateApiKeyOutput

Arguments
Name Description
input - CreateApiKeyInput!

Example

Query
mutation CreateAPIKey($input: CreateApiKeyInput!) {
  createAPIKey(input: $input) {
    records {
      id
      apiKey
      keyName
      createdAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": CreateApiKeyInput}
Response
{
  "data": {
    "createAPIKey": {
      "records": [CreateApiKeyOutputInstance],
      "meta": MetaV2
    }
  }
}

createAoiFeatureConfiguration

Description

Create a new Aoi feature configuration.

Response

Returns an AoiFeatureConfiguration

Arguments
Name Description
input - CreateAoiFeatureConfigurationInput!

Example

Query
mutation CreateAoiFeatureConfiguration($input: CreateAoiFeatureConfigurationInput!) {
  createAoiFeatureConfiguration(input: $input) {
    id
    aoiId
    featureType
    userId
    featureParameters {
      filterType
      distanceThresholdKilometers
      timeThresholdMinutes
      minSpeedKnots
      maxSpeedKnots
    }
    createdAt
  }
}
Variables
{"input": CreateAoiFeatureConfigurationInput}
Response
{
  "data": {
    "createAoiFeatureConfiguration": {
      "id": "671a4d03997dfcdcd0fb9245",
      "aoiId": "4483ed4e-85e0-4312-86e3-f93c83cf175d",
      "featureType": "speedRange",
      "userId": "66b10d950da766cd0f9f628b",
      "featureParameters": {
        "filterType": "distance",
        "filterThreshold": 10,
        "minSpeed": 10,
        "maxSpeed": 20
      },
      "createdAt": "2021-09-01T00:00:00Z"
    }
  }
}

createUser

Description

The ability to create a user is limited by a caller's role. If a caller has the role

  • Superadmin: Caller can create a user in any organization
  • Admin: Caller can create a user in the same organization
  • User: Cannot create a user
Beta
This route is in beta and may change in the future.
Response

Returns a User

Arguments
Name Description
input - CreateUserInput!

Example

Query
mutation CreateUser($input: CreateUserInput!) {
  createUser(input: $input) {
    id
    email
    role
    name
    title
    organization
    engagement
    department
    createdByEmail
    createdAt
    lastLoginAt
    tosAcceptedAt
    groupIds
    annotationProjects
    previousEmails
    passwordSetAt
  }
}
Variables
{"input": CreateUserInput}
Response
{
  "data": {
    "createUser": {
      "id": "6753a2757a980b1e24652a41",
      "email": "annotator123@skylight.com",
      "role": "Admin",
      "name": "Michael Douglas",
      "title": "Annotator",
      "organization": "Fisheries",
      "engagement": "Vulcan",
      "department": "Annotation Project",
      "createdByEmail": "skylight-admin@allenai.org",
      "createdAt": "2024-12-07T01:18:45.363618Z",
      "lastLoginAt": "2024-12-07T01:18:45.363618Z",
      "tosAcceptedAt": "2024-12-07T01:18:45.363618Z",
      "groupIds": ["Fisheries Group"],
      "annotationProjects": [
        "sampled_trajectories_1",
        "sampled_trajectories_2"
      ],
      "previousEmails": ["previous_email@allenai.org"],
      "passwordSetAt": null
    }
  }
}

deleteAOI

Description
Beta
This route is in beta and may change in the future.
Response

Returns a DeleteResourceOutput

Arguments
Name Description
input - DeleteResourceInput!

Example

Query
mutation DeleteAOI($input: DeleteResourceInput!) {
  deleteAOI(input: $input) {
    deleted
  }
}
Variables
{"input": DeleteResourceInput}
Response
{"data": {"deleteAOI": {"deleted": false}}}

deleteAoiFeatureConfiguration

Description

Delete a Aoi feature configuration.

Response

Returns a DeleteResourceOutput

Arguments
Name Description
input - DeleteAoiFeatureConfigurationInput!

Example

Query
mutation DeleteAoiFeatureConfiguration($input: DeleteAoiFeatureConfigurationInput!) {
  deleteAoiFeatureConfiguration(input: $input) {
    deleted
  }
}
Variables
{"input": DeleteAoiFeatureConfigurationInput}
Response
{"data": {"deleteAoiFeatureConfiguration": {"deleted": false}}}

deleteEventFeedback

Description
Beta
This route is in beta and may change in the future.
Response

Returns a DeleteResourceOutput

Arguments
Name Description
input - DeleteResourceInput!

Example

Query
mutation DeleteEventFeedback($input: DeleteResourceInput!) {
  deleteEventFeedback(input: $input) {
    deleted
  }
}
Variables
{"input": DeleteResourceInput}
Response
{"data": {"deleteEventFeedback": {"deleted": false}}}

deleteUser

Description

The ability to delete a user is limited by a caller's role. If a caller has the role

  • Superadmin: Caller can delete a user in any organization
  • Admin: Caller can delete a user in the same organization"
  • User: Can delete only themselves
Beta
This route is in beta and may change in the future.
Response

Returns a DeleteResourceOutput

Arguments
Name Description
input - DeleteResourceInput!

Example

Query
mutation DeleteUser($input: DeleteResourceInput!) {
  deleteUser(input: $input) {
    deleted
  }
}
Variables
{"input": DeleteResourceInput}
Response
{"data": {"deleteUser": {"deleted": true}}}

updateAOI

Description
Beta
This route is in beta and may change in the future.
Response

Returns an AOIv2

Arguments
Name Description
input - UpdateAOIInput!

Example

Query
mutation UpdateAOI($input: UpdateAOIInput!) {
  updateAOI(input: $input) {
    id
    userId
    accessibleBy
    properties {
      aoiId
      aoiType
      name
      bounds
      areaKm2
      description
      uploadedFile
    }
    status
    geometry {
      type
      coordinates
      geometries {
        ...GeometryFragment
      }
    }
    createdAt
    updatedAt
  }
}
Variables
{"input": UpdateAOIInput}
Response
{
  "data": {
    "updateAOI": {
      "id": "1c1ea98b-9120-414a-a38f-e6e25964edf3",
      "userId": "66172431e2e75df065654449",
      "accessibleBy": ["66172431e2e75df065654449"],
      "properties": {
        "aoiId": "5139d9dc-a182-4735-b177-d8b40102fac7",
        "aoiType": "custom aoi",
        "name": "test123",
        "bounds": [
          -9.951789469291498,
          1.8919712867309215,
          -9.030892650559167,
          2.831652158503914
        ],
        "areaKm2": 6126.362265270218,
        "description": null,
        "uploadedFile": null
      },
      "status": "active",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [-9.363982989249422, 2.831652158503914],
            [-9.951789469291498, 2.6750847687409163],
            [-9.569715257264846, 1.8919712867309215],
            [-9.030892650559167, 2.03883641740741],
            [-9.363982989249422, 2.831652158503914]
          ]
        ]
      },
      "createdAt": "2024-04-16T20:01:41Z",
      "updatedAt": "2024-04-16T20:01:41Z"
    }
  }
}

updateAPIKey

Description

Update an existing API key.

Non superusers can only update their own API keys. Only the key name and status can be updated. Status transitions are restricted to active → deleted (deletion is terminal).

Response

Returns an ApiKeysOutput

Arguments
Name Description
id - String!
input - UpdateApiKeyInput!

Example

Query
mutation UpdateAPIKey(
  $id: String!,
  $input: UpdateApiKeyInput!
) {
  updateAPIKey(
    id: $id,
    input: $input
  ) {
    records {
      id
      userId
      keyName
      status
      createdAt
      updatedAt
      lastUsedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{
  "id": "xyz789",
  "input": UpdateApiKeyInput
}
Response
{
  "data": {
    "updateAPIKey": {
      "records": [
        {
          "id": "65a1b2c3d4e5f6789abcdef0",
          "userId": "6120123fbc8f8661da8a5332",
          "keyName": "My Production API Key",
          "status": "active",
          "createdAt": "2025-07-11T18:21:15.684000Z",
          "updatedAt": "2025-07-11T18:21:15.684000Z",
          "lastUsedAt": "2025-07-11T18:25:30.123456Z"
        },
        {
          "id": "65b2c3d4e5f6789abcdef012",
          "userId": "6120123fbc8f8661da8a5332",
          "keyName": "Development Testing Key",
          "status": "active",
          "createdAt": "2025-07-10T08:15:22.456789Z",
          "updatedAt": "2025-07-10T08:15:22.456789Z",
          "lastUsedAt": null
        },
        {
          "id": "65c3d4e5f6789abcdef01234",
          "userId": "6120123fbc8f8661da8a5332",
          "keyName": "Old Integration Key",
          "status": "deleted",
          "createdAt": "2025-07-01T12:00:00.000000Z",
          "updatedAt": "2025-07-05T16:30:45.789012Z",
          "lastUsedAt": "2025-07-05T16:25:30.567890Z"
        }
      ],
      "meta": {"pageNum": 1, "total": 3, "pageSize": 10}
    }
  }
}

updateUser

Description

The ability to update a user is limited by a caller's role. If a caller has the role

  • Superadmin: Caller can update a user in any organization
  • Admin: Caller can update a user in the same organization"
  • User: Can update their own information
Beta
This route is in beta and may change in the future.
Response

Returns a User

Arguments
Name Description
input - UpdateUserInput!

Example

Query
mutation UpdateUser($input: UpdateUserInput!) {
  updateUser(input: $input) {
    id
    email
    role
    name
    title
    organization
    engagement
    department
    createdByEmail
    createdAt
    lastLoginAt
    tosAcceptedAt
    groupIds
    annotationProjects
    previousEmails
    passwordSetAt
  }
}
Variables
{"input": UpdateUserInput}
Response
{
  "data": {
    "updateUser": {
      "id": "6753a2757a980b1e24652a41",
      "email": "annotator123@skylight.com",
      "role": "Admin",
      "name": "Michael Douglas",
      "title": "Annotator",
      "organization": "Fisheries",
      "engagement": "Vulcan",
      "department": "Annotation Project",
      "createdByEmail": "skylight-admin@allenai.org",
      "createdAt": "2024-12-07T01:18:45.363618Z",
      "lastLoginAt": "2024-12-07T01:18:45.363618Z",
      "tosAcceptedAt": "2024-12-07T01:18:45.363618Z",
      "groupIds": ["Fisheries Group"],
      "annotationProjects": [
        "sampled_trajectories_1",
        "sampled_trajectories_2"
      ],
      "previousEmails": ["previous_email@allenai.org"],
      "passwordSetAt": null
    }
  }
}

upsertEventFeedback

Description
Beta
This route is in beta and may change in the future.
Response

Returns an EventFeedback

Arguments
Name Description
input - UpsertEventFeedbackInput!

Example

Query
mutation UpsertEventFeedback($input: UpsertEventFeedbackInput!) {
  upsertEventFeedback(input: $input) {
    id
    eventId
    eventType
    comments
    rating
    additionalContext
    imageUrl
    userId
    email
    updatedAt
  }
}
Variables
{"input": UpsertEventFeedbackInput}
Response
{
  "data": {
    "upsertEventFeedback": {
      "id": "B:419536536:1692389877:2581730:988125:1724892408:1724906604-64ffab94135547b4e0fc04c8",
      "eventId": "B:224313000:1694136001:1005579:713203:1724813243:1724813443",
      "eventType": "fishing_activity_history",
      "comments": "This does not look like fishing behavior.",
      "rating": "BAD",
      "additionalContext": "transiting",
      "imageUrl": "https://cdn.sky-prod-a.skylight.earth/sat-service/sentinel2/detections/2024/08/27/S2B_MSIL1C_20240827T133839_N0511_R124_T21HXB_20240827T165754.SAFE/image_chips/S2B_MSIL1C_20240827T133839_N0511_R124_T21HXB_20240827T165754.SAFE_24_tci.png",
      "userId": "64ffab94135547b4e0fc04c8",
      "email": "my_email@gmail.com",
      "updatedAt": "2024-08-29T10:47:20.232"
    }
  }
}

Types

AOIv2

Description
Beta
This type is in beta and may change in the future.

An Area of Interest (AOI) in Skylight represents a region of interest on the Earth's surface. AOIs can be used to filter events to a specific region. More information about AOIs can be found here.

This object is returned by the following queries and mutations:

Fields
Field Name Description
id - String Unique identifier for the AOI
userId - String User ID of the AOI owner
accessibleBy - [String] List of Skylight user IDs for those users that have access to the Area of Interest (AOI)
properties - AoiPropertiesV2 Additional AOI properties
status - AoiStatus AOI status (possible values are 'active' and 'inactive'). This is set on creation and cannot be changed. It is set to inactive if the AOI is too large to generate events.
geometry - Geometry AOI geometry in GeoJSON format
createdAt - String Date and time the AOI was created
updatedAt - String Date and time the AOI was last updated
Example
{
  "id": "1c1ea98b-9120-414a-a38f-e6e25964edf3",
  "userId": "66172431e2e75df065654449",
  "accessibleBy": ["66172431e2e75df065654449"],
  "properties": {
    "aoiId": "5139d9dc-a182-4735-b177-d8b40102fac7",
    "aoiType": "custom aoi",
    "name": "test123",
    "bounds": [
      -9.951789469291498,
      1.8919712867309215,
      -9.030892650559167,
      2.831652158503914
    ],
    "areaKm2": 6126.362265270218,
    "description": null,
    "uploadedFile": null
  },
  "status": "active",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [-9.363982989249422, 2.831652158503914],
        [-9.951789469291498, 2.6750847687409163],
        [-9.569715257264846, 1.8919712867309215],
        [-9.030892650559167, 2.03883641740741],
        [-9.363982989249422, 2.831652158503914]
      ]
    ]
  },
  "createdAt": "2024-04-16T20:01:41Z",
  "updatedAt": "2024-04-16T20:01:41Z"
}

ActivityClassificationKeywordFilter

Fields
Input Field Description
eq - TrackSubpathActivityClassification Equal to
neq - TrackSubpathActivityClassification Not equal to
inc - [TrackSubpathActivityClassification] Included in list
ninc - [TrackSubpathActivityClassification] Not included in list
Example
{"eq": "anchored", "neq": "anchored", "inc": ["anchored"], "ninc": ["anchored"]}

AisClass

Description

The class of AIS inferred from the message types received.

Values
Enum Value Description

A

Class A Transponder

B

Class B Transponder

BOTH

Ambiguous Transponder (No specific class A or B message types received.)

NA

Not Available

UNKNOWN

Unknown
Example
"A"

AisCorrelation

Fields
Field Name Description
trackId - String!
point - AisCorrelationPoint!
mmsi - Int!
distance - Float!
Example
{
  "trackId": "abc123",
  "point": AisCorrelationPoint,
  "mmsi": 123,
  "distance": 123.45
}

AisCorrelationPoint

Fields
Field Name Description
lat - Float!
lon - Float!
mmsi - String!
Example
{
  "lat": 987.65,
  "lon": 987.65,
  "mmsi": "xyz789"
}

AoiFeatureConfiguration

Description

AoiFeatureConfiguration is a model that defines settings for Aoi features, like speed range and Aoi entry events. More information about Aois can be found here.

Creating a speed range configuration will cause an event to be triggered when a vessel crosses the threshold for the speed range.

Creating an entry event configuration will cause an event to be triggered when a vessel enters the Aoi.

This object is non-updatable. To update a configuration, delete the existing one and create a new one with the desired settings.

This object is dynamic. Depending on the value of featureType, the featureParameters field will have different properties.

Fields
Field Name Description
id - String! Unique identifier for the Aoi feature configuration
aoiId - String! Aoi ID
featureType - FeatureType! Feature type (possible values are 'aoiEntry' and 'speedRange')
userId - String! User ID of the Aoi feature configuration owner
featureParameters - SpeedRangeFeatureParameters Feature specific parameters, currently only used for speedRange
createdAt - String! Date and time the Aoi feature configuration was created
Example
{
  "id": "671a4d03997dfcdcd0fb9245",
  "aoiId": "4483ed4e-85e0-4312-86e3-f93c83cf175d",
  "featureType": "speedRange",
  "userId": "66b10d950da766cd0f9f628b",
  "featureParameters": {
    "filterType": "distance",
    "filterThreshold": 10,
    "minSpeed": 10,
    "maxSpeed": 20
  },
  "createdAt": "2021-09-01T00:00:00Z"
}

AoiFeatureConfigurationMatch

Fields
Field Name Description
aoiId - String The ID of the AOI that this event was generated on
aoiName - String The Name of the AOI that this event was generated on
userId - String The UserId for the user who this event was generated for
configId - String The AoiFeatureConfiguration Id that generated this event
Example
{
  "aoiId": "f18c353e-bc58-4968-8ff7-1f7a38304911",
  "aoiName": "test network",
  "userId": "62e15e3d59f6d2357a3f04f2",
  "configId": "638b6453ccb2dc4df51d63b0"
}

AoiFeatureConfigurationSortBy

Values
Enum Value Description

createdAt

Sort by Aoi feature configuration created date
Example
"createdAt"

AoiPropertiesV2

Fields
Field Name Description
aoiId - String Area of Interest ID (unique to the Skylight platform)
aoiType - String The type of AOI
name - String Name assigned by the AOI creator
bounds - [Float] Boundary coordinates of AOI
areaKm2 - Float Size of the AOI in square kilometers
description - String Description assigned by the AOI creator
uploadedFile - String Name of the uploaded KML file, if applicable
Example
{
  "aoiId": "c433769f-f980-4f4f-a83a-b2b1ffbc9e52",
  "aoiType": "custom aoi",
  "name": "Monitoring Region A",
  "bounds": [0, 0, 1, 1],
  "areaKm2": 37398.848690181905,
  "description": "AOI for our marine protected area",
  "uploadedFile": "file.kml"
}

AoiSortBy

Values
Enum Value Description

name

Sort by AOI name

created

Sort by AOI created date

updated

Sort by AOI updated date

areaKm2

Sort by AOI area size
Example
"name"

AoiStatus

Values
Enum Value Description

active

AOI will generate events

inactive

AOI will not generate events
Example
"active"

AoiVisitEventDetails

Description

Details of the eventDetails field of an EventV2 where eventType is 'aoi_visit'.

See the Skylight Help Center - Entry for more details about AOI Visit Events.

Fields
Field Name Description
entryHeading - Int! The heading, in compass degrees, of the vessel when they entered the AOI
endHeading - Int The heading, in compass degress, of the vessel when they exited the AOI
entrySpeed - Float! The speed of the vessel, as reported by AIS in knots, when it entered the AOI
Example
{"entryHeading": 236, "endHeading": 242, "entrySpeed": 6.099999904632568}

ApiKey

Description

An API Key is used to authenticate requests without requiring user login credentials. This model contains all API key related metadata. All timestamps are ISO 8601 UTC (with μs)

Return by API key endpoints via ApiKeysOutput:

Fields
Field Name Description
id - String Unique db identifier for the API key. Mongodb bson id that has been converted to a string.
userId - String Owner’s user ID; only they (or superadmins) can manage this key.
keyName - String User-provided human-readable name (3–1000 chars)
status - ApiKeyStatus Current state. Only active → deleted transitions allowed.
createdAt - String
updatedAt - String
lastUsedAt - String Last use timestamp; null until first use.
Example
{
  "id": "507f1f77bcf86cd799439011",
  "userId": "6120123fbc8f8661da8a5332",
  "keyName": "My Production API Key",
  "status": "active",
  "createdAt": "2025-07-11T18:21:15.684000Z",
  "updatedAt": "2025-07-11T18:21:15.684000Z",
  "lastUsedAt": "2025-07-11T18:25:30.123456Z"
}

ApiKeyStatus

Values
Enum Value Description

active

Can be used to authenticate

deleted

Permanently deleted, cannot be used for authentication
Example
"active"

ApiKeysOutput

Fields
Field Name Description
records - [ApiKey] List of ApiKeys
meta - MetaV2 Pagination metadata (total count, limit, offset)
Example
{
  "records": [
    {
      "id": "65a1b2c3d4e5f6789abcdef0",
      "userId": "6120123fbc8f8661da8a5332",
      "keyName": "My Production API Key",
      "status": "active",
      "createdAt": "2025-07-11T18:21:15.684000Z",
      "updatedAt": "2025-07-11T18:21:15.684000Z",
      "lastUsedAt": "2025-07-11T18:25:30.123456Z"
    },
    {
      "id": "65b2c3d4e5f6789abcdef012",
      "userId": "6120123fbc8f8661da8a5332",
      "keyName": "Development Testing Key",
      "status": "active",
      "createdAt": "2025-07-10T08:15:22.456789Z",
      "updatedAt": "2025-07-10T08:15:22.456789Z",
      "lastUsedAt": null
    },
    {
      "id": "65c3d4e5f6789abcdef01234",
      "userId": "6120123fbc8f8661da8a5332",
      "keyName": "Old Integration Key",
      "status": "deleted",
      "createdAt": "2025-07-01T12:00:00.000000Z",
      "updatedAt": "2025-07-05T16:30:45.789012Z",
      "lastUsedAt": "2025-07-05T16:25:30.567890Z"
    }
  ],
  "meta": {"pageNum": 1, "total": 3, "pageSize": 10}
}

AtlasEntityType

Values
Enum Value Description

BUOY

UNCLASSIFIED

UNKNOWN

VESSEL

Example
"BUOY"

BaseDetectionEventDetails

Fields
Field Name Description
dataSource - DataSource! The data source for this satellite imagery
detectionType - DetectionType! Whether or not we were able to correlate the Satellite Detection against a vessel's AIS position data
estimatedLength - Float The estimated length of the vessel as predicted by an AI Model
estimatedSpeedKts - Float The estimated ground speed of the vessel in knots as predicted by an AI Model
estimatedVesselCategory - VesselCategory The estimated vessel category (ex. tanker, sar, ... etc) as predicted by an AI Model
frameIds - [String]! The Satellite Frame IDs that this detection was found in. This is typically one id, but can be multiple if the data provider overlaps frames (this is found in Sentinel-2 and Landsat 8/9 currently
heading - Int The estimated heading of the vessel as predicted by an AI Model
imageUrl - String The URL to a cropped piece of the Satellite imagery showing the detected vessel as seen by the AI Model.
vendorVessel - VendorVesselV2 This contains data specific to the satellite source, the AI model, and postprocessing steps that should be considered Internal Only and subject to change without notice
Example
{
  "dataSource": "landsat_8_9",
  "detectionType": "ais_correlated",
  "estimatedLength": 987.65,
  "estimatedSpeedKts": 123.45,
  "estimatedVesselCategory": "cargo",
  "frameIds": ["abc123"],
  "heading": 987,
  "imageUrl": "xyz789",
  "vendorVessel": LandsatVendorVessel
}

Boolean

Description

The Boolean scalar type represents true or false.

Example
true

CoordinatesJSON

Description

The Coordinates associated with a valid GeoJSON geometry object. See RFC 7946 for more information.

  • If geometry.type=Point, then this is [Float]
  • If geometry.type=LineString, then this is [[Float]]
  • If geometry.type=Polygon, then this is [[[Float]]]
  • If geometry.type=Multipolygon, then this is [[[[Float]]]]
Example
CoordinatesJSON

CreateAOIInput

Description

Input used to create an AOI

Fields
Input Field Description
name - String! Name of the AOI
description - String! Description of the AOI
geometry - GeometryInput! Geometry of the AOI
Example
{
  "name": "my-aoi",
  "description": "This is my new AOI",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [-89.15052, 20.4076],
        [-86.712234, 20.841209],
        [-87.004501, 22.347897],
        [-89.468567, 21.917629],
        [-89.15052, 20.4076]
      ]
    ]
  }
}

CreateAoiFeatureConfigurationInput

Description

CreateAoiFeatureConfigurationInput is the input for creating an Aoi feature configuration.

Fields
Input Field Description
aoiId - String! Aoi ID
featureType - FeatureType! Feature type, possible values are aoiEntry and speedRange
featureParameters - SpeedRangeFeatureParametersInput Feature specific parameters, currently only used for speedRange
Example
{
  "aoiId": "xyz789",
  "featureType": "speedRange",
  "featureParameters": {
    "filterType": "distance",
    "filterThreshold": 10,
    "minSpeed": 10,
    "maxSpeed": 20
  }
}

CreateApiKeyInput

Fields
Input Field Description
keyName - String! Human-readable name for user to differentiate amongst their keys (3-1000 characters)
Example
{"keyName": "My Production API Key"}

CreateApiKeyOutput

Fields
Field Name Description
records - [CreateApiKeyOutputInstance] Single created API key with plain text token
meta - MetaV2 Standard pagination wrapper. total is always 1 or 0
Example
{
  "records": [CreateApiKeyOutputInstance],
  "meta": MetaV2
}

CreateApiKeyOutputInstance

Description

Contains the plain text API key (only shown on creation). Returned via CreateApiKeyOutput.

Fields
Field Name Description
id - String Unique db identifier for the API key. Mongodb bson id that has been converted to a string.
apiKey - String The plain text API key - must be stored by user as it will not be shown again
keyName - String User-provided human-readable name
createdAt - String
Example
{
  "id": "507f1f77bcf86cd799439011",
  "apiKey": "sk_test_abcd1234efgh5678ijkl9012mnop3456",
  "keyName": "My Production API Key",
  "createdAt": "2025-07-11T18:21:15.684000Z"
}

CreateUserInput

Description

Input used to create a user

Fields
Input Field Description
email - String! Email of the user
role - UserRole Role of the user
password - String Password set by the user
engagement - String Engagement of the user
organization - String Organization of the user
groupIds - [String] Group ids the user is associated with
annotationProjects - [String] Annotation projects the user is associated with
name - String Name of the user
title - String Job title of the user
department - String Department associated with the user
Example
{
  "email": "annotator123@skylight.com",
  "role": "Admin",
  "password": null,
  "engagement": "Vulcan",
  "organization": "Fisheries",
  "groupIds": ["Fisheries Group"],
  "annotationProjects": ["sampled_trajectories_1", "sampled_trajectories_2"],
  "name": "Michael Douglas",
  "title": "Annotator",
  "department": "Annotation Project"
}

DarkRendezvousEventDetails

Description

Details of the eventDetails field of an EventV2 where eventType is 'dark_rendezvous'.

See the Skylight Help Center - Dark Rendezvous for more details about Dark Rendezvous events.

Fields
Field Name Description
noneScore - Float!
osrScore - Float! The confidence of the AI model that this event is a Rendezvous
fishingScore - Float!
mlModelName - String!
dist2Coast - Int
Example
{
  "noneScore": 0.111,
  "osrScore": 0.781,
  "fishingScore": 0.107,
  "mlModelName": "three-class-model-validation-20220928_1753",
  "dist2Coast": 123
}

DataSource

Description

For Satellite Data in Skylight, the DataSource enumeration provides the list of the source for the satellite data

Values
Enum Value Description

landsat_8_9

NASA's Landsat 8 and Landsat 9 satellites. Optical Imagery from the OLI sensor

sentinel1

ESA's Sentinel1 satellite. Synthetic Aperture Radar (SAR) data.

sentinel2

ESA's Sentinel2 satellites. Optical Imagery from the MSI sensor.

noaa

VIIRS data from the JPSS-1 / NOAA_20 Satellite.

noaa_21

VIIRS data from the JPSS-2 / NOAA_21 Satellite

nasa

VIIRS data from the Sunomi NPP Satellite

maxar

Example
"landsat_8_9"

DateFilter

Description

This query object is used to filter date values. For example, the following field returns records created on January 1, 2024:

created: {gt: "2024-01-01T08:00:00Z", lt: "2024-01-02T08:00:00Z"}

Fields
Input Field Description
lt - String Less than
gt - String Greater than
lte - String Less than or equal to
gte - String Greater than or equal to
exists - Boolean Filters for absence/presence of a value. exists=False can be paired with a range condition to look for records that meet a criteria, OR do not have a value in the date field. exists=True cannot be paired with a range condition.
Example
{
  "lt": "2024-01-01T08:00:00Z",
  "gt": "2024-01-01T08:00:00Z",
  "lte": "2024-01-01T08:00:00Z",
  "gte": "2024-01-01T08:00:00Z",
  "exists": true
}

DeleteAoiFeatureConfigurationInput

Description

DeleteAoiFeatureConfigurationInput is the input for deleting an Aoi feature configuration.

Fields
Input Field Description
id - String! Aoi feature configuration ID
Example
{"id": "xyz789"}

DeleteResourceInput

Fields
Input Field Description
id - String! ID of the resource
Example
{"id": "xyz789"}

DeleteResourceOutput

Fields
Field Name Description
deleted - Boolean! True if the resource was successfully deleted
Example
{"deleted": false}

DetectionType

Values
Enum Value Description

ais_correlated

Whether a satellite detection was successfully correlated with a vessel identified via AIS. 'dark' indicates the detection was not correlated with AIS.

dark

Example
"ais_correlated"

EmbeddedVessel

Fields
Field Name Description
category - String Vessel category (derived from the AIS Shiptype)
class - String Vessel class (possible values are 'buoy' and 'vessel')
country_filter - [String] ISO 3166-1 alpha-3 country code (from AIS position messages)
display_country - String Full country name (from AIS position messages)
length - Int Vessel length in meters (from AIS static messages)
mmsi - Int Maritime Mobile Service Identity number (from AIS position messages)
name - String Vessel name (from AIS static messages)
type - String Vessel type (from AIS static messages)
vessel_id - ID Vessel ID (unique to the Skylight platform)
track_id - String Vessel track ID (unique to the Skylight platform)
Example
{
  "category": "tanker",
  "class": "vessel",
  "country_filter": ["ESP"],
  "display_country": "Spain",
  "length": 26,
  "mmsi": 368156470,
  "name": "PEPE LASAL UNO",
  "type": "other fishing",
  "vessel_id": "B:224072680:1509689832:1801369:1285668",
  "track_id": "B:224072680:1683616772:1769799:1267433"
}

EmbeddedVessels

Fields
Field Name Description
vessel_0 - EmbeddedVessel Vessel-specific information for the first vessel involved in the event
vessel_1 - EmbeddedVessel Vessel-specific information for the second vessel involved in the event (applies only for 'standard_rendezvous' event_type)
Example
{
  "vessel_0": "'vessel_0': { 'vessel_id': 'B:209645000:1509683160:2130094:1246471'}",
  "vessel_1": "'vessel_1': { 'vessel_id': 'B:247374600:1509507784:1926115:1342970'}"
}

Engagement

Fields
Field Name Description
name - String! Name of the user engagement
Example
{"name": "NATO Allied Air Command"}

EngagementSortBy

Values
Enum Value Description

name

Sort user engagements by engagement name
Example
"name"

Event

Fields
Field Name Description
event_id - String! Event ID (unique to the Skylight platform)
event_type - EventType The type of event (example: 'dark_rendezvous')
start - StartEnd Event start location and timestamp
vessels - EmbeddedVessels Vessel-specific information for the vessels involved in the event
event_details - EventDetails Event-specific information
end - StartEnd Event end location and timestamp
user_params - UserParams Additional event parameters (applies only for 'aoi_visit' and 'speed_range' event types)
Example
{
  "event_id": "A:2:B:574818815:1583069236:2869119:991497:B:941001963:1681300510:2891104:996132:1723418820",
  "event_type": "standard_rendezvous",
  "start": "'point': { 'lat': -20.695788333333333, 'lon': -105.37488166666667},",
  "vessels": "'vessel_0': { 'vessel_id': 'B:232301543:1697131710:676214:725822', 'track_id': 'B:232301543:1697131710:676214:725822'}",
  "event_details": "'data_source': 'noaa', 'nanowatts': 16.51",
  "end": "'point': { 'lat': 17.78}",
  "user_params": "'aoi_id': '5823daa5-e036-4c6c-acae-e20bdbdc7175', 'user_id': '6120123fbc8f8661da8a5332'"
}

EventConfig

Fields
Field Name Description
eventTypeId - EventType! Event Type name, primary key
eventTitle - String! Human readable title of this event type
eventTypeDescription - String Description of the event type
eventIconUrl - String! Full URL to the png icon image for this event type
groupId - String! Group ID for this event type. This determines how event types show up in the event type filter
eventSubTypeId - String The subtype of this event type. Only used for satellite detections
displayDuration - Boolean! If we should show the duration of the event in the event modal
displayInProgress - Boolean! If we should indicate events with no end time as In Progress
availableOverApi - Boolean! If this event type is available to clients of the Skylight API
notifications - Boolean! If this event type is eligible for sending notifications
permissionLevel - UserRole! Which user accounts are allowed to see this event type
showSatelliteFrames - Boolean! Flag indicating if satellite frames are shown for this event type
showSatelliteImageChip - Boolean! Flag indicating that the event has an image associated with it (satellite detection)
showSatelliteEstimatedAttributes - Boolean! If vessel attributes estimated from the CV model are shown
Example
{
  "eventTypeId": "dark_rendezvous",
  "eventTitle": "xyz789",
  "eventTypeDescription": "xyz789",
  "eventIconUrl": "xyz789",
  "groupId": "abc123",
  "eventSubTypeId": "xyz789",
  "displayDuration": false,
  "displayInProgress": true,
  "availableOverApi": false,
  "notifications": true,
  "permissionLevel": "Superadmin",
  "showSatelliteFrames": true,
  "showSatelliteImageChip": false,
  "showSatelliteEstimatedAttributes": true
}

EventConfigOutput

Fields
Field Name Description
records - [EventConfig!]!
Example
{"records": [EventConfig]}

EventDetails

Fields
Field Name Description
average_speed - Float Vessel average speed in knots (applies only for speed_range event_type)
data_source - String Satellite from which the frame was collected (applies only for detection event types)
distance - Float Vessel distance traveled in Nautical Miles (applies only for 'speed_range' event_type)
duration - Int Event duration in minutes (applies only for 'speed_range' event_type)
correlated - Boolean Whether a satellite detection was successfully correlated with a vessel identified via AIS (applies only for detection event types)
estimated_length - Float Value will always be null
image_url - String Image chip URL location (applies only for detection event types)
meters_per_pixel - Float Image chip resolution (applies only for detection event types)
orientation - Float Image chip compass orientation (applies only for detection event types)
entry_speed - String Vessel speed at event start in knots (applies only for 'aoi_visit' event_type)
entry_heading - String Vessel heading at event start (applies only for 'aoi_visit' event_type)
end_heading - String Vessel heading at event end (applies only for 'aoi_visit' event_type)
visit_type - String Type of entry event (possible values are 'start' and 'end') (applies only for 'aoi_visit' event_type)
radiance_nw - Float Radiance in nanowatts per square centimeter per steradian (nW/cm²/sr) (applies only for 'viirs' event_type)
nanowatts - Float Duplicates radiance_nw (see above)
satellite_name - String Value will always be null
scan_angle - [Float] Scan angle array. Returned values are: pitch, yaw, roll (applies only for 'viirs' event_type)
vendor_vessel - VendorVessel Additional details (applies only for 'viirs' event_type)
Example
{
  "average_speed": 6.364705871133244,
  "data_source": "sentinel1",
  "distance": 30.017297236305332,
  "duration": 9486,
  "correlated": true,
  "estimated_length": null,
  "image_url": "https://cdn.sky-int-a.skylight.earth/sat-service/sentinel1/detections/2024/08/10/S1A_IW_GRDH_1SDV_20240810T001338_20240810T001403_055143_06B85A_5829.SAFE/image_chips/S1A_IW_GRDH_1SDV_20240810T001338_20240810T001403_055143_06B85A_5829.SAFE_0_vh.png",
  "meters_per_pixel": 9,
  "orientation": 0,
  "entry_speed": 12.199999809265137,
  "entry_heading": 51,
  "end_heading": 1,
  "visit_type": "end",
  "radiance_nw": 24.38,
  "nanowatts": 24.38,
  "satellite_name": null,
  "scan_angle": [
    "-0.00865897722542286, -0.00865897722542286, -0.00865897722542286]"
  ],
  "vendor_vessel": "'clear_sky_confidence': 1, 'moonlight_illumination': 86"
}

EventDetailsFilter

Description

The EventDetailsFilter object allows you to query for events based on event-type specific metadata on the events. The fields here match those that can be returned in eventDetails on an EventV2 object, however are prefixed by the type of events that they apply to.

When applying one of these filters, the filter criteria applies only to events of the relevant type. For example, in the this query:

/* This is Bad!! */
searchEventsV2(input: { speedRangeAverageSpeed: { gt: 5.0 }}) {
    events {
        ... # your fields here
    }
}

This query would return all Speed Range events where the speedRangeAverageSpeed is greater than 5.0. However, it would always return all events of all other types! This is probably not what you wanted! Instead you should limit your query to specific event types, For example:

searchEventsV2(input: {
    eventType: { eq: "speed_range" },
    speedRangeAverageSpeed: { gt: 5.0 }
}) {
    events {
        ... # your fields here
    }
}

For each available input field below, see the documentation for that specific Event Details type for more information.

Fields
Input Field Description
fishingScore - FloatFilter See FishingEventDetails
speedRangeAverageSpeed - FloatFilter See SpeedRangeEventDetails
speedRangeDistance - FloatFilter See SpeedRangeEventDetails
speedRangeDurationSeconds - FloatFilter See SpeedRangeEventDetails
maxarRfFrequencyMhz - FloatFilter
maxarVesselLengthMeters - FloatFilter
maxarVesselWidthMeters - FloatFilter
maxarVesselType - KeywordFilter
detectionDataSource - KeywordFilter See BaseDetectionEventDetails
detectionType - KeywordFilter See BaseDetectionEventDetails
detectionEstimatedLength - FloatFilter See BaseDetectionEventDetails
detectionFrameId - KeywordFilter See BaseDetectionEventDetails
detectionHeading - IntFilter See BaseDetectionEventDetails
detectionScore - FloatFilter See ImageryMetadataEventDetails
detectionDistanceToCoastM - IntFilter See ImageryMetadataEventDetails
viirsRadianceNw - FloatFilter See ViirsEventDetails
Example
{
  "fishingScore": FloatFilter,
  "speedRangeAverageSpeed": FloatFilter,
  "speedRangeDistance": FloatFilter,
  "speedRangeDurationSeconds": FloatFilter,
  "maxarRfFrequencyMhz": FloatFilter,
  "maxarVesselLengthMeters": FloatFilter,
  "maxarVesselWidthMeters": FloatFilter,
  "maxarVesselType": KeywordFilter,
  "detectionDataSource": KeywordFilter,
  "detectionType": KeywordFilter,
  "detectionEstimatedLength": FloatFilter,
  "detectionFrameId": KeywordFilter,
  "detectionHeading": IntFilter,
  "detectionScore": FloatFilter,
  "detectionDistanceToCoastM": IntFilter,
  "viirsRadianceNw": FloatFilter
}

EventFeedback

Fields
Field Name Description
id - String! ID of the Event Feedback
eventId - String! Event ID (unique to the Skylight platform)
eventType - EventType! The type of event (example: dark_rendezvous)
comments - String A user provided string about the feedback. This is unstructured and can be anything the user wants to provide.
rating - EventFeedbackRating

Feedback rating filter. Valid values:

  • GOOD
  • BAD
  • UNSURE
additionalContext - String Clarifying information on the selected feedback rating. This is typically a fixed number of allowed values per event type.
imageUrl - String URL path for the image chip associated with the event
userId - String! ID of the user that created the feedback
email - String! Email address of the user that created the feedback
updatedAt - String! Timestamp of last update to the feedback
Example
{
  "id": "B:419536536:1692389877:2581730:988125:1724892408:1724906604-64ffab94135547b4e0fc04c8",
  "eventId": "B:224313000:1694136001:1005579:713203:1724813243:1724813443",
  "eventType": "fishing_activity_history",
  "comments": "This does not look like fishing behavior.",
  "rating": "BAD",
  "additionalContext": "transiting",
  "imageUrl": "https://cdn.sky-prod-a.skylight.earth/sat-service/sentinel2/detections/2024/08/27/S2B_MSIL1C_20240827T133839_N0511_R124_T21HXB_20240827T165754.SAFE/image_chips/S2B_MSIL1C_20240827T133839_N0511_R124_T21HXB_20240827T165754.SAFE_24_tci.png",
  "userId": "64ffab94135547b4e0fc04c8",
  "email": "my_email@gmail.com",
  "updatedAt": "2024-08-29T10:47:20.232"
}

EventFeedbackRating

Values
Enum Value Description

GOOD

Feedback rating: GOOD

BAD

Feedback rating: BAD

UNSURE

Feedback rating: UNSURE
Example
"GOOD"

EventFeedbackSortBy

Values
Enum Value Description

eventType

Sort by feedback eventType

rating

Sort by feedback rating

email

Sort by user that created the feedback

updatedAt

Sort by feedback by time of last update
Example
"eventType"

EventType

Values
Enum Value Description

dark_rendezvous

Transhipment event where only one vessel is broadcasting AIS

fishing_activity_history

Fishing event

speed_range

Speed range event in an Area of Interest (AOI)

standard_rendezvous

Transhipment event where both vessels are broadcasting AIS

aoi_visit

Entry event in an Area of Interest (AOI)

viirs

Visible Infrared Imaging Radiometer Suite (VIIRS) satellite detection event

sar_sentinel1

European Space Agency Sentinel-1 satellite detection event

eo_sentinel2

European Space Agency Sentinel-2 satellite detection event

eo_landsat_8_9

NASA Landsat 8 or 9 satellite detection event.

atlas_fishing

Fishing event from ATLAS model

port_visit

A vessel visiting a Port

eo_maxar

Optical Imagery from Maxar

sar_maxar

Radar data from Maxar

rf_maxar

RF Data from Maxar
Example
"dark_rendezvous"

EventV2

Description

An Event in Skylight represents a real-world occurrence observed by the Skylight platform through our data sources. Each event includes:

  • Timeframe: Defined by the start.time and end.time fields indicating when the event was first and last observed by Skylight. For Satellite detection events these times are always equal to each other. For AIS based events, these timestamps are the first and last AIS position messages that qualified for the event.
  • Location: Defined by the start.location and end.location fields indicating where the event was first and last observed by Skylight. For Satellite detection events these locations are always equal to each other. For AIS based events, these locations are the first and last AIS position messages that qualified for the event.
  • Type: Defined by the eventType field indicating the type of event that was observed. See EventType for available values and more information.
  • Event Details: Each type of event has specific metadata associated with it. This metadata is stored in the eventDetails field. See EventV2Details for the available types of event details.
  • Vessels: If we know the identity of vessels involved in this event, from AIS data, it will be included in the vessels field. For Satellite Detection events, we attempt to correlate the detection with an AIS signal to determine the vessel. If no match is available, this is considered an uncorrelated detection and no vessel information will appear on the event. Most events will have a single vessel (in vessel_0). Standard Rendezvous events will have two vessels (in vessel_0 and vessel_1). There is no specific ordering between the vessels for Standard Rendezvous.

Search for Events using the searchEventsV2 query.

Fields
Field Name Description
eventId - String! Unique ID for this event. These values are autogenerated by the Skylight platform and the format of them can change at any time
eventType - EventType! The type of event. See EventType for the available values
start - StartEnd! The time and location where this event started
end - StartEnd The time and location where this event ended. For AIS generated events this is the last location of the vessel that qualified for this event type. For Satellite Detection events this is always equal to the start time.
expiresAt - String
latest - StartEnd
vessels - EventV2Vessels! If we know the identify of vessels involved in this event, from AIS data, it will be included here. Un-correlated Satellite Detections will have no vessels. Most events will have a single vessel (in vessel_0, and Standard Rendezvous will have two vessels. There is no specific ordering between the vessels for Standard Rendezvous.
eventDetails - EventV2Details! Event Details contains information and metadata about this event that is specific to the event type. The type of information available here will vary by the eventType.
aoiFeatureConfiguration - AoiFeatureConfigurationMatch For Events that are generated based on AOIs (speed_range and aoi_visit) this contains information about the AoiFeatureConfiguration that generated this event
createdAt - String! The time this event was first inserted into the Skylight Database
updatedAt - String! The last time that this event was updated.
Example
{
  "eventId": "d1dfee43-9748-46a3-b614-623e5f096f9d",
  "eventType": "fishing_activity_history",
  "start": {
    "time": "2024-11-04T09:29:55+00:00",
    "point": {"lat": 2.06061, "lon": 3.72276}
  },
  "end": {
    "time": "2024-11-04T10:33:48+00:00",
    "point": {"lat": 2.16146, "lon": 3.71928}
  },
  "expiresAt": null,
  "latest": {
    "time": "2024-11-04T10:33:48+00:00",
    "point": {"lat": 2.16146, "lon": 3.71928}
  },
  "vessels": {
    "vessel0": {
      "trackId": "B:657179400:1672704302:1844221:946895",
      "vesselId": "B:657179400:1681457266:1864039:936540",
      "name": "MV LOUISA AIS2",
      "imo": 9878577,
      "mmsi": 657179400,
      "category": "unknown",
      "type": "unknown",
      "class": "vessel",
      "countryCode": ["NGA"],
      "displayCountry": "Nigeria",
      "displayName": "MV LOUISA AIS2"
    }
  },
  "eventDetails": {
    "modelVersion": "5ee7597_2024-11-04_03-47-57",
    "modelName": "ATLAS-Activity-Real-Time_no_git_hash_2024-09-06-19-56-12_epoch2.pt",
    "fishingScore": 0.9478346705436707,
    "params": {
      "startTime": "2024-10-05T10:33:47Z",
      "endTime": "2024-11-04T10:33:47Z",
      "numPositions": 2088,
      "position_upper_limit": 2048,
      "position_lower_limit": 600,
      "vessel": {"name": "MV LOUISA AIS2", "flag": "NGA", "category": 9999}
    },
    "subpathIds": ["f425f263-4951-4a9a-ac49-92aa55874ded"]
  },
  "aoiFeatureConfiguration": AoiFeatureConfigurationMatch,
  "createdAt": "2024-11-04T18:25:37.433698+00:00",
  "updatedAt": "2024-11-04T18:25:37.433737+00:00"
}

EventV2Details

Description

Different Event Types have different event-type specific metadata associated with them. This data is stored in the eventDetails field on the event. The type of data available here will vary by the eventType of the event.

Referenced from the EventV2 type.

Event Type Event Details Model
fishing_activity_history FishingEventDetails
dark_rendezvous DarkRendezvousEventDetails
standard_rendezvous No Event Details
speed_range SpeedRangeEventDetails
aoi_visit AoiVisitEventDetails
viirs ViirsEventDetails
sar_sentinel1 ImageryMetadataEventDetails
eo_sentinel2 ImageryMetadataEventDetails
eo_landsat8_9 ImageryMetadataEventDetails
Example
RfMaxarDetectionEventDetails

EventV2Vessel

Description

For Events that can be correlated with a specific vessel, this type contains summarized information about that vessel.

Fields
Field Name Description
vesselId - String The unique identifier for this vessel
trackId - String! The Track that this event occurred on. A Vessel can have many tracks in Skylight.
name - String The name of this vessel as reported by AIS static data
mmsi - Int The Maritime Mobile Service Identity (MMSI) as reported from the AIS position data for this event and was used to connect to AIS Static data
imo - Int The International Maritime Organization (IMO) Number for this vessel as reported by AIS Static data
length - Int The Length of this vessel, in meters, as reported by AIS Static data
category - VesselCategory A category that summarizes the type of the vessel Use vesselType instead
subcategory - String A subcategory of the vessel, if available, from the AIS Static data's Ship Type field. Use vesselType instead
vesselType - VesselType The type of vessel, as reported by either AIS (preferred) or other sources. See VesselType for available values and more information about the sourcing of this field.
class - VesselClass An AI-generated prediction if this AIS signal is a vessel or a buoy.
gearTypes - [GearType] The gear (fishing or otherwise) onboard the vessel, as reported by GFW. See GearType for available values and more information about the sourcing of this field.
authorizations - [String] Any authorization lists that the vessel is reported to be on. See VesselV2Authorization for available values and more information about the sourcing of this field.
ownerName - String The name of the owner of the vessel, as reported by GFW. See VesselV2Owner for available values and more information about the sourcing of this field.
ownerFlag - String The country of ownership of the vessel, as reported by GFW. Provided as an ISO 3166-1 alpha-3 codes See VesselV2Owner for available values and more information about the sourcing of this field.
countryCode - [String] A list of ISO 3166-1 alpha-3 codes for the vessel. This is typically a single element that is the country derived from the MMSI.
displayCountry - String The full name of the country of the flag state from the vessel's MMSI
displayName - String Either the vessel's name field or the mmsi field.
Example
{
  "vesselId": "B:636018934:1717068570:2657254:959940",
  "trackId": "B:636018934:1697313896:2707767:922478",
  "name": "DELTA APOLLONIA",
  "mmsi": 636018934,
  "imo": 9516935,
  "length": 333,
  "category": "tanker",
  "subcategory": "abc123",
  "vesselType": "RESERVED",
  "class": "vessel",
  "gearTypes": ["BUNKER"],
  "authorizations": ["xyz789"],
  "ownerName": "abc123",
  "ownerFlag": "abc123",
  "countryCode": ["abc123"],
  "displayCountry": "Liberia",
  "displayName": "DELTA APOLLONIA"
}

EventV2Vessels

Fields
Field Name Description
vessel0 - EventV2Vessel
vessel1 - EventV2Vessel
Example
{
  "vessel0": EventV2Vessel,
  "vessel1": EventV2Vessel
}

EventVesselFilter

Description

The EventVesselFilter allows you to query for events by the vessels that participated in the event. See the note about Searching on Vessel Metadata in the searchEventsV2 query for more information.

The filters below generally correspond to the field of the same name in the VesselV2 type.

Fields
Input Field Description
id - KeywordFilter The Skylight Generated unique ID associated with this vessel
trackId - KeywordFilter The Skylight Generated Track ID that this event generated on. A vessel can have many track IDs
name - StringFilter The name of the vessel as reported in AIS static messages. Supports exact match and LIKE queries
mmsi - KeywordFilter MMSI of the vessel
imo - KeywordFilter The IMO number reported by the vessel in AIS static messages
length - IntFilter Length of the vessel in meters as reported in AIS static messages
category - KeywordFilter A summarized category of the vessel. Prefer vesselType instead
vesselType - KeywordFilter The vessel type as reported by AIS or other sources. See VesselType for available values and more information about the sourcing of this field.
gearTypes - KeywordFilter The type of gear (fishing or otherwise) onboard the vessel as reported by GFW. A vessel can have multiple gear type values and this matches against any value. See GearType for available values and more information about the sourcing of this field.
authorizations - KeywordFilter Authorization lists that this vessel is on, as reported by GFW. Vessels can be on multiple lists and this matches against any value. See VesselV2Authorization for available values and more information about the sourcing of this field.
ownerName - StringFilter The name of the owner of the vessel, as reported by GFW. See VesselV2Owner for available values and more information about the sourcing of this field.
ownerFlag - KeywordFilter The country associated with the owner of the vessel as reported by GFW. Must be an ISO 3166-1 alpha-3 codes country code. See VesselV2Owner for available values and more information about the sourcing of this field.
country - KeywordFilter The country of the vessel as determined from the MMSI. Use ISO 3166-1 alpha-3 codes
Example
{
  "id": KeywordFilter,
  "trackId": KeywordFilter,
  "name": StringFilter,
  "mmsi": KeywordFilter,
  "imo": KeywordFilter,
  "length": IntFilter,
  "category": KeywordFilter,
  "vesselType": KeywordFilter,
  "gearTypes": KeywordFilter,
  "authorizations": KeywordFilter,
  "ownerName": StringFilter,
  "ownerFlag": KeywordFilter,
  "country": KeywordFilter
}

Events

Fields
Field Name Description
items - [Event] Collection of Skylight events
meta - Meta Result set size and pagination information
Example
{
  "items": [
    "'event_id': 'S1A_IW_GRDH_1SDV_20240122T000056_20240122T000121_052212_064FD2_E31E.SAFE_7', 'event_type': 'detection', 'start': { 'time': '2024-01-22T00:00:56.745000+00:00' }"
  ],
  "meta": "'pageSize': 1, 'pageNum': 1, 'total': 1504913"
}

FeatureType

Description

FeatureType determines the type of feature this Aoi feature configuration is configured to trigger.

Values
Enum Value Description

aoi_entry

Events will be generated when a vessel enters an Aoi

speed_range

Events will be generated when a vessel is within the speed range for the specified distance or duration
Example
"aoi_entry"

FishingEventDetails

Description

Details of the eventDetails field of an EventV2 where eventType is 'fishing_activity_history'.

See the Skylight Help Center - Fishing for more details about Fishing events.

Fields
Field Name Description
mlModelVersion - String
mlModelName - String
fishingScore - Float The confidence of the AI model that this event is fishing
dist2Coast - Int
subpathIds - [String]
params - SubpathActivityParams The parameters for the Atlas Activity classification model for the first subpath classified, internal-only
Example
{
  "mlModelVersion": "5ee7597_2024-11-06_07-06-54",
  "mlModelName": "ATLAS-Activity-Real-Time_no_git_hash_2024-09-06-19-56-12_epoch2.pt",
  "fishingScore": 0.8716157674789429,
  "dist2Coast": 123,
  "subpathIds": ["f862e7bf-2829-43f8-b4c8-01beb90becc7"],
  "params": {
    "startTime": "2024-10-08T17:41:00Z",
    "endTime": "2024-11-07T17:41:00Z",
    "numPositions": 2048,
    "positionUpperLimit": 2048,
    "positionLowerLimit": 600,
    "vessel": {"name": "Unknown", "flag": "CHN", "category": 9999}
  }
}

Float

Description

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

Example
987.65

FloatFilter

Fields
Input Field Description
lt - Float Less than
gt - Float Greater than
lte - Float Less than or equal to
gte - Float Greater than or equal to
eq - Float Equal to
neq - Float Not equal to
Example
{
  "lt": 123.45,
  "gt": 987.65,
  "lte": 987.65,
  "gte": 987.65,
  "eq": 987.65,
  "neq": 123.45
}

FrameEventType

Values
Enum Value Description

sar_sentinel1

European Space Agency Sentinel-1 satellite detection event

eo_sentinel2

European Space Agency Sentinel-2 satellite detection event

viirs

Visible Infrared Imaging Radiometer Suite (VIIRS) satellite detection event

eo_landsat_8_9

Landsat satellite detection event

eo_maxar

the following are undocumented because we can't expose maxar imagery via API

sar_maxar

rf_maxar

Example
"sar_sentinel1"

GearType

Description

The GearType enumeration represents the type of gear (fishing or otherwise) that is believed to be onboard this vessel. This data is sourced from Global Fishing Watch, and is not available for other vessel data sources. You can read more information about their sources and methodology here: https://globalfishingwatch.org/our-apis/documentation#vessel-types and https://globalfishingwatch.org/our-apis/documentation#reference-data

Values
Enum Value Description

BUNKER

Bunker

BUNKER_OR_TANKER

Bunker or Tanker

CARGO

Cargo

CARGO_OR_REEFER

Cargo or Reefer

CARGO_OR_TANKER

Cargo or Tanker

CONTAINER_REEFER

Container Reefer

DIVE_VESSEL

Dive Vessel

DREDGE_FISHING

Dredge fishing

DREDGE_NON_FISHING

Dredge non fishing

DRIFTING_LONGLINES

Drifting longlines

DRIFTNETS

Driftnets

FISH_FACTORY

Fish Factory

FISHING

Fishing

FISH_TENDER

Fish Tender

FIXED_GEAR

Fixed gear

INCONCLUSIVE

Determined to be inconclusive

NON_FISHING

Determined to be non fishing gear

OTHER

Determined to be a different gear type that isn't otherwise represented

OTHER_FISHING

Other fishing

OTHER_NOT_FISHING

Other not fishing

OTHER_PURSE_SEINES

Other purse seines

OTHER_SEINES

Other seines

PASSENGER

Passenger

PATROL_VESSEL

Patrol Vessel

POLE_AND_LINE

Pole and line

POTS_AND_TRAPS

Pots and traps

PURSE_SEINES

Purse seines

RESEARCH

Research

REEFER

Reefer

SEINERS

Seiners

SEISMIC_VESSEL

Seismic Vessel

SET_GILLNETS

Set gillnets

SET_LONGLINES

Set longlines

SPECIALIZED_REEFER

Specialized Reefer

SQUID_JIGGER

Squid jigger

SUBMARINE

Submarine

SUPPLY_VESSEL

Supply Vessel

TANKER

Tanker

TRAWLERS

Trawlers

TROLLERS

Trollers

TUG

Tug

TUNA_PURSE_SEINES

Tuna purse seines

WELL_BOAT

Well Boat
Example
"BUNKER"

Geometry

Fields
Field Name Description
type - String GeoJSON geometry type (possible values are 'LineString', 'Point', 'Polygon', or 'GeometryCollection')
coordinates - CoordinatesJSON Collection of GeoJSON coordinates
geometries - [Geometry]
Example
{
  "type": "Polygon",
  "coordinates": [
    [
      [-89.15052, 20.4076],
      [-86.712234, 20.841209],
      [-87.004501, 22.347897],
      [-89.468567, 21.917629],
      [-89.15052, 20.4076]
    ]
  ],
  "geometries": ["[{ 'type': 'Point', 'coordinates': [ -89.15052, 20.4076 ]"]
}

GeometryInput

Fields
Input Field Description
type - String GeoJSON geometry type (possible values are 'LineString', 'Point', and 'Polygon')
coordinates - CoordinatesJSON Collection of GeoJSON coordinates
Example
{
  "type": "Polygon",
  "coordinates": [
    [
      [-89.15052, 20.4076],
      [-86.712234, 20.841209],
      [-87.004501, 22.347897],
      [-89.468567, 21.917629],
      [-89.15052, 20.4076]
    ]
  ]
}

GetNearestCoastlineInput

Description

The getNearestCoastline query accepts a list of lat/lon coordinates to perform a batch lookup on.

Fields
Input Field Description
coordinates - [PointInput!]!
Example
{
  "coordinates": [
    {"lat": 48, "lon": -122.48},
    {"lat": 47.9, "lon": -122.48},
    {"lat": 47.8, "lon": -122.48}
  ]
}

GetNearestCoastlineRecord

Description

Information about the nearest coastline from a provided input coordinate.

Returned from the getNearestCoastline query.

Fields
Field Name Description
coordinate - Point! The same coordinate that was provided in the request
distanceToCoastMeters - Int! Distance from the input coordinate to the nearest coastline, in meters. This value is always positive
landCoverClass - LandCoverClass! The type of land cover at the input coordinate. This is based on the European Space Agency's WorldCover 2021 dataset
nearestCoastalPoint - Point! The coordinate of the nearest coastline point.
Example
{
  "coordinate": {"lat": 48, "lon": -122.48},
  "distanceToCoastMeters": 123,
  "landCoverClass": "PermanentWaterBody",
  "nearestCoastalPoint": {"lat": 48, "lon": -122.48}
}

GetNearestCoastlineResponse

Description

Returned from the getNearestCoastline query.

Fields
Field Name Description
records - [GetNearestCoastlineRecord!]!
version - String The version of the Lighthouse dataset used to generate this response
Example
{
  "records": [GetNearestCoastlineRecord],
  "version": "2024-11-12T00:25:16.667195"
}

GetTrajectoryInput

Fields
Input Field Description
subpathId - String!
model - String!
positionDataMode - PositionDataMode!
Example
{
  "subpathId": "xyz789",
  "model": "abc123",
  "positionDataMode": "onlyPointsUsedForClassification"
}

GetVesselHistoryInput

Description

GetVesselHistoryInput is the input for getting a vessel's metadata history by MMSI.

Fields
Input Field Description
mmsi - KeywordFilter! Maritime Mobile Service Identity. Only eq and in are supported in the KeywordFilter.
source - KeywordFilter Filter on the data source of information. Possible values are [VesselDataSource]#definition-VesselDataSource
Example
{"mmsi": {"eq": "273445480"}, "source": {"eq": "GFW"}}

GetVesselHistoryOutput

Description

GetVesselHistoryOutput is the output for getting a vessel's metadata history by MMSI.

See getVesselHistory for more information on this API.

Fields
Field Name Description
records - [VesselHistory] List of vessel metadata history records
meta - Meta Metadata for paginated results
Example
{
  "records": [
    {
      "mmsi": "273445480",
      "history": [
        {
          "source": "AIS",
          "entries": [
            {
              "id": "ais-123",
              "imo": 1234567,
              "callSign": "5BCK4",
              "vesselName": "Ocean Carrier 1",
              "flag": "USA",
              "lengthMeters": 200,
              "widthMeters": 30,
              "effectiveFrom": "2024-01-15T10:30:00Z",
              "effectiveTo": "2024-01-16T15:45:00Z",
              "isMostRecent": false
            },
            {
              "id": "ais-124",
              "imo": 2222222,
              "callSign": "5BCK4",
              "vesselName": "Ocean Carrier 1",
              "vesselType": "CARGO",
              "flag": "USA",
              "lengthMeters": 200,
              "widthMeters": 30,
              "effectiveFrom": "2024-01-16T15:45:00Z",
              "effectiveTo": null,
              "isMostRecent": true
            }
          ]
        },
        {
          "source": "GFW",
          "entries": [
            {
              "id": "gfw-123",
              "vesselName": "Ocean Carrier 1",
              "imo": 1234567,
              "callSign": "5BCK4",
              "vesselType": "TUNA_PURSE_SEINES",
              "gearType": ["SET_LONGLINES"],
              "tonnageGT": 5000,
              "flag": "USA",
              "ownerships": [
                {
                  "owner": "Ocean Shipping Co",
                  "ownerFlag": "USA",
                  "ownerSource": "IMO",
                  "startTime": "2024-01-15T10:30:00Z",
                  "endTime": "2024-01-16T15:45:00Z"
                }
              ],
              "authorizations": [
                {
                  "source": "ICCAT",
                  "startTime": "2024-01-15T10:30:00Z",
                  "endTime": "2024-01-16T15:45:00Z"
                }
              ],
              "effectiveFrom": "2022-01-15T10:30:00Z",
              "effectiveTo": null,
              "isMostRecent": true
            }
          ]
        }
      ]
    }
  ],
  "meta": {"total": 1, "limit": 10, "offset": 0, "hasMore": false}
}

ID

Description

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

Example
4

ImageryMetadataEventDetails

Description

Details of the eventDetails field of an EventV2 where eventType is one of 'eo_sentinel2', 'eo_landsat_8_9', or 'sar_sentinel1'.

See the Skylight Help Center - Optical Imagery for more details about Sentinel 2 and Landsat 8/9 events, and Skylight Help Center - Satellite Radar for more details about Sentinel 1 events.

Fields
Field Name Description
dataSource - DataSource! The data source for this satellite imagery
detectionType - DetectionType! Whether or not we were able to correlate the Satellite Detection against a vessel's AIS position data
estimatedLength - Float The estimated length of the vessel as predicted by an AI Model
estimatedSpeedKts - Float The estimated ground speed of the vessel in knots as predicted by an AI Model
estimatedVesselCategory - VesselCategory The estimated vessel category (ex. tanker, sar, ... etc) as predicted by an AI Model
frameIds - [String]! The Satellite Frame IDs that this detection was found in. This is typically one id, but can be multiple if the data provider overlaps frames (this is found in Sentinel-2 and Landsat 8/9 as of Jan 2025)
heading - Int The estimated heading of the vessel as predicted by an AI Model
imageUrl - String The URL to a cropped piece of the Satellite imagery showing the detected vessel as seen by the AI Model.
vendorVessel - VendorVesselV2
score - Float! The confidence from the AI Model on this prediction
distanceToCoastM - Int The distance from the detection to the nearest coastline. In meters, with 10m accuracy. Available on detections from April 2025 onward.
orientation - Int If the image located in imageUrl is rotated, this is the rotation
metersPerPixel - Int The meters per pixel of the image located at imageUrl
Example
{
  "dataSource": "sentinel1",
  "detectionType": "ais_correlated",
  "estimatedLength": 123.45,
  "estimatedSpeedKts": 987.65,
  "estimatedVesselCategory": "cargo",
  "frameIds": ["6423415d0ca61eaa194ea68c55a50de3b1e4d207"],
  "heading": 123,
  "imageUrl": "sat-service/sentinel1/detections/2024/11/07/S1A_IW_GRDH_1SDV_20241107T175755_20241107T175820_056452_06EB2B_8A5C.SAFE/image_chips/S1A_IW_GRDH_1SDV_20241107T175755_20241107T175820_056452_06EB2B_8A5C.SAFE_130_vh.png",
  "vendorVessel": {
    "correlation": {
      "trackId": "B:354731000:1698007936:2488606:1127958",
      "point": {
        "lat": 49.9231509998128,
        "lon": -3.281049885818316,
        "mmsi": "354731000"
      },
      "mmsi": 354731000,
      "distance": 450.40723335574774
    },
    "inferenceVersion": "3dff445",
    "detectSceneRow": 30704,
    "detectSceneColumn": 10495,
    "vesselLengthM": 0,
    "vesselWidthM": 0,
    "vesselSpeedKts": 0,
    "isFishingVessel": 0,
    "headingBuckets": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  },
  "score": 0.9935651421546936,
  "distanceToCoastM": 987,
  "orientation": 0,
  "metersPerPixel": 6
}

Int

Description

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

Example
987

IntFilter

Fields
Input Field Description
lt - Int Less than
gt - Int Greater than
lte - Int Less than or equal to
gte - Int Greater than or equal to
eq - Int Equal to
neq - Int Not equal to
Example
{"lt": 123, "gt": 987, "lte": 123, "gte": 123, "eq": 987, "neq": 987}

JSON

Description

JSON scalar type

Example
{}

KeywordFilter

Description

This query object is used to filter keyword fields, like IDs.

Fields
Input Field Description
eq - String Equal to
neq - String Not equal to
inc - [String] Included in list
ninc - [String] Not included in list
Example
{
  "eq": "abc123",
  "neq": "xyz789",
  "inc": ["abc123"],
  "ninc": ["xyz789"]
}

LandCoverClass

Description

Categories of land cover based on the European Space Agency's WorldCover 2021 dataset. See https://esa-worldcover.org/en for more details.

Values
Enum Value Description

PermanentWaterBody

Land

TreeCover

Shrubland

Grassland

Cropland

BuiltUp

BareSparseVegetation

SnowAndIce

HerbaceousWetland

Mangroves

MossAndLichen

Example
"PermanentWaterBody"

LandsatProduct

Fields
Field Name Description
s3Path - String
pathRow - [String]
collectionCategory - String
processingLevel - String
spacecraftId - String
cloudCover - Float
sunElevation - Float
imageryGcsPath - String
detectionsGcsPath - String
Example
{
  "s3Path": "xyz789",
  "pathRow": ["xyz789"],
  "collectionCategory": "abc123",
  "processingLevel": "abc123",
  "spacecraftId": "abc123",
  "cloudCover": 123.45,
  "sunElevation": 123.45,
  "imageryGcsPath": "abc123",
  "detectionsGcsPath": "abc123"
}

LandsatVendorVessel

Description

Internal Metadata exposed from the Landsat Model. This can change at anytime!

Fields
Field Name Description
correlation - AisCorrelation The correlation data if a correlation was found
inferenceVersion - String A version identifier for the model that performed inference
predictionMetadata - SVDPredictionMetadata The prediction metadata from the model about the detection
Example
{
  "correlation": AisCorrelation,
  "inferenceVersion": "abc123",
  "predictionMetadata": SVDPredictionMetadata
}

LastKnownPosition

Fields
Field Name Description
trackId - String! The Skylight generated track ID that transmitted this position. A vessel can have many track IDs
mmsi - Int Maritime Mobile Service Identity number
speedOverGround - Float Speed over ground (Knots) of the AIS position.
courseOverGround - Float Course over ground of the AIS position.
location - Point The lat/lon location of the AIS position.
sentAt - String! This represents time that the AIS position was sent by the transponder.
receivedAt - String! This represents time that the AIS position was received by the Skylight platform.
heading - Float The heading of the AIS position.
navigationStatus - Int The navigation status of the AIS position.
rateOfTurn - Float The rate of turn of the AIS position.
messageType - Int The message type of the AIS position.
aisClass - AisClass The AIS class of the track. Inferred from historical messageType values..
positionCount - Int Total number of AIS position messages Skylight has observed for this track.
distanceToCoastM - Int The distance in meters from the nearest landmass to the AIS position.
atlasEntityType - AtlasEntityType The type of entity that this track represents.
ageOfPositionSeconds - Int The age of the position in seconds. This is the difference between the current time and the sentAt time.
createdAt - String Date and time the track was initially inserted into the Skylight database
updatedAt - String Date and time the track was last updated in the Skylight database
Example
{
  "trackId": "B:224083590:1639013658:1643050:882604:1723421649:1723423470",
  "mmsi": 368156470,
  "speedOverGround": 6.019,
  "courseOverGround": 114.5999984741211,
  "location": {"lat": -4.186575, "lon": -5.88524},
  "sentAt": "2024-08-29T10:47:20.232",
  "receivedAt": "2024-08-29T10:47:20.232",
  "heading": 114.5999984741211,
  "navigationStatus": "UNDER_WAY_USING_ENGINE",
  "rateOfTurn": 0,
  "messageType": 1,
  "aisClass": "A",
  "positionCount": 10,
  "distanceToCoastM": 10,
  "atlasEntityType": "VESSEL",
  "ageOfPositionSeconds": 10,
  "createdAt": "2021-09-01T00:00:00Z",
  "updatedAt": "2021-09-01T00:00:00Z"
}

LastKnownPositionSortField

Description
Beta
This type is in beta and may change in the future.

Values
Enum Value Description

sentAt

The time that the last known AIS position was sent by the transponder.
Example
"sentAt"

LineString

Fields
Field Name Description
coordinates - [Float] Collection of GeoJSON coordinates
type - String GeoJSON geometry type (value is always 'LineString')
Example
{
  "coordinates": [
    [-18.812306666666668, 3.314005],
    [-18.810928333333333, 3.31772]
  ],
  "type": "LineString"
}

MaxarDetectionEventDetails

Fields
Field Name Description
dataSource - DataSource!
detectionType - DetectionType!
estimatedLength - Float
estimatedSpeedKts - Float
estimatedVesselCategory - VesselCategory
frameIds - [String]!
heading - Int
imageUrl - String
vendorVessel - VendorVesselV2
vesselLengthMeters - Float
vesselWidthMeters - Float
vesselType - String
Example
{
  "dataSource": "landsat_8_9",
  "detectionType": "ais_correlated",
  "estimatedLength": 123.45,
  "estimatedSpeedKts": 987.65,
  "estimatedVesselCategory": "cargo",
  "frameIds": ["abc123"],
  "heading": 123,
  "imageUrl": "xyz789",
  "vendorVessel": LandsatVendorVessel,
  "vesselLengthMeters": 123.45,
  "vesselWidthMeters": 123.45,
  "vesselType": "xyz789"
}

MaxarProduct

Fields
Field Name Description
satelliteTipId - String
Example
{"satelliteTipId": "xyz789"}

Meta

Fields
Field Name Description
pageNum - Int Current page number of paginated results
total - Int Total number of results in the complete result set
pageSize - Int Number of results displayed per page
Example
{"pageNum": 1, "total": 1312, "pageSize": 5}

MetaV2

Fields
Field Name Description
total - Int Total number of results in the complete result set
snapshotId - String The snapshot ID if one was requested
Example
{"total": 1312, "snapshotId": "eyA0sdfekLIiQXV0a="}

Organization

Fields
Field Name Description
name - String! Name of the user organization
Example
{"name": "Australia - Australian Fisheries Management Authority"}

OrganizationSortBy

Values
Enum Value Description

name

Sort user organizations by organization name
Example
"name"

Point

Fields
Field Name Description
lat - Float Latitude of the geographic point
lon - Float Longitude of the geographic point
Example
{"lat": -4.469703333333333, "lon": -164.55674333333334}

PointInput

Description

This is the input version of Point. It is used to specify a point on the globe using latitude and longitude.

Fields
Input Field Description
lat - Float! The latitude of the point, degrees
lon - Float! The longitude of the point, degrees
Example
{"lat": -4.46, "lon": 164.55}

PortVisitEventDetails

Description

Details of the eventDetails field of an EventV2 where the eventType is port_visit

Fields
Field Name Description
portName - String! The name of the port that the vessel visited
countryCode - String! The ISO 3166 alpha-3 country code of the country where the port is located
countryName - String! The full name of the country
portId - String!
Example
{
  "portName": "xyz789",
  "countryCode": "xyz789",
  "countryName": "xyz789",
  "portId": "abc123"
}

PositionDataMode

Values
Enum Value Description

onlyPointsUsedForClassification

allPoints

Example
"onlyPointsUsedForClassification"

RfMaxarDetectionEventDetails

Fields
Field Name Description
dataSource - DataSource!
detectionType - DetectionType!
estimatedLength - Float
estimatedSpeedKts - Float
estimatedVesselCategory - VesselCategory
frameIds - [String]!
heading - Int
imageUrl - String
vendorVessel - VendorVesselV2
rfFrequencyMhz - Float!
Example
{
  "dataSource": "landsat_8_9",
  "detectionType": "ais_correlated",
  "estimatedLength": 123.45,
  "estimatedSpeedKts": 123.45,
  "estimatedVesselCategory": "cargo",
  "frameIds": ["abc123"],
  "heading": 987,
  "imageUrl": "xyz789",
  "vendorVessel": LandsatVendorVessel,
  "rfFrequencyMhz": 123.45
}

SVDPredictionMetadata

Description

This is an internal model from the model, and can change at any time!

Fields
Field Name Description
detectSceneRow - Int! The x coordinate of the detection, in pixel coordinates in the preprocessed imagery
detectSceneColumn - Int! The y coordinate of the detection, in pixel coordinates in the preprocessed imagery
score - Float! Float between 0 and 1 representing the confidence that a vessel was detected at the specified location in the image
vesselLengthM - Float The predicted vessel length in meters
vesselWidthM - Float The predicted vessel width in meters
vesselSpeedKts - Float The predicted vessel speed in knots
isFishingVessel - Float Float between 0 and 1 representing the probability that the detected vessel is a fishing vessel
headingBuckets - [Float] Probability that the heading direction of the detected vessel lies in the range between i*(360/16) and (i + 1)*(360/16) degrees, measured clockwise relative to true north
Example
{
  "detectSceneRow": 123,
  "detectSceneColumn": 123,
  "score": 987.65,
  "vesselLengthM": 987.65,
  "vesselWidthM": 987.65,
  "vesselSpeedKts": 123.45,
  "isFishingVessel": 987.65,
  "headingBuckets": [987.65]
}

SatelliteFrame

Fields
Field Name Description
targets - SatelliteFrameTargets Counts of correlated and dark detections within the frame
data_source - String Satellite from which the frame was collected
vendor_id - String The unique identifier for this satellite frame from the source system (e.g. ESA Copernicus, USGS EarthExplorer, etc)
frame_id - String Frame ID (unique to the Skylight platform)
collected_at - String ISO 8601 formatted timestamp of frame collection
frame_extents - Geometry Frame geometry in GeoJSON format
created - String Time that the frame was inserted into the Skylight system. ISO 8601 formatted timestamp.
updated - String ISO 8601 formatted timestamp of last update to the frame
Example
{
  "targets": "'correlated_count': 3, 'dark_count': 4",
  "data_source": "sentinel1",
  "vendor_id": "S1A_IW_GRDH_1SDV_20240801T000005_20240801T000030_055012_06B3B6_DFA6.SAFE",
  "frame_id": "70920c186ebf8cf91e26fa39ad1d84798c151a29",
  "collected_at": "2024-08-01T00:00:05.673426Z",
  "frame_extents": "'coordinates': [[[ 149.72206068616023, 8.132910271150813 ], [ 149.7157847342396, 7.140816954677312 ], [ 150.7085993421091, 7.133901712573143 ], [ 150.71715846458056, 8.125022545190241 ], [ 149.72206068616023, 8.132910271150813 ]]], 'type': 'Polygon' }",
  "created": "2024-08-01T03:49:49.158082Z",
  "updated": "2024-08-01T03:49:49.158082Z"
}

SatelliteFrameMetadata

Example
LandsatProduct

SatelliteFrameNumDetections

Fields
Field Name Description
totalCount - Int The sum of correlated and uncorrelated
correlatedCount - Int The number of vessel detections in this frame that were successfully correlated with AIS data, and for which the identity of the vessel is known
uncorrelatedCount - Int The number of vessel detections in this frame that we are unable to correlate with AIS data. Skylight continues to retry correlation for several days after an image is taken as additional AIS data becomes available
Example
{"totalCount": 123, "correlatedCount": 123, "uncorrelatedCount": 123}

SatelliteFrameStatus

Description

Once the Skylight system identifies a satellite frame from an external source, we download, process, and write the frame and vessel detections to our database. This enumeration tracks the status of the frame through this workflow.

External Users almost always only want frames in Completed state. The additional state are mearly provided for troubleshooting.

Values
Enum Value Description

PendingDownload

PendingProcessing

PendingWriting

Completed

Example
"PendingDownload"

SatelliteFrameTargets

Fields
Field Name Description
dark_count - Int Detections within the frame that are not correlated with AIS
correlated_count - Int Detections within the frame that are correlated with AIS
Example
{"dark_count": 3, "correlated_count": 4}

SatelliteFrameV2

Description

A Satellite Frame in Skylight represents a single image, or frame, collected and made available by a satellite provider. Skylight processes these frames using Computer Vision models to identify vessels and creates Events based on the detections found in the frame.

Search for Satellite Frames using the searchSatelliteFramesV2 query.

Satellite Frames go through a data processing pipeline before Events are created, the status of the frame can be found in the status field. Frames that are not in the Completed state are still being processed and data will be incomplete or inconsistent for them. External users should only use frames in the Completed state.

Once a Frame has been processed, Skylight will attempt to correlate the detections in the frame with AIS position data in order to determine the identify of the vessel. This correlation process runs once as part of the processing step and then again once a day for the next 10 days. As a result, the number of correlated detections in a frame can change over time. The numDetections field contains the most recent counts of correlated and uncorrelated detections.

Fields
Field Name Description
frameId - String! Unique ID for this satellite frame. These values are autogenerated by the Skylight platform and the format of them can change at any time
vendorId - String! The unique identifier from the data provider for the satellite imagery
dataSource - DataSource! The source system that provided the satellite frame
collectedAt - String! The timestamp that the satellite frame was collected at by the satellite
createdAt - String! The timestamp that the satellite frame was originally found by the Skylight system. This is immediately after we find the image and before any processing has occurred.
updatedAt - String! The timestamp that the satellite frame was last updated by the Skylight system. Satellite Frames are updated during processing, and then afterwards for any correlation updates.
eventType - EventType! The type of events that are generated from this satellite image
geometry - Geometry The polygon (or MultiPolygon) that represents the spatial extent of the satellite frame
status - SatelliteFrameStatus! The processing status of this frame within the Skylight System
numDetections - SatelliteFrameNumDetections Once a frame has been processed, this field contains the number of AIS correlated and uncorrelated detections within the frame. Skylight re-evaluates the correlations for several days after the image is received and often is able to correlate additional detections after receiving additional AIS data
inferenceVersion - String A version identifier provided by the ML model that processed this frame. Skylight internal only
frameMetadata - SatelliteFrameMetadata
Example
{
  "frameId": "60b6b92cd47e5a3bf097edd48222e02a44dd0914",
  "vendorId": "S2A_MSIL1C_20241105T155431_N0511_R054_T18TWK_20241105T193004.SAFE",
  "dataSource": "sentinel2",
  "collectedAt": "2024-11-05T16:01:58.132090Z",
  "createdAt": "2024-11-05T22:32:48.059978Z",
  "updatedAt": "2024-11-05T22:32:48.090131Z",
  "eventType": "eo_sentinel2",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [-73.77875770678413, 40.643990583967025],
        [-75.0002365638915, 40.650856515774606],
        [-75.00023315577859, 39.66160695799293],
        [-74.13197929331275, 39.65682454908769],
        [-74.08346319125194, 39.795020300861054],
        [-74.0317251203332, 39.94134154557619],
        [-73.9796239429983, 40.08770893025816],
        [-73.9271395116355, 40.23411364574034],
        [-73.87433828003553, 40.380532760133335],
        [-73.8211821970689, 40.52693137425497],
        [-73.77875770678413, 40.643990583967025]
      ]
    ]
  },
  "status": "Completed",
  "numDetections": {
    "totalCount": 21,
    "correlatedCount": 8,
    "uncorrelatedCount": 13
  },
  "inferenceVersion": "221e8ac9-sentinel2-swinv2-base-nohistory-satlas-weights",
  "frameMetadata": {
    "dataspaceApiId": "50c6531f-636f-478e-aa8d-b5451d6d4f1c",
    "contentLength": 705905712,
    "s3Path": "/eodata/Sentinel-2/MSI/L1C/2024/11/05/S2A_MSIL1C_20241105T155431_N0511_R054_T18TWK_20241105T193004.SAFE",
    "platformShortName": "SENTINEL-2",
    "instrumentShortName": "MSI",
    "productType": "S2MSI1C",
    "cloudCover": 6.420093191033,
    "operationalMode": "INS-NOBS"
  }
}

SatelliteFrames

Fields
Field Name Description
items - [SatelliteFrame] Collection of satellite frames
meta - Meta Result set size and pagination information
Example
{
  "items": [
    "{ 'targets': { 'correlated_count':3, 'dark_count':107 }, 'data_source':'sentinel1', 'vendor_id':'S1A_IW_GRDH_1SDV_20240813T000004_20240813T000029_055187_06B9EC_7D70.SAFE', 'frame_id':'0fbb541ec9cf8c5f4ba63ffa41bab089be0c9a17', 'collected_at':'2024-08-13T00:00:04.781000Z', 'frame_extents':{ 'coordinates':[[[ -89.15052, 20.4076 ],[ -86.712234, 20.841209 ], [ -87.004501, 22.347897 ], [ -89.468567, 21.917629 ], [ -89.15052, 20.4076 ]]], 'type':'Polygon' }, 'created':'2024-08-13T09:49:59.520600Z', 'updated':'2024-08-13T09:49:59.540989Z' }"
  ],
  "meta": "'pageNum': 1. 'pageSize': 0, 'total': 1312"
}

SatelliteTip

Description

SatelliteTip contains all data related to a satellite tip.

Fields
Field Name Description
id - String! The skylight-generated unique identifier for this satellite tip
status - SatelliteTipStatus! A status provided by Skylight indicating the progress of the tip
tipVendorName - SatelliteTipVendor! The vendor that provides this satellite tip
tipVendorId - String An ID provided by the tip vendor to uniquely identify this tip
tipVendorFrameId - String An ID provided by the tip vendor to uniquely identify the frame that defines the entire image Use tipVendorFrameIds instead
tipVendorFrameIds - [String] A list of IDs provided by the tip vendor to uniquely identify the imagery delivered for the tip
tipVendorStatus - String A status provided by the tip vendor indicating the progress of the tip
tipVendorErrorMessage - String An error message provided by the tip vendor if the tip was not successful
observationPoint - Geometry GeoJSON point representing the location of the point of interest as communicated to the vendor
observationTime - String ISO-8601 formatted timestamp for the time at which the observation was made
observationExpiration - String The time at which the tip expires and the vendor will no longer attempt to capture imagery
savedSearchId - String The ID of the saved search that triggered the tip submission, null if this tip was not triggered by a Saved Search
savedSearchName - String The name of the saved search that triggered the tip submission
aoiId - String The ID of the AOI referenced by the saved search that triggered the tip submission
aoiName - String The name of the AOI referenced by the saved search that triggered the tip submission
sourceEventId - String The skylight-generated unique Event ID that triggered the tip submission
sourceEventType - EventType The type of Skylight event that triggered the tip submission
detectionEvents - [SatelliteTipDetectionEvent] A list of events that were derived from the resulting tip data
submittedByUserId - String The user ID of the user who submitted the tip or created the AOI that automatically triggered the submission
submittedByUsername - String The username of the user who submitted the tip or created the AOI that automatically triggered the submission
createdAt - String! The time the tip was created in the Skylight database, ISO-8601 format.
updatedAt - String! The time the tip was last updated in the Skylight database. Will be the same as createdAt if it has not been updated. ISO-8601 format
Example
{
  "id": "xyz789",
  "status": "SUBMISSION_RECEIVED",
  "tipVendorName": "MAXAR",
  "tipVendorId": "xyz789",
  "tipVendorFrameId": "xyz789",
  "tipVendorFrameIds": ["abc123"],
  "tipVendorStatus": "abc123",
  "tipVendorErrorMessage": "xyz789",
  "observationPoint": Geometry,
  "observationTime": "abc123",
  "observationExpiration": "abc123",
  "savedSearchId": "abc123",
  "savedSearchName": "abc123",
  "aoiId": "abc123",
  "aoiName": "xyz789",
  "sourceEventId": "abc123",
  "sourceEventType": "dark_rendezvous",
  "detectionEvents": [SatelliteTipDetectionEvent],
  "submittedByUserId": "abc123",
  "submittedByUsername": "xyz789",
  "createdAt": "abc123",
  "updatedAt": "abc123"
}

SatelliteTipDetectionEvent

Description

A SatelliteTipDetectionEvent is an event that is derived from results of a Satellite Tip. For example, a Satellite Tip is submitted and the vendor captures imagery of a vessel, resulting in a dark detection event. The dark detection event is then associated with the original Satellite Tip as a detection event.

Fields
Field Name Description
id - String!
imageChip - String
Example
{
  "id": "xyz789",
  "imageChip": "abc123"
}

SatelliteTipStatus

Description

SatelliteTipStatus is a status field to indicate the the progress and success or failure of a satellite tip. It is tracked and updated by Skylight, so it cannot be manually set. The status enum is consistent for Satellite Tips across all vendors and therefore does not have high granularity.

Values
Enum Value Description

SUBMISSION_RECEIVED

The tip has been received by Skylight but has not yet been submitted to the vendor

SUBMITTED_TO_VENDOR

The tip has been submitted to and acknowledged by the vendor

PROCESSING

The vendor was able capture imagery and data is expected to be available

FULFILLED

All data relating to the tip is available for retrieval

COMPLETED

Skylight has finished processing the imagery and created events

UNABLE_TO_FULFILL

The vendor was unable to capture imagery and data will not be available

SUBMISSION_ERROR

The vendor rejected the tip submission and will not attempt to fulfill the request

UNKNOWN_ERROR

An unexpected error occurred while submitting, processing, or retrieval
Example
"SUBMISSION_RECEIVED"

SatelliteTipVendor

Description

An enumerated type reqpresenting the vendor that controls the satellite and responds to tips

Values
Enum Value Description

MAXAR

Example
"MAXAR"

SearchAOIsInput

Description

Input object for search for AOIv2.

Fields
Input Field Description
id - KeywordFilter AOI ID filter
name - StringFilter AOI name filter
userId - String Marking undocumented because only Superadmins can use this field
status - AoiStatus AOI Status to filter by. Valid values are (active, inactive). This field is a bit of a misnomer; the status of an AOI is set on creation to inactive if the AOI is larger than a specific size; and so events cannot be created from that AOI. A user cannot flip an AOI from active to inactive or vice versa. The status is set on creation and cannot be changed. A client should never actually want to filter by this field; they always want all AOIs regardless of "status".
intersectsGeometry - GeometryInput

Return AOIs that intersect with the provided geometry

Note: only type=Polygon is supported

areaKm2 - FloatFilter Area in square kilometers filter
createdAt - DateFilter Created date filter
updatedAt - DateFilter Updated date filter
limit - Int Limit results displayed per page
offset - Int Offset into paginated results
sortBy - AoiSortBy Sort AOIs by the specified field. Default = name
sortDirection - SortDirection Sort direction. Default = asc
Example
{
  "id": {"eq": "5139d9dc-a182-4735-b177-d8b40102fac7"},
  "name": {"eq": "test123"},
  "userId": "abc123",
  "status": "active",
  "intersectsGeometry": GeometryInput,
  "areaKm2": {"lte": 7000},
  "createdAt": {"gte": "2024-04-01T20:01:41"},
  "updatedAt": DateFilter,
  "limit": 10,
  "offset": 0,
  "sortBy": "updated",
  "sortDirection": "desc"
}

SearchAOIsOutput

Fields
Field Name Description
records - [AOIv2] List of AOIs
meta - MetaV2 Metadata for paginated results
Example
{
  "records": [
    {
      "userId": "66172431e2e75df065654449",
      "accessibleBy": ["66172431e2e75df065654449"],
      "properties": {
        "aoiId": "5139d9dc-a182-4735-b177-d8b40102fac7",
        "aoiType": "custom aoi",
        "name": "test123",
        "bounds": [
          -9.951789469291498,
          1.8919712867309215,
          -9.030892650559167,
          2.831652158503914
        ],
        "areaKm2": 6126.362265270218,
        "description": null,
        "uploadedFile": null
      },
      "status": "active",
      "createdAt": "2024-04-16T20:01:41Z",
      "updatedAt": "2024-04-16T20:01:41Z",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [-9.363982989249422, 2.831652158503914],
            [-9.951789469291498, 2.6750847687409163],
            [-9.569715257264846, 1.8919712867309215],
            [-9.030892650559167, 2.03883641740741],
            [-9.363982989249422, 2.831652158503914]
          ]
        ]
      }
    }
  ],
  "meta": {"total": 1}
}

SearchAoiFeatureConfigurationsInput

Description

SearchAoiFeatureConfigurationsInput is the input for searching for Aoi feature configurations.

Fields
Input Field Description
id - KeywordFilter Aoi feature configuration ID filter
aoiId - KeywordFilter Aoi ID filter
userId - KeywordFilter User ID filter. Undocumented because only superadmins can search by user ID. All other users can only search their own Aoi feature configurations.
featureType - KeywordFilter Feature type filter
speedRangeFilterType - KeywordFilter For featureType=speedRange, filter type filter, either distance or duration
speedRangeDistanceThresholdKilometers - FloatFilter For featureType=speedRange, speed range distance threshold filter, in kilometers
speedRangeTimeThresholdMinutes - FloatFilter For featureType=speedRange, speed range time threshold filter, in minutes
speedRangeMinSpeedKnots - FloatFilter For featureType=speedRange, minimum speed filter, in knots
speedRangeMaxSpeedKnots - FloatFilter For featureType=speedRange, maximum speed filter, in knots
limit - Int Limit results displayed per page
offset - Int Offset into paginated results
sortBy - AoiFeatureConfigurationSortBy Sort Aoi feature configurations by the specified field. Default = createdAt
sortDirection - SortDirection Sort direction. Default = desc
Example
{
  "id": {"eq": "671a4d03997dfcdcd0fb9245"},
  "aoiId": {"eq": "4483ed4e-85e0-4312-86e3-f93c83cf175d"},
  "userId": KeywordFilter,
  "featureType": {"eq": "speedRange"},
  "speedRangeFilterType": {"eq": "distance"},
  "speedRangeDistanceThresholdKilometers": {"eq": 0},
  "speedRangeTimeThresholdMinutes": {"eq": 0},
  "speedRangeMinSpeedKnots": {"eq": 10},
  "speedRangeMaxSpeedKnots": {"eq": 100},
  "limit": 10,
  "offset": 0,
  "sortBy": "createdAt",
  "sortDirection": "desc"
}

SearchAoiFeatureConfigurationsOutput

Description

SearchAoiFeatureConfigurationsOutput is the output for searching for Aoi feature configurations.

Fields
Field Name Description
records - [AoiFeatureConfiguration] List of Aoi feature configurations
meta - Meta Metadata for paginated results
Example
{
  "records": [AoiFeatureConfiguration],
  "meta": Meta
}

SearchApiKeysInput

Description

Input object to search for ApiKey.

Fields
Input Field Description
id - KeywordFilter Unique db identifier for the API key. Mongodb bson id that has been converted to a string.
userId - KeywordFilter User ID filter. Non-superusers can only filter their own API keys.
keyName - StringFilter Filter human-readable name given by API key owner
status - KeywordFilter Valid values are (active, deleted)
createdAt - DateFilter
updatedAt - DateFilter
lastUsedAt - DateFilter Timestamp filter for the API key was last used for authentication. Null if key has never been used.
limit - Int
offset - Int
sortField - SearchApiKeysSortField
sortDirection - SortDirection
Example
{
  "id": {"eq": "507f1f77bcf86cd799439011"},
  "userId": {"eq": "6120123fbc8f8661da8a5332"},
  "keyName": {"like": "Production"},
  "status": {"eq": "active"},
  "createdAt": {"gte": "2025-07-11T18:21:15.684000Z"},
  "updatedAt": {"gte": "2025-07-11T18:21:15.684000Z"},
  "lastUsedAt": {"gte": "2025-07-11T18:25:30.123456Z"},
  "limit": 10,
  "offset": 0,
  "sortField": "createdAt",
  "sortDirection": "asc"
}

SearchApiKeysSortField

Values
Enum Value Description

createdAt

updatedAt

keyName

status

lastUsed

Example
"createdAt"

SearchEngagementsInput

Description

SearchEngagementsInput is the input for retrieving a list of user engagements.

Fields
Input Field Description
limit - Int Limit results displayed per page
offset - Int Offset into paginated results
sortBy - EngagementSortBy Sort engagements by engagement name. Default = name
sortDirection - SortDirection Sort direction. Default = desc
Example
{"limit": 10, "offset": 0, "sortBy": "name", "sortDirection": "desc"}

SearchEngagementsOutput

Description

SearchEngagementsOutput is the output of searching for user engagements.

Fields
Field Name Description
records - [Engagement] List of user engagements
meta - Meta Metadata for paginated results
Example
{
  "records": [Engagement],
  "meta": Meta
}

SearchEventFeedbacksOutput

Fields
Field Name Description
records - [EventFeedback] List of event feedbacks
meta - MetaV2 Metadata for paginated results
Example
{
  "records": [EventFeedback],
  "meta": MetaV2
}

SearchEventsV2Input

Description

Input object for search for EventV2. All queries MUST include a value for the eventType filter to specify which Event Types you are interested in.

Searching on Vessel Metadata

The vesselMain and vesselPartner fields allow you to filter events based on the vessels that participated in the event. See the documentation on event vessel details to understand when vessels will be present in an event.

For events with a single vessel, always use vesselMain to search for events by vessel attributes. vesselPartner is only used to match against the second vessel for Standard Rendezvous events.. For Standard Rendezvous events, vesselMain will match against either vessel_0 OR vessel_1 and then vesselPartner will match against the other vessel. For all other event types, vesselPartner will have no effect.

For example, to search for a Rendezvous between a Panamanian flagged vessel and a vessel with an MMSI of 123456789, you would use the following query:

searchEventsV2(input: {
    eventType: { inc: ["standard_rendezvous"]},
    vesselMain: { country: { eq: "PAN" } },
    vesselPartner: { mmsi: { eq: "123456789" } }
}) {
    records { eventId }
}

Searching on Event Details

Each event type has specific metadata associated with it. This metadata is stored in the eventDetails field and events can be filtered based on this metadata using the EventDetailsFilter input object. When applying this filter, the filter criteria applies only to events that have that relevant event metadata. See the documentation for EventDetailsFilter for more information on the fields available for each event type.

Paginating through large result sets

The Events dataset is very large and is constantly updated. We do not recommend paginating using the limit and offset fields as the data is constantly changing and you are unlikely to receive consistent results. Read the section on Pagination for more details.

Fields
Input Field Description
eventId - KeywordFilter The skylight-generated unique identifier for this event
eventType - KeywordFilter! Required Filter for events of a certain type. See EventType for allowed values for this field
startTime - DateFilter Filter on the start.time of the event. Filter values must be greater than now - 540 days.
endTime - DateFilter Filter on the end.time of the event. Filter values must be greater than now - 540 days.
intersectsGeometry - GeometryInput Filter for events that are inside the provided polygon. This currently only matches against the start location of the event
intersectsAoiId - String Filter for events that are inside the specified Area of Interest. This currently only matches against the start location of the event
vesselMain - EventVesselFilter Filter for events that match the provided vessel information. See the note above about vessel matching for more information
vesselPartner - EventVesselFilter Filter for events that match the provided vessel information. See the note above about vessel matching for more information
eventDetails - EventDetailsFilter Filter for events based on event specific fields. See the documentation for EventDetailsFilter for more information
inProgressStatus - Boolean
created - DateFilter Filter on the created timestamp of the event. This is the time the event was inserted into the Skylight Database
updated - DateFilter Filter on the updated timestamp of the vent. This is the last time the event was updated. See the note above for information on when and how events can be updated
limit - Int The maximum number of records to return in this page. See the note above for recommendations on paginating through events. Default = 100
offset - Int The offset to start returning records from. See the note above for recommendations on paginating through events. Default = 0
sortBy - SearchEventsV2SortFields The field to sort the results by. See the note above for recommendations on paginating through events and using cursorId for stable sorting
sortDirection - SortDirection
snapshotId - String A snapshot to use for paginating. Provide a value of true to request a new snapshot to be established, and then provide the snapshotId value returned in meta to get the next page of results.
Example
{
  "eventId": {"eq": "5a1f6b4b-1b7b-4b1b-8b1b-7b1b1b1b1b1b"},
  "eventType": {"inc": ["fishing_activity_history", "eo_sentinel2"]},
  "startTime": {"gt": "2017-01-01T00:00:00.000Z"},
  "endTime": {"lt": "2018-01-01T00:00:00.000Z"},
  "intersectsGeometry": GeometryInput,
  "intersectsAoiId": "xyz789",
  "vesselMain": {"mmsi": {"eq": "123456789"}},
  "vesselPartner": null,
  "eventDetails": EventDetailsFilter,
  "inProgressStatus": false,
  "created": DateFilter,
  "updated": DateFilter,
  "limit": 10,
  "offset": 0,
  "sortBy": "created",
  "sortDirection": "desc",
  "snapshotId": null
}

SearchEventsV2Output

Fields
Field Name Description
records - [EventV2] List of Events
meta - MetaV2 Metadata for paginated results
Example
{
  "records": [EventV2],
  "meta": MetaV2
}

SearchEventsV2SortFields

Values
Enum Value Description

startTime

created

updated

Example
"startTime"

SearchLastKnownPositionsInput

Description
Beta
This type is in beta and may change in the future.

Input object for searching for LastKnownPosition objects.

For example, to search for all LastKnownPosition tracks that transmitted more than 12 hours ago (If the current time is 2023-10-01T00:00:00Z):

searchLastKnownPositions(
    sentAt: { lt: "2023-09-30T12:00:00Z" },
    sortDirection: desc,
    sortField: sentAt
) {
    lastKnownPositions {
        ... # your fields here
    }
}

Also used by the Last Known Positions Vector Tile endpoint.

Fields
Input Field Description
trackId - KeywordFilter The Skylight Generated Track ID that this position represents. A vessel can have many track IDs
mmsi - KeywordFilter The Maritime Mobile Service Identity number (from AIS position messages)
intersectsGeometry - GeometryInput Filter for positions that are inside the provided polygon.
sentAt - DateFilter The time that the last known AIS position for this track_id/mmsi was sent by the transponder.
receivedAt - DateFilter The time that the last known AIS position for this track_id/mmsi record was received by the Skylight system.
createdAt - DateFilter The time that the first last known AIS position for this track_id/mmsi record was inserted into the Skylight system.
updatedAt - DateFilter The time that the last known AIS position for this track_id/mmsi was updated in the Skylight system.
limit - Int The maximum number of records to return in this page. Read the section on Pagination for more details. Default = 100
offset - Int The offset to start returning records from. Read the section on Pagination for more details. Default = 0
sortBy - LastKnownPositionSortField The field to sort the results by. Read the section on Pagination for more details. Default = sentAt
sortDirection - SortDirection!
Example
{
  "trackId": {"eq": "B:563034920:1709283241:2837054:903124"},
  "mmsi": {"eq": 368156470},
  "intersectsGeometry": {
    "type": "Polygon",
    "coordinates": [[[100, -5], [100, 5], [120, 5], [120, -5], [100, -5]]]
  },
  "sentAt": {"gte": "2021-01-01T00:00:00Z", "lte": "2021-01-02T00:00:00Z"},
  "receivedAt": {"gte": "2021-01-01T00:00:00Z", "lte": "2021-01-02T00:00:00Z"},
  "createdAt": {"lte": "2021-01-01T00:00:00Z"},
  "updatedAt": {"gte": "2021-01-01T00:00:00Z"},
  "limit": 10,
  "offset": 0,
  "sortBy": "sentAt",
  "sortDirection": "desc"
}

SearchLastKnownPositionsOutput

Fields
Field Name Description
records - [LastKnownPosition] List of Last Known Positions
meta - MetaV2 Metadata for paginated results
Example
{
  "records": [LastKnownPosition],
  "meta": MetaV2
}

SearchOrganizationsInput

Description

SearchOrganizationsInput is the input for retrieving a list of user organizations.

Fields
Input Field Description
limit - Int Limit results displayed per page
offset - Int Offset into paginated results
sortBy - OrganizationSortBy Sort organizations by organization name. Default = name
sortDirection - SortDirection Sort direction. Default = desc
Example
{"limit": 10, "offset": 0, "sortBy": "name", "sortDirection": "desc"}

SearchOrganizationsOutput

Description

SearchOrganizationsOutput is the output of searching for user organizations.

Fields
Field Name Description
records - [Organization] List of user organizations
meta - Meta Metadata for paginated results
Example
{
  "records": [Organization],
  "meta": Meta
}

SearchSatelliteFramesV2Input

Description

See SatelliteFrameV2 for more information on Satellite Frames and the values for each field.

Fields
Input Field Description
frameId - KeywordFilter The Skylight generated unique identifier for a frame
vendorId - KeywordFilter The unique identifier from the source system for the satellite frame
dataSource - KeywordFilter The source system of the satellite frame, See DataSource for allowed values
eventType - KeywordFilter The type of events generated by the frame. See EventType for allowed values
intersectsGeometry - GeometryInput Filter to frames based on the spatial extent of the satellite image. Any frames intersecting the provided polygon will be returned
status - KeywordFilter The processing status of the frame. See SatelliteFrameStatus for allowed values. Defaults to filtering to only Completed Frames.
createdAt - DateFilter The time that the satellite frame was originally found by the Skylight system. This is before any processing begins. Values must be greater than now - 540 days.
updatedAt - DateFilter The time that the satellite frame was last updated by the Skylight system. Values must be greater than now - 540 days.
collectedAt - DateFilter The time that the satellite image was collected by the satellite. Values must be greater than now - 540 days.
totalCount - IntFilter Filter for frames based on the total number of detections (numDetections.totalCount) in that frame
correlatedCount - IntFilter Filter for frames based on the number of correlated detections (numDetections.correlatedCount) in that frame
uncorrelatedCount - IntFilter Filter for frames based on the total number of uncorrelated detections (numDetections.uncorrelatedCount) in that frame
inferenceVersion - KeywordFilter
limit - Int
offset - Int
sortBy - SearchSatelliteFramesV2SortFields
sortDirection - SortDirection
Example
{
  "frameId": {"eq": "60b6b92cd47e5a3bf097edd48222e02a44dd0914"},
  "vendorId": {
    "eq": "S2A_MSIL1C_20241105T155431_N0511_R054_T18TWK_20241105T193004.SAFE"
  },
  "dataSource": {"inc": ["sentinel2", "landsat8_9"]},
  "eventType": {"inc": ["eo_sentinel2", "eo_landsat8_9"]},
  "intersectsGeometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [5.4421, 43.2135],
        [5.4421, 43.2095],
        [5.4494, 43.2095],
        [5.4494, 43.2135],
        [5.4421, 43.2135]
      ]
    ]
  },
  "status": {"eq": "Completed"},
  "createdAt": {"gte": "2025-02-01T04:32:22Z"},
  "updatedAt": {"gte": "2025-02-01T04:32:22Z"},
  "collectedAt": {"gte": "2024-11-01", "lte": "2024-11-30"},
  "totalCount": {"eq": 0},
  "correlatedCount": {"gt": 100},
  "uncorrelatedCount": {"lt": 10},
  "inferenceVersion": {"eq": "landsat_vessels_v0.0.1"},
  "limit": 100,
  "offset": 0,
  "sortBy": "createdAt",
  "sortDirection": "asc"
}

SearchSatelliteFramesV2Output

Fields
Field Name Description
records - [SatelliteFrameV2] List of Satellite Frames
meta - MetaV2 Metadata for paginated results
Example
{
  "records": [SatelliteFrameV2],
  "meta": MetaV2
}

SearchSatelliteFramesV2SortFields

Values
Enum Value Description

createdAt

updatedAt

collectedAt

Example
"createdAt"

SearchSatelliteTipsInput

Description

SearchSatelliteTipsInput is the input for retrieving a list of satellite tips.

Fields
Input Field Description
id - KeywordFilter See SatelliteTip
status - KeywordFilter See SatelliteTipStatus for list of valid values
tipVendorName - KeywordFilter See SatelliteTipVendor for list of valid values
tipVendorId - KeywordFilter See SatelliteTip
tipVendorFrameId - KeywordFilter See SatelliteTip Use tipVendorFrameIds instead
tipVendorFrameIds - KeywordFilter See SatelliteTip
tipVendorStatus - KeywordFilter See SatelliteTip
tipVendorErrorMessage - StringFilter See SatelliteTip
observationPointGeometry - GeometryInput See SatelliteTip
observationTime - DateFilter See SatelliteTip
savedSearchId - KeywordFilter See SatelliteTip
savedSearchName - StringFilter See SatelliteTip
aoiId - KeywordFilter See SatelliteTip
aoiName - StringFilter See SatelliteTip
sourceEventId - KeywordFilter See SatelliteTip
sourceEventType - KeywordFilter See SatelliteTip
detectionEventId - KeywordFilter See SatelliteTipDetectionEvent
submittedByUserId - KeywordFilter See SatelliteTip
submittedByUsername - StringFilter See SatelliteTip
createdAt - DateFilter Filter on the created timestamp of the Satellite Tip. See SatelliteTip
updatedAt - DateFilter Filter on the updated timestamp of the Satellite Tip. See SatelliteTip
limit - Int The maximum number of records to return in this page. Default = 100
offset - Int The offset to start returning records from. Default = 0
sortBy - SearchSatelliteTipsSortBy The field to sort the results by. Default = createdAt
sortDirection - SortDirection The direction to sort the results. Default = desc
searchQuery - String

Simultaneously search across all of these fields:

  • id
  • status
  • tipVendorName
  • tipVendorId
  • tipVendorFrameIds
  • tipVendorStatus
  • tipVendorErrorMessage
  • savedSearchId
  • savedSearchName
  • aoiId
  • aoiName
  • sourceEventId
  • sourceEventType
  • detectionEventId
  • submittedByUserId
  • submittedByUsername
Example
{
  "id": {"eq": "da0ae294-2986-4df9-81e1-2be935580565"},
  "status": {"eq": "SUBMITTED_TO_VENDOR"},
  "tipVendorName": {"eq": "MAXAR"},
  "tipVendorId": KeywordFilter,
  "tipVendorFrameId": KeywordFilter,
  "tipVendorFrameIds": KeywordFilter,
  "tipVendorStatus": KeywordFilter,
  "tipVendorErrorMessage": StringFilter,
  "observationPointGeometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [4.786029, -65.012778],
        [4.786029, -65.002778],
        [4.796029, -65.002778],
        [4.796029, -65.012778],
        [4.786029, -65.012778]
      ]
    ]
  },
  "observationTime": {"gt": "2025-01-24T00:54:24.807Z"},
  "savedSearchId": KeywordFilter,
  "savedSearchName": StringFilter,
  "aoiId": KeywordFilter,
  "aoiName": StringFilter,
  "sourceEventId": {"eq": "4f7f2159-7916-4eda-884d-54190bbfa408"},
  "sourceEventType": {"eq": "atlas_fishing"},
  "detectionEventId": KeywordFilter,
  "submittedByUserId": KeywordFilter,
  "submittedByUsername": StringFilter,
  "createdAt": DateFilter,
  "updatedAt": DateFilter,
  "limit": 2,
  "offset": 987,
  "sortBy": "createdAt",
  "sortDirection": "asc",
  "searchQuery": "abc123"
}

SearchSatelliteTipsOutput

Description

SearchSatelliteTipsOutput is the response object containing Satellite Tip search results.

Fields
Field Name Description
records - [SatelliteTip] the list of Satellite Tips that match the search criteria
meta - MetaV2
Example
{
  "records": [SatelliteTip],
  "meta": MetaV2
}

SearchSatelliteTipsSortBy

Description

An enum specifying how to sort Satellite Tip Search results

Values
Enum Value Description

createdAt

Sort by the created timestamp of the Satellite Tip.

updatedAt

Sort by the updated timestamp of the Satellite Tip.

observationTime

Sort by the time at which the observation was made.

status

Sort by the normalized status of the Satellite Tip.

tipVendorStatus

Sort by the tip status as directly provided by the Vendor
Example
"createdAt"

SearchTracksSubpathOutput

Fields
Field Name Description
records - [TrackSubpath] List of Tracks
meta - MetaV2 Metadata for paginated results
Example
{
  "records": [TrackSubpath],
  "meta": MetaV2
}

SearchUsersInput

Description

SearchUsersInput is the input for searching for users.

Fields
Input Field Description
id - KeywordFilter User ID filter
email - StringFilter User email filter
role - KeywordFilter User role filter
organization - StringFilter User organization filter
createdAt - DateFilter Created at date filter
engagement - StringFilter User's engagement filter
name - StringFilter User's name filter
groupIds - KeywordFilter User's affilitiated group IDs filter
department - StringFilter User's department filter
createdByEmail - StringFilter Created by email filter
title - StringFilter User's job title filter
annotationProjects - StringFilter User's associated annotation projects filter
previousEmails - StringFilter User's previous emails associated with their account
lastLoginAt - DateFilter Last login at filter
tosAcceptedAt - DateFilter TOS (Terms of Service) accepted at filter
limit - Int Limit results displayed per page
offset - Int Offset into paginated results
sortBy - UserSortBy Sort Users by the specified field. Default = email
sortDirection - SortDirection Sort direction. Default = asc
searchQuery - String Search across all of these fields: email, role, organization, engagement, name, title, department, groupIds, createdByEmail, previousEmails, annotationProjects, createdAt, lastLoginAt
Example
{
  "id": {"neq": "6853a2757a980b1e24652a41"},
  "email": {"neq": "testUser123@skylight.com"},
  "role": {"eq": "Superadmin"},
  "organization": {"eq": "Vulcan"},
  "createdAt": {"lte": "2024-12-07T01:18:45.363618Z"},
  "engagement": {"eq": "Vulcan"},
  "name": {"like": "Mike"},
  "groupIds": {"ninc": "annotator"},
  "department": {"neq": "Annotation Project"},
  "createdByEmail": {"neq": "skylight-admin@skylight.com"},
  "title": {"eq": "Annotator"},
  "annotationProjects": {"inc": "sampled_trajectories_1"},
  "previousEmails": {"neq": "annotator1234@skylight.com"},
  "lastLoginAt": {"lte": "2024-12-07T01:18:45.363618Z"},
  "tosAcceptedAt": {"lte": "2024-12-07T01:18:45.363618Z"},
  "limit": 10,
  "offset": 10,
  "sortBy": "name",
  "sortDirection": "asc",
  "searchQuery": "project"
}

SearchUsersOutput

Fields
Field Name Description
records - [User] List of Users
meta - Meta Metadata for paginated results
Example
{
  "records": [
    {
      "id": "6272db97005abff9a96d68e3",
      "email": "testUser@skylight.com",
      "role": "User",
      "name": "Michael Douglas",
      "title": "Maritime Security Adviser",
      "organization": "Expertise France",
      "engagement": "Support to West Africa Integrated Maritime Security Project (SWAIMS)\"",
      "department": "SWAIMS / Techincal Assitance Team",
      "createdByEmail": null,
      "createdAt": "2023-10-15T13:00:06Z",
      "lastLoginAt": null,
      "tosAcceptedAt": "2023-10-15T13:00:06Z",
      "groupIds": null,
      "annotationProjects": null,
      "previousEmails": [],
      "passwordSetAt": null
    }
  ],
  "meta": {"pageNum": null, "total": 11, "pageSize": null}
}

SearchVesselsInput

Description

SearchVesselsInput is the input for searching vessel metadata.

See searchVessels for more information on this API.

Fields
Input Field Description
mmsi - KeywordFilter Maritime Mobile Service Identity
imo - KeywordFilter Seven-digit International Maritime Organization number
vesselName - StringFilter Name of the vessel
callSign - KeywordFilter Identifier for ship radio communications
flag - KeywordFilter Flag of registry represented as ISO 3166-1 alpha-3 country code
vesselLegacyId - KeywordFilter An id in the form of B:{mmsi}:{sendTimestamp} which indicates a backwards compatible id for the event history service to map back to vessels in the new service
vesselType - KeywordFilter Type of vessel class, one of VesselType
gearType - KeywordFilter Type of vessel gear, one of GearType
authorizationSource - KeywordFilter Authorization source list that the vessel is reported on. See VesselV2Authorization for additional information
ownerName - StringFilter Owner name that the vessel is owned by. See VesselV2Owner for more information
effectiveTo - DateFilter Filter on the time that the vessel data is known to be valid until. Filter values must be less than or equal to now." If the time range specified using the filters effectiveFrom and effectiveTo matches multiple identities, the most recent within the time range is returned for a vessel.
effectiveFrom - DateFilter Filter on the time that the vessel data was first attributed. Filter values must be greater than now - 540 days. If the time range specified using the filters effectiveFrom and effectiveTo has multiple identities, the most recent within the time range is returned for a vessel.
limit - Int Maximum number of records to return in this page. Default = 100
offset - Int The offset to start returning records from. Default = 0
sortBy - VesselV2SortBy Sort vessel metadata by the specified field. Default = mostRecent
sortDirection - SortDirection Sort direction. Default = desc
searchQuery - String

Search across all of these fields:

  • mmsi
  • imo
  • vesselName
  • callSign
Example
{
  "mmsi": {"eq": "273445480"},
  "imo": {"eq": "1234567"},
  "vesselName": {"contains": "Ocean"},
  "callSign": {"eq": "WABC123"},
  "flag": {"eq": "USA"},
  "vesselLegacyId": {"eq": "B:273445480:20240101"},
  "vesselType": {"eq": "CARGO"},
  "gearType": {"eq": "SET_LONGLINES"},
  "authorizationSource": {"eq": "ICCAT"},
  "ownerName": {"eq": "Ocean Shipping Co"},
  "effectiveTo": {"lte": "2024-04-03T00:00:00Z"},
  "effectiveFrom": {"gte": "2023-04-03T00:00:00Z"},
  "limit": 10,
  "offset": 0,
  "sortBy": "mostRecent",
  "sortDirection": "desc",
  "searchQuery": "Ocean Carrier"
}

SearchVesselsOutput

Description

SearchVesselsOutput is the output for searching vessel metadata.

See searchVessels for more information on this API.

Fields
Field Name Description
records - [VesselV2] List of vessel metadata records
meta - Meta Metadata for paginated results
Example
{
  "records": [
    {
      "mmsi": "419956492",
      "imo": [
        {"value": "1234567", "source": "AIS"},
        {"value": "1234567", "source": "GFW"}
      ],
      "callSign": [
        {"value": "5BCK4", "source": "AIS"},
        {"value": "5BCK4", "source": "GFW"}
      ],
      "vesselName": [
        {"value": "Ocean Carrier 1", "source": "AIS"},
        {"value": "Ocean Carrier 12", "source": "GFW"}
      ],
      "vesselType": [
        {"value": "FISHING", "source": "AIS"},
        {"value": "FISHING", "source": "GFW"}
      ],
      "flag": [
        {"value": "PAN", "source": "AIS"},
        {"value": "PAN", "source": "GFW"}
      ],
      "widthMeters": [{"value": 20, "source": "AIS"}],
      "lengthMeters": [
        {"value": 100, "source": "AIS"},
        {"value": 99, "source": "GFW"}
      ],
      "tonnageGt": [{"value": 5000, "source": "GFW"}],
      "gearTypes": [{"value": ["SQUID_JIGGER"], "source": "GFW"}],
      "effectiveFrom": [
        {"value": "2019-04-19T06:35:45Z", "source": "GFW"},
        {"value": "2020-04-30T04:40:00Z", "source": "AIS"}
      ],
      "owners": [
        {
          "value": [
            {
              "ownerName": "Ocean Shipping Co",
              "flag": "PAN",
              "ownerSource": "ICCAT",
              "firstVerifiedOn": "2019-04-19T06:35:45Z",
              "lastVerifiedOn": "2025-01-31T01:49:26Z"
            }
          ],
          "source": "GFW"
        }
      ],
      "authorizations": [
        {
          "value": [
            {
              "firstVerifiedOn": "2018-05-09T00:00:00Z",
              "lastVerifiedOn": "2025-01-01T00:00:00Z",
              "authorizationSource": "ICCAT"
            }
          ],
          "source": "GFW"
        }
      ]
    }
  ],
  "meta": {"total": 1, "limit": 10, "offset": 0, "hasMore": false}
}

SentinelProduct

Fields
Field Name Description
dataspaceApiId - String
contentLength - Int
s3Path - String
platformShortName - String
instrumentShortName - String
productType - String
cloudCover - Float
polarisationChannels - String
operationalMode - String
sensingTimestamp - String
imageryGcsPath - String
detectionsGcsPath - String
Example
{
  "dataspaceApiId": "xyz789",
  "contentLength": 987,
  "s3Path": "xyz789",
  "platformShortName": "abc123",
  "instrumentShortName": "abc123",
  "productType": "xyz789",
  "cloudCover": 123.45,
  "polarisationChannels": "xyz789",
  "operationalMode": "xyz789",
  "sensingTimestamp": "abc123",
  "imageryGcsPath": "abc123",
  "detectionsGcsPath": "abc123"
}

SentinelVendorVessel

Description

Internal Metadata exposed from the Sentinel model, this can change at any time!

Fields
Field Name Description
correlation - AisCorrelation The correlation data if a correlation was found
inferenceVersion - String A version identifier for the model that performed inference
detectSceneRow - Int! The x coordinate of the detection, in pixel coordinates in the preprocessed imagery
detectSceneColumn - Int! The y coordinate of the detection, in pixel coordinates in the preprocessed imagery
vesselLengthM - Float The predicted vessel length in meters
vesselWidthM - Float The predicted vessel width in meters
vesselSpeedKts - Float The predicted vessel speed in knots
isFishingVessel - Float Float between 0 and 1 representing the probability that the detected vessel is a fishing vessel
headingBuckets - [Float] Probability that the heading direction of the detected vessel lies in the range between i*(360/16) and (i + 1)*(360/16) degrees, measured clockwise relative to true north
Example
{
  "correlation": AisCorrelation,
  "inferenceVersion": "xyz789",
  "detectSceneRow": 123,
  "detectSceneColumn": 987,
  "vesselLengthM": 987.65,
  "vesselWidthM": 987.65,
  "vesselSpeedKts": 987.65,
  "isFishingVessel": 123.45,
  "headingBuckets": [987.65]
}

SortDirection

Values
Enum Value Description

asc

Ascending order

desc

Descending order
Example
"asc"

SpeedRangeEventDetails

Description

Details of the eventDetails field of an EventV2 where eventType is 'speed_range'.

See the Skylight Help Center - Speed Range for more details about Speed Range Events.

Fields
Field Name Description
averageSpeed - Float! The average speed, in knots, of the vessel during the period that qualified for this event.
distance - Float! The distance, in kilometers, the vessel traveled during the period that qualified for this event.
durationSec - Int! The amount of time, in seconds, that passed during the period that qualified for this event.
Example
{
  "averageSpeed": 11.594736862182618,
  "distance": 359.7272938209405,
  "durationSec": 59679
}

SpeedRangeFeatureParameters

Description

SpeedRangeFeatureParameters are the parameters for speed range events

Fields
Field Name Description
filterType - SpeedRangeFilterType Filter type, distance or duration
distanceThresholdKilometers - Float The distance threshold for a vessel to travel at the specified speed to trigger an event. For filterType=distance, this field is required. Only one of distanceThresholdKilometers or timeThresholdMinutes is allowed.
timeThresholdMinutes - Float The time threshold for a vessel to travel at the specified speed to trigger an event. For filterType=duration, this field is required. Only one of distanceThresholdKilometers or timeThresholdMinutes is allowed.
minSpeedKnots - Float Minimum speed in knots
maxSpeedKnots - Float Maximum speed in knots
Example
{
  "filterType": "distance",
  "distanceThresholdKilometers": 10,
  "timeThresholdMinutes": 60,
  "minSpeedKnots": 10,
  "maxSpeedKnots": 20
}

SpeedRangeFeatureParametersInput

Description

SpeedRangeFeatureParametersInput is the input for speed range configuration

Fields
Input Field Description
filterType - SpeedRangeFilterType Filter type, distance or duration
distanceThresholdKilometers - Float The distance threshold for a vessel to travel at the specified speed to trigger an event. For filterType=distance, this field is required. Only one of distanceThresholdKilometers or timeThresholdMinutes is allowed.
timeThresholdMinutes - Float The time threshold for a vessel to travel at the specified speed to trigger an event. For filterType=duration, this field is required. Only one of distanceThresholdKilometers or timeThresholdMinutes is allowed.
minSpeedKnots - Float Minimum speed in knots
maxSpeedKnots - Float Maximum speed in knots
Example
{
  "filterType": "distance",
  "distanceThresholdKilometers": 10,
  "timeThresholdMinutes": 60,
  "minSpeedKnots": 10,
  "maxSpeedKnots": 20
}

SpeedRangeFilterType

Description

SpeedRangeFilterType determines what activity will trigger the speed range event.

Values
Enum Value Description

distance

An event will be generated if the vessel is within the speed range for the specified distance

duration

An event will be generated if the vessel is within the speed range for the specified duration
Example
"distance"

StandardRendezvousEventDetails

Description

Details of the eventDetails field of an EventV2 where eventType is 'standard_rendezvous'.

Currently this model is empty; however we may add additional fields in the future.

See the Skylight Help Center - Standard Rendezvous for more details about Standard Rendezvous events.

Fields
Field Name Description
graphql_doesnt_allow_empty_types - Boolean
Example
{"graphql_doesnt_allow_empty_types": true}

StartEnd

Fields
Field Name Description
point - Point Start position (latitude/longitude)
time - String ISO 8601 formatted timestamp
Example
{
  "point": {"lat": -4.186575, "lon": -5.88524},
  "time": "2024-08-13T15:58:52.000Z"
}

String

Description

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

Example
"xyz789"

StringFilter

Description

This query object is used to filter string fields.

Fields
Input Field Description
eq - String Equal to
neq - String Not equal to
inc - [String] Included in list
ninc - [String] Not included in list
like - String Like
nlike - String Not like
Example
{
  "eq": "xyz789",
  "neq": "xyz789",
  "inc": ["abc123"],
  "ninc": ["xyz789"],
  "like": "abc123",
  "nlike": "xyz789"
}

SubpathActivityParamVessel

Description

Internal-only model that represents the vessel parameters used to classify a subpath

Fields
Field Name Description
name - String
flag - String
category - Int
Example
{
  "name": "abc123",
  "flag": "xyz789",
  "category": 123
}

SubpathActivityParams

Description

Internal-only model that represents the parameters used to classify a subpath

Fields
Field Name Description
startTime - String
endTime - String
numPositions - Int
positionUpperLimit - Int
positionLowerLimit - Int
vessel - SubpathActivityParamVessel
Example
{
  "startTime": "abc123",
  "endTime": "xyz789",
  "numPositions": 123,
  "positionUpperLimit": 987,
  "positionLowerLimit": 123,
  "vessel": SubpathActivityParamVessel
}

Token

Fields
Field Name Description
access_token - String Token to include in request 'Authorization' header
expires_in - Int Expiration period for the access token (in milliseconds)
refresh_token - String Token to send in request to extend the expiration period
token_type - String Type of token (value is always 'Bearer')
Example
{
  "access_token": "zOrUKsEIlqTGxNbFMdKwRvTO9utjuA",
  "expires_in": 86400,
  "refresh_token": "2fPyXZTWXggd3Bjw0Doc2QyCzn9n79",
  "token_type": "Bearer"
}

Track

Fields
Field Name Description
properties - TrackProperties Additional Track properties
geometry - LineString Track geometry in GeoJSON format
Example
{
  "properties": "{ 'cog': 114.5999984741211, 'mean_sog': 6.019, 'end': { 'point': { 'lat': 3.31772, 'lon': -18.810928333333333 }, 'time': '2024-03-03T03:32:31+00:00' }, 'start': { 'point': { 'lat': 3.314005, 'lon': -18.812306666666668 }, 'time': '2024-03-03T03:25:58+00:00' }, 'segment_type': 'TRAVEL', 'track_id': 'B:224083590:1639013658:1643050:882604' }",
  "geometry": "{ 'coordinates': [[ -18.812306666666668, 3.314005 ], [ -18.810928333333333, 3.31772 ]], 'type': 'LineString' }"
}

TrackProperties

Fields
Field Name Description
cog - Float Course over ground as reported by AIS (in degrees)
mean_sog - Float Mean speed over ground as reported by AIS (in knots)
segment_type - String Track segment type (possible values are 'NO_DATA', 'STAY' and 'TRAVEL')
track_id - String Vessel track ID (unique to the Skylight platform)
start - StartEnd Track start location and timestamp
end - StartEnd Track end location and timestamp
Example
{
  "cog": 114.5999984741211,
  "mean_sog": 6.019,
  "segment_type": "TRAVEL",
  "track_id": "B:224083590:1639013658:1643050:882604",
  "start": "'start': { 'point': { 'lat': 3.314005, 'lon': -18.812306666666668 }, 'time': '2024-03-03T03:25:58+00:00' }",
  "end": "'end': { 'point': { 'lat': 3.31772, 'lon': -18.810928333333333 }, 'time': '2024-03-03T03:32:31+00:00' }"
}

TrackSubpath

Description
Beta
This model is in beta and may change in the future.

The TrackSubpath data model represents a segment of a vessel’s journey, defined by a series of AIS (Automatic Identification System) position points recorded between two specific time points. These time points are determined by the Skylight Platform based on changes in the vessel’s behavior, allowing us to divide a vessel’s full track into meaningful subpaths.

By examining multiple TrackSubpaths over time, users can reconstruct and visualize the vessel’s overall track. Each TrackSubpath includes key metadata such as start and end times, the number of AIS position points recorded, and the vessel’s course and speed during that segment. Additionally, a simplified geometry in the form of a downsampled lineString provides an approximation of the vessel’s path for visualization purposes. Due to licensing restrictions, the full set of AIS positions cannot be included.

Fields
Field Name Description
subpathId - String! Unique identifier for the track subpath
trackId - String! Track ID (unique to the Skylight platform). Can be multiple track subpaths with the same track id (as they're all part of a larger track)
mmsi - Int Maritime Mobile Service Identity number (from AIS position messages)
meanSog - Float Mean speed over ground of the track (Knots) prior to down-sampling.
cog - Float Course over ground of the first position in the track subpath.
numPositions - Int Number of AIS position messages in this track.
startTime - String! Time of the first AIS Position of the track.
endTime - String! This represents the exclusive upper bound of this track and is actually the send time of the first position of the next track. This track includes all positions up to but excluding this time.
startLocation - Point! Location of the first AIS Position of the track.
endLocation - Point! The location of the first position point of the next track. This track includes the location of the vessel up to but excluding this point
pathGeometry - Geometry A GeoJSON encoded GeometryCollection that includes a Point representing the start location of this track, and a LineString representing the full path the vessel took during this track. The LineString is downsampled.
midpointGeometry - Point The midpoint of the track path. Stored as a Point for visualization purposes.
midpointCog - Float The course at the midpoint of the track. Stored for visualization purposes.
activityClassification - TrackSubpathActivityClassification The predicted activity classification for this track as determined by Skylight AI models. None indicates an unclassified track.
createdAt - String Date and time the track was initially inserted into the Skylight database
updatedAt - String Date and time the track was last updated in the Skylight database
Example
{
  "subpathId": "d5011951-d323-4e64-9cf5-1f767ffb2bed",
  "trackId": "B:224083590:1639013658:1643050:882604:1723421649:1723423470",
  "mmsi": 368156470,
  "meanSog": 6.019,
  "cog": 114.5999984741211,
  "numPositions": 10,
  "startTime": "2024-08-29T10:47:20.232",
  "endTime": "2024-08-29T10:47:20.232",
  "startLocation": {"lat": 3.314005, "lon": -18.812306666666668},
  "endLocation": {"lat": 3.31772, "lon": -18.810928333333333},
  "pathGeometry": {
    "geometries": [
      {
        "coordinates": [
          [-18.812306666666668, 3.314005],
          [-18.810928333333333, 3.31772]
        ],
        "type": "LineString"
      }
    ],
    "type": "GeometryCollection"
  },
  "midpointGeometry": {"lat": 3.3158625, "lon": -18.8116175},
  "midpointCog": 114,
  "activityClassification": "transiting",
  "createdAt": "2021-09-01T00:00:00Z",
  "updatedAt": "2021-09-01T00:00:00Z"
}

TrackSubpathActivityClassification

Values
Enum Value Description

anchored

Vessel is anchored

fishing

Vessel is fishing

moored

Vessel is moored

time_gap

Vessel has not transmitted AIS in > 2 hours

transiting

Vessel is transiting

unknown

Unknown activity
Example
"anchored"

TrackSubpathGeometryField

Values
Enum Value Description

path_geometry

midpoint_geometry

Example
"path_geometry"

TrackSubpathSortBy

Values
Enum Value Description

start_time

Sort by Start Time

end_time

Sort by End Time

created_at

Sort by created at time

updated_at

Sort by updated at time

mmsi

Sort by MMSI

mean_sog

Sort by Mean Speed Over Ground

num_positions

Sort by the number of positions in a track
Example
"start_time"

Trajectory

Fields
Field Name Description
trackId - JSON
Example
{"trackId": {}}

TrajectoryClassification

Fields
Field Name Description
model - TrajectoryModel!
subpath - TrackSubpath!
trajectory - Trajectory!
trajectoryParams - TrajectoryParams!
Example
{
  "model": "atlas_activity",
  "subpath": TrackSubpath,
  "trajectory": Trajectory,
  "trajectoryParams": TrajectoryParams
}

TrajectoryModel

Values
Enum Value Description

atlas_activity

Example
"atlas_activity"

TrajectoryParams

Fields
Field Name Description
model - TrajectoryModel!
subpathId - String!
trackId - String
format - String!
Example
{
  "model": "atlas_activity",
  "subpathId": "abc123",
  "trackId": "xyz789",
  "format": "abc123"
}

UpdateAOIInput

Description

Input used to update an AOI

Fields
Input Field Description
id - String! ID of the AOI
name - String Name of the AOI
description - String Description of the AOI
status - AoiStatus Status of the AOI
geometry - GeometryInput Geometry of the AOI
Example
{
  "id": "5139d9dc-a182-4735-b177-d8b40102fac7",
  "name": "my-aoi",
  "description": "This is my new AOI",
  "status": "active",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [-89.15052, 20.4076],
        [-86.712234, 20.841209],
        [-87.004501, 22.347897],
        [-89.468567, 21.917629],
        [-89.15052, 20.4076]
      ]
    ]
  }
}

UpdateApiKeyInput

Fields
Input Field Description
keyName - String Human-readable name given by API key owner (3-1000 characters)
status - ApiKeyStatus Valid values are (active, deleted)
Example
{"keyName": "Updated Production API Key", "status": "active"}

UpdateUserInput

Description

Input used to update a User

Fields
Input Field Description
id - String! ID of the user
email - String Email of the user. If the email is different from the current email associated with the account, the previousEmails field will be updated
role - UserRole Role of the user
password - String Marking undocumented because this should only be used internally
engagement - String Engagement of the user
organization - String Organization of the user
groupIds - [String] Group ids the user is associated with
annotationProjects - [String] Annotation projects the user is associated with
name - String Name of the user
title - String Job title of the user
department - String Department associated with the user
tosAcceptedAt - String Marking undocumented because this should only be used internally
lastLoginAt - String Marking undocumented because this should only be used internally
Example
{
  "id": "6753a2757a980b1e24652a41",
  "email": "updated-annotator123@skylight.com",
  "role": "Superadmin",
  "password": null,
  "engagement": "Vulcan",
  "organization": "Vulcan",
  "groupIds": [],
  "annotationProjects": [],
  "name": "Michael Douglas",
  "title": "Super Annotator",
  "department": "Annotation Project",
  "tosAcceptedAt": "2024-12-07T01:18:45.363618Z",
  "lastLoginAt": "2024-12-07T01:18:45.363618Z"
}

UpsertEventFeedbackInput

Description

Input used to create or update an event feedback

Fields
Input Field Description
eventId - String! Event ID of the Event Feedback
comments - String A user provided string about the feedback. This is unstructured and can be anything the user wants to provide.
rating - EventFeedbackRating

Feedback rating filter. Valid values:

  • GOOD
  • BAD
  • UNSURE
additionalContext - String Clarifying information on the selected feedback rating. This is typically a fixed number of allowed values per event type.
Example
{
  "eventId": "B:224313000:1694136001:1005579:713203:1724813243:1724813443",
  "comments": "This does not look like fishing behavior",
  "rating": "BAD",
  "additionalContext": "transiting"
}

User

Fields
Field Name Description
id - String Unique identifier for the user
email - String Email of the user
role - UserRole Role of the user
name - String Name of the user, typically FirstName LastName
title - String Job title of the user
organization - String Organization the user is associated with
engagement - String Primary engagement of the user
department - String Department the user is a part of within their organization
createdByEmail - String The email that created the user's account
createdAt - String Date and time the user account was created
lastLoginAt - String Date and time the user last logged in
tosAcceptedAt - String Date and time the user accepted the TOS (Terms of Service)
groupIds - [String] Ids of groups that the user is associated with
annotationProjects - [String] Annotation projects that the user is a part of
previousEmails - [String] Previous emails associated with the user account
passwordSetAt - String Date and time the user updated their password
Example
{
  "id": "6753a2757a980b1e24652a41",
  "email": "annotator123@skylight.com",
  "role": "Admin",
  "name": "Michael Douglas",
  "title": "Annotator",
  "organization": "Fisheries",
  "engagement": "Vulcan",
  "department": "Annotation Project",
  "createdByEmail": "skylight-admin@allenai.org",
  "createdAt": "2024-12-07T01:18:45.363618Z",
  "lastLoginAt": "2024-12-07T01:18:45.363618Z",
  "tosAcceptedAt": "2024-12-07T01:18:45.363618Z",
  "groupIds": ["Fisheries Group"],
  "annotationProjects": ["sampled_trajectories_1", "sampled_trajectories_2"],
  "previousEmails": ["previous_email@allenai.org"],
  "passwordSetAt": null
}

UserParams

Fields
Field Name Description
params_id - String User parameters ID (unique to the Skylight platform)
user_id - String User ID (unique to the Skylight platform)
aoi_id - String Area of Interest ID (unique to the Skylight platform)
speed_min - Int Vessel's minimum speed (in knots)
speed_max - Int Vessel's maximum speed (in knots)
display_unit - String Unit of measurement (either time or distance-based)
filter_type - String Type of event measurement (either time duration or distance)
min_distance - Float Event minimum distance expressed in display_unit (see above)
min_duration - Float Event minimum duration in seconds
Example
{
  "params_id": "6245eea388e3f610aa04ba93",
  "user_id": "6120123fbc8f8661da8a5332",
  "aoi_id": "2ba89a82-79aa-4e07-b0ec-ed8db1b40864",
  "speed_min": 10,
  "speed_max": 12,
  "display_unit": "hr",
  "filter_type": "duration",
  "min_distance": 14.816,
  "min_duration": 3600
}

UserRole

Values
Enum Value Description

Superadmin

User has full set of permissions to access APIs and create/update/delete accounts, groups, engagements, organizations, and roles

Admin

User has a subset of permissions to access APIS, add/remove members from groups, and create/update/delete engagements, organizations, and roles (excluding the ability to assign Superadmin)

User

User has general permissions to use Skylight

Annotator

User has general permissions to use Skylight and is able to annotate events

Anonymous

User is not logged in and can only access data that is publicly available
Example
"Superadmin"

UserSortBy

Values
Enum Value Description

createdAt

Sort by created at date

email

Sort by email

name

Sort by name

title

Sort by title

role

Sort by role

organization

Sort by organization

department

Sort by department

engagement

Sort by engagement

lastLoginAt

Sort by last login at date

tosAcceptedAt

Sort by TOS (Terms of Service) accepted at date
Example
"createdAt"

VendorVessel

Fields
Field Name Description
clear_sky_confidence - Float Confidence level that a given observation area is free of clouds, expressed as a percent range (from 0 to 100): 0% indicates no confidence (completely cloudy)
moonlight_illumination - Float Light provided by the moon expressed as a percent range (from 0 to 100)
radiance_nw - Float Radiance in nanowatts per square centimeter per steradian (nW/cm²/sr)
nanowatts - Float Duplicates radiance_nw (see above)
satellite_name - String Satellite from which the detection was collected
scan_angle - [Float] Scan angle array. Returned values are: pitch, yaw, roll
Example
{
  "clear_sky_confidence": 0.58,
  "moonlight_illumination": 14,
  "radiance_nw": 374.6,
  "nanowatts": 987.65,
  "satellite_name": "Suomi-NPP",
  "scan_angle": [
    0.000285386573523283,
    0.000285386573523283,
    -0.00030078276176936924
  ]
}

VendorVesselV2

Example
LandsatVendorVessel

Vessel

Fields
Field Name Description
ais_type - Int Numeric Shiptype code (from AIS static messages)
ais_vessel_type - String Full vessel type label derived from AIS Shiptype
beneficial_owner - String Value will always be null
beneficial_owner_country_code - String Value will always be null
call_sign - String For ship radio communications (from AIS static messages)
country_codes - [String] Collection of country codes
flag - String Vessel flag of registry (from AIS static messages)
flag_code - String ISO 3166-1 alpha-3 country code (from AIS static messages)
imo - Int International Maritime Organization number (from AIS static messages)
length - Int Vessel length (in meters)
mmsi - Int Maritime Mobile Service Identity number (from AIS position messages)
name - String Vessel name (from AIS static messages)
operator - String Value will always be null
owner - String Value will always be null
owner_country_code - String Value will always be null
primary_gear_type - String Value will always be null
secondary_gear_type - String Value will always be null
tonnage - Float Value will always be null
vessel_category - String Vessel category (derived from the AIS Shiptype)
vessel_class - String Vessel class (possible values are buoy and vessel)
vessel_id - ID Vessel ID (unique to the Skylight platform)
vessel_type - String Vessel type (from AIS static messages)
width - Int Vessel width (in meters)
Example
{
  "ais_type": 30,
  "ais_vessel_type": "Fishing",
  "beneficial_owner": null,
  "beneficial_owner_country_code": null,
  "call_sign": "HPYR",
  "country_codes": ["['ESP'],"],
  "flag": "Spain",
  "flag_code": "ESP",
  "imo": 224933000,
  "length": 28,
  "mmsi": 224933000,
  "name": "AGIOS NIKOLAUS",
  "operator": null,
  "owner": null,
  "owner_country_code": null,
  "primary_gear_type": null,
  "secondary_gear_type": null,
  "tonnage": null,
  "vessel_category": "fishing",
  "vessel_class": "vessel",
  "vessel_id": "B:224933000:1681376115:1580146:1000022",
  "vessel_type": "other fishing",
  "width": 10
}

VesselCategory

Description

Vessel categories as self-reported in AIS static messages. See https://www.navcen.uscg.gov/sites/default/files/pdf/AIS/AISGuide.pdf for more details on vessel type.

Values
Enum Value Description

cargo

enforcement

fishing

passenger

pleasure

service

tanker

other

unknown

sar

Example
"cargo"

VesselClass

Values
Enum Value Description

vessel

buoy

unknown

Example
"vessel"

VesselDataSource

Values
Enum Value Description

AIS

The source that the data came from was AIS static messages

GFW

The source that the data came from was Global Fishing Watch's Vessel API. GFW uses self reported AIS information and registry data to make up vessel identity. More information on the API used: https://globalfishingwatch.org/our-apis/documentation#vessels-api
Example
"AIS"

VesselHistory

Description

VesselHistory represents the history over time of a MMSI's vessel metadata from a given source.

Fields
Field Name Description
mmsi - String Maritime Mobile Service Identity
history - [VesselHistorySourcedEntries] History of a vessels identity over time, from each data source
Example
{
  "mmsi": "273445480",
  "history": [
    {
      "source": "AIS",
      "entries": [
        {
          "id": "ais-123",
          "imo": 1234567,
          "callSign": "5BCK4",
          "vesselName": "Ocean Carrier 1",
          "flag": "USA",
          "lengthMeters": 200,
          "widthMeters": 30,
          "effectiveFrom": "2024-01-15T10:30:00Z",
          "effectiveTo": "2024-01-16T15:45:00Z",
          "isMostRecent": false
        },
        {
          "id": "ais-124",
          "imo": 2222222,
          "callSign": "5BCK4",
          "vesselName": "Ocean Carrier 1",
          "vesselType": "CARGO",
          "flag": "USA",
          "lengthMeters": 200,
          "widthMeters": 30,
          "effectiveFrom": "2024-01-16T15:45:00Z",
          "effectiveTo": null,
          "isMostRecent": true
        }
      ]
    },
    {
      "source": "GFW",
      "entries": [
        {
          "id": "gfw-123",
          "vesselName": "Ocean Carrier 1",
          "imo": 1234567,
          "callSign": "5BCK4",
          "vesselType": "TUNA_PURSE_SEINES",
          "gearType": "SET_LONGLINES",
          "tonnageGT": 5000,
          "flag": "USA",
          "ownerships": [
            {
              "owner": "Ocean Shipping Co",
              "ownerFlag": "USA",
              "ownerSource": "IMO",
              "startTime": "2024-01-15T10:30:00Z",
              "endTime": "2024-01-16T15:45:00Z"
            }
          ],
          "authorizations": [
            {
              "source": "ICCAT",
              "startTime": "2024-01-15T10:30:00Z",
              "endTime": "2024-01-16T15:45:00Z"
            }
          ],
          "effectiveFrom": "2022-01-15T10:30:00Z",
          "effectiveTo": null,
          "isMostRecent": true
        }
      ]
    }
  ]
}

VesselHistoryEntry

Description

A VesselHistoryEntry represents a snapshot of metadata about a MMSI at a period of time. This data can be sourced from AIS, Global Fishing Watch, or other sources. See the dataSource field of VesselHistorySourcedEntries for the source of the data

Fields
Field Name Description
vesselLegacyId - String An id in the form of B:{mmsi}:{sendTimestamp} which indicates a backwards compatible id for the event history service to map back to vessels in the new service
id - String An unique UUID that serves as the id for the specific vessel history entry.
imo - String Seven-digit International Maritime Organization number
callSign - String Identifier for ship radio communications
vesselName - String Name of the vessel
flag - String Country derived from this MMSI, represented as ISO 3166-1 alpha-3 country code
vesselType - VesselType The type of vessel. See Types.VesselType for available values and more information about the sourcing of this field.
gearTypes - [GearType] Type of gear (fishing or other) that is believed to be aboard this vessel, only available from GFW. See Types.GearType for available values and more information about the sourcing of this field.
lengthMeters - Float Vessel length (in meters)
widthMeters - Float Vessel width (in meters)
tonnageGt - Float Gross tonnage (measure of a vessel's overall internal volume)
authorizations - [VesselV2Authorization] Authorization / Registry lists that the vessel is reported on, only available from GFW. See Types.VesselV2Authorization for available values and more information about the sourcing of this field.
owners - [VesselV2Owner] Ownership information on the vessel, only available from GFW. See https://globalfishingwatch.org/our-apis/documentation#vessel-api-registry-codes-data-sources for information about sourcing.
effectiveFrom - String The timestamp (UTC ISO 8601 formatted) indicating when this data started being attributed to this MMSI
effectiveTo - String The timestamp (UTC ISO 8601 formatted) indicating the last time this data was attributed to this MMSI. An effectiveTo that is null indicates that the this is the most recent data about the vessel.
isMostRecent - Boolean Indicates whether this set of metadata is the most recent information we know about a vessel
Example
{
  "vesselLegacyId": "abc123",
  "id": "ais-123",
  "imo": 1234567,
  "callSign": "5BCK4",
  "vesselName": "Ocean Carrier 1",
  "flag": "USA",
  "vesselType": "RESERVED",
  "gearTypes": ["BUNKER"],
  "lengthMeters": 200,
  "widthMeters": 30,
  "tonnageGt": 123.45,
  "authorizations": [VesselV2Authorization],
  "owners": [VesselV2Owner],
  "effectiveFrom": "2024-01-15T10:30:00Z",
  "effectiveTo": "2024-01-16T15:45:00Z",
  "isMostRecent": false
}

VesselHistorySourcedEntries

Description

VesselHistorySourcedEntries represents the source that the data came from and a list of VesselHistoryEntry that show the MMSI's vessel metadata over time.

Fields
Field Name Description
source - VesselDataSource
entries - [VesselHistoryEntry]
Example
{
  "source": "AIS",
  "entries": [
    {
      "id": "ais-123",
      "imo": 1234567,
      "callSign": "5BCK4",
      "vesselName": "Ocean Carrier 1",
      "flag": "USA",
      "lengthMeters": 200,
      "widthMeters": 30,
      "effectiveFrom": "2024-01-15T10:30:00Z",
      "effectiveTo": "2024-01-16T15:45:00Z",
      "isMostRecent": false
    },
    {
      "id": "ais-124",
      "imo": 2222222,
      "callSign": "5BCK4",
      "vesselName": "Ocean Carrier 1",
      "vesselType": "CARGO",
      "flag": "USA",
      "lengthMeters": 200,
      "widthMeters": 30,
      "effectiveFrom": "2024-01-16T15:45:00Z",
      "effectiveTo": null,
      "isMostRecent": true
    }
  ]
}

VesselLocationPrediction

Fields
Field Name Description
trackId - String
origin - LastKnownPosition
prediction - Geometry
Example
{
  "trackId": "xyz789",
  "origin": LastKnownPosition,
  "prediction": Geometry
}

VesselLocationPredictionInput

Fields
Input Field Description
trackId - KeywordFilter The Skylight Generated Track ID that this position represents. A vessel can have many track IDs
latLon - PointInput Latitude and Longitude of the vessel's last known position.
speedKts - Float Speed of the vessel in knots.
directionOfTravelDegrees - Float Direction of travel in degrees. For dark vessels, this typically represents heading.
observationTime - String Time the observation was made.
method - VesselLocationPredictionMethod Prediction Method to use.
Example
{
  "trackId": KeywordFilter,
  "latLon": PointInput,
  "speedKts": 123.45,
  "directionOfTravelDegrees": 987.65,
  "observationTime": "xyz789",
  "method": "deadReckoning"
}

VesselLocationPredictionMethod

Values
Enum Value Description

deadReckoning

Dead reckoning prediction method
Example
"deadReckoning"

VesselLocationPredictionOutput

Fields
Field Name Description
records - [VesselLocationPrediction] List of predicted vessel locations
meta - MetaV2 Metadata for paginated results
Example
{
  "records": [VesselLocationPrediction],
  "meta": MetaV2
}

VesselType

Description

VesselType provides the fixed set of values to categorize the type or function of a vessel. This enumeration is comes from two places:

Values
Enum Value Description

RESERVED

Reserved

RESERVED_X

Reserved X

RESERVED_Y

Reserved Y

RESERVED_Z

Reserved Z

RESERVED_OS

Reserved OS

NO_ADD_INFO

No additional info

WIG

Wing in ground

WIG_X

Wing in ground X (Hazardous category A)

WIG_Y

Wing in ground Y (Hazardous category B)

WIG_Z

Wing in ground Z (Hazardous category C)

WIG_OS

Wing in ground OS (Hazardous category D)

WIG_RESERVED

Wing in ground, Reserved

WIG_NAI

Wing in ground, No additional info

FISHING

Fishing

TOWING

Towing

TOWING_OVERSIZED

Towing oversized (length exceeds 200m or breadth exceeds 25m)

DREDGING

Dredging or underwater ops

DIVING

Diving ops

MILITARY

Military ops

SAILING

Sailing

PLEASURE

Pleasure

HSC

High speed craft

HSC_X

High speed craft X (Hazardous category A)

HSC_Y

High speed craft Y (Hazardous category B)

HSC_Z

High speed craft Z (Hazardous category C)

HSC_OS

High speed craft OS (Hazardous category D)

HSC_RESERVED

High speed craft, Reserved

HSC_NAI

High speed craft, No additional info

PILOT

Pilot

SAR

Search and rescue

TUG

Tug

PORT_TENDER

Port tender

ANTI_POLLUTION

Anti-pollution equipment

LAW

Law enforcement

SPARE

Spare

MEDICAL

Medical transport

NAC

Non-shipborne craft

PASSENGER

Passenger

PASSENGER_X

Passenger X (Hazardous category A)

PASSENGER_Y

Passenger Y (Hazardous category B)

PASSENGER_Z

Passenger Z (Hazardous category C)

PASSENGER_OS

Passenger OS (Hazardous category D)

PASSENGER_RESERVED

Passenger, Reserved

PASSENGER_NAI

Passenger, No additional info

CARGO

Cargo

CARGO_X

Cargo X (Hazardous category A)

CARGO_Y

Cargo Y (Hazardous category B)

CARGO_Z

Cargo Z (Hazardous category C)

CARGO_OS

Cargo OS (Hazardous category D)

CARGO_RESERVED

Cargo, Reserved

CARGO_NAI

Cargo, No additional info

TANKER

Tanker

TANKER_X

Tanker X (Hazardous category A)

TANKER_Y

Tanker Y (Hazardous category B)

TANKER_Z

Tanker Z (Hazardous category C)

TANKER_OS

Tanker OS (Hazardous category D)

TANKER_RESERVED

Tanker, Reserved

TANKER_NAI

Tanker, No additional info

SHIP

Ship

SHIP_X

Ship X (Hazardous category A)

SHIP_Y

Ship Y (Hazardous category B)

SHIP_Z

Ship Z (Hazardous category C)

SHIP_OS

Ship OS (Hazardous category D)

SHIP_RESERVED

Ship, Reserved

SHIP_NAI

Ship, No additional info

CARRIER

Carrier vessel, from Global Fishing Watch

SEISMIC_VESSEL

Seismic vessel, from Global Fishing Watch

OTHER

Other type of vessel not categorized, from Global Fish Watch

SUPPORT

Support, from Global Fishing Watch

BUNKER

Bunker, from Global Fishing Watch

GEAR

Gear, from Global Fishing Watch

DISCREPANCY

Discrepancy noted for vessel type, from Global Fishing Watch
Example
"RESERVED"

VesselV2

Description

VesselV2 represents a vessel's metadata relating to their identity. For each metadata field, Skylight pulls from different sources of data which are reported alongside the value obtained.

Fields
Field Name Description
mmsi - String Maritime Mobile Service Identity
vesselLegacyId - String An id in the form of B:{mmsi}:{sendTimestamp} which indicates a backwards compatible id for the event history service to map back to vessels in the new service
imo - [VesselV2StringField] Seven-digit International Maritime Organization number
callSign - [VesselV2StringField] Identifier for ship radio communications
vesselName - [VesselV2StringField] Name of the vessel
flag - [VesselV2StringField] Flag of registry represented as ISO 3166-1 alpha-3 country code
vesselType - [VesselV2VesselTypeField] Type of vessel. See [VesselType]#definition-VesselType for available values and more information about the sourcing of this field.
gearTypes - [VesselV2GearTypesField] Type of gear (fishing or otherwise believed to be onboard this vessel, see [GearType]#definition-GearType for available values and more information about the sourcing of this field. This data is only available from GFW.
lengthMeters - [VesselV2FloatField] Vessel length (in meters)
widthMeters - [VesselV2FloatField] Vessel width (in meters)
tonnageGt - [VesselV2FloatField] Gross tonnage (measure of a vessel's overall internal volume)
authorizations - [VesselV2Authorizations] Authorization / Registry lists that the vessel is reported on. See Types.VesselV2Authorization for available values and more information about the sourcing of this field. This data is only available from GFW.
owners - [VesselV2Owners] Ownership information on the vessel. See Types.VesselV2Owners for available values and more information about the sourcing of this field. This data is only available from GFW.
effectiveTo - [VesselV2StringField] The timestamp the metadata was last verified. A null effectiveTo indicates it is the most recent metadata
effectiveFrom - [VesselV2StringField] The timestamp the metadata was first verified
Example
{
  "mmsi": "419956492",
  "vesselLegacyId": "B:273445480:1509528351",
  "imo": [
    {"value": "1234567", "source": "AIS"},
    {"value": "1234567", "source": "GFW"}
  ],
  "callSign": [
    {"value": "5BCK4", "source": "AIS"},
    {"value": "5BCK4", "source": "GFW"}
  ],
  "vesselName": [
    {"value": "Ocean Carrier 1", "source": "AIS"},
    {"value": "Ocean Carrier 12", "source": "GFW"}
  ],
  "flag": [
    {"value": "PAN", "source": "AIS"},
    {"value": "PAN", "source": "GFW"}
  ],
  "vesselType": [
    {"value": "FISHING", "source": "AIS"},
    {"value": "FISHING", "source": "GFW"}
  ],
  "gearTypes": [{"value": ["SQUID_JIGGER"], "source": "GFW"}],
  "lengthMeters": [
    {"value": 100, "source": "AIS"},
    {"value": 99, "source": "GFW"}
  ],
  "widthMeters": [{"value": 20, "source": "AIS"}],
  "tonnageGt": [{"value": 5000, "source": "GFW"}],
  "authorizations": [
    {
      "value": [
        {
          "firstVerifiedOn": "2018-05-09T00:00:00Z",
          "lastVerifiedOn": "2025-01-01T00:00:00Z",
          "authorizationSource": "ICCAT"
        }
      ],
      "source": "GFW"
    }
  ],
  "owners": [
    {
      "value": [
        {
          "ownerName": "Ocean Shipping Co",
          "flag": "PAN",
          "ownerSource": "ICCAT",
          "firstVerifiedOn": "2019-04-19T06:35:45Z",
          "lastVerifiedOn": "2025-01-31T01:49:26Z"
        }
      ],
      "source": "GFW"
    }
  ],
  "effectiveTo": [VesselV2StringField],
  "effectiveFrom": [VesselV2StringField]
}

VesselV2Authorization

Description

Global Fishing Watch regularly extracts data from many different vessel registry lists, including regional fisheries management organizations (RFMOs), and other lists. Skylight correlates this data against AIS transmitting vessels by MMSI and attaches that information here. See the Global Fishing Watch documentation for more information on their sources and methodology:

Fields
Field Name Description
authorizationSource - [String] The authorization list that the vessel is reported on.
firstVerifiedOn - String The timestamp (UTC ISO 8601 formatted) indicating the first verification of membership on the list
lastVerifiedOn - String The timestamp (UTC ISO 8601 formatted) indicating the last verification of membership on the list
Example
{
  "authorizationSource": ["xyz789"],
  "firstVerifiedOn": "xyz789",
  "lastVerifiedOn": "xyz789"
}

VesselV2Authorizations

Description

This data is only available from VesselDataSource.GFW

Fields
Field Name Description
source - VesselDataSource The data source the authorizations came from
value - VesselV2Authorization The value of the authorizations
Example
{"source": "AIS", "value": VesselV2Authorization}

VesselV2FloatField

Description

VesselV2FloatField represents a float value of a vessel's metadata with the source and vessel history segment it came from. A vessel history segment is a given point in time of a vessel's known identity.

Fields
Field Name Description
value - Float The value of the field
source - VesselDataSource The data source of the field
Example
{"value": 987.65, "source": "AIS"}

VesselV2GearTypesField

Description

VesselV2GearTypesField represents an array of gear types associated with the vessel and the source and vessel history segment it came from. A vessel history segment is a given point in time of a vessel's known identity.

Fields
Field Name Description
value - [GearType] The value of the gear types
source - VesselDataSource The data source the gear types came from
Example
{"value": ["BUNKER"], "source": "AIS"}

VesselV2Owner

Description

VesselV2Owners represents the ownership information of a vessel. This ownership information is extracted by Global Fishing Watch, and is not available from other data sources. You can read more information about their sources and methodology here: https://globalfishingwatch.org/our-apis/documentation#vessel-api-registry-codes-data-sources

Fields
Field Name Description
ownerName - String The name of the owner
ownerSource - [String] The registry list that the ownership was sourced from. More information on supported registry list values can be found on Global Fishing Watch
flag - String Flag associated with the owner represented as ISO 3166-1 alpha-3 country code
firstVerifiedOn - String The timestamp (UTC ISO 8601 formatted) indicating the first verification of ownership
lastVerifiedOn - String The timestamp (UTC ISO 8601 formatted) indicating the last verification of ownership
Example
{
  "ownerName": "abc123",
  "ownerSource": ["xyz789"],
  "flag": "xyz789",
  "firstVerifiedOn": "xyz789",
  "lastVerifiedOn": "abc123"
}

VesselV2Owners

Description

This data is only available from VesselDataSource.GFW

Fields
Field Name Description
source - VesselDataSource The data source the owners came from
value - VesselV2Owner The value of the owner
Example
{"source": "AIS", "value": VesselV2Owner}

VesselV2SortBy

Values
Enum Value Description

vesselName

Sort by vessel name

mmsi

Sort by vessel mmsi

imo

Sort by imo

callSign

Sort by vessel call sign

flag

Sort by vessel flag

vesselType

Sort by vessel type

lengthMeters

Sort by vessel length

widthMeters

Sort by vessel width

mostRecent

Sort by the most recent vessel metadata
Example
"vesselName"

VesselV2StringField

Description

VesselV2StringField represents the string value of a vessel's metadata and the source and vessel history segment it came from. A vessel history segment is a given point in time of a vessel's known identity.

Fields
Field Name Description
value - String The value of the field
source - VesselDataSource The data source of the field
Example
{"value": "xyz789", "source": "AIS"}

VesselV2VesselTypeField

Description

VesselV2VesselTypeField represents an array of gear types associated with the vessel and the source and vessel history segment it came from. A vessel history segment is a given point in time of a vessel's known identity.

Fields
Field Name Description
value - VesselType The value of the vessel type
source - VesselDataSource The data source the vessel type types came from
Example
{"value": "RESERVED", "source": "AIS"}

ViirsEventDetails

Description

Details of the eventDetails field of an EventV2 where eventType is 'viirs'.

See the Skylight Help Center - VIIRS for more details about VIIRS Events.

Fields
Field Name Description
dataSource - DataSource! The data source for this satellite imagery
detectionType - DetectionType! Whether or not we were able to correlate the Satellite Detection against a vessel's AIS position data
estimatedLength - Float The estimated length of the vessel as predicted by an AI Model
estimatedSpeedKts - Float The estimated ground speed of the vessel in knots as predicted by an AI Model
estimatedVesselCategory - VesselCategory The estimated vessel category (ex. tanker, sar, ... etc) as predicted by an AI Model
frameIds - [String]! The Satellite Frame IDs that this detection was found in. This is typically one id, but can be multiple if the data provider overlaps frames (this is found in Sentinel-2 and Landsat 8/9 as of Jan 2025)
heading - Int The estimated heading of the vessel as predicted by an AI model
imageUrl - String The URL to a cropped piece of the Satellite imagery showing the detected vessel as seen by the AI Model.
vendorVessel - VendorVesselV2
scanAngle - [Float] An array of pitch, yaw, roll, representing how the satellite is tilted or rotated around its three primary axes
radianceNw - Float Radiance is a measure of the intensity of light emitted or reflected from a specific area, as captured by the VIIRS sensor. Measured in nanowatts per square centimeter per steradian (nW/cm²/sr).
Example
{
  "dataSource": "noaa_21",
  "detectionType": "dark",
  "estimatedLength": 123.45,
  "estimatedSpeedKts": 123.45,
  "estimatedVesselCategory": "cargo",
  "frameIds": ["f2cd70006dfa07ea1568f8f70e35ab9fe8cfcd74"],
  "heading": 123,
  "imageUrl": "sat-service/viirs-noaa_21/detections/2024/11/07/VJ202DNB_NRT/VJ202DNB_NRT.A2024312.2018.002.2024312221203/image_chips/3.49011_72.78476.jpeg",
  "vendorVessel": {
    "x": 2649,
    "y": 1512,
    "moonlightIllumination": 35,
    "clearSkyConfidence": 0,
    "distanceToCoast": 1.67553,
    "satelliteName": "NOAA-21",
    "inferenceVersion": "2024-11-05T13:26:46.740062"
  },
  "scanAngle": [
    -0.16717815399169922,
    -0.16717815399169922,
    -0.16717815399169922
  ],
  "radianceNw": 15.76
}

ViirsProduct

Fields
Field Name Description
dnbCmrPath - String
dnbGcsPath - String
geoGcsPath - String
modGcsPath - String
geoModGcsPath - String
cloudMaskGcsPath - String
detectionsGcsPath - String
Example
{
  "dnbCmrPath": "xyz789",
  "dnbGcsPath": "abc123",
  "geoGcsPath": "xyz789",
  "modGcsPath": "xyz789",
  "geoModGcsPath": "xyz789",
  "cloudMaskGcsPath": "abc123",
  "detectionsGcsPath": "xyz789"
}

ViirsVendorVessel

Description

Internal Metadata from the VIIRS model. This can change at any time!

Fields
Field Name Description
x - Int Image cell x coordinate
y - Int Image cell y coordinate
moonlightIllumination - Int! Moonlight illumination measure at image acquisition time
clearSkyConfidence - Float Confidence level of how clear the sky was at image acquisition time
distanceToCoast - Float The distance to nearest coastline
satelliteName - String The name of the satellite that took the image
inferenceVersion - String A version identifier for the model that performed inference
correlation - AisCorrelation The correlation data if a correlation was found
Example
{
  "x": 987,
  "y": 987,
  "moonlightIllumination": 123,
  "clearSkyConfidence": 987.65,
  "distanceToCoast": 123.45,
  "satelliteName": "abc123",
  "inferenceVersion": "xyz789",
  "correlation": AisCorrelation
}