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:
| Field | What to check |
|---|---|
Package.Header.ShipID | Matches the agreed asset ID. |
Package.Header.DateCreated | Is set to the document's creation time. |
Package.Header.DataChannelListID.ID | Identifies the channel configuration. |
Package.Header.DataChannelListID.TimeStamp | Identifies the configuration revision together with ID. |
DataChannelID.ShortID in each channel | Matches the source ID your measurements will use. |
DataChannelID.LocalID in each channel | Contains the agreed standardized Local ID. |
| Channel properties | Describe 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
ShortIDvalues from the DataChannelList, or the agreed Local IDs, as theDataChannelIDvalues. - In tabular data, each
Valuearray must have the same length and order as theDataChannelIDarray. Apply the same alignment toQualitywhen 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.