Streaming session service#
Provides read access to streaming sessions and their sources.
OpenAPI file: nominal.ingest.v2.json
Endpoints#
Search streaming sessions#
POST /ingest/v2/streaming-sessions/search
Searches streaming sessions visible to the caller.
Body
pageSizeintegerDefaults to 100. From 1 to 1,000.
pageTokenstringAt most 4,096 characters.
filterStreamingSessionSearchFilterAbsent matches every session visible to the caller. The filter tree may contain at most 1000 nodes and 32 levels of nesting.
Fields of
StreamingSessionSearchFilter- one of 7 fields required
datasetRidsStreamingDatasetRidsFilter
Fields of
StreamingDatasetRidsFilterdatasetRidsarray of stringAt most 1,000 items. No duplicates. Each item: at most 1,024 characters.
sourceExactStreamingSourceFilter
Fields of
ExactStreamingSourceFilterdatasetRidstring requiredAt most 1,024 characters.
sourceStreamingSourceAttribution
Fields of
StreamingSourceAttribution- one of
mesh,dataConnector,customrequired
meshMeshSourceAttribution
Fields of
MeshSourceAttributionsourceDatasetRidstring requiredAt most 1,024 characters.
sourceOrgRidstring requiredAt most 1,024 characters.
originSourceLabelstringLabel for this data’s source on the originating deployment, as that deployment reported it. Opaque: Nominal stores and returns it without interpreting it. It is part of the session’s identity, so writes carrying different labels resolve to different sessions. 1 to 1,024 characters.
dataConnectorDataConnectorSourceAttribution
Fields of
DataConnectorSourceAttributiondataConnectorRidstring requiredAt most 1,024 characters.
customCustomSourceAttribution
Fields of
CustomSourceAttributionsourceNamestring1 to 1,024 characters.
- one of
dataBoundsOverlapStreamingSessionDataBoundsFilter
Fields of
StreamingSessionDataBoundsFilterstartstring (date-time)
endstring (date-time)
workspaceStreamingWorkspaceFilter
Fields of
StreamingWorkspaceFilterworkspaceRidstring requiredAt most 1,024 characters.
andStreamingSessionAndFilter
Fields of
StreamingSessionAndFilterfiltersarray ofStreamingSessionSearchFilter1 to 100 items.
orStreamingSessionOrFilter
Fields of
StreamingSessionOrFilterfiltersarray ofStreamingSessionSearchFilter1 to 100 items.
notStreamingSessionNotFilter
Fields of
StreamingSessionNotFilterfilterStreamingSessionSearchFilterrequired
sortStreamingSessionSortOptionsDefaults to
created_atdescending.Fields of
StreamingSessionSortOptionsfieldStreamingSessionSortField
Values of
StreamingSessionSortFieldSTREAMING_SESSION_SORT_FIELD_UNSPECIFIED
STREAMING_SESSION_SORT_FIELD_CREATED_ATOrders by the time the session was created.
STREAMING_SESSION_SORT_FIELD_DATA_BOUNDS_STARTOrders by the start of the session’s data bounds. Sessions with no data bounds are excluded from the results.
isDescendingboolean
Response
streamingSessionsarray ofStreamingSession
Fields of
StreamingSessionstreamingSessionRidstring
datasetRidstring
statusStreamingSessionStatus
Values of
StreamingSessionStatusSTREAMING_SESSION_STATUS_UNSPECIFIED
STREAMING_SESSION_STATUS_IN_PROGRESSThe session accepts heartbeats.
STREAMING_SESSION_STATUS_COMPLETEDThe server completed the session once it had recorded a minimum number of points and either stopped receiving heartbeats or reached its maximum age. A completed session accepts no further heartbeats; resolving the same source starts a new session.
sourceStreamingSourceAttributionAbsent for unattributed sessions.
Fields of
StreamingSourceAttribution- one of
mesh,dataConnector,custom
meshMeshSourceAttribution
Fields of
MeshSourceAttributionsourceDatasetRidstringAt most 1,024 characters.
sourceOrgRidstringAt most 1,024 characters.
originSourceLabelstringLabel for this data’s source on the originating deployment, as that deployment reported it. Opaque: Nominal stores and returns it without interpreting it. It is part of the session’s identity, so writes carrying different labels resolve to different sessions. 1 to 1,024 characters.
dataConnectorDataConnectorSourceAttribution
Fields of
DataConnectorSourceAttributiondataConnectorRidstringAt most 1,024 characters.
customCustomSourceAttribution
Fields of
CustomSourceAttributionsourceNamestring1 to 1,024 characters.
- one of
dataBoundsTimeRangeThe time range of the data ingested so far. Absent until the first points are recorded.
Fields of
TimeRangestartstring (date-time)
endstring (date-time)
pointsCountstring (int64)
createdAtstring (date-time)
lastSeenAtstring (date-time)Time of the most recent heartbeat for this session.
completedAtstring (date-time)Time the session was completed. Absent while the session is in progress.
nextPageTokenstring
Request
curl -X POST "https://api.gov.nominal.io/api/ingest/v2/streaming-sessions/search" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"pageSize": 1,
"pageToken": "<page token>",
"filter": {
"datasetRids": {
"datasetRids": [
"<dataset rids>"
]
}
},
"sort": {
"field": "STREAMING_SESSION_SORT_FIELD_CREATED_AT",
"isDescending": true
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/ingest/v2/streaming-sessions/search",
headers={"Authorization": "Bearer <api key>"},
json={
"pageSize": 1,
"pageToken": "<page token>",
"filter": {"datasetRids": {"datasetRids": ["<dataset rids>"]}},
"sort": {
"field": "STREAMING_SESSION_SORT_FIELD_CREATED_AT",
"isDescending": True,
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/ingest/v2/streaming-sessions/search",
headers={"Authorization": "Bearer <api key>"},
json={
"pageSize": 1,
"pageToken": "<page token>",
"filter": {"datasetRids": {"datasetRids": ["<dataset rids>"]}},
"sort": {
"field": "STREAMING_SESSION_SORT_FIELD_CREATED_AT",
"isDescending": True,
},
},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/ingest/v2/streaming-sessions/search",
headers={"Authorization": "Bearer <api key>"},
json={
"pageSize": 1,
"pageToken": "<page token>",
"filter": {"datasetRids": {"datasetRids": ["<dataset rids>"]}},
"sort": {
"field": "STREAMING_SESSION_SORT_FIELD_CREATED_AT",
"isDescending": True,
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"streamingSessions": [
{
"streamingSessionRid": "<streaming session rid>",
"datasetRid": "<dataset rid>",
"status": "STREAMING_SESSION_STATUS_IN_PROGRESS",
"source": {
"mesh": {
"sourceDatasetRid": "<source dataset rid>",
"sourceOrgRid": "<source org rid>",
"originSourceLabel": "<origin source label>"
}
},
"dataBounds": {
"start": "2026-01-01T00:00:00Z",
"end": "2026-01-01T00:00:00Z"
},
"pointsCount": "1",
"createdAt": "2026-01-01T00:00:00Z",
"lastSeenAt": "2026-01-01T00:00:00Z",
"completedAt": "2026-01-01T00:00:00Z"
}
],
"nextPageToken": "<next page token>"
}
Search streaming sources#
POST /ingest/v2/streaming-sources/search
Searches streaming sources visible to the caller, aggregated by (source, dataset) and ordered by latest activity descending.
Body
pageSizeintegerDefaults to 100. From 1 to 1,000.
pageTokenstringAt most 4,096 characters.
filterStreamingSourceSearchFilterAbsent matches every source visible to the caller. The filter tree may contain at most 1000 nodes and 32 levels of nesting.
Fields of
StreamingSourceSearchFilter- one of 6 fields required
datasetRidsStreamingDatasetRidsFilter
Fields of
StreamingDatasetRidsFilterdatasetRidsarray of stringAt most 1,000 items. No duplicates. Each item: at most 1,024 characters.
sourceExactStreamingSourceFilter
Fields of
ExactStreamingSourceFilterdatasetRidstring requiredAt most 1,024 characters.
sourceStreamingSourceAttribution
Fields of
StreamingSourceAttribution- one of
mesh,dataConnector,customrequired
meshMeshSourceAttribution
Fields of
MeshSourceAttributionsourceDatasetRidstring requiredAt most 1,024 characters.
sourceOrgRidstring requiredAt most 1,024 characters.
originSourceLabelstringLabel for this data’s source on the originating deployment, as that deployment reported it. Opaque: Nominal stores and returns it without interpreting it. It is part of the session’s identity, so writes carrying different labels resolve to different sessions. 1 to 1,024 characters.
dataConnectorDataConnectorSourceAttribution
Fields of
DataConnectorSourceAttributiondataConnectorRidstring requiredAt most 1,024 characters.
customCustomSourceAttribution
Fields of
CustomSourceAttributionsourceNamestring1 to 1,024 characters.
- one of
workspaceStreamingWorkspaceFilter
Fields of
StreamingWorkspaceFilterworkspaceRidstring requiredAt most 1,024 characters.
andStreamingSourceAndFilter
Fields of
StreamingSourceAndFilterfiltersarray ofStreamingSourceSearchFilter1 to 100 items.
orStreamingSourceOrFilter
Fields of
StreamingSourceOrFilterfiltersarray ofStreamingSourceSearchFilter1 to 100 items.
notStreamingSourceNotFilter
Fields of
StreamingSourceNotFilterfilterStreamingSourceSearchFilterrequired
lastSeenAfterstring (date-time)If present, only sessions last seen strictly after this instant are aggregated; groups whose sessions were all last seen at or before it are omitted.
Response
streamingSourcesarray ofStreamingSource
Fields of
StreamingSourcesourceStreamingSourceAttributionAbsent for unattributed sessions.
Fields of
StreamingSourceAttribution- one of
mesh,dataConnector,custom
meshMeshSourceAttribution
Fields of
MeshSourceAttributionsourceDatasetRidstringAt most 1,024 characters.
sourceOrgRidstringAt most 1,024 characters.
originSourceLabelstringLabel for this data’s source on the originating deployment, as that deployment reported it. Opaque: Nominal stores and returns it without interpreting it. It is part of the session’s identity, so writes carrying different labels resolve to different sessions. 1 to 1,024 characters.
dataConnectorDataConnectorSourceAttribution
Fields of
DataConnectorSourceAttributiondataConnectorRidstringAt most 1,024 characters.
customCustomSourceAttribution
Fields of
CustomSourceAttributionsourceNamestring1 to 1,024 characters.
- one of
datasetRidstring
sessionCountstring (int64)Number of sessions aggregated into this group.
totalPointsCountstring (int64)Sum of the points counts across the aggregated sessions.
earliestCreatedAtstring (date-time)Creation time of the oldest aggregated session.
latestLastSeenAtstring (date-time)Most recent heartbeat time across the aggregated sessions.
mergedDataBoundsTimeRangeUnion of the data bounds across the aggregated sessions, if any session has data bounds.
Fields of
TimeRangestartstring (date-time)
endstring (date-time)
anyInProgressbooleanTrue if at least one aggregated session is in progress.
nextPageTokenstring
Request
curl -X POST "https://api.gov.nominal.io/api/ingest/v2/streaming-sources/search" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"pageSize": 1,
"pageToken": "<page token>",
"filter": {
"datasetRids": {
"datasetRids": [
"<dataset rids>"
]
}
},
"lastSeenAfter": "2026-01-01T00:00:00Z"
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/ingest/v2/streaming-sources/search",
headers={"Authorization": "Bearer <api key>"},
json={
"pageSize": 1,
"pageToken": "<page token>",
"filter": {"datasetRids": {"datasetRids": ["<dataset rids>"]}},
"lastSeenAfter": "2026-01-01T00:00:00Z",
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/ingest/v2/streaming-sources/search",
headers={"Authorization": "Bearer <api key>"},
json={
"pageSize": 1,
"pageToken": "<page token>",
"filter": {"datasetRids": {"datasetRids": ["<dataset rids>"]}},
"lastSeenAfter": "2026-01-01T00:00:00Z",
},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/ingest/v2/streaming-sources/search",
headers={"Authorization": "Bearer <api key>"},
json={
"pageSize": 1,
"pageToken": "<page token>",
"filter": {"datasetRids": {"datasetRids": ["<dataset rids>"]}},
"lastSeenAfter": "2026-01-01T00:00:00Z",
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"streamingSources": [
{
"source": {
"mesh": {
"sourceDatasetRid": "<source dataset rid>",
"sourceOrgRid": "<source org rid>",
"originSourceLabel": "<origin source label>"
}
},
"datasetRid": "<dataset rid>",
"sessionCount": "1",
"totalPointsCount": "1",
"earliestCreatedAt": "2026-01-01T00:00:00Z",
"latestLastSeenAt": "2026-01-01T00:00:00Z",
"mergedDataBounds": {
"start": "2026-01-01T00:00:00Z",
"end": "2026-01-01T00:00:00Z"
},
"anyInProgress": true
}
],
"nextPageToken": "<next page token>"
}
Errors#
Errors shows how these errors are sent.
Each error’s errorName is NominalIngestV2: followed by its name below.
Status |
Name |
Notes |
|---|---|---|
400 |
|
A streaming search filter may contain at most 1000 nodes and 32 nested levels. |
Types#
CustomSourceAttribution#
A caller-named streaming source.
sourceNamestring1 to 1,024 characters.
DataConnectorSourceAttribution#
A streaming source fed by a data connector.
dataConnectorRidstring requiredAt most 1,024 characters.
ExactStreamingSourceFilter#
Matches a single streaming source: the sessions on dataset_rid with exactly the given source attribution. An absent source matches only unattributed sessions, not every source.
datasetRidstring requiredAt most 1,024 characters.
sourceStreamingSourceAttribution
MeshSourceAttribution#
A streaming source replicated from a dataset in another organization over mesh.
sourceDatasetRidstring requiredAt most 1,024 characters.
sourceOrgRidstring requiredAt most 1,024 characters.
originSourceLabelstringLabel for this data’s source on the originating deployment, as that deployment reported it. Opaque: Nominal stores and returns it without interpreting it. It is part of the session’s identity, so writes carrying different labels resolve to different sessions. 1 to 1,024 characters.
StreamingDatasetRidsFilter#
Matches the given datasets. An empty list matches every dataset.
datasetRidsarray of stringAt most 1,000 items. No duplicates. Each item: at most 1,024 characters.
StreamingSession#
A streaming ingest session on a dataset.
streamingSessionRidstring required
datasetRidstring required
statusStreamingSessionStatusrequired
sourceStreamingSourceAttributionAbsent for unattributed sessions.
dataBoundsTimeRangeThe time range of the data ingested so far. Absent until the first points are recorded.
pointsCountstring (int64)
createdAtstring (date-time) required
lastSeenAtstring (date-time) requiredTime of the most recent heartbeat for this session.
completedAtstring (date-time)Time the session was completed. Absent while the session is in progress.
StreamingSessionAndFilter#
Matches when every child filter matches.
filtersarray ofStreamingSessionSearchFilter1 to 100 items.
StreamingSessionDataBoundsFilter#
Matches sessions whose data bounds overlap this window. Sessions with no data bounds do not match. If both ends are present, start must not be after end.
startstring (date-time)
endstring (date-time)
StreamingSessionNotFilter#
Matches when the child filter does not.
filterStreamingSessionSearchFilterrequired
StreamingSessionOrFilter#
Matches when any child filter matches.
filtersarray ofStreamingSessionSearchFilter1 to 100 items.
StreamingSessionSearchFilter#
Filter for streaming-session search.
Set exactly one of the fields below.
- one of 7 fields required
datasetRidsStreamingDatasetRidsFilter
sourceExactStreamingSourceFilter
dataBoundsOverlapStreamingSessionDataBoundsFilter
workspaceStreamingWorkspaceFilter
StreamingSessionSortField#
STREAMING_SESSION_SORT_FIELD_UNSPECIFIED
STREAMING_SESSION_SORT_FIELD_CREATED_ATOrders by the time the session was created.
STREAMING_SESSION_SORT_FIELD_DATA_BOUNDS_STARTOrders by the start of the session’s data bounds. Sessions with no data bounds are excluded from the results.
StreamingSessionSortOptions#
fieldStreamingSessionSortField
isDescendingboolean
StreamingSessionStatus#
STREAMING_SESSION_STATUS_UNSPECIFIED
STREAMING_SESSION_STATUS_IN_PROGRESSThe session accepts heartbeats.
STREAMING_SESSION_STATUS_COMPLETEDThe server completed the session once it had recorded a minimum number of points and either stopped receiving heartbeats or reached its maximum age. A completed session accepts no further heartbeats; resolving the same source starts a new session.
StreamingSource#
Aggregate view of the streaming sessions sharing a single (source, dataset) pair.
sourceStreamingSourceAttributionAbsent for unattributed sessions.
datasetRidstring required
sessionCountstring (int64)Number of sessions aggregated into this group.
totalPointsCountstring (int64)Sum of the points counts across the aggregated sessions.
earliestCreatedAtstring (date-time) requiredCreation time of the oldest aggregated session.
latestLastSeenAtstring (date-time) requiredMost recent heartbeat time across the aggregated sessions.
mergedDataBoundsTimeRangeUnion of the data bounds across the aggregated sessions, if any session has data bounds.
anyInProgressbooleanTrue if at least one aggregated session is in progress.
StreamingSourceAndFilter#
Matches when every child filter matches.
filtersarray ofStreamingSourceSearchFilter1 to 100 items.
StreamingSourceAttribution#
Where a streaming session’s data comes from.
Set exactly one of the fields below.
- one of
mesh,dataConnector,customrequired
meshMeshSourceAttribution
dataConnectorDataConnectorSourceAttribution
customCustomSourceAttribution
StreamingSourceNotFilter#
Matches when the child filter does not.
filterStreamingSourceSearchFilterrequired
StreamingSourceOrFilter#
Matches when any child filter matches.
filtersarray ofStreamingSourceSearchFilter1 to 100 items.
StreamingSourceSearchFilter#
Filter for streaming-source search.
Set exactly one of the fields below.
- one of 6 fields required
datasetRidsStreamingDatasetRidsFilter
sourceExactStreamingSourceFilter
workspaceStreamingWorkspaceFilter
StreamingWorkspaceFilter#
Matches sessions or sources whose dataset belongs to the workspace.
workspaceRidstring requiredAt most 1,024 characters.
TimeRange#
A closed time range.
start must not be after end.
startstring (date-time) required
endstring (date-time) required
Page design based on Scalar, MIT License.