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 How to show Skylight 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.


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

Track Subpath Vector Tiles

  • URL: https://api.skylight.earth/vectorTiles/trackSubpath/{z}/{x}/{y}
  • Corresponding GraphQL API: searchTrackSubpaths.
  • Required Query Parameter: geometryField: This specifies which geometry field you want to receive features for, as vector tiles can only return a single layer of features at a time. To build multiple layers, you will need to make multiple requests. Available values are path_geometry which includes the linestring of the track subpath, and midpoint_geometry which is a point for the middle of the track subpath.
  • Vector Tile Restrictions: Due to the extremely large nature of this dataset, all queries:
    • MUST include a startTime and endTime parameter. This time range must be less than
      • 31 days for queries not limited to a specific vessel mmsi or trackId.
      • 540 days for queries limited to specific vessel mmsi or trackId
    • Unless the query is limited to a specific vessel via the mmsi or trackId parameter, Track Subpath Tiles require a minimum zoom level (z) of 8.

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

  curl --get "https://api.skylight.earth/vectorTiles/trackSubpath/13/6930/4386" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --data-urlencode 'query={
    "geometryField":"path_geometry",
    "trackId":{
      "inc":["B:565149000:1695913260:3045218:773845","B:503694000:1595165930:3045434:775531"]
    },
    "startTime":{"lte":"2025-01-30T19:43:48.029Z"},"endTime":{"gte":"2025-01-28T19:43:48.029Z"}
  }'

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(
    startTime: { 'gte': '2024-09-01T00:00:00Z', 'lt': '2024-09-02T00:00:00Z'},
    sortBy: "created",
    sortDirection: "asc"
) {
    events {
        ... # your fields here
        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(
    startTime: { 'gte': '2024-09-01T00:00:00Z', 'lt': '2024-09-02T00:00:00Z'},
    created: { 'gt': '2024-09-01T01:12:34Z'},
    sortBy: "created",
    sortDirection: "asc"
) {
    events {
        ... # your fields here
        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(
    startTime: { 'gte': '2024-09-01T00:00:00Z', 'lt': '2024-09-02T00:00:00Z'},
    limit: 100,
    offset: 400
) {
    records { /* Your field 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(
    startTime: { 'gte': '2024-09-01T00:00:00Z', 'lt': '2024-09-02T00:00:00Z'},
    snapshotId: "true"
) {
    records { /* Your field here */ }
    meta { snapshotId }
}

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

searchEventsV2(
    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 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.

Queries

aoi

Use the searchAOIs query instead
Description

Get Areas of Interest (AOIs) associated with the active user

Response

Returns [AOI]

Example

Query
query Aoi {
  aoi {
    accessible_by
    created_by
    geometry {
      type
      coordinates
      geometries {
        ...GeometryFragment
      }
    }
    owned_by
    properties {
      aoi_id
      area_km2
      description
      name
    }
    status
  }
}
Response
{
  "data": {
    "aoi": [
      {
        "accessible_by": [
          "6120123fbc8f8661da8a5332",
          "61b78c70f6f2af542642dc47"
        ],
        "created_by": "6120123fbc8f8661da8a5332",
        "geometry": Geometry,
        "owned_by": "6120123fbc8f8661da8a5332",
        "properties": "'aoi_id': '1c1ea98b-9120-414a-a38f-e6e25964edf3', 'name': 'Cook Islands'",
        "status": "active"
      }
    ]
  }
}

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'"
    }
  }
}

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"
    }
  }
}

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"
    }
  }
}

satelliteFrame

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

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"
    }
  }
}

