# Send stream events (https://logable.app/docs/integrate/streams-ingest)

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 [#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 [#the-endpoint]

```http title="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 [#the-body]

Table: see https://logable.app/docs/integrate/streams-ingest#the-body

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](/docs/integrate/custom-data-points) do not apply here. That rule is for devices only.

## Over MQTT [#over-mqtt]

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

```text title="Topic"
streams/<STREAM_ID>/data
```

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

## Example [#example]

```bash title="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"
    }
  }'
```

```json title="Shift log event"
{
  "timestamp": "2026-07-01T10:00:00.000Z",
  "data": {
    "shift": "Shift 2",
    "note": "No faults reported"
  }
}
```

## Limits [#limits]

A stream accepts 100 events per second. See [Limits](/docs/reference/limits) for every other bound.

## Next [#next]

* [Send data that is not from a device](/docs/guides/streams/send-non-device-data)
* [Send readings over HTTP](/docs/integrate/rest-api)
* [Limits](/docs/reference/limits)
