Skylight Event Types

Overview

The Skylight integration brings maritime surveillance intelligence into EarthRanger. Events detected by Skylight — fishing activity, vessel rendezvous, speed anomalies, area entries and satellite detections — arrive as EarthRanger reports, so your team can monitor, triage and respond without switching platforms.

Each event is enriched with vessel information where available (name, MMSI, IMO, flag state, vessel type). Events involving two vessels, such as rendezvous, carry a second vessel block. Detections where no vessel identity is known arrive with the vessel fields empty — these are untracked or “dark” targets seen by satellite sensors.

Supported event types

EarthRanger event type Display title Skylight source type(s)
fishing_alert_rep Fishing fishing_activity_history
dark_rendezvous_alert_rep Dark Rendezvous dark_rendezvous
standard_rendezvous_alert_rep Standard Rendezvous standard_rendezvous
speed_range_alert_rep Speed Range speed_range
entry_alert_rep Marine Entry aoi_visit
detection_alert_rep Vessel Detection viirs, sar_sentinel1, eo_sentinel2, eo_landsat_8_9

Vessel Detection events come from four satellite sensors — Synthetic Aperture Radar (Sentinel-1), optical imagery (Sentinel-2 and Landsat 8/9) and nighttime lights (VIIRS) — and are distinguished by title: Dark Vessel Detection for unidentified targets, AIS Correlated Vessel Detection for detections matched to a known AIS-transmitting vessel.

How to create these event types

1. Install the command-line tool and sign in

You need a terminal with git and uv installed, and an EarthRanger account on the target site.

git clone https://github.com/PADAS/earthranger-cli   # download the tool's code
cd earthranger-cli                                   # go into the downloaded folder
uv venv                                              # create the virtual environment the next step needs
source .venv/bin/activate                            # activate it (Windows PowerShell: .venv\Scripts\Activate.ps1)
uv pip install -e .                                  # install it; this gives you the 'er' command

er profile add sitename --server sitename --username you   # save the site as a profile ('sitename' is the site's subdomain, e.g. 'grumeti' for grumeti.pamdas.org)
export ER_PROFILE=sitename                                 # tell 'er' to use that profile in this terminal
er auth login                                              # asks for your EarthRanger password and signs you in

Important: the account you log in with must have permissions on the Event Category that will host these event types.

2. Save this spec as skylight.yaml

Set category to the category that should host the Skylight events on this site (for example analyzer_event or monitoring).

category:
  value: analyzer_event
  display: Analyzer Event
event_types:
- value: standard_rendezvous_alert_rep
  display: Standard Rendezvous
  icon_id: skylight-standard-rendezvous_rep
  default_priority: amber
  auto_resolve: true
  resolve_time: 48
  ordernum: 1
  layout:
    label: ''
    columns: 1
  fields:
  - key: vessel_0_category
    label: Category
    type: string
  - key: vessel_0_class
    label: Class
    type: string
  - key: vessel_0_display_country
    label: Flag Country
    type: string
  - key: vessel_0_mmsi
    label: MMSI
    type: string
  - key: vessel_0_name
    label: Vessel Name
    type: string
  - key: vessel_0_length
    label: Length (m)
    type: number
  - key: vessel_0_type
    label: Vessel Type
    type: string
  - key: vessel_0_vessel_id
    label: Vessel ID
    type: string
  - key: event_id
    label: Skylight Event ID
    type: string
  - key: entry_link
    label: Skylight Link
    type: url
  - key: created_at
    label: Published At
    type: string
  - key: updated_at
    label: Updated At
    type: string
  - key: vessel_0_imo
    label: IMO
    type: number
  - key: vessel_0_subcategory
    label: Subcategory
    type: string
  - key: vessel_0_country_filter
    label: Flag (ISO3)
    type: string
  - key: vessel_0_track_id
    label: Track ID
    type: string
  - key: vessel_0_gfw_vessel_id
    label: GFW Vessel ID
    type: string
  - key: vessel_1_vessel_id
    label: Vessel 2 Vessel ID
    type: string
  - key: vessel_1_name
    label: Vessel 2 Vessel Name
    type: string
  - key: vessel_1_mmsi
    label: Vessel 2 MMSI
    type: number
  - key: vessel_1_imo
    label: Vessel 2 IMO
    type: number
  - key: vessel_1_category
    label: Vessel 2 Category
    type: string
  - key: vessel_1_subcategory
    label: Vessel 2 Subcategory
    type: string
  - key: vessel_1_class
    label: Vessel 2 Class
    type: string
  - key: vessel_1_type
    label: Vessel 2 Vessel Type
    type: string
  - key: vessel_1_country_filter
    label: Vessel 2 Flag (ISO3)
    type: string
  - key: vessel_1_display_country
    label: Vessel 2 Flag Country
    type: string
  - key: vessel_1_length
    label: Vessel 2 Length (m)
    type: number
  - key: vessel_1_track_id
    label: Vessel 2 Track ID
    type: string
  - key: vessel_1_gfw_vessel_id
    label: Vessel 2 GFW Vessel ID
    type: string