searchEventsV2

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

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
      }
      vessels {
        ...EventV2VesselsFragment
      }
      eventDetails {
        ... on ViirsEventDetails {
          ...ViirsEventDetailsFragment
        }
        ... on ImageryMetadataEventDetails {
          ...ImageryMetadataEventDetailsFragment
        }
        ... on SpeedRangeEventDetails {
          ...SpeedRangeEventDetailsFragment
        }
        ... on FishingEventDetails {
          ...FishingEventDetailsFragment
        }
        ... on AoiVisitEventDetails {
          ...AoiVisitEventDetailsFragment
        }
        ... on DarkRendezvousEventDetails {
          ...DarkRendezvousEventDetailsFragment
        }
        ... on StandardRendezvousEventDetails
        ... on PortVisitEventDetails {
          ...PortVisitEventDetailsFragment
        }
      }
      aoiFeatureConfiguration {
        ...AoiFeatureConfigurationMatchFragment
      }
      createdAt
      updatedAt
    }
    meta {
      total
      snapshotId
    }
  }
}
Variables
{"input": SearchEventsV2Input}
Response
{
  "data": {
    "searchEventsV2": {
      "records": [EventV2],
      "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.

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
) {
  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
  ) {
    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"
}
Response
{
  "data": {
    "searchTrackSubpaths": {
      "records": [TrackSubpath],
      "meta": MetaV2
    }
  }
}

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
    }
  }
}

vesselLkp

Description

Returns vessel Last Known Position (LKP) by vesselId

Response

Returns a VesselLkp

Arguments
Name Description
vesselId - String! Vessel ID (unique to the Skylight platform)

Example

Query
query VesselLkp($vesselId: String!) {
  vesselLkp(vesselId: $vesselId) {
    vessel_id
    track_id
    segment_type
    time
    point {
      lat
      lon
    }
    cog
    sog
  }
}
Variables
{"vesselId": "B:224587000:1715446092:1667778:960438"}
Response
{
  "data": {
    "vesselLkp": {
      "vessel_id": "B:224072680:1509689832:1801369:1285668",
      "track_id": "B:224072680:1683616772:1769799:1267433",
      "segment_type": null,
      "time": "2023-03-28T01:29:37+00:00",
      "point": Point,
      "cog": 62.29999923706055,
      "sog": 13.899999618530273
    }
  }
}

Types

AOI

Fields
Field Name Description
accessible_by - [String] List of Skylight user IDs for those users that have access to the Area of Interest (AOI)
created_by - String User ID of the AOI creator
geometry - Geometry AOI geometry in GeoJSON format
owned_by - String User ID of the AOI owner
properties - AoiProperties Additional AOI properties
status - AoiStatus AOI status (possible values are 'active' and 'inactive')
Example
{
  "accessible_by": ["6120123fbc8f8661da8a5332", "61b78c70f6f2af542642dc47"],
  "created_by": "6120123fbc8f8661da8a5332",
  "geometry": Geometry,
  "owned_by": "6120123fbc8f8661da8a5332",
  "properties": "'aoi_id': '1c1ea98b-9120-414a-a38f-e6e25964edf3', 'name': 'Cook Islands'",
  "status": "active"
}

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"]}

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"
}

AoiProperties

Fields
Field Name Description
aoi_id - String Area of Interest ID (unique to the Skylight platform)
area_km2 - Float Size of the AOI in square kilometers
description - String Description assigned by the AOI creator
name - String Name assigned by the AOI creator
Example
{
  "aoi_id": "c433769f-f980-4f4f-a83a-b2b1ffbc9e52",
  "area_km2": 37398.848690181905,
  "description": "AOI for our marine protected area",
  "name": "MPA"
}

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}

BaseDetectionEventDetails

Fields
Field Name Description
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
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.
Possible Types
BaseDetectionEventDetails Types

ImageryMetadataEventDetails

ViirsEventDetails

