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.
Terms of Service
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 theintersectsGeometryparameter in the GraphQL API. You cannot use theintersectsGeometryparameter when requesting vector tiles. - Query Parameters
limit,offset,sortBy, andsortDirection: 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, ortrackIdfilters onvesselMain. - OR, limited in duration to 30 days or less via the
startTimeandendTimeparameters.
- Limited to a specific vessel via the
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"
]
}
}'

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,createdAtorupdatedAt. 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"}
}'

Pagination
There are two ways to paginate through datasets using the Skylight API:
1. Search After (Recommended)
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
- Added new endpoint searchSatelliteFramesV2 which replaces the satelliteFrames and satelliteFrame endpoint.
- Added a new field
distanceToCoastMto ImageryMetadataEventDetails, and the corresponding search input fieldeventDetails.detectionDistanceToCoastMto EventDetailsFilter. This field is available on Sentinel1, Sentinel2, Landsat 8/9, and VIIRS detection events going forward. - Added documentation on Skylight's data retention policy.
March 5, 2025
- Removed the deprecated value
detectionfrom 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
- Added new endpoint searchEventsV2 which replaces the events endpoint. Including the corresponding vector tile endpoint
November 13, 2024
- Added documentation for how to paginate through large result sets.
October 28, 2024
- Added support for vector tile response format for selected endpoints (as an alternative to the default JSON response format).
Queries
event
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
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
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
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
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
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"
}
}
}
searchAOIs
Description
Search for Areas of Interest (AOIs)
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.
Response
Returns a SearchAoiFeatureConfigurationsOutput
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 aGOOD,UNSURE,BADvalue representing the overall user sentiment about the event.commentsis a full text field that allows the user to explain why they made that choice.additional_contextis provided to allow structured text that a user selects to help further categorize their feedback. For example after saying that a satellite vessel detection isBAD, there might be options forcloud,wave,otherto 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.
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:
|
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:
|
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
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_idormmsivalues provided via theeqorincoptions. - OR A maximum time range of 1 month and an
intersects_geometrysearch area of less than 1000 km^2.
Also available as a Vector Tile endpoint.
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 limitationsAdmin: Search is limited to the users in the caller's organizationUser: Search is unavailable
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
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
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 organizationAdmin: Caller can create a user in the same organizationUser: Cannot create a user
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
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
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 organizationAdmin: Caller can delete a user in the same organization"User: Can delete only themselves
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
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 organizationAdmin: Caller can update a user in the same organization"User: Can update their own information
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
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
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 |
|---|---|
|
|
Class A Transponder |
|
|
Class B Transponder |
|
|
Ambiguous Transponder (No specific class A or B message types received.) |
|
|
Not Available |
|
|
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
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 |
|---|---|
|
|
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 |
|---|---|
|
|
Sort by AOI name |
|
|
Sort by AOI created date |
|
|
Sort by AOI updated date |
|
|
Sort by AOI area size |
Example
"name"
AoiStatus
Values
| Enum Value | Description |
|---|---|
|
|
AOI will generate events |
|
|
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 |
|---|---|
|
|
Can be used to authenticate |
|
|
Permanently deleted, cannot be used for authentication |
Example
"active"
ApiKeysOutput
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 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
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 |
Possible Types
| BaseDetectionEventDetails Types |
|---|
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.
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.
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 |
|---|---|
|
|
NASA's Landsat 8 and Landsat 9 satellites. Optical Imagery from the OLI sensor |
|
|
ESA's Sentinel1 satellite. Synthetic Aperture Radar (SAR) data. |
|
|
ESA's Sentinel2 satellites. Optical Imagery from the MSI sensor. |
|
|
VIIRS data from the JPSS-1 / NOAA_20 Satellite. |
|
|
VIIRS data from the JPSS-2 / NOAA_21 Satellite |
|
|
VIIRS data from the Sunomi NPP Satellite |
|
|
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 |
|---|---|
|
|
Whether a satellite detection was successfully correlated with a vessel identified via AIS. 'dark' indicates the detection was not correlated with AIS. |
|
|
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 |
|---|---|
|
|
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:
|
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 |
|---|---|
|
|
Feedback rating: GOOD |
|
|
Feedback rating: BAD |
|
|
Feedback rating: UNSURE |
Example
"GOOD"
EventFeedbackSortBy
Values
| Enum Value | Description |
|---|---|
|
|
Sort by feedback eventType |
|
|
Sort by feedback rating |
|
|
Sort by user that created the feedback |
|
|
Sort by feedback by time of last update |
Example
"eventType"
EventType
Values
| Enum Value | Description |
|---|---|
|
|
Transhipment event where only one vessel is broadcasting AIS |
|
|
Fishing event |
|
|
Speed range event in an Area of Interest (AOI) |
|
|
Transhipment event where both vessels are broadcasting AIS |
|
|
Entry event in an Area of Interest (AOI) |
|
|
Visible Infrared Imaging Radiometer Suite (VIIRS) satellite detection event |
|
|
European Space Agency Sentinel-1 satellite detection event |
|
|
European Space Agency Sentinel-2 satellite detection event |
|
|
NASA Landsat 8 or 9 satellite detection event. |
|
|
Fishing event from ATLAS model |
|
|
A vessel visiting a Port |
|
|
Optical Imagery from Maxar |
|
|
Radar data from 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.timeandend.timefields 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.locationandend.locationfields 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
eventTypefield 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
eventDetailsfield. 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
vesselsfield. 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 (invessel_0). Standard Rendezvous events will have two vessels (invessel_0andvessel_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
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 |
|---|---|
|
|
Events will be generated when a vessel enters an Aoi |
|
|
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
FrameEventType
Values
| Enum Value | Description |
|---|---|
|
|
European Space Agency Sentinel-1 satellite detection event |
|
|
European Space Agency Sentinel-2 satellite detection event |
|
|
Visible Infrared Imaging Radiometer Suite (VIIRS) satellite detection event |
|
|
Landsat satellite detection event |
|
|
the following are undocumented because we can't expose maxar imagery via API |
|
|
|
|
|
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 or Tanker |
|
|
Cargo |
|
|
Cargo or Reefer |
|
|
Cargo or Tanker |
|
|
Container Reefer |
|
|
Dive Vessel |
|
|
Dredge fishing |
|
|
Dredge non fishing |
|
|
Drifting longlines |
|
|
Driftnets |
|
|
Fish Factory |
|
|
Fishing |
|
|
Fish Tender |
|
|
Fixed gear |
|
|
Determined to be inconclusive |
|
|
Determined to be non fishing gear |
|
|
Determined to be a different gear type that isn't otherwise represented |
|
|
Other fishing |
|
|
Other not fishing |
|
|
Other purse seines |
|
|
Other seines |
|
|
Passenger |
|
|
Patrol Vessel |
|
|
Pole and line |
|
|
Pots and traps |
|
|
Purse seines |
|
|
Research |
|
|
Reefer |
|
|
Seiners |
|
|
Seismic Vessel |
|
|
Set gillnets |
|
|
Set longlines |
|
|
Specialized Reefer |
|
|
Squid jigger |
|
|
Submarine |
|
|
Supply Vessel |
|
|
Tanker |
|
|
Trawlers |
|
|
Trollers |
|
|
Tug |
|
|
Tuna purse seines |
|
|
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
JSON
Description
JSON scalar type
Example
{}
KeywordFilter
Description
This query object is used to filter keyword fields, like IDs.
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 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example
"PermanentWaterBody"
LandsatProduct
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
Values
| Enum Value | Description |
|---|---|
|
|
The time that the last known AIS position was sent by the transponder. |
Example
"sentAt"
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
MetaV2
Organization
Fields
| Field Name | Description |
|---|---|
name - String!
|
Name of the user organization |
Example
{"name": "Australia - Australian Fisheries Management Authority"}
OrganizationSortBy
Values
| Enum Value | Description |
|---|---|
|
|
Sort user organizations by organization name |
Example
"name"
Point
PointInput
PortVisitEventDetails
Description
Details of the eventDetails field of an EventV2 where the eventType is port_visit
Example
{
"portName": "xyz789",
"countryCode": "xyz789",
"countryName": "xyz789",
"portId": "abc123"
}
PositionDataMode
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
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
Types
| Union Types |
|---|
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 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
Example
"PendingDownload"
SatelliteFrameTargets
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.
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 |
|---|---|
|
|
The tip has been received by Skylight but has not yet been submitted to the vendor |
|
|
The tip has been submitted to and acknowledged by the vendor |
|
|
The vendor was able capture imagery and data is expected to be available |
|
|
All data relating to the tip is available for retrieval |
|
|
Skylight has finished processing the imagery and created events |
|
|
The vendor was unable to capture imagery and data will not be available |
|
|
The vendor rejected the tip submission and will not attempt to fulfill the request |
|
|
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 |
|---|---|
|
|
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 |
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
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 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
SearchEventsV2SortFields
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
|
|
|
Example
"startTime"
SearchLastKnownPositionsInput
Description
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 |
|---|---|
|
|
|
|
|
|
|
|
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:
|
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 |
|---|---|
|
|
Sort by the created timestamp of the Satellite Tip. |
|
|
Sort by the updated timestamp of the Satellite Tip. |
|
|
Sort by the time at which the observation was made. |
|
|
Sort by the normalized status of the Satellite Tip. |
|
|
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
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:
|
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 |
|---|---|
|
|
Ascending order |
|
|
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 |
|---|---|
|
|
An event will be generated if the vessel is within the speed range for the specified distance |
|
|
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
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.
Example
{
"eq": "xyz789",
"neq": "xyz789",
"inc": ["abc123"],
"ninc": ["xyz789"],
"like": "abc123",
"nlike": "xyz789"
}
SubpathActivityParamVessel
SubpathActivityParams
Description
Internal-only model that represents the parameters used to classify a subpath
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
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 |
|---|---|
|
|
Vessel is anchored |
|
|
Vessel is fishing |
|
|
Vessel is moored |
|
|
Vessel has not transmitted AIS in > 2 hours |
|
|
Vessel is transiting |
|
|
Unknown activity |
Example
"anchored"
TrackSubpathGeometryField
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
Example
"path_geometry"
TrackSubpathSortBy
Values
| Enum Value | Description |
|---|---|
|
|
Sort by Start Time |
|
|
Sort by End Time |
|
|
Sort by created at time |
|
|
Sort by updated at time |
|
|
Sort by MMSI |
|
|
Sort by Mean Speed Over Ground |
|
|
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 |
|---|---|
|
|
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:
|
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 |
|---|---|
|
|
User has full set of permissions to access APIs and create/update/delete accounts, groups, engagements, organizations, and roles |
|
|
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 has general permissions to use Skylight |
|
|
User has general permissions to use Skylight and is able to annotate events |
|
|
User is not logged in and can only access data that is publicly available |
Example
"Superadmin"
UserSortBy
Values
| Enum Value | Description |
|---|---|
|
|
Sort by created at date |
|
|
Sort by email |
|
|
Sort by name |
|
|
Sort by title |
|
|
Sort by role |
|
|
Sort by organization |
|
|
Sort by department |
|
|
Sort by engagement |
|
|
Sort by last login at date |
|
|
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
Types
| Union Types |
|---|
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 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example
"cargo"
VesselClass
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
|
|
|
Example
"vessel"
VesselDataSource
Values
| Enum Value | Description |
|---|---|
|
|
The source that the data came from was AIS static messages |
|
|
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 |
|---|---|
|
|
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:
- The
shipTypefield as transmitted over AIS. See https://www.navcen.uscg.gov/sites/default/files/pdf/AIS/AISGuide.pdf for more details about the interpretation of this field. - GFW reports a Vessel Type that is a combination of AIS, and their own research. See https://globalfishingwatch.org/our-apis/documentation#vessel-types for more information.
Values
| Enum Value | Description |
|---|---|
|
|
Reserved |
|
|
Reserved X |
|
|
Reserved Y |
|
|
Reserved Z |
|
|
Reserved OS |
|
|
No additional info |
|
|
Wing in ground |
|
|
Wing in ground X (Hazardous category A) |
|
|
Wing in ground Y (Hazardous category B) |
|
|
Wing in ground Z (Hazardous category C) |
|
|
Wing in ground OS (Hazardous category D) |
|
|
Wing in ground, Reserved |
|
|
Wing in ground, No additional info |
|
|
Fishing |
|
|
Towing |
|
|
Towing oversized (length exceeds 200m or breadth exceeds 25m) |
|
|
Dredging or underwater ops |
|
|
Diving ops |
|
|
Military ops |
|
|
Sailing |
|
|
Pleasure |
|
|
High speed craft |
|
|
High speed craft X (Hazardous category A) |
|
|
High speed craft Y (Hazardous category B) |
|
|
High speed craft Z (Hazardous category C) |
|
|
High speed craft OS (Hazardous category D) |
|
|
High speed craft, Reserved |
|
|
High speed craft, No additional info |
|
|
Pilot |
|
|
Search and rescue |
|
|
Tug |
|
|
Port tender |
|
|
Anti-pollution equipment |
|
|
Law enforcement |
|
|
Spare |
|
|
Medical transport |
|
|
Non-shipborne craft |
|
|
Passenger |
|
|
Passenger X (Hazardous category A) |
|
|
Passenger Y (Hazardous category B) |
|
|
Passenger Z (Hazardous category C) |
|
|
Passenger OS (Hazardous category D) |
|
|
Passenger, Reserved |
|
|
Passenger, No additional info |
|
|
Cargo |
|
|
Cargo X (Hazardous category A) |
|
|
Cargo Y (Hazardous category B) |
|
|
Cargo Z (Hazardous category C) |
|
|
Cargo OS (Hazardous category D) |
|
|
Cargo, Reserved |
|
|
Cargo, No additional info |
|
|
Tanker |
|
|
Tanker X (Hazardous category A) |
|
|
Tanker Y (Hazardous category B) |
|
|
Tanker Z (Hazardous category C) |
|
|
Tanker OS (Hazardous category D) |
|
|
Tanker, Reserved |
|
|
Tanker, No additional info |
|
|
Ship |
|
|
Ship X (Hazardous category A) |
|
|
Ship Y (Hazardous category B) |
|
|
Ship Z (Hazardous category C) |
|
|
Ship OS (Hazardous category D) |
|
|
Ship, Reserved |
|
|
Ship, No additional info |
|
|
Carrier vessel, from Global Fishing Watch |
|
|
Seismic vessel, from Global Fishing Watch |
|
|
Other type of vessel not categorized, from Global Fish Watch |
|
|
Support, from Global Fishing Watch |
|
|
Bunker, from Global Fishing Watch |
|
|
Gear, from Global Fishing Watch |
|
|
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 |
|---|---|
|
|
Sort by vessel name |
|
|
Sort by vessel mmsi |
|
|
Sort by imo |
|
|
Sort by vessel call sign |
|
|
Sort by vessel flag |
|
|
Sort by vessel type |
|
|
Sort by vessel length |
|
|
Sort by vessel width |
|
|
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
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
}