- value: dark_rendezvous_alert_rep
  display: Dark Rendezvous
  icon_id: skylight-dark-rendezvous_rep
  default_priority: amber
  auto_resolve: true
  resolve_time: 48
  ordernum: 2
  layout:
    label: ''
    columns: 1
  fields:
  - key: vessel_0_category
    label: Category
    type: string
  - key: vessel_0_class
    label: Class
    type: string
  - key: vessel_0_display_country
    label: Flag Country
    type: string
  - key: vessel_0_mmsi
    label: MMSI
    type: string
  - key: vessel_0_name
    label: Vessel Name
    type: string
  - key: vessel_0_length
    label: Length (m)
    type: number
  - key: vessel_0_type
    label: Vessel Type
    type: string
  - key: vessel_0_vessel_id
    label: Vessel ID
    type: string
  - key: event_id
    label: Skylight Event ID
    type: string
  - key: entry_link
    label: Skylight Link
    type: url
  - key: created_at
    label: Published At
    type: string
  - key: updated_at
    label: Updated At
    type: string
  - key: vessel_0_imo
    label: IMO
    type: number
  - key: vessel_0_subcategory
    label: Subcategory
    type: string
  - key: vessel_0_country_filter
    label: Flag (ISO3)
    type: string
  - key: vessel_0_track_id
    label: Track ID
    type: string
  - key: vessel_0_gfw_vessel_id
    label: GFW Vessel ID
    type: string
  - key: osr_score
    label: OSR Score
    type: number
  - key: vessel_1_vessel_id
    label: Vessel 2 Vessel ID
    type: string
  - key: vessel_1_name
    label: Vessel 2 Vessel Name
    type: string
  - key: vessel_1_mmsi
    label: Vessel 2 MMSI
    type: number
  - key: vessel_1_imo
    label: Vessel 2 IMO
    type: number
  - key: vessel_1_category
    label: Vessel 2 Category
    type: string
  - key: vessel_1_subcategory
    label: Vessel 2 Subcategory
    type: string
  - key: vessel_1_class
    label: Vessel 2 Class
    type: string
  - key: vessel_1_type
    label: Vessel 2 Vessel Type
    type: string
  - key: vessel_1_country_filter
    label: Vessel 2 Flag (ISO3)
    type: string
  - key: vessel_1_display_country
    label: Vessel 2 Flag Country
    type: string
  - key: vessel_1_length
    label: Vessel 2 Length (m)
    type: number
  - key: vessel_1_track_id
    label: Vessel 2 Track ID
    type: string
  - key: vessel_1_gfw_vessel_id
    label: Vessel 2 GFW Vessel ID
    type: string
