Keel models telemetry using a simple, deterministic structure. You can get data points from any sensor just by defining the following three fields:
Code: vessel_imo
Explanation: All telemetry in Keel is scoped to a vessel. You get them by IMO.
Code: system_id
Explanation: Structured equipment instance identifier. It represents a specific equipment instance on a vessel. Systems distinguish between multiple engines, generators, boilers, and other equipment.
Code: signal_id
Explanation: A canonical measurement definition. Signals describe what is measured, independent of provider naming. Signals are globally defined in the catalog.
Vessel (IMO 98XXXXX)
└── System (engine:main:1)
└── Signal (engine.rotational_speed)
└── Time seriesSignals define what is measured.
Systems define where it is measured.
This separation allows telemetry to remain canonical and source-independent.
Query canonical telemetry using a time range and one or more targets.
{
"start_time": "2026-02-01T00:00:00Z",
"end_time": "2026-02-01T06:00:00Z",
"targets": [
{
"vessel_imo": "IMO 98XXXXX",
"system_id": "engine:main:1",
"signal_id": "engine:rotational_speed"
}
],
"downsample": { "interval": "PT1M" }
}
{
"series": [
{
"vessel_imo": "IMO 98XXXXX",
"system_id": "engine:main:1",
"signal_id": "engine:rotational_speed",
"quantity": "rotational_speed",
"unit": "rpm",
"points": [
{ "timestamp": "2026-02-01T00:00:00Z", "value": 70 },
{ "timestamp": "2026-02-01T00:01:00Z", "value": 71 },
{ "timestamp": "2026-02-01T00:02:00Z", "value": 68 }
]
}
]
}engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:main
engine:generator:1
engine:generator:1
engine:generator:1
boiler:1
boiler:1
boiler:1
vessel
vessel
vessel
vessel
vessel
vessel
vessel
vessel
vessel
vessel
engine:scavenge_air:pressure
engine:rotational_speed
engine:vibration:axial
engine:engine_room:ambient_temperature
engine:lube_oil:inlet_temperature
engine:lube_oil:inlet_pressure
engine:jacket_cooling_water:inlet_temperature
engine:jacket_cooling_water:inlet_pressure
engine:charge_air:pressure
engine:load:scrubber_output
engine:cooling_water:cylinder_outlet_temperature:{cylinder}
engine:exhaust_gas:cylinder_temperature:{cylinder}
engine:exhaust_gas:after_turbocharger_temperature
engine:exhaust_gas:before_turbocharger_temperature
engine:piston_cooling_oil:outlet_temperature:{cylinder}
engine:scavenge_air_fire:cylinder_temperature:{cylinder}
engine:fuel:inlet_temperature
engine:running_status
engine:rotational_speed
engine:power
engine:fuel:mass_flow
boiler:fuel:mass_flow
boiler:power
boiler:fuel:lcv
vessel:position:latitude
vessel:position:longitude
vessel:speed:over_ground
vessel:speed:through_water
vessel:heading:true
vessel:draft:average
vessel:trim
vessel:sea:depth
vessel:rudder:angle
vessel:propeller:pitch_angle
Scavenge air pressure
Main engine rotational speed
Main engine axial vibration
Engine room ambient temperature
Main engine lube oil inlet temperature
Main engine lube oil inlet pressure
Main engine jacket cooling water inlet temperature
Main engine jacket cooling water inlet pressure
Main engine charge air pressure
Main engine load output to scrubber
Cooling water outlet temperature per cylinder
Exhaust gas outlet temperature per cylinder
Exhaust gas temperature after turbocharger
Exhaust gas temperature before turbocharger
Piston cooling oil outlet temperature per cylinder
Scavenge air fire temperature per cylinder
Fuel oil inlet temperature
Main engine running status
Generator engine rotational speed
Generator power output
Generator fuel mass flow rate
Boiler fuel oil mass flow
Boiler power output
Boiler fuel lower calorific value
Vessel latitude
Vessel longitude
Speed over ground
Speed through water
True heading
Average draft
Vessel trim
Sea depth
Rudder angle
Propeller pitch angle
pressure (kPa)
rotational_speed (rpm)
vibration (mm/s)
temperature (Cel)
temperature (Cel)
pressure (kPa)
temperature (Cel)
pressure (kPa)
pressure (kPa)
power (percent)
temperature (Cel)
temperature (Cel)
temperature (Cel)
temperature (Cel)
temperature (Cel)
temperature (Cel)
temperature (Cel)
boolean_state (bool)
rotational_speed (rpm)
power (kW)
mass_flow (kg/h)
mass_flow (kg/h)
power (kW)
energy_density (kJ/kg)
angle (deg)
angle (deg)
speed (kn)
speed (kn)
angle (deg)
length (m)
length (m)
length (m)
angle (deg)
angle (deg)
Every telemetry point is uniquely addressed by: (vessel_imo, system_id, signal_id, timestamp). No implicit scoping. No inferred identifiers.
Signals are globally defined and versioned.Indexed signals use explicit dimensions: engine.exhaust.temperature.cylinder.{cylinder}. Signal identifiers are provider-agnostic.
Each series response includes: quantity, unit allowed_units.
Units follow UCUM conventions.
Clients may request supported unit conversions.
Signals define what is measured.
Systems define where it is measured.
Multiple system instances are always explicit: engine:main:1, engine:gen:2.
No aggregation is performed implicitly.