Skip to content

Store data in an information stream

Request

Requires scope: forecasting.

Create or update one or more data points for the information stream’s base (configured) granularity channel.

Access: Requires an API token that includes the forecasting scope. The forecasting module must be enabled for the customer. Streams of any source can be written. A manually created (user_provided) stream is automatically made read-only after a successful write.

Stream shape: The stream must be migrated to the v3 structure (configured granularity and matching data channel). Legacy v2-only streams respond with 400 Bad Request (migration required).

Granularity: If granularity is set on an item, it must exactly match the stream’s configured granularity. If omitted, that configured granularity is assumed.

Unlike the deprecated timeseries upsert, this endpoint does not accept a coarser granularity than the stream to split across finer steps, declared granularity must match the stream.

Value 0: A numeric 0 is stored on the base channel for that period (so it is distinct from a missing point). Coarser channels are recalculated from the base channel. All values, including 0, are applied with the same upsert behavior.

Rollups: After successful writes, coarser granularity channels (e.g. day, week, …) are recalculated from the base channel where those channels exist.

Successful requests always return 200 OK with an empty body. The endpoint does not distinguish between insert and update.

Security
apiKey(Required scopes: forecasting)
Path
keystringrequired

Information stream identifier to update the data for

Example:covers-per-hour-pier9
Bodyapplication/jsonrequired
Array [
granularitystring

Optional. When set, must exactly equal the information stream’s configured granularity (otherwise 400).

If omitted, the stream’s configured granularity is used.

Enum:"hour""day""week""month""quarter""year"
Example:"hour"
periodstringrequired

Timeframe for the data point, aligned to the stream’s granularity (see granularity).

Formats (by configured stream granularity):

  • hour, yyyy-mm-dd hh:mm:ss (time is normalized to the start of the hour; seconds are not significant beyond that)
  • day, yyyy-mm-dd
  • week, yyyy-Www (ISO week, e.g. 2026-W09)
  • month, yyyy-Mmm (e.g. 2026-M05)
  • quarter, yyyy-Qq (e.g. 2026-Q2)
  • year, yyyy

The period denotes the start of the bucket (lower bound of the interval covered by that granularity).

Example:"2026-04-02 11:00:00"
valuenumber or stringrequired
Example:25
One of:

Numeric value for the data point, including 0, which is stored as a real value for this period (distinct from a point that was never sent).

number
lowerBoundnumber

Lower bound of value.

Example:20
upperBoundnumber

Upper bound of value.

Example:28
]
curl -i -X POST \
  https://beta-developer.dyflexis.com/_mock/openapi/information-streams/v3/datapoint/covers-per-hour-pier9 \
  -H 'Authorization: YOUR_API_KEY_HERE' \
  -H 'Content-Type: application/json' \
  -d '[
    {
      "granularity": "hour",
      "period": "2026-04-02 11:00:00",
      "value": 25,
      "lowerBound": 20,
      "upperBound": 28
    }
  ]'

Responses

Response code 200 - OK

Bodyapplication/json
object

Response code 200 - OK

Response
{}