Skip to content

Send stream events

Post events to a stream when the data is not a device. Same body shape, its own token, no status field.

A stream carries data that does not come from one device. Use it for a spreadsheet export, a reading from another system, or a manual entry.

What a stream is#

A stream is a data source with its own id and its own token. It has no online or offline state, and it never appears in a device's status history. A stream can still be the data source behind a dashboard widget, and it can still be a trigger target.

The endpoint#

HTTP request
POST https://ingest.logable.app/streams/<STREAM_ID>/ingest
Authorization: Bearer <STREAM_TOKEN>
Content-Type: application/json

<STREAM_ID> is the stream's UUID. <STREAM_TOKEN> is the token Logable showed once when you created the stream.

The body#

Stream event payload
FieldTypeRequiredDescription
timestampstringNoISO 8601. Omit it and the server uses its own clock.
dataobjectYesThe event itself. Field names come from the stream's own schema, not a device type.
metadataobjectNoAnything else you want stored with the event.

Validation is lenient. A field the stream's schema does not define is still stored. A field the schema does define is rejected only if its type is wrong. The custom-key limits on Send a field the device type does not define do not apply here. That rule is for devices only.

Over MQTT#

Publish to the stream's own topic, at QoS 1.

Topic
streams/<STREAM_ID>/data

The message body is the same JSON the HTTP endpoint takes.

Example#

curl
curl -X POST https://ingest.logable.app/streams/<STREAM_ID>/ingest \
  -H "Authorization: Bearer <STREAM_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "timestamp": "2026-07-01T10:00:00.000Z",
    "data": {
      "shift": "Shift 2",
      "note": "No faults reported"
    }
  }'
Shift log event
{
  "timestamp": "2026-07-01T10:00:00.000Z",
  "data": {
    "shift": "Shift 2",
    "note": "No faults reported"
  }
}

Limits#

A stream accepts 100 events per second. See Limits for every other bound.

Next#

Search the docs

Find a guide, an integration page, or a device type.