Run service#
Runs are collections of channels and metadata from one or more data sources, synchronized over a range of real time, which represents a test event or simulation. These API endpoints let you manage runs in the Nominal app.
OpenAPI file: RunService.json
Endpoints#
Create run#
POST /scout/v1/run
Create a new run in Nominal.
Throws if start is equal to or after end.
Body
titlestring required
descriptionstring required
startTimeUtcTimestamprequired
Fields of
UtcTimestampsecondsSinceEpochinteger (int64) required
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring required
runPrefixstring
dataSourcesmap ofDataSourceRefNametoCreateRunDataSource
Fields of
CreateRunDataSourcedataSourceDataSourcedeprecatedOne of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. Deprecated: Use dataSourceRid instead.
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
dataSourceRidstring (RID)One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.
offsetDuration
Fields of
Durationsecondsinteger (int64) required
nanosinteger (int64) required
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
workspacestring (RID)The workspace in which to create the run. If not provided, the run will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured. All data sources, attachments, and assets must be in the same workspace.
Response
ridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"title": "<title>",
"description": "<description>",
"startTime": {
"secondsSinceEpoch": 1
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
},
)
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/scout/v1/run",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
Update run#
PUT /scout/v1/run/{rid}
Updates an existing run based on its RID.
Throws if start is equal to or after end.
Path parameters
ridstring (RID) required
Body
titlestring
descriptionstring
startTimeUtcTimestampIf strictOverwrite is false, will only update the startTime if it is before the existing startTime.
Fields of
UtcTimestampsecondsSinceEpochinteger (int64) required
offsetNanosecondsinteger (int64)
endTimeUtcTimestampIf strictOverwrite is false, will only update the endTime if it is after the existing endTime.
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring required
runPrefixstringPass in an empty string to remove the run prefix.
dataSourcesmap ofDataSourceRefNametoCreateRunDataSource
Fields of
CreateRunDataSourcedataSourceDataSourcedeprecatedOne of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. Deprecated: Use dataSourceRid instead.
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
dataSourceRidstring (RID)One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.
offsetDuration
Fields of
Durationsecondsinteger (int64) required
nanosinteger (int64) required
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
strictOverwritebooleanIf true, will blindly overwrite the existing fields with the new values in the request. If false, will only update the fields if application constraints are maintained. See individual field docs for more details. Defaults to true for backwards compatibility.
Response
ridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
Request
curl -X PUT "https://api.gov.nominal.io/api/scout/v1/run/<rid>" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"title": "<title>",
"description": "<description>",
"startTime": {
"secondsSinceEpoch": 1
},
"endTime": {
"secondsSinceEpoch": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"url": "<url>"
}
],
"runPrefix": "<run prefix>",
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"dataSourceRid": "<data source rid>",
"offset": {
"seconds": 1,
"nanos": 1
},
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"strictOverwrite": true
}'
import requests
response = requests.put(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
"endTime": {"secondsSinceEpoch": 1},
"properties": {"<key>": "<property value>"},
"typedProperties": {
"<key>": {"type": "stringValue", "stringValue": "<property value>"},
},
"labels": ["<label>"],
"links": [{"url": "<url>"}],
"runPrefix": "<run prefix>",
"dataSources": {
"<key>": {
"dataSource": {"type": "dataset", "dataset": "<dataset rid>"},
"dataSourceRid": "<data source rid>",
"offset": {"seconds": 1, "nanos": 1},
"seriesTags": {"<key>": "<tag value>"},
},
},
"attachments": ["<attachment rid>"],
"asset": "<asset rid>",
"assets": ["<asset rid>"],
"strictOverwrite": True,
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.put(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
"endTime": {"secondsSinceEpoch": 1},
"properties": {"<key>": "<property value>"},
"typedProperties": {
"<key>": {"type": "stringValue", "stringValue": "<property value>"},
},
"labels": ["<label>"],
"links": [{"url": "<url>"}],
"runPrefix": "<run prefix>",
"dataSources": {
"<key>": {
"dataSource": {"type": "dataset", "dataset": "<dataset rid>"},
"dataSourceRid": "<data source rid>",
"offset": {"seconds": 1, "nanos": 1},
"seriesTags": {"<key>": "<tag value>"},
},
},
"attachments": ["<attachment rid>"],
"asset": "<asset rid>",
"assets": ["<asset rid>"],
"strictOverwrite": 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.put(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
"endTime": {"secondsSinceEpoch": 1},
"properties": {"<key>": "<property value>"},
"typedProperties": {
"<key>": {"type": "stringValue", "stringValue": "<property value>"},
},
"labels": ["<label>"],
"links": [{"url": "<url>"}],
"runPrefix": "<run prefix>",
"dataSources": {
"<key>": {
"dataSource": {"type": "dataset", "dataset": "<dataset rid>"},
"dataSourceRid": "<data source rid>",
"offset": {"seconds": 1, "nanos": 1},
"seriesTags": {"<key>": "<tag value>"},
},
},
"attachments": ["<attachment rid>"],
"asset": "<asset rid>",
"assets": ["<asset rid>"],
"strictOverwrite": True,
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
Get run#
GET /scout/v1/run/{rid}
Fetches details about the run in question based on its RID.
Path parameters
ridstring (RID) required
Response
ridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
Request
curl "https://api.gov.nominal.io/api/scout/v1/run/<rid>" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
Batch edit run metadata#
POST /scout/v1/run/metadata/batch-edit
Batch edits metadata across multiple runs. Supports rename/merge for labels and properties. If more than 1000 runs are targeted, this endpoint will throw a 400.
Body
runSearchQuerySearchQueryAdditional search query to filter which runs are targeted by the edit. Source labels/properties from the metadata change are automatically included as filters.
Set
typeto"startTimeInclusive".startTimeInclusiveUtcTimestampdeprecatedDeprecated: Use startTime instead
Fields of
UtcTimestampsecondsSinceEpochinteger (int64) required
offsetNanosecondsinteger (int64)
Set
typeto"startTime".startTimeTimeframeFilter
Set
typeto"custom".customCustomTimeframeFilter
Fields of
CustomTimeframeFilterstartTimeUtcTimestamp
endTimeUtcTimestamp
Set
typeto"preset".presetPresetTimeframeFilter
Fields of
PresetTimeframeFilterdurationPresetTimeframeDurationrequired
Values of
PresetTimeframeDurationALL_TIME
LAST_DAY
LAST_WEEK
LAST_MONTH
LAST_YEAR
Set
typeto"endTimeInclusive".endTimeInclusiveUtcTimestampdeprecatedDeprecated: Use endTime instead
Set
typeto"endTime".endTimeTimeframeFilter
Set
typeto"timeRange".timeRangeTimeRangeFilter
Fields of
TimeRangeFilterstartUtcTimestamp
endUtcTimestamp
Set
typeto"createdAt".createdAtTimeframeFilter
Set
typeto"exactMatch".exactMatchstringPerforms case insensitive exact substring match search on the title.
Set
typeto"searchText".searchTextstring
Set
typeto"asset".assetstring (RID) deprecatedDeprecated: Use getRunsByAsset rather than text-based search
Set
typeto"assets".assetsAssetsFilter
Fields of
AssetsFilterassetsarray of string (RID)
Set
typeto"isSingleAsset".isSingleAssetbooleanSearch for either only single-asset runs (true), or only multi-asset runs (false).
Set
typeto"label".labelstring deprecatedDeprecated: use labels instead
Set
typeto"labels".labelsLabelsFilter
Fields of
LabelsFilteroperatorSetOperatorrequired
Values of
SetOperatorAND
OR
labelsarray of string
Set
typeto"property".propertyPropertydeprecatedDeprecated: use properties
Fields of
Propertynamestring required
valuestring required
Set
typeto"propertyKey".propertyKeystringMatches runs that have a property with this key, regardless of value.
Set
typeto"properties".propertiesPropertiesFilter
Fields of
PropertiesFilternamestring required
valuesarray of string
Set
typeto"numericProperty".numericPropertyNumericPropertyPredicateMatches runs using a numeric property comparison.
Fields of
NumericPropertyPredicatenamestring required
valuenumber required
operatorPropertyComparisonOperatorrequired
Values of
PropertyComparisonOperatorEQ
NEQ
GT
GTE
LT
LTE
Set
typeto"numericPropertyRange".numericPropertyRangeNumericPropertyRangePredicateMatches runs using an inclusive numeric property range.
Fields of
NumericPropertyRangePredicatenamestring required
minnumber
maxnumber
operatorNumericPropertyRangeOperatorrequired
Values of
NumericPropertyRangeOperatorBETWEEN
NOT_BETWEEN
Set
typeto"dataSourceSeriesTag".dataSourceSeriesTagDataSourceSeriesTag
Fields of
DataSourceSeriesTagnamestring required
valuestring required
Set
typeto"dataSourceRefName".dataSourceRefNamestring
Set
typeto"dataSource".dataSourceDataSourcedeprecatedDeprecated: Use dataSourceRefName, rather than searching directly by DataSource.
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
Set
typeto"runNumber".runNumberinteger (int64)
Set
typeto"runPrefix".runPrefixstring
Set
typeto"checkAlertStatesFilter".checkAlertStatesFilterCheckAlertStatesFilterSearch for runs where its aggregated check alert satisfy a given operator and threshold.
Fields of
CheckAlertStatesFiltercheckAlertStateCheckAlertStaterequired
Set
typeto"pendingReview".pendingReviewPendingReviewAlertState
Set
typeto"closedWithFurtherAction".closedWithFurtherActionClosedWithFurtherActionAlertState
Fields of
ClosedWithFurtherActionAlertStatecommentstring required
closedBystring (RID) required
Set
typeto"closedWithIgnore".closedWithIgnoreClosedWithIgnoreAlertState
Fields of
ClosedWithIgnoreAlertStatecommentstring required
closedBystring (RID) required
operatorOperatorrequired
Values of
OperatorLEQ
LT
GEQ
GT
EQ
thresholdinteger (int64) required
Set
typeto"archived".archivedboolean
Set
typeto"and".andarray ofSearchQuery
Set
typeto"or".orarray ofSearchQuery
Set
typeto"not".notSearchQuery
Set
typeto"workspace".workspacestring (RID)
Set
typeto"lockStatus".lockStatusLockStatus
Values of
LockStatusLOCKED
UNLOCKED
Set
typeto"datasetRids".datasetRidsarray of string (RID)Applied as a post-filter to the page returned by unified search. A run matches when any requested dataset is in its data scopes. At most 10 dataset RIDs may be provided.
operationMetadataChangerequired
Set
typeto"renameLabel".renameLabelRenameLabel
Fields of
RenameLabelsourcearray of string
targetstring required
Set
typeto"renamePropertyKey".renamePropertyKeyRenamePropertyKey
Fields of
RenamePropertyKeysourcearray of string
targetstring required
onConflictConflictBehaviorrequired
Set
typeto"skip".skipSkipOnConflict
Set
typeto"overwrite".overwriteOverwriteOnConflict
Fields of
OverwriteOnConflictpriorityarray of string
Set
typeto"mergePropertyValuesForKey".mergePropertyValuesForKeyMergePropertyValuesForKey
Fields of
MergePropertyValuesForKeykeystring required
sourcearray of string
targetstring required
Response
modifiedRunRidsarray of string (RID)RIDs for runs that were modified by the batch edit.
conflictingRunRidsarray of string (RID)RIDs for runs that matched the source filter but already had the target property key and were skipped (SkipOnConflict behavior). Empty for operations without conflict semantics or when using OverwriteOnConflict.
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run/metadata/batch-edit" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"operation": {
"type": "renameLabel",
"renameLabel": {
"target": "<label>"
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run/metadata/batch-edit",
headers={"Authorization": "Bearer <api key>"},
json={"operation": {"type": "renameLabel", "renameLabel": {"target": "<label>"}}},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run/metadata/batch-edit",
headers={"Authorization": "Bearer <api key>"},
json={"operation": {"type": "renameLabel", "renameLabel": {"target": "<label>"}}},
)
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/scout/v1/run/metadata/batch-edit",
headers={"Authorization": "Bearer <api key>"},
json={
"operation": {
"type": "renameLabel",
"renameLabel": {"target": "<label>"},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"modifiedRunRids": [
"<run rid>"
],
"conflictingRunRids": [
"<run rid>"
]
}
Add data sources to run#
POST /scout/v1/run/{runRid}/data-sources
Adds datasources to the run in question.
Throws if any of the ref names conflict with existing data sources or each other.
Path parameters
runRidstring (RID) required
Body
The body is a map of DataSourceRefName to CreateRunDataSource.
Fields of CreateRunDataSource
dataSourceDataSourcedeprecatedOne of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. Deprecated: Use dataSourceRid instead.
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
dataSourceRidstring (RID)One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.
offsetDuration
Fields of
Durationsecondsinteger (int64) required
nanosinteger (int64) required
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
Response
ridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run/<run rid>/data-sources" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"dataSourceRid": "<data source rid>",
"offset": {
"seconds": 1,
"nanos": 1
},
"seriesTags": {
"<key>": "<tag value>"
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run/<run rid>/data-sources",
headers={"Authorization": "Bearer <api key>"},
json={
"<key>": {
"dataSource": {"type": "dataset", "dataset": "<dataset rid>"},
"dataSourceRid": "<data source rid>",
"offset": {"seconds": 1, "nanos": 1},
"seriesTags": {"<key>": "<tag value>"},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run/<run rid>/data-sources",
headers={"Authorization": "Bearer <api key>"},
json={
"<key>": {
"dataSource": {"type": "dataset", "dataset": "<dataset rid>"},
"dataSourceRid": "<data source rid>",
"offset": {"seconds": 1, "nanos": 1},
"seriesTags": {"<key>": "<tag value>"},
},
},
)
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/scout/v1/run/<run rid>/data-sources",
headers={"Authorization": "Bearer <api key>"},
json={
"<key>": {
"dataSource": {"type": "dataset", "dataset": "<dataset rid>"},
"dataSourceRid": "<data source rid>",
"offset": {"seconds": 1, "nanos": 1},
"seriesTags": {"<key>": "<tag value>"},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
Create or update run#
POST /scout/v1/run/create-or-update
Updates a run if it exists, otherwise it’s created from scratch. Will throw if the workspace of an existing run is different from the workspace of the request.
Body
runRidstring (RID)If a run with the same rid already exists, it will be updated. Otherwise, a new run will be created.
createRunRequestCreateRunRequestrequired
Fields of
CreateRunRequesttitlestring required
descriptionstring required
startTimeUtcTimestamprequired
Fields of
UtcTimestampsecondsSinceEpochinteger (int64) required
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring required
runPrefixstring
dataSourcesmap ofDataSourceRefNametoCreateRunDataSource
Fields of
CreateRunDataSourcedataSourceDataSourcedeprecatedOne of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. Deprecated: Use dataSourceRid instead.
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
dataSourceRidstring (RID)One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.
offsetDuration
Fields of
Durationsecondsinteger (int64) required
nanosinteger (int64) required
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
workspacestring (RID)The workspace in which to create the run. If not provided, the run will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured. All data sources, attachments, and assets must be in the same workspace.
Response
ridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run/create-or-update" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"createRunRequest": {
"title": "<title>",
"description": "<description>",
"startTime": {
"secondsSinceEpoch": 1
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run/create-or-update",
headers={"Authorization": "Bearer <api key>"},
json={
"createRunRequest": {
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run/create-or-update",
headers={"Authorization": "Bearer <api key>"},
json={
"createRunRequest": {
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
},
},
)
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/scout/v1/run/create-or-update",
headers={"Authorization": "Bearer <api key>"},
json={
"createRunRequest": {
"title": "<title>",
"description": "<description>",
"startTime": {"secondsSinceEpoch": 1},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
Get run with data review metrics#
GET /scout/v1/run/{rid}/with-data-review-metrics
Fetches details about the run in question based on its RID, including metrics for check and violation review status.
Path parameters
ridstring (RID) required
Response
runRun
Fields of
Runridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
dataReviewMetricsDataReviewMetrics
Fields of
DataReviewMetricschecksDataReviewCheckMetrics
Fields of
DataReviewCheckMetricspendingExecutioninteger
executinginteger
passingAutomaticinteger
pendingReviewinteger
closedWithIgnoreinteger
closedWithFurtherActioninteger
failedToExecutePendingReviewinteger
failedToExecuteClosedWithIgnoreinteger
failedToExecuteClosedWithFurtherActioninteger
alertsDataReviewAlertMetrics
Fields of
DataReviewAlertMetricspendingReviewinteger
closedWithIgnoreinteger
closedWithFurtherActioninteger
Request
curl "https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-metrics" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-metrics",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-metrics",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-metrics",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"run": {
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
},
"dataReviewMetrics": {
"checks": {
"pendingExecution": 1,
"executing": 1,
"passingAutomatic": 1,
"pendingReview": 1,
"closedWithIgnore": 1,
"closedWithFurtherAction": 1,
"failedToExecutePendingReview": 1,
"failedToExecuteClosedWithIgnore": 1,
"failedToExecuteClosedWithFurtherAction": 1
},
"alerts": {
"pendingReview": 1,
"closedWithIgnore": 1,
"closedWithFurtherAction": 1
}
}
}
Get run with data review summary#
GET /scout/v1/run/{rid}/with-data-review-summary
Fetches details about the run in question based on its RID, including a summary of the data review status.
Path parameters
ridstring (RID) required
Response
runRun
Fields of
Runridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
dataReviewSummaryRunDataReviewSummary
Fields of
RunDataReviewSummaryevaluationStatusRunDataReviewEvaluationStatus
Values of
RunDataReviewEvaluationStatusNO_CHECKS_APPLIED
FAILED_TO_EXECUTE
EXECUTING
PENDING_EXECUTION
CLOSED_WITH_FURTHER_ACTION
GENERATED_ALERTS
CLOSED_WITH_IGNORE
PASSING
totalIssueCountinteger
reviewedIssueCountinteger
issuesWithFurtherActionCountinteger
executionErrorCountinteger
Request
curl "https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-summary" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-summary",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-summary",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-summary",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"run": {
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
},
"dataReviewSummary": {
"evaluationStatus": "NO_CHECKS_APPLIED",
"totalIssueCount": 1,
"reviewedIssueCount": 1,
"issuesWithFurtherActionCount": 1,
"executionErrorCount": 1
}
}
Get run by ID#
POST /scout/v1/run/by-id
Fetches a run based on the run number, rather than RID.
Body
runNumberinteger (int64) required
runPrefixstring
workspacestring (RID)The workspace in which to query for the run. If not provided, the run will be queried in the default workspace for the user’s organization, if the default workspace for the organization is configured and the user has access to it.
Response
ridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run/by-id" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"runNumber": 1
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run/by-id",
headers={"Authorization": "Bearer <api key>"},
json={"runNumber": 1},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run/by-id",
headers={"Authorization": "Bearer <api key>"},
json={"runNumber": 1},
)
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/scout/v1/run/by-id",
headers={"Authorization": "Bearer <api key>"},
json={"runNumber": 1},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
Get runs#
POST /scout/v1/run/multiple
Fetches a list of run details based on a list of RIDs.
Body
The body is an array of string (RID).
Response
The body is a map of RunRid to Run.
Fields of Run
ridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run/multiple" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '[
"<run rid>"
]'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run/multiple",
headers={"Authorization": "Bearer <api key>"},
json=["<run rid>"],
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run/multiple",
headers={"Authorization": "Bearer <api key>"},
json=["<run rid>"],
)
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/scout/v1/run/multiple",
headers={"Authorization": "Bearer <api key>"},
json=["<run rid>"],
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"<key>": {
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
}
Get runs by asset#
POST /scout/v1/run/by-asset
Fetches the runs with the given asset.
Body
assetstring (RID) required
nextPageTokenstring (UUID)
Response
resultsarray ofRun
Fields of
Runridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
nextPageTokenstring (UUID)
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run/by-asset" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"asset": "<asset rid>"
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run/by-asset",
headers={"Authorization": "Bearer <api key>"},
json={"asset": "<asset rid>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run/by-asset",
headers={"Authorization": "Bearer <api key>"},
json={"asset": "<asset rid>"},
)
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/scout/v1/run/by-asset",
headers={"Authorization": "Bearer <api key>"},
json={"asset": "<asset rid>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"results": [
{
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
],
"nextPageToken": "<next page token>"
}
Get latest run for assets#
POST /scout/v1/run/by-assets/latest
Fetches the latest run for each requested asset. Assets without associated runs will not be included in response.
Body
The body is an array of string (RID).
Response
The body is a map of AssetRid to Run.
Fields of Run
ridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run/by-assets/latest" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '[
"<asset rid>"
]'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run/by-assets/latest",
headers={"Authorization": "Bearer <api key>"},
json=["<asset rid>"],
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run/by-assets/latest",
headers={"Authorization": "Bearer <api key>"},
json=["<asset rid>"],
)
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/scout/v1/run/by-assets/latest",
headers={"Authorization": "Bearer <api key>"},
json=["<asset rid>"],
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"<key>": {
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
}
Get all runs properties and labels#
GET /scout/v1/all-runs-properties-labels
Deprecated: Deprecated in favor of MetadataService#listPropertiesAndLabels
This legacy bulk-list surface returns string property values only.
Query parameters
workspacesarray of string (RID)If supplied, will return only the properties and labels that are associated with the supplied workspaces. If empty will return all properties and labels for workspaces that the user is permitted to see.
Response
propertiesmap ofPropertyNameto array of string
labelsarray of string
Request
curl "https://api.gov.nominal.io/api/scout/v1/all-runs-properties-labels" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v1/all-runs-properties-labels",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v1/all-runs-properties-labels",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v1/all-runs-properties-labels",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"properties": {
"<key>": [
"<property value>"
]
},
"labels": [
"<label>"
]
}
Search runs#
POST /scout/v1/search-runs
Searches for runs that match the given filters. Defaults to returning un-archived runs, absent an archive filter.
Body
sortSortOptionsrequired
Fields of
SortOptionsisDescendingboolean required
fieldSortFielddeprecatedDeprecated: use SortKey with SortField union type instead
Values of
SortFieldNAME
ID
CREATED_AT
START_TIME
END_TIME
PENDING_CHECK_ALERTS
sortKeySortKeyField to sort by. Includes both field and property-based sorting.
Set
typeto"field".fieldSortField
Set
typeto"property".propertySortPropertySort by a property value. Requires a property name, and will always sort null values last.
Fields of
SortPropertynamestring required
Set
typeto"numericProperty".numericPropertySortPropertySort by a numeric property value. String-valued and missing properties are null and always sort last.
additionalSortKeysarray ofSortKeyWithDirectionOptional secondary sort keys for tiebreaking. Applied in order after the primary sortKey. Each entry specifies its own sort key and direction. If empty or absent, ties are broken by UUID only.
Fields of
SortKeyWithDirectionsortKeySortKeyrequired
isDescendingboolean required
pageSizeinteger requiredMaximum page size is 10000 for searchRuns, and 1000 for searchRunsWithDataReviewMetrics and searchRunsWithDataReviewSummary. Larger page sizes are rejected.
nextPageTokenstring
querySearchQueryrequired
Set
typeto"startTimeInclusive".startTimeInclusiveUtcTimestampdeprecatedDeprecated: Use startTime instead
Fields of
UtcTimestampsecondsSinceEpochinteger (int64) required
offsetNanosecondsinteger (int64)
Set
typeto"startTime".startTimeTimeframeFilter
Set
typeto"custom".customCustomTimeframeFilter
Fields of
CustomTimeframeFilterstartTimeUtcTimestamp
endTimeUtcTimestamp
Set
typeto"preset".presetPresetTimeframeFilter
Fields of
PresetTimeframeFilterdurationPresetTimeframeDurationrequired
Values of
PresetTimeframeDurationALL_TIME
LAST_DAY
LAST_WEEK
LAST_MONTH
LAST_YEAR
Set
typeto"endTimeInclusive".endTimeInclusiveUtcTimestampdeprecatedDeprecated: Use endTime instead
Set
typeto"endTime".endTimeTimeframeFilter
Set
typeto"timeRange".timeRangeTimeRangeFilter
Fields of
TimeRangeFilterstartUtcTimestamp
endUtcTimestamp
Set
typeto"createdAt".createdAtTimeframeFilter
Set
typeto"exactMatch".exactMatchstringPerforms case insensitive exact substring match search on the title.
Set
typeto"searchText".searchTextstring
Set
typeto"asset".assetstring (RID) deprecatedDeprecated: Use getRunsByAsset rather than text-based search
Set
typeto"assets".assetsAssetsFilter
Fields of
AssetsFilterassetsarray of string (RID)
Set
typeto"isSingleAsset".isSingleAssetbooleanSearch for either only single-asset runs (true), or only multi-asset runs (false).
Set
typeto"label".labelstring deprecatedDeprecated: use labels instead
Set
typeto"labels".labelsLabelsFilter
Fields of
LabelsFilteroperatorSetOperatorrequired
Values of
SetOperatorAND
OR
labelsarray of string
Set
typeto"property".propertyPropertydeprecatedDeprecated: use properties
Fields of
Propertynamestring required
valuestring required
Set
typeto"propertyKey".propertyKeystringMatches runs that have a property with this key, regardless of value.
Set
typeto"properties".propertiesPropertiesFilter
Fields of
PropertiesFilternamestring required
valuesarray of string
Set
typeto"numericProperty".numericPropertyNumericPropertyPredicateMatches runs using a numeric property comparison.
Fields of
NumericPropertyPredicatenamestring required
valuenumber required
operatorPropertyComparisonOperatorrequired
Values of
PropertyComparisonOperatorEQ
NEQ
GT
GTE
LT
LTE
Set
typeto"numericPropertyRange".numericPropertyRangeNumericPropertyRangePredicateMatches runs using an inclusive numeric property range.
Fields of
NumericPropertyRangePredicatenamestring required
minnumber
maxnumber
operatorNumericPropertyRangeOperatorrequired
Values of
NumericPropertyRangeOperatorBETWEEN
NOT_BETWEEN
Set
typeto"dataSourceSeriesTag".dataSourceSeriesTagDataSourceSeriesTag
Fields of
DataSourceSeriesTagnamestring required
valuestring required
Set
typeto"dataSourceRefName".dataSourceRefNamestring
Set
typeto"dataSource".dataSourceDataSourcedeprecatedDeprecated: Use dataSourceRefName, rather than searching directly by DataSource.
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
Set
typeto"runNumber".runNumberinteger (int64)
Set
typeto"runPrefix".runPrefixstring
Set
typeto"checkAlertStatesFilter".checkAlertStatesFilterCheckAlertStatesFilterSearch for runs where its aggregated check alert satisfy a given operator and threshold.
Fields of
CheckAlertStatesFiltercheckAlertStateCheckAlertStaterequired
Set
typeto"pendingReview".pendingReviewPendingReviewAlertState
Set
typeto"closedWithFurtherAction".closedWithFurtherActionClosedWithFurtherActionAlertState
Fields of
ClosedWithFurtherActionAlertStatecommentstring required
closedBystring (RID) required
Set
typeto"closedWithIgnore".closedWithIgnoreClosedWithIgnoreAlertState
Fields of
ClosedWithIgnoreAlertStatecommentstring required
closedBystring (RID) required
operatorOperatorrequired
Values of
OperatorLEQ
LT
GEQ
GT
EQ
thresholdinteger (int64) required
Set
typeto"archived".archivedboolean
Set
typeto"and".andarray ofSearchQuery
Set
typeto"or".orarray ofSearchQuery
Set
typeto"not".notSearchQuery
Set
typeto"workspace".workspacestring (RID)
Set
typeto"lockStatus".lockStatusLockStatus
Values of
LockStatusLOCKED
UNLOCKED
Set
typeto"datasetRids".datasetRidsarray of string (RID)Applied as a post-filter to the page returned by unified search. A run matches when any requested dataset is in its data scopes. At most 10 dataset RIDs may be provided.
archivedStatusesarray ofArchivedStatusdeprecatedDefault search status is NOT_ARCHIVED if none are provided. Allows for including archived runs in search. Deprecated: use archived filter in search query instead.
Values of
ArchivedStatusNOT_ARCHIVED
ARCHIVED
includeMatchCountbooleanWhen true, the response populates totalCount with the number of runs matching the query. Defaults to false. Computing the count is an additional query whose cost grows with the size of the matching set, so only set this when the count is needed.
Response
resultsarray ofRun
Fields of
Runridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
nextPageTokenstring
totalCountintegerThe number of runs matching the query, workspace, and archived filters. Present only when includeMatchCount was set to true on the request.
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/search-runs" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"sort": {
"isDescending": true
},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {
"secondsSinceEpoch": 1
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/search-runs",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/search-runs",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
)
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/scout/v1/search-runs",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"results": [
{
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
}
],
"nextPageToken": "<token>",
"totalCount": 1
}
Search runs with data review metrics#
POST /scout/v1/search-runs-with-data-review-metrics
Searches for runs that match the given filters and includes metrics for check and violation review status. Defaults to returning un-archived runs, absent an archive filter.
Body
sortSortOptionsrequired
Fields of
SortOptionsisDescendingboolean required
fieldSortFielddeprecatedDeprecated: use SortKey with SortField union type instead
Values of
SortFieldNAME
ID
CREATED_AT
START_TIME
END_TIME
PENDING_CHECK_ALERTS
sortKeySortKeyField to sort by. Includes both field and property-based sorting.
Set
typeto"field".fieldSortField
Set
typeto"property".propertySortPropertySort by a property value. Requires a property name, and will always sort null values last.
Fields of
SortPropertynamestring required
Set
typeto"numericProperty".numericPropertySortPropertySort by a numeric property value. String-valued and missing properties are null and always sort last.
additionalSortKeysarray ofSortKeyWithDirectionOptional secondary sort keys for tiebreaking. Applied in order after the primary sortKey. Each entry specifies its own sort key and direction. If empty or absent, ties are broken by UUID only.
Fields of
SortKeyWithDirectionsortKeySortKeyrequired
isDescendingboolean required
pageSizeinteger requiredMaximum page size is 10000 for searchRuns, and 1000 for searchRunsWithDataReviewMetrics and searchRunsWithDataReviewSummary. Larger page sizes are rejected.
nextPageTokenstring
querySearchQueryrequired
Set
typeto"startTimeInclusive".startTimeInclusiveUtcTimestampdeprecatedDeprecated: Use startTime instead
Fields of
UtcTimestampsecondsSinceEpochinteger (int64) required
offsetNanosecondsinteger (int64)
Set
typeto"startTime".startTimeTimeframeFilter
Set
typeto"custom".customCustomTimeframeFilter
Fields of
CustomTimeframeFilterstartTimeUtcTimestamp
endTimeUtcTimestamp
Set
typeto"preset".presetPresetTimeframeFilter
Fields of
PresetTimeframeFilterdurationPresetTimeframeDurationrequired
Values of
PresetTimeframeDurationALL_TIME
LAST_DAY
LAST_WEEK
LAST_MONTH
LAST_YEAR
Set
typeto"endTimeInclusive".endTimeInclusiveUtcTimestampdeprecatedDeprecated: Use endTime instead
Set
typeto"endTime".endTimeTimeframeFilter
Set
typeto"timeRange".timeRangeTimeRangeFilter
Fields of
TimeRangeFilterstartUtcTimestamp
endUtcTimestamp
Set
typeto"createdAt".createdAtTimeframeFilter
Set
typeto"exactMatch".exactMatchstringPerforms case insensitive exact substring match search on the title.
Set
typeto"searchText".searchTextstring
Set
typeto"asset".assetstring (RID) deprecatedDeprecated: Use getRunsByAsset rather than text-based search
Set
typeto"assets".assetsAssetsFilter
Fields of
AssetsFilterassetsarray of string (RID)
Set
typeto"isSingleAsset".isSingleAssetbooleanSearch for either only single-asset runs (true), or only multi-asset runs (false).
Set
typeto"label".labelstring deprecatedDeprecated: use labels instead
Set
typeto"labels".labelsLabelsFilter
Fields of
LabelsFilteroperatorSetOperatorrequired
Values of
SetOperatorAND
OR
labelsarray of string
Set
typeto"property".propertyPropertydeprecatedDeprecated: use properties
Fields of
Propertynamestring required
valuestring required
Set
typeto"propertyKey".propertyKeystringMatches runs that have a property with this key, regardless of value.
Set
typeto"properties".propertiesPropertiesFilter
Fields of
PropertiesFilternamestring required
valuesarray of string
Set
typeto"numericProperty".numericPropertyNumericPropertyPredicateMatches runs using a numeric property comparison.
Fields of
NumericPropertyPredicatenamestring required
valuenumber required
operatorPropertyComparisonOperatorrequired
Values of
PropertyComparisonOperatorEQ
NEQ
GT
GTE
LT
LTE
Set
typeto"numericPropertyRange".numericPropertyRangeNumericPropertyRangePredicateMatches runs using an inclusive numeric property range.
Fields of
NumericPropertyRangePredicatenamestring required
minnumber
maxnumber
operatorNumericPropertyRangeOperatorrequired
Values of
NumericPropertyRangeOperatorBETWEEN
NOT_BETWEEN
Set
typeto"dataSourceSeriesTag".dataSourceSeriesTagDataSourceSeriesTag
Fields of
DataSourceSeriesTagnamestring required
valuestring required
Set
typeto"dataSourceRefName".dataSourceRefNamestring
Set
typeto"dataSource".dataSourceDataSourcedeprecatedDeprecated: Use dataSourceRefName, rather than searching directly by DataSource.
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
Set
typeto"runNumber".runNumberinteger (int64)
Set
typeto"runPrefix".runPrefixstring
Set
typeto"checkAlertStatesFilter".checkAlertStatesFilterCheckAlertStatesFilterSearch for runs where its aggregated check alert satisfy a given operator and threshold.
Fields of
CheckAlertStatesFiltercheckAlertStateCheckAlertStaterequired
Set
typeto"pendingReview".pendingReviewPendingReviewAlertState
Set
typeto"closedWithFurtherAction".closedWithFurtherActionClosedWithFurtherActionAlertState
Fields of
ClosedWithFurtherActionAlertStatecommentstring required
closedBystring (RID) required
Set
typeto"closedWithIgnore".closedWithIgnoreClosedWithIgnoreAlertState
Fields of
ClosedWithIgnoreAlertStatecommentstring required
closedBystring (RID) required
operatorOperatorrequired
Values of
OperatorLEQ
LT
GEQ
GT
EQ
thresholdinteger (int64) required
Set
typeto"archived".archivedboolean
Set
typeto"and".andarray ofSearchQuery
Set
typeto"or".orarray ofSearchQuery
Set
typeto"not".notSearchQuery
Set
typeto"workspace".workspacestring (RID)
Set
typeto"lockStatus".lockStatusLockStatus
Values of
LockStatusLOCKED
UNLOCKED
Set
typeto"datasetRids".datasetRidsarray of string (RID)Applied as a post-filter to the page returned by unified search. A run matches when any requested dataset is in its data scopes. At most 10 dataset RIDs may be provided.
archivedStatusesarray ofArchivedStatusdeprecatedDefault search status is NOT_ARCHIVED if none are provided. Allows for including archived runs in search. Deprecated: use archived filter in search query instead.
Values of
ArchivedStatusNOT_ARCHIVED
ARCHIVED
includeMatchCountbooleanWhen true, the response populates totalCount with the number of runs matching the query. Defaults to false. Computing the count is an additional query whose cost grows with the size of the matching set, so only set this when the count is needed.
Response
resultsarray ofRunWithDataReviewMetrics
Fields of
RunWithDataReviewMetricsrunRun
Fields of
Runridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
dataReviewMetricsDataReviewMetrics
Fields of
DataReviewMetricschecksDataReviewCheckMetrics
Fields of
DataReviewCheckMetricspendingExecutioninteger
executinginteger
passingAutomaticinteger
pendingReviewinteger
closedWithIgnoreinteger
closedWithFurtherActioninteger
failedToExecutePendingReviewinteger
failedToExecuteClosedWithIgnoreinteger
failedToExecuteClosedWithFurtherActioninteger
alertsDataReviewAlertMetrics
Fields of
DataReviewAlertMetricspendingReviewinteger
closedWithIgnoreinteger
closedWithFurtherActioninteger
nextPageTokenstring
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/search-runs-with-data-review-metrics" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"sort": {
"isDescending": true
},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {
"secondsSinceEpoch": 1
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/search-runs-with-data-review-metrics",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/search-runs-with-data-review-metrics",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
)
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/scout/v1/search-runs-with-data-review-metrics",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"results": [
{
"run": {
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
},
"dataReviewMetrics": {
"checks": {
"pendingExecution": 1,
"executing": 1,
"passingAutomatic": 1,
"pendingReview": 1,
"closedWithIgnore": 1,
"closedWithFurtherAction": 1,
"failedToExecutePendingReview": 1,
"failedToExecuteClosedWithIgnore": 1,
"failedToExecuteClosedWithFurtherAction": 1
},
"alerts": {
"pendingReview": 1,
"closedWithIgnore": 1,
"closedWithFurtherAction": 1
}
}
}
],
"nextPageToken": "<token>"
}
Search runs with data review summary#
POST /scout/v1/search-runs-with-data-review-summary
Deprecated: Deprecated in favor of searchRunsWithDataReviewMetrics
Searches for runs that match the given filters and includes a summary of the data review status. Defaults to returning un-archived runs, absent an archive filter.
Body
sortSortOptionsrequired
Fields of
SortOptionsisDescendingboolean required
fieldSortFielddeprecatedDeprecated: use SortKey with SortField union type instead
Values of
SortFieldNAME
ID
CREATED_AT
START_TIME
END_TIME
PENDING_CHECK_ALERTS
sortKeySortKeyField to sort by. Includes both field and property-based sorting.
Set
typeto"field".fieldSortField
Set
typeto"property".propertySortPropertySort by a property value. Requires a property name, and will always sort null values last.
Fields of
SortPropertynamestring required
Set
typeto"numericProperty".numericPropertySortPropertySort by a numeric property value. String-valued and missing properties are null and always sort last.
additionalSortKeysarray ofSortKeyWithDirectionOptional secondary sort keys for tiebreaking. Applied in order after the primary sortKey. Each entry specifies its own sort key and direction. If empty or absent, ties are broken by UUID only.
Fields of
SortKeyWithDirectionsortKeySortKeyrequired
isDescendingboolean required
pageSizeinteger requiredMaximum page size is 10000 for searchRuns, and 1000 for searchRunsWithDataReviewMetrics and searchRunsWithDataReviewSummary. Larger page sizes are rejected.
nextPageTokenstring
querySearchQueryrequired
Set
typeto"startTimeInclusive".startTimeInclusiveUtcTimestampdeprecatedDeprecated: Use startTime instead
Fields of
UtcTimestampsecondsSinceEpochinteger (int64) required
offsetNanosecondsinteger (int64)
Set
typeto"startTime".startTimeTimeframeFilter
Set
typeto"custom".customCustomTimeframeFilter
Fields of
CustomTimeframeFilterstartTimeUtcTimestamp
endTimeUtcTimestamp
Set
typeto"preset".presetPresetTimeframeFilter
Fields of
PresetTimeframeFilterdurationPresetTimeframeDurationrequired
Values of
PresetTimeframeDurationALL_TIME
LAST_DAY
LAST_WEEK
LAST_MONTH
LAST_YEAR
Set
typeto"endTimeInclusive".endTimeInclusiveUtcTimestampdeprecatedDeprecated: Use endTime instead
Set
typeto"endTime".endTimeTimeframeFilter
Set
typeto"timeRange".timeRangeTimeRangeFilter
Fields of
TimeRangeFilterstartUtcTimestamp
endUtcTimestamp
Set
typeto"createdAt".createdAtTimeframeFilter
Set
typeto"exactMatch".exactMatchstringPerforms case insensitive exact substring match search on the title.
Set
typeto"searchText".searchTextstring
Set
typeto"asset".assetstring (RID) deprecatedDeprecated: Use getRunsByAsset rather than text-based search
Set
typeto"assets".assetsAssetsFilter
Fields of
AssetsFilterassetsarray of string (RID)
Set
typeto"isSingleAsset".isSingleAssetbooleanSearch for either only single-asset runs (true), or only multi-asset runs (false).
Set
typeto"label".labelstring deprecatedDeprecated: use labels instead
Set
typeto"labels".labelsLabelsFilter
Fields of
LabelsFilteroperatorSetOperatorrequired
Values of
SetOperatorAND
OR
labelsarray of string
Set
typeto"property".propertyPropertydeprecatedDeprecated: use properties
Fields of
Propertynamestring required
valuestring required
Set
typeto"propertyKey".propertyKeystringMatches runs that have a property with this key, regardless of value.
Set
typeto"properties".propertiesPropertiesFilter
Fields of
PropertiesFilternamestring required
valuesarray of string
Set
typeto"numericProperty".numericPropertyNumericPropertyPredicateMatches runs using a numeric property comparison.
Fields of
NumericPropertyPredicatenamestring required
valuenumber required
operatorPropertyComparisonOperatorrequired
Values of
PropertyComparisonOperatorEQ
NEQ
GT
GTE
LT
LTE
Set
typeto"numericPropertyRange".numericPropertyRangeNumericPropertyRangePredicateMatches runs using an inclusive numeric property range.
Fields of
NumericPropertyRangePredicatenamestring required
minnumber
maxnumber
operatorNumericPropertyRangeOperatorrequired
Values of
NumericPropertyRangeOperatorBETWEEN
NOT_BETWEEN
Set
typeto"dataSourceSeriesTag".dataSourceSeriesTagDataSourceSeriesTag
Fields of
DataSourceSeriesTagnamestring required
valuestring required
Set
typeto"dataSourceRefName".dataSourceRefNamestring
Set
typeto"dataSource".dataSourceDataSourcedeprecatedDeprecated: Use dataSourceRefName, rather than searching directly by DataSource.
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
Set
typeto"runNumber".runNumberinteger (int64)
Set
typeto"runPrefix".runPrefixstring
Set
typeto"checkAlertStatesFilter".checkAlertStatesFilterCheckAlertStatesFilterSearch for runs where its aggregated check alert satisfy a given operator and threshold.
Fields of
CheckAlertStatesFiltercheckAlertStateCheckAlertStaterequired
Set
typeto"pendingReview".pendingReviewPendingReviewAlertState
Set
typeto"closedWithFurtherAction".closedWithFurtherActionClosedWithFurtherActionAlertState
Fields of
ClosedWithFurtherActionAlertStatecommentstring required
closedBystring (RID) required
Set
typeto"closedWithIgnore".closedWithIgnoreClosedWithIgnoreAlertState
Fields of
ClosedWithIgnoreAlertStatecommentstring required
closedBystring (RID) required
operatorOperatorrequired
Values of
OperatorLEQ
LT
GEQ
GT
EQ
thresholdinteger (int64) required
Set
typeto"archived".archivedboolean
Set
typeto"and".andarray ofSearchQuery
Set
typeto"or".orarray ofSearchQuery
Set
typeto"not".notSearchQuery
Set
typeto"workspace".workspacestring (RID)
Set
typeto"lockStatus".lockStatusLockStatus
Values of
LockStatusLOCKED
UNLOCKED
Set
typeto"datasetRids".datasetRidsarray of string (RID)Applied as a post-filter to the page returned by unified search. A run matches when any requested dataset is in its data scopes. At most 10 dataset RIDs may be provided.
archivedStatusesarray ofArchivedStatusdeprecatedDefault search status is NOT_ARCHIVED if none are provided. Allows for including archived runs in search. Deprecated: use archived filter in search query instead.
Values of
ArchivedStatusNOT_ARCHIVED
ARCHIVED
includeMatchCountbooleanWhen true, the response populates totalCount with the number of runs matching the query. Defaults to false. Computing the count is an additional query whose cost grows with the size of the matching set, so only set this when the count is needed.
Response
resultsarray ofRunWithDataReviewSummary
Fields of
RunWithDataReviewSummaryrunRun
Fields of
Runridstring (RID)
runNumberinteger (int64)
runPrefixstring
titlestring
descriptionstring
authorRidstring (RID)
startTimeUtcTimestamp
Fields of
UtcTimestampsecondsSinceEpochinteger (int64)
offsetNanosecondsinteger (int64)
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
Set
typeto"stringValue".stringValuestring
Set
typeto"numericValue".numericValuenumber
labelsarray of string
linksarray ofLink
Fields of
Linktitlestring
urlstring
createdAtstring (date-time)
updatedAtstring (date-time)
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
Fields of
DataScopesdataScopesmap ofDataSourceRefNametoDataScope
Fields of
DataScopedataScopeNamestringThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSource
Set
typeto"dataset".datasetstring (RID)
Set
typeto"connection".connectionstring (RID)
Set
typeto"logSet".logSetstring (RID)
Set
typeto"video".videostring (RID)
Set
typeto"spatial".spatialstring (RID)
offsetDuration
Fields of
Durationsecondsinteger (int64)
nanosinteger (int64)
timestampTypeWeakTimestampType
Values of
WeakTimestampTypeABSOLUTE
RELATIVE
PENDING
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
Fields of
RunDataSourcedataSourceDataSource
offsetDurationThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestringIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampType
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
Values of
LockStatusLOCKED
UNLOCKED
dataReviewSummaryRunDataReviewSummary
Fields of
RunDataReviewSummaryevaluationStatusRunDataReviewEvaluationStatus
Values of
RunDataReviewEvaluationStatusNO_CHECKS_APPLIED
FAILED_TO_EXECUTE
EXECUTING
PENDING_EXECUTION
CLOSED_WITH_FURTHER_ACTION
GENERATED_ALERTS
CLOSED_WITH_IGNORE
PASSING
totalIssueCountinteger
reviewedIssueCountinteger
issuesWithFurtherActionCountinteger
executionErrorCountinteger
nextPageTokenstring
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/search-runs-with-data-review-summary" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"sort": {
"isDescending": true
},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {
"secondsSinceEpoch": 1
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/search-runs-with-data-review-summary",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/search-runs-with-data-review-summary",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
)
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/scout/v1/search-runs-with-data-review-summary",
headers={"Authorization": "Bearer <api key>"},
json={
"sort": {"isDescending": True},
"pageSize": 1,
"query": {
"type": "startTimeInclusive",
"startTimeInclusive": {"secondsSinceEpoch": 1},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"results": [
{
"run": {
"rid": "<run rid>",
"runNumber": 1,
"runPrefix": "<run prefix>",
"title": "<title>",
"description": "<description>",
"authorRid": "<user rid>",
"startTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"endTime": {
"secondsSinceEpoch": 1,
"offsetNanoseconds": 1
},
"properties": {
"<key>": "<property value>"
},
"typedProperties": {
"<key>": {
"type": "stringValue",
"stringValue": "<property value>"
}
},
"labels": [
"<label>"
],
"links": [
{
"title": "<title>",
"url": "<url>"
}
],
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"assetDataScopesMap": {
"<key>": {
"dataScopes": {
"<key>": {
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
}
}
},
"assetDataScopes": [
{
"dataScopeName": "<data source ref name>",
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
],
"dataSources": {
"<key>": {
"dataSource": {
"type": "dataset",
"dataset": "<dataset rid>"
},
"offset": {
"seconds": 1,
"nanos": 1
},
"refName": "<data source ref name>",
"timestampType": "ABSOLUTE",
"seriesTags": {
"<key>": "<tag value>"
}
}
},
"attachments": [
"<attachment rid>"
],
"asset": "<asset rid>",
"assets": [
"<asset rid>"
],
"isArchived": true,
"lockStatus": "LOCKED"
},
"dataReviewSummary": {
"evaluationStatus": "NO_CHECKS_APPLIED",
"totalIssueCount": 1,
"reviewedIssueCount": 1,
"issuesWithFurtherActionCount": 1,
"executionErrorCount": 1
}
}
],
"nextPageToken": "<token>"
}
Archive run#
PUT /scout/v1/archive-run/{rid}
Soft-deletes a run. Runs still exist in the database but are no longer visible.
Path parameters
ridstring (RID) required
Query parameters
includeLinkedWorkbooksbooleanIf true, all workbooks that are linked to the run will be archived as well. Defaults to false.
Response
The body is a boolean.
Request
curl -X PUT "https://api.gov.nominal.io/api/scout/v1/archive-run/<rid>" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.put(
"https://api.gov.nominal.io/api/scout/v1/archive-run/<rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.put(
"https://api.gov.nominal.io/api/scout/v1/archive-run/<rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://api.gov.nominal.io/api/scout/v1/archive-run/<rid>",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
true
Unarchive run#
PUT /scout/v1/unarchive-run/{rid}
Path parameters
ridstring (RID) required
Query parameters
includeLinkedWorkbooksbooleanIf true, all auto-archived workbooks that are linked to run will be unarchived as well. Defaults to false.
Response
The body is a boolean.
Request
curl -X PUT "https://api.gov.nominal.io/api/scout/v1/unarchive-run/<rid>" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.put(
"https://api.gov.nominal.io/api/scout/v1/unarchive-run/<rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.put(
"https://api.gov.nominal.io/api/scout/v1/unarchive-run/<rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://api.gov.nominal.io/api/scout/v1/unarchive-run/<rid>",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
true
Archive runs#
POST /scout/v1/archive-run
Body
ridsarray of string (RID)
includeLinkedWorkbooksbooleanIf true, all auto-archived workbooks that are linked to run will be unarchived as well. Defaults to false.
Response
No content (HTTP 204).
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/archive-run" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"rids": [
"<run rid>"
],
"includeLinkedWorkbooks": true
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/archive-run",
headers={"Authorization": "Bearer <api key>"},
json={"rids": ["<run rid>"], "includeLinkedWorkbooks": True},
)
response.raise_for_status()
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/archive-run",
headers={"Authorization": "Bearer <api key>"},
json={"rids": ["<run rid>"], "includeLinkedWorkbooks": True},
)
response.raise_for_status()
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/scout/v1/archive-run",
headers={"Authorization": "Bearer <api key>"},
json={"rids": ["<run rid>"], "includeLinkedWorkbooks": True},
) as response:
response.raise_for_status()
asyncio.run(main())
Response: 204
No content.
Unarchive runs#
POST /scout/v1/unarchive-run
Body
ridsarray of string (RID)
includeLinkedWorkbooksbooleanIf true, all auto-archived workbooks that are linked to run will be unarchived as well. Defaults to false.
Response
No content (HTTP 204).
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/unarchive-run" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"rids": [
"<run rid>"
],
"includeLinkedWorkbooks": true
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/unarchive-run",
headers={"Authorization": "Bearer <api key>"},
json={"rids": ["<run rid>"], "includeLinkedWorkbooks": True},
)
response.raise_for_status()
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/unarchive-run",
headers={"Authorization": "Bearer <api key>"},
json={"rids": ["<run rid>"], "includeLinkedWorkbooks": True},
)
response.raise_for_status()
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/scout/v1/unarchive-run",
headers={"Authorization": "Bearer <api key>"},
json={"rids": ["<run rid>"], "includeLinkedWorkbooks": True},
) as response:
response.raise_for_status()
asyncio.run(main())
Response: 204
No content.
Get data source ref name and type list#
GET /scout/v1/data-source-ref-names-and-types
Returns the list of ref names that are in use across specified and authorized workspaces.
Query parameters
workspacesarray of string (RID)If not empty, will return only the ref names that are associated with the supplied workspaces. If empty will return all ref names for workspaces that the user is permitted to see.
Response
The body is an array of RefNameAndType.
Fields of RefNameAndType
namestring
typeDataSourceType
Values of
DataSourceTypeDATASET
CONNECTION
LOGSET
VIDEO
SPATIAL
Request
curl "https://api.gov.nominal.io/api/scout/v1/data-source-ref-names-and-types" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/scout/v1/data-source-ref-names-and-types",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/scout/v1/data-source-ref-names-and-types",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/scout/v1/data-source-ref-names-and-types",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
[
{
"name": "<data source ref name>",
"type": "DATASET"
}
]
Update run attachment#
POST /scout/v1/run/{rid}/attachments
Updates the attachments associated with a run.
Path parameters
ridstring (RID) required
Body
attachmentsToAddarray of string (RID)
attachmentsToRemovearray of string (RID)
Response
No content (HTTP 204).
Request
curl -X POST "https://api.gov.nominal.io/api/scout/v1/run/<rid>/attachments" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"attachmentsToAdd": [
"<attachment rid>"
],
"attachmentsToRemove": [
"<attachment rid>"
]
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/attachments",
headers={"Authorization": "Bearer <api key>"},
json={
"attachmentsToAdd": ["<attachment rid>"],
"attachmentsToRemove": ["<attachment rid>"],
},
)
response.raise_for_status()
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/attachments",
headers={"Authorization": "Bearer <api key>"},
json={
"attachmentsToAdd": ["<attachment rid>"],
"attachmentsToRemove": ["<attachment rid>"],
},
)
response.raise_for_status()
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/scout/v1/run/<rid>/attachments",
headers={"Authorization": "Bearer <api key>"},
json={
"attachmentsToAdd": ["<attachment rid>"],
"attachmentsToRemove": ["<attachment rid>"],
},
) as response:
response.raise_for_status()
asyncio.run(main())
Response: 204
No content.
Errors#
Errors shows how these errors are sent.
Each error’s errorName is Scout: followed by its name below.
Status |
Name |
Notes |
|---|---|---|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
400 |
|
|
404 |
|
|
404 |
|
|
409 |
|
|
409 |
|
A run under a retention lock is immutable. The runs named here must be unlocked before any of their metadata, data sources, or attachments can be updated. Batch updates are rejected in full rather than partially applied, so this lists every locked run in the request. |
Types#
ArchivedStatus#
NOT_ARCHIVED
ARCHIVED
AssetsFilter#
returns runs that match any of the provided assets.
assetsarray of string (RID)
CheckAlertState#
Set type to the name of one of the other fields, and set only that field.
pendingReviewPendingReviewAlertState
closedWithFurtherActionClosedWithFurtherActionAlertState
closedWithIgnoreClosedWithIgnoreAlertState
CheckAlertStatesFilter#
checkAlertStateCheckAlertStaterequired
operatorOperatorrequired
thresholdinteger (int64) required
ClosedWithFurtherActionAlertState#
commentstring required
closedBystring (RID) required
ClosedWithIgnoreAlertState#
commentstring required
closedBystring (RID) required
ConflictBehavior#
Controls what happens when a rename target property key already exists on a document.
Set type to the name of one of the other fields, and set only that field.
skipSkipOnConflict
overwriteOverwriteOnConflict
CreateRunDataSource#
For write requests, we want to allow for optional fields
dataSourceDataSourcedeprecatedOne of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. Deprecated: Use dataSourceRid instead.
dataSourceRidstring (RID)One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.
offsetDuration
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
CreateRunRequest#
titlestring required
descriptionstring required
startTimeUtcTimestamprequired
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
labelsarray of string
linksarray ofLink
runPrefixstring
dataSourcesmap ofDataSourceRefNametoCreateRunDataSource
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
workspacestring (RID)The workspace in which to create the run. If not provided, the run will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured. All data sources, attachments, and assets must be in the same workspace.
CustomTimeframeFilter#
startTimeUtcTimestamp
endTimeUtcTimestamp
DataReviewAlertMetrics#
pendingReviewinteger required
closedWithIgnoreinteger required
closedWithFurtherActioninteger required
DataReviewCheckMetrics#
pendingExecutioninteger required
executinginteger required
passingAutomaticinteger required
pendingReviewinteger required
closedWithIgnoreinteger required
closedWithFurtherActioninteger required
failedToExecutePendingReviewinteger required
failedToExecuteClosedWithIgnoreinteger required
failedToExecuteClosedWithFurtherActioninteger required
DataReviewMetrics#
checksDataReviewCheckMetricsrequired
alertsDataReviewAlertMetricsrequired
DataScope#
dataScopeNamestring requiredThe name of the data scope. The name is guaranteed to be be unique within the context of an asset.
dataSourceDataSourcerequired
offsetDuration
timestampTypeWeakTimestampTyperequired
seriesTagsmap ofTagNameto stringFilters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.
DataScopes#
dataScopesmap ofDataSourceRefNametoDataScope
DataSource#
Set type to the name of one of the other fields, and set only that field.
datasetstring (RID)
connectionstring (RID)
logSetstring (RID)
videostring (RID)
spatialstring (RID)
DataSourceSeriesTag#
namestring required
valuestring required
DataSourceType#
DATASET
CONNECTION
LOGSET
VIDEO
SPATIAL
Duration#
secondsinteger (int64) required
nanosinteger (int64) required
LabelsFilter#
operatorSetOperatorrequired
labelsarray of string
Link#
titlestring
urlstring required
LockStatus#
Whether the run is locked, preventing any changes from being made.
LOCKED
UNLOCKED
MergePropertyValuesForKey#
Merge one or more string values of a property key into a single target value. Merge applies to categorical aliases; continuous numeric values are intentionally excluded.
keystring required
sourcearray of string
targetstring required
MetadataChange#
Set type to the name of one of the other fields, and set only that field.
renameLabelRenameLabel
renamePropertyKeyRenamePropertyKey
mergePropertyValuesForKeyMergePropertyValuesForKey
NumericPropertyPredicate#
Matches resources that have a numeric value for the named property and whose value satisfies the operator. NEQ excludes resources that lack the property or store a string value under the same name.
namestring required
valuenumber required
operatorPropertyComparisonOperatorrequired
NumericPropertyRangeOperator#
BETWEEN
NOT_BETWEEN
NumericPropertyRangePredicate#
Inclusive range on a numeric property. At least one bound is required. BETWEEN: min <= x <= max. An absent bound is unbounded on that side. NOT_BETWEEN: x < min OR x > max. An absent bound drops that side. Both operators require a numeric value for name. Missing properties and string values never match. Bounds are closed [min, max] to match the number chip (is between / is not between), not half-open.
namestring required
minnumber
maxnumber
operatorNumericPropertyRangeOperatorrequired
Operator#
LEQ
LT
GEQ
GT
EQ
OverwriteOnConflict#
Documents that already have the target property key are included in the rename. The priority list determines which value wins via ordered precedence. Must contain exactly the source keys + target key.
priorityarray of string
PendingReviewAlertState#
An empty JSON object, {}.
PresetTimeframeDuration#
ALL_TIME
LAST_DAY
LAST_WEEK
LAST_MONTH
LAST_YEAR
PresetTimeframeFilter#
durationPresetTimeframeDurationrequired
PropertiesFilter#
namestring required
valuesarray of string
Property#
namestring required
valuestring required
PropertyComparisonOperator#
EQ
NEQ
GT
GTE
LT
LTE
RefNameAndType#
Scoped to the org-level, intended to help the frontend prevent users from submitting invalid ref names, ex. using a dataset ref name for a connection data source
namestring required
typeDataSourceTyperequired
RenameLabel#
Rename or merge one or more source labels into a single target label.
sourcearray of string
targetstring required
RenamePropertyKey#
Rename one or more source property keys to a single target key. Existing values are preserved under the new key. The rename should be skipped in the service for resources w/ conflicting keys.
sourcearray of string
targetstring required
onConflictConflictBehaviorrequired
Run#
ridstring (RID) required
runNumberinteger (int64) required
runPrefixstring
titlestring required
descriptionstring required
authorRidstring (RID)
startTimeUtcTimestamprequired
endTimeUtcTimestamp
propertiesmap ofPropertyNameto string deprecatedDeprecated: use typedProperties
typedPropertiesmap ofPropertyNametoTypedPropertyValue
labelsarray of string
linksarray ofLink
createdAtstring (date-time) required
updatedAtstring (date-time) required
assetDataScopesMapmap ofAssetRidtoDataScopesMap from asset RIDs to their data scopes
assetDataScopesarray ofDataScopedeprecatedDeprecated: Use assetDataScopesMap instead. Will be empty for multi-asset runs.
dataSourcesmap ofDataSourceRefNametoRunDataSourceMap from refnames to run data sources. Will be empty for multi-asset runs.
attachmentsarray of string (RID)
assetstring (RID) deprecatedDeprecated: Use assets
assetsarray of string (RID)
isArchivedboolean required
lockStatusLockStatusWhen absent, defaults to UNLOCKED for back-compat.
RunDataReviewEvaluationStatus#
NO_CHECKS_APPLIED
FAILED_TO_EXECUTE
EXECUTING
PENDING_EXECUTION
CLOSED_WITH_FURTHER_ACTION
GENERATED_ALERTS
CLOSED_WITH_IGNORE
PASSING
RunDataReviewSummary#
evaluationStatusRunDataReviewEvaluationStatusrequired
totalIssueCountinteger required
reviewedIssueCountinteger required
issuesWithFurtherActionCountinteger required
executionErrorCountinteger required
RunDataSource#
For read requests, we want to require all fields
dataSourceDataSourcerequired
offsetDurationrequiredThis offset is used for small time-sync corrections. Notably, it is not the offset to move a relative data source to the start of the run.
refNamestring requiredIncluded for convenience, duplicated from the key of the map
timestampTypeWeakTimestampTyperequired
seriesTagsmap ofTagNameto stringUsed to resolve logical series for this data source.
RunWithDataReviewMetrics#
runRunrequired
dataReviewMetricsDataReviewMetricsrequired
RunWithDataReviewSummary#
runRunrequired
dataReviewSummaryRunDataReviewSummaryrequired
SearchQuery#
Set type to the name of one of the other fields, and set only that field.
startTimeInclusiveUtcTimestampdeprecatedDeprecated: Use startTime instead
startTimeTimeframeFilter
endTimeInclusiveUtcTimestampdeprecatedDeprecated: Use endTime instead
endTimeTimeframeFilter
timeRangeTimeRangeFilter
createdAtTimeframeFilter
exactMatchstringPerforms case insensitive exact substring match search on the title.
searchTextstring
assetstring (RID) deprecatedDeprecated: Use getRunsByAsset rather than text-based search
assetsAssetsFilter
isSingleAssetbooleanSearch for either only single-asset runs (true), or only multi-asset runs (false).
labelstring deprecatedDeprecated: use labels instead
labelsLabelsFilter
propertyPropertydeprecatedDeprecated: use properties
propertyKeystringMatches runs that have a property with this key, regardless of value.
propertiesPropertiesFilter
numericPropertyNumericPropertyPredicateMatches runs using a numeric property comparison.
numericPropertyRangeNumericPropertyRangePredicateMatches runs using an inclusive numeric property range.
dataSourceSeriesTagDataSourceSeriesTag
dataSourceRefNamestring
dataSourceDataSourcedeprecatedDeprecated: Use dataSourceRefName, rather than searching directly by DataSource.
runNumberinteger (int64)
runPrefixstring
checkAlertStatesFilterCheckAlertStatesFilterSearch for runs where its aggregated check alert satisfy a given operator and threshold.
archivedboolean
andarray ofSearchQuery
orarray ofSearchQuery
notSearchQuery
workspacestring (RID)
lockStatusLockStatus
datasetRidsarray of string (RID)Applied as a post-filter to the page returned by unified search. A run matches when any requested dataset is in its data scopes. At most 10 dataset RIDs may be provided.
SetOperator#
AND
OR
SkipOnConflict#
Documents are skipped when: - The target property key already exists on the document, or - Multiple source property keys exist on the document (ambiguous merge). Conflicting document RIDs are returned in the response.
An empty JSON object, {}.
SortField#
NAME
ID
CREATED_AT
START_TIME
END_TIME
PENDING_CHECK_ALERTS
SortKey#
Set type to the name of one of the other fields, and set only that field.
fieldSortField
propertySortPropertySort by a property value. Requires a property name, and will always sort null values last.
numericPropertySortPropertySort by a numeric property value. String-valued and missing properties are null and always sort last.
SortKeyWithDirection#
sortKeySortKeyrequired
isDescendingboolean required
SortOptions#
isDescendingboolean required
fieldSortFielddeprecatedDeprecated: use SortKey with SortField union type instead
sortKeySortKeyField to sort by. Includes both field and property-based sorting.
additionalSortKeysarray ofSortKeyWithDirectionOptional secondary sort keys for tiebreaking. Applied in order after the primary sortKey. Each entry specifies its own sort key and direction. If empty or absent, ties are broken by UUID only.
SortProperty#
namestring required
TimeframeFilter#
Set type to the name of one of the other fields, and set only that field.
customCustomTimeframeFilter
presetPresetTimeframeFilter
TimeRangeFilter#
searches for runs that have at least some intersection with the specified range.
startUtcTimestamp
endUtcTimestamp
TypedPropertyValue#
Typed metadata value. Additional variants may be added as property types expand.
Set type to the name of one of the other fields, and set only that field.
stringValuestring
numericValuenumber
UtcTimestamp#
secondsSinceEpochinteger (int64) required
offsetNanosecondsinteger (int64)
WeakTimestampType#
If a CSV data source is still being split, the timestamp type is not known.
ABSOLUTE
RELATIVE
PENDING
Page design based on Scalar, MIT License.