Example
{
  "detectionType": "ais_correlated",
  "estimatedLength": 987.65,
  "frameIds": ["xyz789"],
  "heading": 123,
  "imageUrl": "abc123"
}

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

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
osrScore - Float! The confidence of the AI model that this event is a Rendezvous
Example
{"osrScore": 0.781}

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
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"
}

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'}"
}

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'"
}

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
Beta
This type is in beta and may change in the future.

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(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(
    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
detectionDataSource - KeywordFilter See BaseDetectionEventDetails
detectionType - KeywordFilter See BaseDetectionEventDetails
detectionEstimatedLength - FloatFilter See BaseDetectionEventDetails
detectionFrameId - KeywordFilter See BaseDetectionEventDetails
detectionHeading - IntFilter See BaseDetectionEventDetails
detectionScore - FloatFilter See ImageryMetadataEventDetails
viirsRadianceNw - FloatFilter See ViirsEventDetails
Example
{
  "fishingScore": FloatFilter,
  "speedRangeAverageSpeed": FloatFilter,
  "speedRangeDistance": FloatFilter,
  "speedRangeDurationSeconds": FloatFilter,
  "detectionDataSource": KeywordFilter,
  "detectionType": KeywordFilter,
  "detectionEstimatedLength": FloatFilter,
  "detectionFrameId": KeywordFilter,
  "detectionHeading": IntFilter,
  "detectionScore": FloatFilter,
  "viirsRadianceNw": FloatFilter
}

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. Note: This event type is currently in beta testing.

detection

Duplicates 'sar_sentinel1' (see above). This field is deprecated; use 'sar_sentinel1' instead.
Example
"dark_rendezvous"

EventV2

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

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.
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}
  },
  "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
Beta
This type is in beta and may change in the future.

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
ViirsEventDetails

EventV2Vessel

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

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 The category of the vessel from the AIS Static data's Ship Type field.
subcategory - String A subcategory of the vessel, if available, from the AIS Static data's Ship Type field.
countryCode - [String] A list of ISO 3166 alpha-3 country 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
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": "xyz789",
  "countryCode": ["xyz789"],
  "displayCountry": "Liberia"
}

EventV2Vessels

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

EventVesselFilter

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

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.

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 The category of the vessel as reported in AIS static messages
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,
  "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"
}

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
fishingScore - Float The confidence of the AI model that this event is fishing
Example
{"fishingScore": 0.8716157674789429}

Float

Description

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

Example
123.45

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": 987.65,
  "gt": 123.45,
  "lte": 123.45,
  "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
Example
"sar_sentinel1"

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]
    ]
  ]
}

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
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
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.
score - Float! The confidence from the AI Model on this prediction
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
{
  "detectionType": "ais_correlated",
  "estimatedLength": 123.45,
  "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",
  "score": 0.9935651421546936,
  "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
123

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": 987, "gte": 987, "eq": 123, "neq": 987}

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": "xyz789",
  "neq": "xyz789",
  "inc": ["xyz789"],
  "ninc": ["abc123"]
}

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"
}

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="}

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}

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": "abc123",
  "countryCode": "abc123",
  "countryName": "abc123",
  "portId": "xyz789"
}

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"
}

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}

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"
}

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(
    vesselMain: { country: { 'eq': 'PAN' } },
    vesselPartner: { mmsi: { 'eq': 123456789 } }
) {
    events {
        ... # your fields here
    }
}

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
endTime - DateFilter Filter on the end.time of the event
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
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,
  "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"

SearchTracksSubpathOutput

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

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
}

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.

Example
{}

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
"abc123"

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": "abc123",
  "inc": ["xyz789"],
  "ninc": ["abc123"],
  "like": "xyz789",
  "nlike": "abc123"
}

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"

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
}

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
  ]
}

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"

VesselLkp

Fields
Field Name Description
vessel_id - String Vessel ID (unique to the Skylight platform)
track_id - String Vessel track ID (unique to the Skylight platform)
segment_type - String Value will always be null
time - String ISO 8601 formatted timestamp for the Last Known Position (LKP)
point - Point Latitude and longitude of the last AIS position point that Skylight has received for this vessel
cog - Float Course over ground from the last AIS position message (in degrees)
sog - Float Speed over ground (in knots)
Example
{
  "vessel_id": "B:224072680:1509689832:1801369:1285668",
  "track_id": "B:224072680:1683616772:1769799:1267433",
  "segment_type": null,
  "time": "2023-03-28T01:29:37+00:00",
  "point": Point,
  "cog": 62.29999923706055,
  "sog": 13.899999618530273
}

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
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
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.
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
{
  "detectionType": "dark",
  "estimatedLength": 123.45,
  "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",
  "scanAngle": [
    -0.16717815399169922,
    -0.16717815399169922,
    -0.16717815399169922
  ],
  "radianceNw": 15.76
}