Streams & Containers API
The Streams & Containers API endpoints return the streams and stream containers configured in an environment.
The APIs supports:
- list streams in an environment
- list stream containers in an environment, optionally filtered to a single stream
Authentication
These API endpoints require a fine-grained API key. Each endpoint maps to a specific scope:
| Endpoint | Required scope |
|---|---|
| List streams | streams:read |
| List stream containers | stream_containers:read |
Legacy API keys (the events, workbench, or auth roles) are not accepted on these endpoints. If you currently use a legacy key, issue a fine-grained API key with the scopes above from the workbench. See API credentials for how to create one.
Detailed specs and examples can be found in the Atomic API spec for the Streams endpoints.
API endpoints
List streams
Returns all streams in the environment. This includes the built-in All cards stream that every environment has. Streams that have been deleted in the workbench are not returned.
curl -X GET "$ATOMIC_API/v1/$ENVIRONMENT_ID/streams" \
--header "Authorization: Bearer $TOKEN" | jq
Sample response
{
"data": [
{
"id": "GAxrYyaO",
"name": "All cards",
"environmentId": "4dkLrv",
"organisationId": "atomic-demo",
"created": "2026-04-29T22:00:00.000Z",
"updated": "2026-04-29T22:00:00.000Z"
},
{
"id": "Kp3qWm12",
"name": "Onboarding",
"environmentId": "4dkLrv",
"organisationId": "atomic-demo",
"created": "2026-05-02T01:15:00.000Z",
"updated": "2026-05-02T01:15:00.000Z"
}
]
}
Errors
- 401: No permission to environment, or no auth token provided
- 403: API key does not have the
streams:readscope
List stream containers
Returns all stream containers in the environment. Every environment starts with a Default container, and containers added in the workbench appear alongside it.
The id of a container is the value you configure the Atomic SDKs with.
curl -X GET "$ATOMIC_API/v1/$ENVIRONMENT_ID/stream-containers" \
--header "Authorization: Bearer $TOKEN" | jq
To return only the containers assigned to a single stream, pass that stream's ID as streamId:
curl -X GET "$ATOMIC_API/v1/$ENVIRONMENT_ID/stream-containers?streamId=$STREAM_ID" \
--header "Authorization: Bearer $TOKEN" | jq
Sample response
{
"data": [
{
"id": "dkRrWdJr",
"name": "Homepage Container",
"streamId": "Kp3qWm12",
"environmentId": "4dkLrv",
"organisationId": "atomic-demo",
"created": "2026-05-02T01:20:00.000Z",
"updated": "2026-05-08T04:41:00.000Z",
"enabled": true,
"isDefault": false,
"cardLimit": 50,
"filter": [],
"sdkInfo": {
"versions": [
{
"version": "26.2.0",
"platform": "Web",
"lastSeenAt": "2026-05-08T04:41:00.000Z",
"clientAppVersion": null,
"containerVariant": "single"
}
]
}
}
]
}
Response fields
| Field | Description |
|---|---|
id | The container ID. This is the value the Atomic SDKs are configured with. |
name | The container's name in the workbench. |
streamId | The stream this container renders cards from. Each container has exactly one stream. |
enabled | Whether the container is enabled. Disabled containers do not serve cards to the SDKs. |
isDefault | Whether this is the environment's default container. |
cardLimit | The maximum number of cards the container holds at one time. Defaults to 50. |
filter | Filters applied to the cards the container displays. Empty when the container shows every card in its stream. |
sdkInfo | SDK versions seen calling this container, as shown under Monitoring SDK usage in the workbench. Refreshed hourly, with entries pruned after seven days, so it is empty until an SDK connects. |
Errors
- 400:
streamIdwas supplied more than once - 401: No permission to environment, or no auth token provided
- 403: API key does not have the
stream_containers:readscope
An unknown streamId, or one belonging to a different environment, is not an error - it returns an empty list.
More
- Streams - the workbench guide to the streams this API lists
- Stream containers - how containers are created and assigned to streams
- Environments API - to discover the
environmentIdthese endpoints are scoped to - API credentials - how to issue fine-grained API keys with the scopes this API requires