- value: entry_alert_rep
  display: Marine Entry
  icon_id: skylight-entry_rep
  default_priority: amber
  auto_resolve: true
  resolve_time: 48
  ordernum: 3
  layout:
    label: ''
    columns: 1
  fields:
  - key: entry_speed
    label: Entry Speed (kn)
    type: string
  - key: entry_heading
    label: Entry Heading
    type: string
  - key: vessel_0_category
    label: Category
    type: string
  - key: vessel_0_class
    label: Class
    type: string
  - key: vessel_0_display_country
    label: Flag Country
    type: string
  - key: vessel_0_mmsi
    label: MMSI
    type: string
  - key: vessel_0_name
    label: Vessel Name
    type: string
  - key: vessel_0_length
    label: Length (m)
    type: number
  - key: vessel_0_type
    label: Vessel Type
    type: string
  - key: vessel_0_vessel_id
    label: Vessel ID
    type: string
  - key: event_id
    label: Skylight Event ID
    type: string
  - key: entry_link
    label: Skylight Link
    type: url
  - key: exit_date
    label: Exit Date
    type: string
  - key: duration_in_area
    label: Hours In Area
    type: string
  - key: created_at
    label: Published At
    type: string
  - key: updated_at
    label: Updated At
    type: string
  - key: vessel_0_imo
    label: IMO
    type: number
  - key: vessel_0_subcategory
    label: Subcategory
    type: string
  - key: vessel_0_country_filter
    label: Flag (ISO3)
    type: string
  - key: vessel_0_track_id
    label: Track ID
    type: string
  - key: vessel_0_gfw_vessel_id
    label: GFW Vessel ID
    type: string
  - key: end_heading
    label: Exit Heading
    type: string
- value: speed_range_alert_rep
  display: Speed Range
  icon_id: skylight-speed_range
  default_priority: amber
  auto_resolve: true
  resolve_time: 48
  ordernum: 4
  layout:
    label: ''
    columns: 1
  fields:
  - key: average_speed
    label: Average Speed (kn)
    type: number
  - key: distance
    label: Distance (nm)
    type: number
  - key: duration
    label: Duration (s)
    type: number
  - key: vessel_0_category
    label: Category
    type: string
  - key: vessel_0_class
    label: Class
    type: string
  - key: vessel_0_display_country
    label: Flag Country
    type: string
  - key: vessel_0_mmsi
    label: MMSI
    type: string
  - key: vessel_0_name
    label: Vessel Name
    type: string
  - key: vessel_0_length
    label: Length (m)
    type: number
  - key: vessel_0_type
    label: Vessel Type
    type: string
  - key: vessel_0_vessel_id
    label: Vessel ID
    type: string
  - key: event_id
    label: Skylight Event ID
    type: string
  - key: entry_link
    label: Skylight Link
    type: url
  - key: created_at
    label: Published At
    type: string
  - key: updated_at
    label: Updated At
    type: string
  - key: vessel_0_imo
    label: IMO
    type: number
  - key: vessel_0_subcategory
    label: Subcategory
    type: string
  - key: vessel_0_country_filter
    label: Flag (ISO3)
    type: string
  - key: vessel_0_track_id
    label: Track ID
    type: string
  - key: vessel_0_gfw_vessel_id
    label: GFW Vessel ID
    type: string
- value: detection_alert_rep
  display: Vessel Detection
  icon_id: skylight-detection-satellite_rep
  auto_resolve: true
  resolve_time: 48
  ordernum: 5
  layout:
    label: ''
    columns: 1
  fields:
  - key: event_id
    label: Skylight Event ID
    type: string
  - key: image_url
    label: Image URL
    type: string
  - key: correlated
    label: AIS Correlated
    type: boolean
  - key: entry_link
    label: Skylight Link
    type: url
  - key: data_source
    label: Sensor
    type: string
  - key: vessel_0_mmsi
    label: MMSI
    type: string
  - key: vessel_0_name
    label: Vessel Name
    type: string
  - key: vessel_0_type
    label: Vessel Type
    type: string
  - key: vessel_0_class
    label: Class
    type: string
  - key: vessel_0_category
    label: Category
    type: string
  - key: vessel_0_subcategory
    label: Subcategory
    type: string
  - key: vessel_0_country_filter
    label: Flag (ISO3)
    type: string
  - key: vessel_0_display_country
    label: Flag Country
    type: string
  - key: created_at
    label: Published At
    type: string
  - key: updated_at
    label: Updated At
    type: string
  - key: vessel_0_vessel_id
    label: Vessel ID
    type: string
  - key: vessel_0_imo
    label: IMO
    type: number
  - key: vessel_0_length
    label: Length (m)
    type: number
  - key: vessel_0_track_id
    label: Track ID
    type: string
  - key: vessel_0_gfw_vessel_id
    label: GFW Vessel ID
    type: string
  - key: detection_type
    label: Detection Type
    type: string
  - key: score
    label: Detection Score
    type: number
  - key: estimated_length
    label: Estimated Length (m)
    type: number
  - key: estimated_speed_kts
    label: Estimated Speed (kn)
    type: number
  - key: estimated_vessel_category
    label: Estimated Vessel Category
    type: string
  - key: heading
    label: Heading
    type: number
  - key: distance_to_coast_m
    label: Distance To Coast (m)
    type: number
  - key: orientation
    label: Orientation
    type: number
  - key: meters_per_pixel
    label: Meters Per Pixel
    type: number
  - key: frame_ids
    label: Frame IDs
    type: string
  - key: radiance_nw
    label: Radiance (nW)
    type: number
