Skip to main content

Set up ISO 19848 ingest

Use this workflow for channel definitions, time series, and events. Both DataChannelList and TimeSeriesData are JSON documents sent to POST /ISO19848/. For other payload formats, see other data types.

1. Prepare your integration

Select the ingest API key for the customer + data provider connection and environment you are sending to. The key is not scoped to assets or data types. If you provide data for multiple customers, select each customer's key separately.

Identify the assets and channels your integration will send, and obtain or prepare a DataChannelList for each asset.

If you want a guided exercise before building your integration, follow Send your first ISO 19848 package.

2. Prepare the DataChannelList

Obtain the DataChannelList agreed for your integration, typically supplied by DNV. See the ingest model for the relationship between channel definitions and measurements.

Check these JSON fields before sending:

FieldWhat to check
Package.Header.ShipIDMatches the agreed asset ID.
Package.Header.DateCreatedIs set to the document's creation time.
Package.Header.DataChannelListID.IDIdentifies the channel configuration.
Package.Header.DataChannelListID.TimeStampIdentifies the configuration revision together with ID.
DataChannelID.ShortID in each channelMatches the source ID your measurements will use.
DataChannelID.LocalID in each channelContains the agreed standardized Local ID.
Channel propertiesDescribe the expected format, units, range, and other applicable metadata.

JSON field names are case-sensitive: use ShortID, LocalID, and DataChannelListID, not ShortId, LocalId, or DataChannelID for the configuration reference.

See the public DataChannelList sample and schema for the complete structure. Samples are format references; adapt them to your asset and agreed channels.

3. Send the DataChannelList first

Send the DataChannelList to POST /ISO19848/ and wait for a successful response before sending data that references it. Use the same ingest connection for the channel list and the associated measurements.

Send an updated list before using a new configuration revision. If your sender resends a list at startup, remember that ingest is append-only; do not assume repeated submissions overwrite or deduplicate earlier packages.

4. Prepare and send TimeSeriesData

Set Package.Header.ShipID to the same asset and include DateCreated. In each relevant Package.TimeSeriesData entry, use DataConfiguration.ID and DataConfiguration.TimeStamp to reference the DataChannelList revision.

Use TabularData for timestamped rows of measurements and EventData for individual events, such as alarm state changes.

  • Include only the channels agreed for this integration.
  • Use the source ShortID values from the DataChannelList, or the agreed Local IDs, as the DataChannelID values.
  • In tabular data, each Value array must have the same length and order as the DataChannelID array. Apply the same alignment to Quality when supplied.
  • Keep declared channel and dataset counts consistent with their arrays.
  • Encode values according to the ISO 19848 schema and channel metadata; do not fill missing readings with invented values.
  • Preserve measurement timestamps and use explicit time zones.

Send the document to POST /ISO19848/ using the same headers as the DataChannelList. Store the returned packageId and handle errors and retries.

See the public TimeSeriesData sample and schema. Use batching to balance latency, payload size, and request rate.

Read back DataChannelLists

Use the same ingest credential to request recent lists for an asset:

GET /ISO19848/DataChannelList/{assetId}
Authorization: ApiKey <your-ingest-api-key>

Check the returned configuration references against the versions used by your sender. See request limits for the lookup's result limit. This is a DataChannelList lookup, not a general time-series query API.