- value: fishing_alert_rep
  display: Fishing
  icon_id: skylight-fishing_rep
  default_priority: amber
  auto_resolve: true
  resolve_time: 48
  ordernum: 6
  layout:
    label: ''
    columns: 1
  fields:
  - key: vessel_0_category
    label: Category
    type: string
  - key: vessel_0_class
    label: Class
    type: string
  - key: vessel_0_display_country
    label: Flag Country
    type: string
  - key: vessel_0_mmsi
    label: MMSI
    type: string
  - key: vessel_0_name
    label: Vessel Name
    type: string
  - key: vessel_0_length
    label: Length (m)
    type: number
  - key: vessel_0_type
    label: Vessel Type
    type: string
  - key: vessel_0_vessel_id
    label: Vessel ID
    type: string
  - key: event_id
    label: Skylight Event ID
    type: string
  - key: entry_link
    label: Skylight Link
    type: url
  - key: created_at
    label: Published At
    type: string
  - key: updated_at
    label: Updated At
    type: string
  - key: vessel_0_imo
    label: IMO
    type: number
  - key: vessel_0_subcategory
    label: Subcategory
    type: string
  - key: vessel_0_country_filter
    label: Flag (ISO3)
    type: string
  - key: vessel_0_track_id
    label: Track ID
    type: string
  - key: vessel_0_gfw_vessel_id
    label: GFW Vessel ID
    type: string
  - key: fishing_score
    label: Fishing Score
    type: number

3. Preview, then apply

er events apply skylight.yaml --dry-run   # shows what will be created or changed
er events apply skylight.yaml             # actually does it

Applying is safe to repeat: it creates what is missing and patches only what differs. Nothing is ever deleted.

4. Verify

er events show event-type detection_alert_rep

Changelog

September 2026 — expanded vessel and detection fields. These fields were added to the event types in this revision. Sites that created the Skylight event types before this date can pick them up by re-running er events apply with the spec above; existing events keep their stored values.

Added to all six event types: created_at, updated_at, vessel_0_gfw_vessel_id, vessel_0_imo, vessel_0_track_id.

Event type Also added Retired
Fishing vessel_0_subcategory, vessel_0_country_filter, fishing_score visit_type
Dark Rendezvous vessel_0_subcategory, vessel_0_country_filter, osr_score; the full second-vessel block (13 fields, vessel_1_*) visit_type
Standard Rendezvous vessel_0_subcategory, vessel_0_country_filter; the full second-vessel block (13 fields, vessel_1_*) visit_type
Speed Range vessel_0_subcategory, vessel_0_country_filter visit_type
Marine Entry vessel_0_subcategory, vessel_0_country_filter, end_heading visit_type
Vessel Detection vessel_0_vessel_id, vessel_0_length, detection_type, score, estimated_length, estimated_speed_kts, estimated_vessel_category, heading, distance_to_coast_m, orientation, meters_per_pixel, frame_ids, radiance_nw visit_type, placeholder

Two field types also changed: vessel_0_mmsi became text (to carry the N/A fallback) and Marine Entry's duration_in_area became text (to carry Pending). Skylight Link became a URL field so it renders as a clickable link. The retired fields were never populated by the integration.

 

CLI tool and full spec documentation: https://github.com/PADAS/earthranger-cli