# 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`](https://dev.nominal.io/api/_downloads/1eafa0c4722b5459d86f2e6934ff4b9d/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

`title` string required
:   ​

`description` string required
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) required
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64) required
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string required
    :   ​

`runPrefix` string
:   ​

`dataSources` map of `DataSourceRefName` to [`CreateRunDataSource`](https://dev.nominal.io/api/rest/run-service.md#createrundatasource)
:   ​

    Fields of `CreateRunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
    :   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. **Deprecated:** Use dataSourceRid instead.

        **dataset**

        Set `type` to `"dataset"`.

        `dataset` string (RID)
        :   ​

        **connection**

        Set `type` to `"connection"`.

        `connection` string (RID)
        :   ​

        **logSet**

        Set `type` to `"logSet"`.

        `logSet` string (RID)
        :   ​

        **video**

        Set `type` to `"video"`.

        `video` string (RID)
        :   ​

        **spatial**

        Set `type` to `"spatial"`.

        `spatial` string (RID)
        :   ​

    `dataSourceRid` string (RID)
    :   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   ​

        Fields of `Duration`

        `seconds` integer (int64) required
        :   ​

        `nanos` integer (int64) required
        :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`workspace` string (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

`rid` string (RID)
:   ​

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`title` string
:   ​

`description` string
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64)
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string
    :   ​

`createdAt` string (date-time)
:   ​

`updatedAt` string (date-time)
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

    Fields of `DataScopes`

    `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
    :   ​

        Fields of `DataScope`

        `dataScopeName` string
        :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

            Values of `WeakTimestampType`

            `ABSOLUTE`
            :   ​

            `RELATIVE`
            :   ​

            `PENDING`
            :   ​

        `seriesTags` map of `TagName` to string
        :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

    Fields of `RunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
    :   ​

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   This 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.

    `refName` string
    :   Included for convenience, duplicated from the key of the map

    `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
    :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When absent, defaults to UNLOCKED for back-compat.

    Values of `LockStatus`

    `LOCKED`
    :   ​

    `UNLOCKED`
    :   ​

Request

**curl**

```shell
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
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`rid` string (RID) required
:   ​

Body

`title` string
:   ​

`description` string
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   If strictOverwrite is false, will only update the startTime if it is before the existing startTime.

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64) required
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   If strictOverwrite is false, will only update the endTime if it is after the existing endTime.

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string required
    :   ​

`runPrefix` string
:   Pass in an empty string to remove the run prefix.

`dataSources` map of `DataSourceRefName` to [`CreateRunDataSource`](https://dev.nominal.io/api/rest/run-service.md#createrundatasource)
:   ​

    Fields of `CreateRunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
    :   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. **Deprecated:** Use dataSourceRid instead.

        **dataset**

        Set `type` to `"dataset"`.

        `dataset` string (RID)
        :   ​

        **connection**

        Set `type` to `"connection"`.

        `connection` string (RID)
        :   ​

        **logSet**

        Set `type` to `"logSet"`.

        `logSet` string (RID)
        :   ​

        **video**

        Set `type` to `"video"`.

        `video` string (RID)
        :   ​

        **spatial**

        Set `type` to `"spatial"`.

        `spatial` string (RID)
        :   ​

    `dataSourceRid` string (RID)
    :   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   ​

        Fields of `Duration`

        `seconds` integer (int64) required
        :   ​

        `nanos` integer (int64) required
        :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`strictOverwrite` boolean
:   If 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

`rid` string (RID)
:   ​

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`title` string
:   ​

`description` string
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64)
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string
    :   ​

`createdAt` string (date-time)
:   ​

`updatedAt` string (date-time)
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

    Fields of `DataScopes`

    `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
    :   ​

        Fields of `DataScope`

        `dataScopeName` string
        :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

            Values of `WeakTimestampType`

            `ABSOLUTE`
            :   ​

            `RELATIVE`
            :   ​

            `PENDING`
            :   ​

        `seriesTags` map of `TagName` to string
        :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

    Fields of `RunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
    :   ​

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   This 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.

    `refName` string
    :   Included for convenience, duplicated from the key of the map

    `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
    :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When absent, defaults to UNLOCKED for back-compat.

    Values of `LockStatus`

    `LOCKED`
    :   ​

    `UNLOCKED`
    :   ​

Request

**curl**

```shell
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
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`rid` string (RID) required
:   ​

Response

`rid` string (RID)
:   ​

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`title` string
:   ​

`description` string
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64)
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string
    :   ​

`createdAt` string (date-time)
:   ​

`updatedAt` string (date-time)
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

    Fields of `DataScopes`

    `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
    :   ​

        Fields of `DataScope`

        `dataScopeName` string
        :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

            Values of `WeakTimestampType`

            `ABSOLUTE`
            :   ​

            `RELATIVE`
            :   ​

            `PENDING`
            :   ​

        `seriesTags` map of `TagName` to string
        :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

    Fields of `RunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
    :   ​

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   This 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.

    `refName` string
    :   Included for convenience, duplicated from the key of the map

    `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
    :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When absent, defaults to UNLOCKED for back-compat.

    Values of `LockStatus`

    `LOCKED`
    :   ​

    `UNLOCKED`
    :   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v1/run/<rid>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`runSearchQuery` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
:   Additional search query to filter which runs are targeted by the edit. Source labels/properties from the metadata change are automatically included as filters.

    **startTimeInclusive**

    Set `type` to `"startTimeInclusive"`.

    `startTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
    :   **Deprecated:** Use startTime instead

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64) required
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    **startTime**

    Set `type` to `"startTime"`.

    `startTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

        **custom**

        Set `type` to `"custom"`.

        `custom` [`CustomTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#customtimeframefilter)
        :   ​

            Fields of `CustomTimeframeFilter`

            `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
            :   ​

            `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
            :   ​

        **preset**

        Set `type` to `"preset"`.

        `preset` [`PresetTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#presettimeframefilter)
        :   ​

            Fields of `PresetTimeframeFilter`

            `duration` [`PresetTimeframeDuration`](https://dev.nominal.io/api/rest/run-service.md#presettimeframeduration) required
            :   ​

                Values of `PresetTimeframeDuration`

                `ALL_TIME`
                :   ​

                `LAST_DAY`
                :   ​

                `LAST_WEEK`
                :   ​

                `LAST_MONTH`
                :   ​

                `LAST_YEAR`
                :   ​

    **endTimeInclusive**

    Set `type` to `"endTimeInclusive"`.

    `endTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
    :   **Deprecated:** Use endTime instead

    **endTime**

    Set `type` to `"endTime"`.

    `endTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

    **timeRange**

    Set `type` to `"timeRange"`.

    `timeRange` [`TimeRangeFilter`](https://dev.nominal.io/api/rest/run-service.md#timerangefilter)
    :   ​

        Fields of `TimeRangeFilter`

        `start` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

        `end` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

    **createdAt**

    Set `type` to `"createdAt"`.

    `createdAt` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

    **exactMatch**

    Set `type` to `"exactMatch"`.

    `exactMatch` string
    :   Performs case insensitive exact substring match search on the title.

    **searchText**

    Set `type` to `"searchText"`.

    `searchText` string
    :   ​

    **asset**

    Set `type` to `"asset"`.

    `asset` string (RID) deprecated
    :   **Deprecated:** Use getRunsByAsset rather than text-based search

    **assets**

    Set `type` to `"assets"`.

    `assets` [`AssetsFilter`](https://dev.nominal.io/api/rest/run-service.md#assetsfilter)
    :   ​

        Fields of `AssetsFilter`

        `assets` array of string (RID)
        :   ​

    **isSingleAsset**

    Set `type` to `"isSingleAsset"`.

    `isSingleAsset` boolean
    :   Search for either only single-asset runs (true), or only multi-asset runs (false).

    **label**

    Set `type` to `"label"`.

    `label` string deprecated
    :   **Deprecated:** use labels instead

    **labels**

    Set `type` to `"labels"`.

    `labels` [`LabelsFilter`](https://dev.nominal.io/api/rest/run-service.md#labelsfilter)
    :   ​

        Fields of `LabelsFilter`

        `operator` [`SetOperator`](https://dev.nominal.io/api/rest/run-service.md#setoperator) required
        :   ​

            Values of `SetOperator`

            `AND`
            :   ​

            `OR`
            :   ​

        `labels` array of string
        :   ​

    **property**

    Set `type` to `"property"`.

    `property` [`Property`](https://dev.nominal.io/api/rest/run-service.md#property) deprecated
    :   **Deprecated:** use properties

        Fields of `Property`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **propertyKey**

    Set `type` to `"propertyKey"`.

    `propertyKey` string
    :   Matches runs that have a property with this key, regardless of value.

    **properties**

    Set `type` to `"properties"`.

    `properties` [`PropertiesFilter`](https://dev.nominal.io/api/rest/run-service.md#propertiesfilter)
    :   ​

        Fields of `PropertiesFilter`

        `name` string required
        :   ​

        `values` array of string
        :   ​

    **numericProperty**

    Set `type` to `"numericProperty"`.

    `numericProperty` [`NumericPropertyPredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertypredicate)
    :   Matches runs using a numeric property comparison.

        Fields of `NumericPropertyPredicate`

        `name` string required
        :   ​

        `value` number required
        :   ​

        `operator` [`PropertyComparisonOperator`](https://dev.nominal.io/api/rest/run-service.md#propertycomparisonoperator) required
        :   ​

            Values of `PropertyComparisonOperator`

            `EQ`
            :   ​

            `NEQ`
            :   ​

            `GT`
            :   ​

            `GTE`
            :   ​

            `LT`
            :   ​

            `LTE`
            :   ​

    **numericPropertyRange**

    Set `type` to `"numericPropertyRange"`.

    `numericPropertyRange` [`NumericPropertyRangePredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangepredicate)
    :   Matches runs using an inclusive numeric property range.

        Fields of `NumericPropertyRangePredicate`

        `name` string required
        :   ​

        `min` number
        :   ​

        `max` number
        :   ​

        `operator` [`NumericPropertyRangeOperator`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangeoperator) required
        :   ​

            Values of `NumericPropertyRangeOperator`

            `BETWEEN`
            :   ​

            `NOT_BETWEEN`
            :   ​

    **dataSourceSeriesTag**

    Set `type` to `"dataSourceSeriesTag"`.

    `dataSourceSeriesTag` [`DataSourceSeriesTag`](https://dev.nominal.io/api/rest/run-service.md#datasourceseriestag)
    :   ​

        Fields of `DataSourceSeriesTag`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **dataSourceRefName**

    Set `type` to `"dataSourceRefName"`.

    `dataSourceRefName` string
    :   ​

    **dataSource**

    Set `type` to `"dataSource"`.

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
    :   **Deprecated:** Use dataSourceRefName, rather than searching directly by DataSource.

        **dataset**

        Set `type` to `"dataset"`.

        `dataset` string (RID)
        :   ​

        **connection**

        Set `type` to `"connection"`.

        `connection` string (RID)
        :   ​

        **logSet**

        Set `type` to `"logSet"`.

        `logSet` string (RID)
        :   ​

        **video**

        Set `type` to `"video"`.

        `video` string (RID)
        :   ​

        **spatial**

        Set `type` to `"spatial"`.

        `spatial` string (RID)
        :   ​

    **runNumber**

    Set `type` to `"runNumber"`.

    `runNumber` integer (int64)
    :   ​

    **runPrefix**

    Set `type` to `"runPrefix"`.

    `runPrefix` string
    :   ​

    **checkAlertStatesFilter**

    Set `type` to `"checkAlertStatesFilter"`.

    `checkAlertStatesFilter` [`CheckAlertStatesFilter`](https://dev.nominal.io/api/rest/run-service.md#checkalertstatesfilter)
    :   Search for runs where its aggregated check alert satisfy a given operator and threshold.

        Fields of `CheckAlertStatesFilter`

        `checkAlertState` [`CheckAlertState`](https://dev.nominal.io/api/rest/run-service.md#checkalertstate) required
        :   ​

            **pendingReview**

            Set `type` to `"pendingReview"`.

            `pendingReview` [`PendingReviewAlertState`](https://dev.nominal.io/api/rest/run-service.md#pendingreviewalertstate)
            :   ​

            **closedWithFurtherAction**

            Set `type` to `"closedWithFurtherAction"`.

            `closedWithFurtherAction` [`ClosedWithFurtherActionAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithfurtheractionalertstate)
            :   ​

                Fields of `ClosedWithFurtherActionAlertState`

                `comment` string required
                :   ​

                `closedBy` string (RID) required
                :   ​

            **closedWithIgnore**

            Set `type` to `"closedWithIgnore"`.

            `closedWithIgnore` [`ClosedWithIgnoreAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithignorealertstate)
            :   ​

                Fields of `ClosedWithIgnoreAlertState`

                `comment` string required
                :   ​

                `closedBy` string (RID) required
                :   ​

        `operator` [`Operator`](https://dev.nominal.io/api/rest/run-service.md#operator) required
        :   ​

            Values of `Operator`

            `LEQ`
            :   ​

            `LT`
            :   ​

            `GEQ`
            :   ​

            `GT`
            :   ​

            `EQ`
            :   ​

        `threshold` integer (int64) required
        :   ​

    **archived**

    Set `type` to `"archived"`.

    `archived` boolean
    :   ​

    **and**

    Set `type` to `"and"`.

    `and` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **or**

    Set `type` to `"or"`.

    `or` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **not**

    Set `type` to `"not"`.

    `not` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **workspace**

    Set `type` to `"workspace"`.

    `workspace` string (RID)
    :   ​

    **lockStatus**

    Set `type` to `"lockStatus"`.

    `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
    :   ​

        Values of `LockStatus`

        `LOCKED`
        :   ​

        `UNLOCKED`
        :   ​

    **datasetRids**

    Set `type` to `"datasetRids"`.

    `datasetRids` array 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.

`operation` [`MetadataChange`](https://dev.nominal.io/api/rest/run-service.md#metadatachange) required
:   ​

    **renameLabel**

    Set `type` to `"renameLabel"`.

    `renameLabel` [`RenameLabel`](https://dev.nominal.io/api/rest/run-service.md#renamelabel)
    :   ​

        Fields of `RenameLabel`

        `source` array of string
        :   ​

        `target` string required
        :   ​

    **renamePropertyKey**

    Set `type` to `"renamePropertyKey"`.

    `renamePropertyKey` [`RenamePropertyKey`](https://dev.nominal.io/api/rest/run-service.md#renamepropertykey)
    :   ​

        Fields of `RenamePropertyKey`

        `source` array of string
        :   ​

        `target` string required
        :   ​

        `onConflict` [`ConflictBehavior`](https://dev.nominal.io/api/rest/run-service.md#conflictbehavior) required
        :   ​

            **skip**

            Set `type` to `"skip"`.

            `skip` [`SkipOnConflict`](https://dev.nominal.io/api/rest/run-service.md#skiponconflict)
            :   ​

            **overwrite**

            Set `type` to `"overwrite"`.

            `overwrite` [`OverwriteOnConflict`](https://dev.nominal.io/api/rest/run-service.md#overwriteonconflict)
            :   ​

                Fields of `OverwriteOnConflict`

                `priority` array of string
                :   ​

    **mergePropertyValuesForKey**

    Set `type` to `"mergePropertyValuesForKey"`.

    `mergePropertyValuesForKey` [`MergePropertyValuesForKey`](https://dev.nominal.io/api/rest/run-service.md#mergepropertyvaluesforkey)
    :   ​

        Fields of `MergePropertyValuesForKey`

        `key` string required
        :   ​

        `source` array of string
        :   ​

        `target` string required
        :   ​

Response

`modifiedRunRids` array of string (RID)
:   RIDs for runs that were modified by the batch edit.

`conflictingRunRids` array 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**

```shell
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>"
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`runRid` string (RID) required
:   ​

Body

The body is a map of `DataSourceRefName` to [`CreateRunDataSource`](https://dev.nominal.io/api/rest/run-service.md#createrundatasource).

Fields of `CreateRunDataSource`

`dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
:   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. **Deprecated:** Use dataSourceRid instead.

    **dataset**

    Set `type` to `"dataset"`.

    `dataset` string (RID)
    :   ​

    **connection**

    Set `type` to `"connection"`.

    `connection` string (RID)
    :   ​

    **logSet**

    Set `type` to `"logSet"`.

    `logSet` string (RID)
    :   ​

    **video**

    Set `type` to `"video"`.

    `video` string (RID)
    :   ​

    **spatial**

    Set `type` to `"spatial"`.

    `spatial` string (RID)
    :   ​

`dataSourceRid` string (RID)
:   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.

`offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
:   ​

    Fields of `Duration`

    `seconds` integer (int64) required
    :   ​

    `nanos` integer (int64) required
    :   ​

`seriesTags` map of `TagName` to string
:   Used to resolve logical series for this data source.

Response

`rid` string (RID)
:   ​

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`title` string
:   ​

`description` string
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64)
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string
    :   ​

`createdAt` string (date-time)
:   ​

`updatedAt` string (date-time)
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

    Fields of `DataScopes`

    `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
    :   ​

        Fields of `DataScope`

        `dataScopeName` string
        :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

            Values of `WeakTimestampType`

            `ABSOLUTE`
            :   ​

            `RELATIVE`
            :   ​

            `PENDING`
            :   ​

        `seriesTags` map of `TagName` to string
        :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

    Fields of `RunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
    :   ​

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   This 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.

    `refName` string
    :   Included for convenience, duplicated from the key of the map

    `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
    :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When absent, defaults to UNLOCKED for back-compat.

    Values of `LockStatus`

    `LOCKED`
    :   ​

    `UNLOCKED`
    :   ​

Request

**curl**

```shell
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>"
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`runRid` string (RID)
:   If a run with the same rid already exists, it will be updated. Otherwise, a new run will be created.

`createRunRequest` [`CreateRunRequest`](https://dev.nominal.io/api/rest/run-service.md#createrunrequest) required
:   ​

    Fields of `CreateRunRequest`

    `title` string required
    :   ​

    `description` string required
    :   ​

    `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) required
    :   ​

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64) required
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

    `properties` map of `PropertyName` to string deprecated
    :   **Deprecated:** use typedProperties

    `typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
    :   ​

        **stringValue**

        Set `type` to `"stringValue"`.

        `stringValue` string
        :   ​

        **numericValue**

        Set `type` to `"numericValue"`.

        `numericValue` number
        :   ​

    `labels` array of string
    :   ​

    `links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
    :   ​

        Fields of `Link`

        `title` string
        :   ​

        `url` string required
        :   ​

    `runPrefix` string
    :   ​

    `dataSources` map of `DataSourceRefName` to [`CreateRunDataSource`](https://dev.nominal.io/api/rest/run-service.md#createrundatasource)
    :   ​

        Fields of `CreateRunDataSource`

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
        :   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. **Deprecated:** Use dataSourceRid instead.

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `dataSourceRid` string (RID)
        :   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64) required
            :   ​

            `nanos` integer (int64) required
            :   ​

        `seriesTags` map of `TagName` to string
        :   Used to resolve logical series for this data source.

    `attachments` array of string (RID)
    :   ​

    `asset` string (RID) deprecated
    :   **Deprecated:** Use assets

    `assets` array of string (RID)
    :   ​

    `workspace` string (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

`rid` string (RID)
:   ​

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`title` string
:   ​

`description` string
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64)
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string
    :   ​

`createdAt` string (date-time)
:   ​

`updatedAt` string (date-time)
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

    Fields of `DataScopes`

    `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
    :   ​

        Fields of `DataScope`

        `dataScopeName` string
        :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

            Values of `WeakTimestampType`

            `ABSOLUTE`
            :   ​

            `RELATIVE`
            :   ​

            `PENDING`
            :   ​

        `seriesTags` map of `TagName` to string
        :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

    Fields of `RunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
    :   ​

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   This 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.

    `refName` string
    :   Included for convenience, duplicated from the key of the map

    `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
    :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When absent, defaults to UNLOCKED for back-compat.

    Values of `LockStatus`

    `LOCKED`
    :   ​

    `UNLOCKED`
    :   ​

Request

**curl**

```shell
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
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`rid` string (RID) required
:   ​

Response

`run` [`Run`](https://dev.nominal.io/api/rest/run-service.md#run)
:   ​

    Fields of `Run`

    `rid` string (RID)
    :   ​

    `runNumber` integer (int64)
    :   ​

    `runPrefix` string
    :   ​

    `title` string
    :   ​

    `description` string
    :   ​

    `authorRid` string (RID)
    :   ​

    `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64)
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

    `properties` map of `PropertyName` to string deprecated
    :   **Deprecated:** use typedProperties

    `typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
    :   ​

        **stringValue**

        Set `type` to `"stringValue"`.

        `stringValue` string
        :   ​

        **numericValue**

        Set `type` to `"numericValue"`.

        `numericValue` number
        :   ​

    `labels` array of string
    :   ​

    `links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
    :   ​

        Fields of `Link`

        `title` string
        :   ​

        `url` string
        :   ​

    `createdAt` string (date-time)
    :   ​

    `updatedAt` string (date-time)
    :   ​

    `assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
    :   Map from asset RIDs to their data scopes

        Fields of `DataScopes`

        `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
        :   ​

            Fields of `DataScope`

            `dataScopeName` string
            :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

            `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
            :   ​

                **dataset**

                Set `type` to `"dataset"`.

                `dataset` string (RID)
                :   ​

                **connection**

                Set `type` to `"connection"`.

                `connection` string (RID)
                :   ​

                **logSet**

                Set `type` to `"logSet"`.

                `logSet` string (RID)
                :   ​

                **video**

                Set `type` to `"video"`.

                `video` string (RID)
                :   ​

                **spatial**

                Set `type` to `"spatial"`.

                `spatial` string (RID)
                :   ​

            `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
            :   ​

                Fields of `Duration`

                `seconds` integer (int64)
                :   ​

                `nanos` integer (int64)
                :   ​

            `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
            :   ​

                Values of `WeakTimestampType`

                `ABSOLUTE`
                :   ​

                `RELATIVE`
                :   ​

                `PENDING`
                :   ​

            `seriesTags` map of `TagName` to string
            :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

    `assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
    :   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

    `dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
    :   Map from refnames to run data sources. Will be empty for multi-asset runs.

        Fields of `RunDataSource`

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   This 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.

        `refName` string
        :   Included for convenience, duplicated from the key of the map

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

        `seriesTags` map of `TagName` to string
        :   Used to resolve logical series for this data source.

    `attachments` array of string (RID)
    :   ​

    `asset` string (RID) deprecated
    :   **Deprecated:** Use assets

    `assets` array of string (RID)
    :   ​

    `isArchived` boolean
    :   ​

    `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
    :   When absent, defaults to UNLOCKED for back-compat.

        Values of `LockStatus`

        `LOCKED`
        :   ​

        `UNLOCKED`
        :   ​

`dataReviewMetrics` [`DataReviewMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewmetrics)
:   ​

    Fields of `DataReviewMetrics`

    `checks` [`DataReviewCheckMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewcheckmetrics)
    :   ​

        Fields of `DataReviewCheckMetrics`

        `pendingExecution` integer
        :   ​

        `executing` integer
        :   ​

        `passingAutomatic` integer
        :   ​

        `pendingReview` integer
        :   ​

        `closedWithIgnore` integer
        :   ​

        `closedWithFurtherAction` integer
        :   ​

        `failedToExecutePendingReview` integer
        :   ​

        `failedToExecuteClosedWithIgnore` integer
        :   ​

        `failedToExecuteClosedWithFurtherAction` integer
        :   ​

    `alerts` [`DataReviewAlertMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewalertmetrics)
    :   ​

        Fields of `DataReviewAlertMetrics`

        `pendingReview` integer
        :   ​

        `closedWithIgnore` integer
        :   ​

        `closedWithFurtherAction` integer
        :   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-metrics" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`rid` string (RID) required
:   ​

Response

`run` [`Run`](https://dev.nominal.io/api/rest/run-service.md#run)
:   ​

    Fields of `Run`

    `rid` string (RID)
    :   ​

    `runNumber` integer (int64)
    :   ​

    `runPrefix` string
    :   ​

    `title` string
    :   ​

    `description` string
    :   ​

    `authorRid` string (RID)
    :   ​

    `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64)
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

    `properties` map of `PropertyName` to string deprecated
    :   **Deprecated:** use typedProperties

    `typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
    :   ​

        **stringValue**

        Set `type` to `"stringValue"`.

        `stringValue` string
        :   ​

        **numericValue**

        Set `type` to `"numericValue"`.

        `numericValue` number
        :   ​

    `labels` array of string
    :   ​

    `links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
    :   ​

        Fields of `Link`

        `title` string
        :   ​

        `url` string
        :   ​

    `createdAt` string (date-time)
    :   ​

    `updatedAt` string (date-time)
    :   ​

    `assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
    :   Map from asset RIDs to their data scopes

        Fields of `DataScopes`

        `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
        :   ​

            Fields of `DataScope`

            `dataScopeName` string
            :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

            `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
            :   ​

                **dataset**

                Set `type` to `"dataset"`.

                `dataset` string (RID)
                :   ​

                **connection**

                Set `type` to `"connection"`.

                `connection` string (RID)
                :   ​

                **logSet**

                Set `type` to `"logSet"`.

                `logSet` string (RID)
                :   ​

                **video**

                Set `type` to `"video"`.

                `video` string (RID)
                :   ​

                **spatial**

                Set `type` to `"spatial"`.

                `spatial` string (RID)
                :   ​

            `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
            :   ​

                Fields of `Duration`

                `seconds` integer (int64)
                :   ​

                `nanos` integer (int64)
                :   ​

            `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
            :   ​

                Values of `WeakTimestampType`

                `ABSOLUTE`
                :   ​

                `RELATIVE`
                :   ​

                `PENDING`
                :   ​

            `seriesTags` map of `TagName` to string
            :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

    `assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
    :   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

    `dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
    :   Map from refnames to run data sources. Will be empty for multi-asset runs.

        Fields of `RunDataSource`

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   This 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.

        `refName` string
        :   Included for convenience, duplicated from the key of the map

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

        `seriesTags` map of `TagName` to string
        :   Used to resolve logical series for this data source.

    `attachments` array of string (RID)
    :   ​

    `asset` string (RID) deprecated
    :   **Deprecated:** Use assets

    `assets` array of string (RID)
    :   ​

    `isArchived` boolean
    :   ​

    `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
    :   When absent, defaults to UNLOCKED for back-compat.

        Values of `LockStatus`

        `LOCKED`
        :   ​

        `UNLOCKED`
        :   ​

`dataReviewSummary` [`RunDataReviewSummary`](https://dev.nominal.io/api/rest/run-service.md#rundatareviewsummary)
:   ​

    Fields of `RunDataReviewSummary`

    `evaluationStatus` [`RunDataReviewEvaluationStatus`](https://dev.nominal.io/api/rest/run-service.md#rundatareviewevaluationstatus)
    :   ​

        Values of `RunDataReviewEvaluationStatus`

        `NO_CHECKS_APPLIED`
        :   ​

        `FAILED_TO_EXECUTE`
        :   ​

        `EXECUTING`
        :   ​

        `PENDING_EXECUTION`
        :   ​

        `CLOSED_WITH_FURTHER_ACTION`
        :   ​

        `GENERATED_ALERTS`
        :   ​

        `CLOSED_WITH_IGNORE`
        :   ​

        `PASSING`
        :   ​

    `totalIssueCount` integer
    :   ​

    `reviewedIssueCount` integer
    :   ​

    `issuesWithFurtherActionCount` integer
    :   ​

    `executionErrorCount` integer
    :   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v1/run/<rid>/with-data-review-summary" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`runNumber` integer (int64) required
:   ​

`runPrefix` string
:   ​

`workspace` string (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

`rid` string (RID)
:   ​

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`title` string
:   ​

`description` string
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64)
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string
    :   ​

`createdAt` string (date-time)
:   ​

`updatedAt` string (date-time)
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

    Fields of `DataScopes`

    `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
    :   ​

        Fields of `DataScope`

        `dataScopeName` string
        :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

            Values of `WeakTimestampType`

            `ABSOLUTE`
            :   ​

            `RELATIVE`
            :   ​

            `PENDING`
            :   ​

        `seriesTags` map of `TagName` to string
        :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

    Fields of `RunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
    :   ​

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   This 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.

    `refName` string
    :   Included for convenience, duplicated from the key of the map

    `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
    :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When absent, defaults to UNLOCKED for back-compat.

    Values of `LockStatus`

    `LOCKED`
    :   ​

    `UNLOCKED`
    :   ​

Request

**curl**

```shell
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
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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`](https://dev.nominal.io/api/rest/run-service.md#run).

Fields of `Run`

`rid` string (RID)
:   ​

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`title` string
:   ​

`description` string
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64)
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string
    :   ​

`createdAt` string (date-time)
:   ​

`updatedAt` string (date-time)
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

    Fields of `DataScopes`

    `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
    :   ​

        Fields of `DataScope`

        `dataScopeName` string
        :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

            Values of `WeakTimestampType`

            `ABSOLUTE`
            :   ​

            `RELATIVE`
            :   ​

            `PENDING`
            :   ​

        `seriesTags` map of `TagName` to string
        :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

    Fields of `RunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
    :   ​

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   This 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.

    `refName` string
    :   Included for convenience, duplicated from the key of the map

    `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
    :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When absent, defaults to UNLOCKED for back-compat.

    Values of `LockStatus`

    `LOCKED`
    :   ​

    `UNLOCKED`
    :   ​

Request

**curl**

```shell
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>"
]'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "<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

`asset` string (RID) required
:   ​

`nextPageToken` string (UUID)
:   ​

Response

`results` array of [`Run`](https://dev.nominal.io/api/rest/run-service.md#run)
:   ​

    Fields of `Run`

    `rid` string (RID)
    :   ​

    `runNumber` integer (int64)
    :   ​

    `runPrefix` string
    :   ​

    `title` string
    :   ​

    `description` string
    :   ​

    `authorRid` string (RID)
    :   ​

    `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64)
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

    `properties` map of `PropertyName` to string deprecated
    :   **Deprecated:** use typedProperties

    `typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
    :   ​

        **stringValue**

        Set `type` to `"stringValue"`.

        `stringValue` string
        :   ​

        **numericValue**

        Set `type` to `"numericValue"`.

        `numericValue` number
        :   ​

    `labels` array of string
    :   ​

    `links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
    :   ​

        Fields of `Link`

        `title` string
        :   ​

        `url` string
        :   ​

    `createdAt` string (date-time)
    :   ​

    `updatedAt` string (date-time)
    :   ​

    `assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
    :   Map from asset RIDs to their data scopes

        Fields of `DataScopes`

        `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
        :   ​

            Fields of `DataScope`

            `dataScopeName` string
            :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

            `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
            :   ​

                **dataset**

                Set `type` to `"dataset"`.

                `dataset` string (RID)
                :   ​

                **connection**

                Set `type` to `"connection"`.

                `connection` string (RID)
                :   ​

                **logSet**

                Set `type` to `"logSet"`.

                `logSet` string (RID)
                :   ​

                **video**

                Set `type` to `"video"`.

                `video` string (RID)
                :   ​

                **spatial**

                Set `type` to `"spatial"`.

                `spatial` string (RID)
                :   ​

            `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
            :   ​

                Fields of `Duration`

                `seconds` integer (int64)
                :   ​

                `nanos` integer (int64)
                :   ​

            `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
            :   ​

                Values of `WeakTimestampType`

                `ABSOLUTE`
                :   ​

                `RELATIVE`
                :   ​

                `PENDING`
                :   ​

            `seriesTags` map of `TagName` to string
            :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

    `assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
    :   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

    `dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
    :   Map from refnames to run data sources. Will be empty for multi-asset runs.

        Fields of `RunDataSource`

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   This 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.

        `refName` string
        :   Included for convenience, duplicated from the key of the map

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

        `seriesTags` map of `TagName` to string
        :   Used to resolve logical series for this data source.

    `attachments` array of string (RID)
    :   ​

    `asset` string (RID) deprecated
    :   **Deprecated:** Use assets

    `assets` array of string (RID)
    :   ​

    `isArchived` boolean
    :   ​

    `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
    :   When absent, defaults to UNLOCKED for back-compat.

        Values of `LockStatus`

        `LOCKED`
        :   ​

        `UNLOCKED`
        :   ​

`nextPageToken` string (UUID)
:   ​

Request

**curl**

```shell
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>"
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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`](https://dev.nominal.io/api/rest/run-service.md#run).

Fields of `Run`

`rid` string (RID)
:   ​

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`title` string
:   ​

`description` string
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

    Fields of `UtcTimestamp`

    `secondsSinceEpoch` integer (int64)
    :   ​

    `offsetNanoseconds` integer (int64)
    :   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

    Fields of `Link`

    `title` string
    :   ​

    `url` string
    :   ​

`createdAt` string (date-time)
:   ​

`updatedAt` string (date-time)
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

    Fields of `DataScopes`

    `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
    :   ​

        Fields of `DataScope`

        `dataScopeName` string
        :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

            **dataset**

            Set `type` to `"dataset"`.

            `dataset` string (RID)
            :   ​

            **connection**

            Set `type` to `"connection"`.

            `connection` string (RID)
            :   ​

            **logSet**

            Set `type` to `"logSet"`.

            `logSet` string (RID)
            :   ​

            **video**

            Set `type` to `"video"`.

            `video` string (RID)
            :   ​

            **spatial**

            Set `type` to `"spatial"`.

            `spatial` string (RID)
            :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   ​

            Fields of `Duration`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

            Values of `WeakTimestampType`

            `ABSOLUTE`
            :   ​

            `RELATIVE`
            :   ​

            `PENDING`
            :   ​

        `seriesTags` map of `TagName` to string
        :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

    Fields of `RunDataSource`

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
    :   ​

    `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
    :   This 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.

    `refName` string
    :   Included for convenience, duplicated from the key of the map

    `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
    :   ​

    `seriesTags` map of `TagName` to string
    :   Used to resolve logical series for this data source.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When absent, defaults to UNLOCKED for back-compat.

    Values of `LockStatus`

    `LOCKED`
    :   ​

    `UNLOCKED`
    :   ​

Request

**curl**

```shell
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>"
]'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "<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

`workspaces` array 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

`properties` map of `PropertyName` to array of string
:   ​

`labels` array of string
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v1/all-runs-properties-labels" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`sort` [`SortOptions`](https://dev.nominal.io/api/rest/run-service.md#sortoptions) required
:   ​

    Fields of `SortOptions`

    `isDescending` boolean required
    :   ​

    `field` [`SortField`](https://dev.nominal.io/api/rest/run-service.md#sortfield) deprecated
    :   **Deprecated:** use SortKey with SortField union type instead

        Values of `SortField`

        `NAME`
        :   ​

        `ID`
        :   ​

        `CREATED_AT`
        :   ​

        `START_TIME`
        :   ​

        `END_TIME`
        :   ​

        `PENDING_CHECK_ALERTS`
        :   ​

    `sortKey` [`SortKey`](https://dev.nominal.io/api/rest/run-service.md#sortkey)
    :   Field to sort by. Includes both field and property-based sorting.

        **field**

        Set `type` to `"field"`.

        `field` [`SortField`](https://dev.nominal.io/api/rest/run-service.md#sortfield)
        :   ​

        **property**

        Set `type` to `"property"`.

        `property` [`SortProperty`](https://dev.nominal.io/api/rest/run-service.md#sortproperty)
        :   Sort by a property value. Requires a property name, and will always sort null values last.

            Fields of `SortProperty`

            `name` string required
            :   ​

        **numericProperty**

        Set `type` to `"numericProperty"`.

        `numericProperty` [`SortProperty`](https://dev.nominal.io/api/rest/run-service.md#sortproperty)
        :   Sort by a numeric property value. String-valued and missing properties are null and always sort last.

    `additionalSortKeys` array of [`SortKeyWithDirection`](https://dev.nominal.io/api/rest/run-service.md#sortkeywithdirection)
    :   Optional 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 `SortKeyWithDirection`

        `sortKey` [`SortKey`](https://dev.nominal.io/api/rest/run-service.md#sortkey) required
        :   ​

        `isDescending` boolean required
        :   ​

`pageSize` integer required
:   Maximum page size is 10000 for searchRuns, and 1000 for searchRunsWithDataReviewMetrics and searchRunsWithDataReviewSummary. Larger page sizes are rejected.

`nextPageToken` string
:   ​

`query` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery) required
:   ​

    **startTimeInclusive**

    Set `type` to `"startTimeInclusive"`.

    `startTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
    :   **Deprecated:** Use startTime instead

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64) required
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    **startTime**

    Set `type` to `"startTime"`.

    `startTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

        **custom**

        Set `type` to `"custom"`.

        `custom` [`CustomTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#customtimeframefilter)
        :   ​

            Fields of `CustomTimeframeFilter`

            `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
            :   ​

            `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
            :   ​

        **preset**

        Set `type` to `"preset"`.

        `preset` [`PresetTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#presettimeframefilter)
        :   ​

            Fields of `PresetTimeframeFilter`

            `duration` [`PresetTimeframeDuration`](https://dev.nominal.io/api/rest/run-service.md#presettimeframeduration) required
            :   ​

                Values of `PresetTimeframeDuration`

                `ALL_TIME`
                :   ​

                `LAST_DAY`
                :   ​

                `LAST_WEEK`
                :   ​

                `LAST_MONTH`
                :   ​

                `LAST_YEAR`
                :   ​

    **endTimeInclusive**

    Set `type` to `"endTimeInclusive"`.

    `endTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
    :   **Deprecated:** Use endTime instead

    **endTime**

    Set `type` to `"endTime"`.

    `endTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

    **timeRange**

    Set `type` to `"timeRange"`.

    `timeRange` [`TimeRangeFilter`](https://dev.nominal.io/api/rest/run-service.md#timerangefilter)
    :   ​

        Fields of `TimeRangeFilter`

        `start` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

        `end` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

    **createdAt**

    Set `type` to `"createdAt"`.

    `createdAt` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

    **exactMatch**

    Set `type` to `"exactMatch"`.

    `exactMatch` string
    :   Performs case insensitive exact substring match search on the title.

    **searchText**

    Set `type` to `"searchText"`.

    `searchText` string
    :   ​

    **asset**

    Set `type` to `"asset"`.

    `asset` string (RID) deprecated
    :   **Deprecated:** Use getRunsByAsset rather than text-based search

    **assets**

    Set `type` to `"assets"`.

    `assets` [`AssetsFilter`](https://dev.nominal.io/api/rest/run-service.md#assetsfilter)
    :   ​

        Fields of `AssetsFilter`

        `assets` array of string (RID)
        :   ​

    **isSingleAsset**

    Set `type` to `"isSingleAsset"`.

    `isSingleAsset` boolean
    :   Search for either only single-asset runs (true), or only multi-asset runs (false).

    **label**

    Set `type` to `"label"`.

    `label` string deprecated
    :   **Deprecated:** use labels instead

    **labels**

    Set `type` to `"labels"`.

    `labels` [`LabelsFilter`](https://dev.nominal.io/api/rest/run-service.md#labelsfilter)
    :   ​

        Fields of `LabelsFilter`

        `operator` [`SetOperator`](https://dev.nominal.io/api/rest/run-service.md#setoperator) required
        :   ​

            Values of `SetOperator`

            `AND`
            :   ​

            `OR`
            :   ​

        `labels` array of string
        :   ​

    **property**

    Set `type` to `"property"`.

    `property` [`Property`](https://dev.nominal.io/api/rest/run-service.md#property) deprecated
    :   **Deprecated:** use properties

        Fields of `Property`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **propertyKey**

    Set `type` to `"propertyKey"`.

    `propertyKey` string
    :   Matches runs that have a property with this key, regardless of value.

    **properties**

    Set `type` to `"properties"`.

    `properties` [`PropertiesFilter`](https://dev.nominal.io/api/rest/run-service.md#propertiesfilter)
    :   ​

        Fields of `PropertiesFilter`

        `name` string required
        :   ​

        `values` array of string
        :   ​

    **numericProperty**

    Set `type` to `"numericProperty"`.

    `numericProperty` [`NumericPropertyPredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertypredicate)
    :   Matches runs using a numeric property comparison.

        Fields of `NumericPropertyPredicate`

        `name` string required
        :   ​

        `value` number required
        :   ​

        `operator` [`PropertyComparisonOperator`](https://dev.nominal.io/api/rest/run-service.md#propertycomparisonoperator) required
        :   ​

            Values of `PropertyComparisonOperator`

            `EQ`
            :   ​

            `NEQ`
            :   ​

            `GT`
            :   ​

            `GTE`
            :   ​

            `LT`
            :   ​

            `LTE`
            :   ​

    **numericPropertyRange**

    Set `type` to `"numericPropertyRange"`.

    `numericPropertyRange` [`NumericPropertyRangePredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangepredicate)
    :   Matches runs using an inclusive numeric property range.

        Fields of `NumericPropertyRangePredicate`

        `name` string required
        :   ​

        `min` number
        :   ​

        `max` number
        :   ​

        `operator` [`NumericPropertyRangeOperator`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangeoperator) required
        :   ​

            Values of `NumericPropertyRangeOperator`

            `BETWEEN`
            :   ​

            `NOT_BETWEEN`
            :   ​

    **dataSourceSeriesTag**

    Set `type` to `"dataSourceSeriesTag"`.

    `dataSourceSeriesTag` [`DataSourceSeriesTag`](https://dev.nominal.io/api/rest/run-service.md#datasourceseriestag)
    :   ​

        Fields of `DataSourceSeriesTag`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **dataSourceRefName**

    Set `type` to `"dataSourceRefName"`.

    `dataSourceRefName` string
    :   ​

    **dataSource**

    Set `type` to `"dataSource"`.

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
    :   **Deprecated:** Use dataSourceRefName, rather than searching directly by DataSource.

        **dataset**

        Set `type` to `"dataset"`.

        `dataset` string (RID)
        :   ​

        **connection**

        Set `type` to `"connection"`.

        `connection` string (RID)
        :   ​

        **logSet**

        Set `type` to `"logSet"`.

        `logSet` string (RID)
        :   ​

        **video**

        Set `type` to `"video"`.

        `video` string (RID)
        :   ​

        **spatial**

        Set `type` to `"spatial"`.

        `spatial` string (RID)
        :   ​

    **runNumber**

    Set `type` to `"runNumber"`.

    `runNumber` integer (int64)
    :   ​

    **runPrefix**

    Set `type` to `"runPrefix"`.

    `runPrefix` string
    :   ​

    **checkAlertStatesFilter**

    Set `type` to `"checkAlertStatesFilter"`.

    `checkAlertStatesFilter` [`CheckAlertStatesFilter`](https://dev.nominal.io/api/rest/run-service.md#checkalertstatesfilter)
    :   Search for runs where its aggregated check alert satisfy a given operator and threshold.

        Fields of `CheckAlertStatesFilter`

        `checkAlertState` [`CheckAlertState`](https://dev.nominal.io/api/rest/run-service.md#checkalertstate) required
        :   ​

            **pendingReview**

            Set `type` to `"pendingReview"`.

            `pendingReview` [`PendingReviewAlertState`](https://dev.nominal.io/api/rest/run-service.md#pendingreviewalertstate)
            :   ​

            **closedWithFurtherAction**

            Set `type` to `"closedWithFurtherAction"`.

            `closedWithFurtherAction` [`ClosedWithFurtherActionAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithfurtheractionalertstate)
            :   ​

                Fields of `ClosedWithFurtherActionAlertState`

                `comment` string required
                :   ​

                `closedBy` string (RID) required
                :   ​

            **closedWithIgnore**

            Set `type` to `"closedWithIgnore"`.

            `closedWithIgnore` [`ClosedWithIgnoreAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithignorealertstate)
            :   ​

                Fields of `ClosedWithIgnoreAlertState`

                `comment` string required
                :   ​

                `closedBy` string (RID) required
                :   ​

        `operator` [`Operator`](https://dev.nominal.io/api/rest/run-service.md#operator) required
        :   ​

            Values of `Operator`

            `LEQ`
            :   ​

            `LT`
            :   ​

            `GEQ`
            :   ​

            `GT`
            :   ​

            `EQ`
            :   ​

        `threshold` integer (int64) required
        :   ​

    **archived**

    Set `type` to `"archived"`.

    `archived` boolean
    :   ​

    **and**

    Set `type` to `"and"`.

    `and` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **or**

    Set `type` to `"or"`.

    `or` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **not**

    Set `type` to `"not"`.

    `not` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **workspace**

    Set `type` to `"workspace"`.

    `workspace` string (RID)
    :   ​

    **lockStatus**

    Set `type` to `"lockStatus"`.

    `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
    :   ​

        Values of `LockStatus`

        `LOCKED`
        :   ​

        `UNLOCKED`
        :   ​

    **datasetRids**

    Set `type` to `"datasetRids"`.

    `datasetRids` array 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.

`archivedStatuses` array of [`ArchivedStatus`](https://dev.nominal.io/api/rest/run-service.md#archivedstatus) deprecated
:   Default 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 `ArchivedStatus`

    `NOT_ARCHIVED`
    :   ​

    `ARCHIVED`
    :   ​

`includeMatchCount` boolean
:   When 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

`results` array of [`Run`](https://dev.nominal.io/api/rest/run-service.md#run)
:   ​

    Fields of `Run`

    `rid` string (RID)
    :   ​

    `runNumber` integer (int64)
    :   ​

    `runPrefix` string
    :   ​

    `title` string
    :   ​

    `description` string
    :   ​

    `authorRid` string (RID)
    :   ​

    `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64)
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
    :   ​

    `properties` map of `PropertyName` to string deprecated
    :   **Deprecated:** use typedProperties

    `typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
    :   ​

        **stringValue**

        Set `type` to `"stringValue"`.

        `stringValue` string
        :   ​

        **numericValue**

        Set `type` to `"numericValue"`.

        `numericValue` number
        :   ​

    `labels` array of string
    :   ​

    `links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
    :   ​

        Fields of `Link`

        `title` string
        :   ​

        `url` string
        :   ​

    `createdAt` string (date-time)
    :   ​

    `updatedAt` string (date-time)
    :   ​

    `assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
    :   Map from asset RIDs to their data scopes

        Fields of `DataScopes`

        `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
        :   ​

            Fields of `DataScope`

            `dataScopeName` string
            :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

            `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
            :   ​

                **dataset**

                Set `type` to `"dataset"`.

                `dataset` string (RID)
                :   ​

                **connection**

                Set `type` to `"connection"`.

                `connection` string (RID)
                :   ​

                **logSet**

                Set `type` to `"logSet"`.

                `logSet` string (RID)
                :   ​

                **video**

                Set `type` to `"video"`.

                `video` string (RID)
                :   ​

                **spatial**

                Set `type` to `"spatial"`.

                `spatial` string (RID)
                :   ​

            `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
            :   ​

                Fields of `Duration`

                `seconds` integer (int64)
                :   ​

                `nanos` integer (int64)
                :   ​

            `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
            :   ​

                Values of `WeakTimestampType`

                `ABSOLUTE`
                :   ​

                `RELATIVE`
                :   ​

                `PENDING`
                :   ​

            `seriesTags` map of `TagName` to string
            :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

    `assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
    :   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

    `dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
    :   Map from refnames to run data sources. Will be empty for multi-asset runs.

        Fields of `RunDataSource`

        `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
        :   ​

        `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
        :   This 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.

        `refName` string
        :   Included for convenience, duplicated from the key of the map

        `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
        :   ​

        `seriesTags` map of `TagName` to string
        :   Used to resolve logical series for this data source.

    `attachments` array of string (RID)
    :   ​

    `asset` string (RID) deprecated
    :   **Deprecated:** Use assets

    `assets` array of string (RID)
    :   ​

    `isArchived` boolean
    :   ​

    `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
    :   When absent, defaults to UNLOCKED for back-compat.

        Values of `LockStatus`

        `LOCKED`
        :   ​

        `UNLOCKED`
        :   ​

`nextPageToken` string
:   ​

`totalCount` integer
:   The number of runs matching the query, workspace, and archived filters. Present only when includeMatchCount was set to true on the request.

Request

**curl**

```shell
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
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`sort` [`SortOptions`](https://dev.nominal.io/api/rest/run-service.md#sortoptions) required
:   ​

    Fields of `SortOptions`

    `isDescending` boolean required
    :   ​

    `field` [`SortField`](https://dev.nominal.io/api/rest/run-service.md#sortfield) deprecated
    :   **Deprecated:** use SortKey with SortField union type instead

        Values of `SortField`

        `NAME`
        :   ​

        `ID`
        :   ​

        `CREATED_AT`
        :   ​

        `START_TIME`
        :   ​

        `END_TIME`
        :   ​

        `PENDING_CHECK_ALERTS`
        :   ​

    `sortKey` [`SortKey`](https://dev.nominal.io/api/rest/run-service.md#sortkey)
    :   Field to sort by. Includes both field and property-based sorting.

        **field**

        Set `type` to `"field"`.

        `field` [`SortField`](https://dev.nominal.io/api/rest/run-service.md#sortfield)
        :   ​

        **property**

        Set `type` to `"property"`.

        `property` [`SortProperty`](https://dev.nominal.io/api/rest/run-service.md#sortproperty)
        :   Sort by a property value. Requires a property name, and will always sort null values last.

            Fields of `SortProperty`

            `name` string required
            :   ​

        **numericProperty**

        Set `type` to `"numericProperty"`.

        `numericProperty` [`SortProperty`](https://dev.nominal.io/api/rest/run-service.md#sortproperty)
        :   Sort by a numeric property value. String-valued and missing properties are null and always sort last.

    `additionalSortKeys` array of [`SortKeyWithDirection`](https://dev.nominal.io/api/rest/run-service.md#sortkeywithdirection)
    :   Optional 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 `SortKeyWithDirection`

        `sortKey` [`SortKey`](https://dev.nominal.io/api/rest/run-service.md#sortkey) required
        :   ​

        `isDescending` boolean required
        :   ​

`pageSize` integer required
:   Maximum page size is 10000 for searchRuns, and 1000 for searchRunsWithDataReviewMetrics and searchRunsWithDataReviewSummary. Larger page sizes are rejected.

`nextPageToken` string
:   ​

`query` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery) required
:   ​

    **startTimeInclusive**

    Set `type` to `"startTimeInclusive"`.

    `startTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
    :   **Deprecated:** Use startTime instead

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64) required
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    **startTime**

    Set `type` to `"startTime"`.

    `startTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

        **custom**

        Set `type` to `"custom"`.

        `custom` [`CustomTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#customtimeframefilter)
        :   ​

            Fields of `CustomTimeframeFilter`

            `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
            :   ​

            `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
            :   ​

        **preset**

        Set `type` to `"preset"`.

        `preset` [`PresetTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#presettimeframefilter)
        :   ​

            Fields of `PresetTimeframeFilter`

            `duration` [`PresetTimeframeDuration`](https://dev.nominal.io/api/rest/run-service.md#presettimeframeduration) required
            :   ​

                Values of `PresetTimeframeDuration`

                `ALL_TIME`
                :   ​

                `LAST_DAY`
                :   ​

                `LAST_WEEK`
                :   ​

                `LAST_MONTH`
                :   ​

                `LAST_YEAR`
                :   ​

    **endTimeInclusive**

    Set `type` to `"endTimeInclusive"`.

    `endTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
    :   **Deprecated:** Use endTime instead

    **endTime**

    Set `type` to `"endTime"`.

    `endTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

    **timeRange**

    Set `type` to `"timeRange"`.

    `timeRange` [`TimeRangeFilter`](https://dev.nominal.io/api/rest/run-service.md#timerangefilter)
    :   ​

        Fields of `TimeRangeFilter`

        `start` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

        `end` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

    **createdAt**

    Set `type` to `"createdAt"`.

    `createdAt` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

    **exactMatch**

    Set `type` to `"exactMatch"`.

    `exactMatch` string
    :   Performs case insensitive exact substring match search on the title.

    **searchText**

    Set `type` to `"searchText"`.

    `searchText` string
    :   ​

    **asset**

    Set `type` to `"asset"`.

    `asset` string (RID) deprecated
    :   **Deprecated:** Use getRunsByAsset rather than text-based search

    **assets**

    Set `type` to `"assets"`.

    `assets` [`AssetsFilter`](https://dev.nominal.io/api/rest/run-service.md#assetsfilter)
    :   ​

        Fields of `AssetsFilter`

        `assets` array of string (RID)
        :   ​

    **isSingleAsset**

    Set `type` to `"isSingleAsset"`.

    `isSingleAsset` boolean
    :   Search for either only single-asset runs (true), or only multi-asset runs (false).

    **label**

    Set `type` to `"label"`.

    `label` string deprecated
    :   **Deprecated:** use labels instead

    **labels**

    Set `type` to `"labels"`.

    `labels` [`LabelsFilter`](https://dev.nominal.io/api/rest/run-service.md#labelsfilter)
    :   ​

        Fields of `LabelsFilter`

        `operator` [`SetOperator`](https://dev.nominal.io/api/rest/run-service.md#setoperator) required
        :   ​

            Values of `SetOperator`

            `AND`
            :   ​

            `OR`
            :   ​

        `labels` array of string
        :   ​

    **property**

    Set `type` to `"property"`.

    `property` [`Property`](https://dev.nominal.io/api/rest/run-service.md#property) deprecated
    :   **Deprecated:** use properties

        Fields of `Property`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **propertyKey**

    Set `type` to `"propertyKey"`.

    `propertyKey` string
    :   Matches runs that have a property with this key, regardless of value.

    **properties**

    Set `type` to `"properties"`.

    `properties` [`PropertiesFilter`](https://dev.nominal.io/api/rest/run-service.md#propertiesfilter)
    :   ​

        Fields of `PropertiesFilter`

        `name` string required
        :   ​

        `values` array of string
        :   ​

    **numericProperty**

    Set `type` to `"numericProperty"`.

    `numericProperty` [`NumericPropertyPredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertypredicate)
    :   Matches runs using a numeric property comparison.

        Fields of `NumericPropertyPredicate`

        `name` string required
        :   ​

        `value` number required
        :   ​

        `operator` [`PropertyComparisonOperator`](https://dev.nominal.io/api/rest/run-service.md#propertycomparisonoperator) required
        :   ​

            Values of `PropertyComparisonOperator`

            `EQ`
            :   ​

            `NEQ`
            :   ​

            `GT`
            :   ​

            `GTE`
            :   ​

            `LT`
            :   ​

            `LTE`
            :   ​

    **numericPropertyRange**

    Set `type` to `"numericPropertyRange"`.

    `numericPropertyRange` [`NumericPropertyRangePredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangepredicate)
    :   Matches runs using an inclusive numeric property range.

        Fields of `NumericPropertyRangePredicate`

        `name` string required
        :   ​

        `min` number
        :   ​

        `max` number
        :   ​

        `operator` [`NumericPropertyRangeOperator`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangeoperator) required
        :   ​

            Values of `NumericPropertyRangeOperator`

            `BETWEEN`
            :   ​

            `NOT_BETWEEN`
            :   ​

    **dataSourceSeriesTag**

    Set `type` to `"dataSourceSeriesTag"`.

    `dataSourceSeriesTag` [`DataSourceSeriesTag`](https://dev.nominal.io/api/rest/run-service.md#datasourceseriestag)
    :   ​

        Fields of `DataSourceSeriesTag`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **dataSourceRefName**

    Set `type` to `"dataSourceRefName"`.

    `dataSourceRefName` string
    :   ​

    **dataSource**

    Set `type` to `"dataSource"`.

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
    :   **Deprecated:** Use dataSourceRefName, rather than searching directly by DataSource.

        **dataset**

        Set `type` to `"dataset"`.

        `dataset` string (RID)
        :   ​

        **connection**

        Set `type` to `"connection"`.

        `connection` string (RID)
        :   ​

        **logSet**

        Set `type` to `"logSet"`.

        `logSet` string (RID)
        :   ​

        **video**

        Set `type` to `"video"`.

        `video` string (RID)
        :   ​

        **spatial**

        Set `type` to `"spatial"`.

        `spatial` string (RID)
        :   ​

    **runNumber**

    Set `type` to `"runNumber"`.

    `runNumber` integer (int64)
    :   ​

    **runPrefix**

    Set `type` to `"runPrefix"`.

    `runPrefix` string
    :   ​

    **checkAlertStatesFilter**

    Set `type` to `"checkAlertStatesFilter"`.

    `checkAlertStatesFilter` [`CheckAlertStatesFilter`](https://dev.nominal.io/api/rest/run-service.md#checkalertstatesfilter)
    :   Search for runs where its aggregated check alert satisfy a given operator and threshold.

        Fields of `CheckAlertStatesFilter`

        `checkAlertState` [`CheckAlertState`](https://dev.nominal.io/api/rest/run-service.md#checkalertstate) required
        :   ​

            **pendingReview**

            Set `type` to `"pendingReview"`.

            `pendingReview` [`PendingReviewAlertState`](https://dev.nominal.io/api/rest/run-service.md#pendingreviewalertstate)
            :   ​

            **closedWithFurtherAction**

            Set `type` to `"closedWithFurtherAction"`.

            `closedWithFurtherAction` [`ClosedWithFurtherActionAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithfurtheractionalertstate)
            :   ​

                Fields of `ClosedWithFurtherActionAlertState`

                `comment` string required
                :   ​

                `closedBy` string (RID) required
                :   ​

            **closedWithIgnore**

            Set `type` to `"closedWithIgnore"`.

            `closedWithIgnore` [`ClosedWithIgnoreAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithignorealertstate)
            :   ​

                Fields of `ClosedWithIgnoreAlertState`

                `comment` string required
                :   ​

                `closedBy` string (RID) required
                :   ​

        `operator` [`Operator`](https://dev.nominal.io/api/rest/run-service.md#operator) required
        :   ​

            Values of `Operator`

            `LEQ`
            :   ​

            `LT`
            :   ​

            `GEQ`
            :   ​

            `GT`
            :   ​

            `EQ`
            :   ​

        `threshold` integer (int64) required
        :   ​

    **archived**

    Set `type` to `"archived"`.

    `archived` boolean
    :   ​

    **and**

    Set `type` to `"and"`.

    `and` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **or**

    Set `type` to `"or"`.

    `or` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **not**

    Set `type` to `"not"`.

    `not` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **workspace**

    Set `type` to `"workspace"`.

    `workspace` string (RID)
    :   ​

    **lockStatus**

    Set `type` to `"lockStatus"`.

    `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
    :   ​

        Values of `LockStatus`

        `LOCKED`
        :   ​

        `UNLOCKED`
        :   ​

    **datasetRids**

    Set `type` to `"datasetRids"`.

    `datasetRids` array 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.

`archivedStatuses` array of [`ArchivedStatus`](https://dev.nominal.io/api/rest/run-service.md#archivedstatus) deprecated
:   Default 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 `ArchivedStatus`

    `NOT_ARCHIVED`
    :   ​

    `ARCHIVED`
    :   ​

`includeMatchCount` boolean
:   When 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

`results` array of [`RunWithDataReviewMetrics`](https://dev.nominal.io/api/rest/run-service.md#runwithdatareviewmetrics)
:   ​

    Fields of `RunWithDataReviewMetrics`

    `run` [`Run`](https://dev.nominal.io/api/rest/run-service.md#run)
    :   ​

        Fields of `Run`

        `rid` string (RID)
        :   ​

        `runNumber` integer (int64)
        :   ​

        `runPrefix` string
        :   ​

        `title` string
        :   ​

        `description` string
        :   ​

        `authorRid` string (RID)
        :   ​

        `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

            Fields of `UtcTimestamp`

            `secondsSinceEpoch` integer (int64)
            :   ​

            `offsetNanoseconds` integer (int64)
            :   ​

        `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

        `properties` map of `PropertyName` to string deprecated
        :   **Deprecated:** use typedProperties

        `typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
        :   ​

            **stringValue**

            Set `type` to `"stringValue"`.

            `stringValue` string
            :   ​

            **numericValue**

            Set `type` to `"numericValue"`.

            `numericValue` number
            :   ​

        `labels` array of string
        :   ​

        `links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
        :   ​

            Fields of `Link`

            `title` string
            :   ​

            `url` string
            :   ​

        `createdAt` string (date-time)
        :   ​

        `updatedAt` string (date-time)
        :   ​

        `assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
        :   Map from asset RIDs to their data scopes

            Fields of `DataScopes`

            `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
            :   ​

                Fields of `DataScope`

                `dataScopeName` string
                :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

                `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
                :   ​

                    **dataset**

                    Set `type` to `"dataset"`.

                    `dataset` string (RID)
                    :   ​

                    **connection**

                    Set `type` to `"connection"`.

                    `connection` string (RID)
                    :   ​

                    **logSet**

                    Set `type` to `"logSet"`.

                    `logSet` string (RID)
                    :   ​

                    **video**

                    Set `type` to `"video"`.

                    `video` string (RID)
                    :   ​

                    **spatial**

                    Set `type` to `"spatial"`.

                    `spatial` string (RID)
                    :   ​

                `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
                :   ​

                    Fields of `Duration`

                    `seconds` integer (int64)
                    :   ​

                    `nanos` integer (int64)
                    :   ​

                `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
                :   ​

                    Values of `WeakTimestampType`

                    `ABSOLUTE`
                    :   ​

                    `RELATIVE`
                    :   ​

                    `PENDING`
                    :   ​

                `seriesTags` map of `TagName` to string
                :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

        `assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
        :   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

        `dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
        :   Map from refnames to run data sources. Will be empty for multi-asset runs.

            Fields of `RunDataSource`

            `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
            :   ​

            `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
            :   This 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.

            `refName` string
            :   Included for convenience, duplicated from the key of the map

            `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
            :   ​

            `seriesTags` map of `TagName` to string
            :   Used to resolve logical series for this data source.

        `attachments` array of string (RID)
        :   ​

        `asset` string (RID) deprecated
        :   **Deprecated:** Use assets

        `assets` array of string (RID)
        :   ​

        `isArchived` boolean
        :   ​

        `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
        :   When absent, defaults to UNLOCKED for back-compat.

            Values of `LockStatus`

            `LOCKED`
            :   ​

            `UNLOCKED`
            :   ​

    `dataReviewMetrics` [`DataReviewMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewmetrics)
    :   ​

        Fields of `DataReviewMetrics`

        `checks` [`DataReviewCheckMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewcheckmetrics)
        :   ​

            Fields of `DataReviewCheckMetrics`

            `pendingExecution` integer
            :   ​

            `executing` integer
            :   ​

            `passingAutomatic` integer
            :   ​

            `pendingReview` integer
            :   ​

            `closedWithIgnore` integer
            :   ​

            `closedWithFurtherAction` integer
            :   ​

            `failedToExecutePendingReview` integer
            :   ​

            `failedToExecuteClosedWithIgnore` integer
            :   ​

            `failedToExecuteClosedWithFurtherAction` integer
            :   ​

        `alerts` [`DataReviewAlertMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewalertmetrics)
        :   ​

            Fields of `DataReviewAlertMetrics`

            `pendingReview` integer
            :   ​

            `closedWithIgnore` integer
            :   ​

            `closedWithFurtherAction` integer
            :   ​

`nextPageToken` string
:   ​

Request

**curl**

```shell
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
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`sort` [`SortOptions`](https://dev.nominal.io/api/rest/run-service.md#sortoptions) required
:   ​

    Fields of `SortOptions`

    `isDescending` boolean required
    :   ​

    `field` [`SortField`](https://dev.nominal.io/api/rest/run-service.md#sortfield) deprecated
    :   **Deprecated:** use SortKey with SortField union type instead

        Values of `SortField`

        `NAME`
        :   ​

        `ID`
        :   ​

        `CREATED_AT`
        :   ​

        `START_TIME`
        :   ​

        `END_TIME`
        :   ​

        `PENDING_CHECK_ALERTS`
        :   ​

    `sortKey` [`SortKey`](https://dev.nominal.io/api/rest/run-service.md#sortkey)
    :   Field to sort by. Includes both field and property-based sorting.

        **field**

        Set `type` to `"field"`.

        `field` [`SortField`](https://dev.nominal.io/api/rest/run-service.md#sortfield)
        :   ​

        **property**

        Set `type` to `"property"`.

        `property` [`SortProperty`](https://dev.nominal.io/api/rest/run-service.md#sortproperty)
        :   Sort by a property value. Requires a property name, and will always sort null values last.

            Fields of `SortProperty`

            `name` string required
            :   ​

        **numericProperty**

        Set `type` to `"numericProperty"`.

        `numericProperty` [`SortProperty`](https://dev.nominal.io/api/rest/run-service.md#sortproperty)
        :   Sort by a numeric property value. String-valued and missing properties are null and always sort last.

    `additionalSortKeys` array of [`SortKeyWithDirection`](https://dev.nominal.io/api/rest/run-service.md#sortkeywithdirection)
    :   Optional 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 `SortKeyWithDirection`

        `sortKey` [`SortKey`](https://dev.nominal.io/api/rest/run-service.md#sortkey) required
        :   ​

        `isDescending` boolean required
        :   ​

`pageSize` integer required
:   Maximum page size is 10000 for searchRuns, and 1000 for searchRunsWithDataReviewMetrics and searchRunsWithDataReviewSummary. Larger page sizes are rejected.

`nextPageToken` string
:   ​

`query` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery) required
:   ​

    **startTimeInclusive**

    Set `type` to `"startTimeInclusive"`.

    `startTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
    :   **Deprecated:** Use startTime instead

        Fields of `UtcTimestamp`

        `secondsSinceEpoch` integer (int64) required
        :   ​

        `offsetNanoseconds` integer (int64)
        :   ​

    **startTime**

    Set `type` to `"startTime"`.

    `startTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

        **custom**

        Set `type` to `"custom"`.

        `custom` [`CustomTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#customtimeframefilter)
        :   ​

            Fields of `CustomTimeframeFilter`

            `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
            :   ​

            `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
            :   ​

        **preset**

        Set `type` to `"preset"`.

        `preset` [`PresetTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#presettimeframefilter)
        :   ​

            Fields of `PresetTimeframeFilter`

            `duration` [`PresetTimeframeDuration`](https://dev.nominal.io/api/rest/run-service.md#presettimeframeduration) required
            :   ​

                Values of `PresetTimeframeDuration`

                `ALL_TIME`
                :   ​

                `LAST_DAY`
                :   ​

                `LAST_WEEK`
                :   ​

                `LAST_MONTH`
                :   ​

                `LAST_YEAR`
                :   ​

    **endTimeInclusive**

    Set `type` to `"endTimeInclusive"`.

    `endTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
    :   **Deprecated:** Use endTime instead

    **endTime**

    Set `type` to `"endTime"`.

    `endTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

    **timeRange**

    Set `type` to `"timeRange"`.

    `timeRange` [`TimeRangeFilter`](https://dev.nominal.io/api/rest/run-service.md#timerangefilter)
    :   ​

        Fields of `TimeRangeFilter`

        `start` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

        `end` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

    **createdAt**

    Set `type` to `"createdAt"`.

    `createdAt` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
    :   ​

    **exactMatch**

    Set `type` to `"exactMatch"`.

    `exactMatch` string
    :   Performs case insensitive exact substring match search on the title.

    **searchText**

    Set `type` to `"searchText"`.

    `searchText` string
    :   ​

    **asset**

    Set `type` to `"asset"`.

    `asset` string (RID) deprecated
    :   **Deprecated:** Use getRunsByAsset rather than text-based search

    **assets**

    Set `type` to `"assets"`.

    `assets` [`AssetsFilter`](https://dev.nominal.io/api/rest/run-service.md#assetsfilter)
    :   ​

        Fields of `AssetsFilter`

        `assets` array of string (RID)
        :   ​

    **isSingleAsset**

    Set `type` to `"isSingleAsset"`.

    `isSingleAsset` boolean
    :   Search for either only single-asset runs (true), or only multi-asset runs (false).

    **label**

    Set `type` to `"label"`.

    `label` string deprecated
    :   **Deprecated:** use labels instead

    **labels**

    Set `type` to `"labels"`.

    `labels` [`LabelsFilter`](https://dev.nominal.io/api/rest/run-service.md#labelsfilter)
    :   ​

        Fields of `LabelsFilter`

        `operator` [`SetOperator`](https://dev.nominal.io/api/rest/run-service.md#setoperator) required
        :   ​

            Values of `SetOperator`

            `AND`
            :   ​

            `OR`
            :   ​

        `labels` array of string
        :   ​

    **property**

    Set `type` to `"property"`.

    `property` [`Property`](https://dev.nominal.io/api/rest/run-service.md#property) deprecated
    :   **Deprecated:** use properties

        Fields of `Property`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **propertyKey**

    Set `type` to `"propertyKey"`.

    `propertyKey` string
    :   Matches runs that have a property with this key, regardless of value.

    **properties**

    Set `type` to `"properties"`.

    `properties` [`PropertiesFilter`](https://dev.nominal.io/api/rest/run-service.md#propertiesfilter)
    :   ​

        Fields of `PropertiesFilter`

        `name` string required
        :   ​

        `values` array of string
        :   ​

    **numericProperty**

    Set `type` to `"numericProperty"`.

    `numericProperty` [`NumericPropertyPredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertypredicate)
    :   Matches runs using a numeric property comparison.

        Fields of `NumericPropertyPredicate`

        `name` string required
        :   ​

        `value` number required
        :   ​

        `operator` [`PropertyComparisonOperator`](https://dev.nominal.io/api/rest/run-service.md#propertycomparisonoperator) required
        :   ​

            Values of `PropertyComparisonOperator`

            `EQ`
            :   ​

            `NEQ`
            :   ​

            `GT`
            :   ​

            `GTE`
            :   ​

            `LT`
            :   ​

            `LTE`
            :   ​

    **numericPropertyRange**

    Set `type` to `"numericPropertyRange"`.

    `numericPropertyRange` [`NumericPropertyRangePredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangepredicate)
    :   Matches runs using an inclusive numeric property range.

        Fields of `NumericPropertyRangePredicate`

        `name` string required
        :   ​

        `min` number
        :   ​

        `max` number
        :   ​

        `operator` [`NumericPropertyRangeOperator`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangeoperator) required
        :   ​

            Values of `NumericPropertyRangeOperator`

            `BETWEEN`
            :   ​

            `NOT_BETWEEN`
            :   ​

    **dataSourceSeriesTag**

    Set `type` to `"dataSourceSeriesTag"`.

    `dataSourceSeriesTag` [`DataSourceSeriesTag`](https://dev.nominal.io/api/rest/run-service.md#datasourceseriestag)
    :   ​

        Fields of `DataSourceSeriesTag`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **dataSourceRefName**

    Set `type` to `"dataSourceRefName"`.

    `dataSourceRefName` string
    :   ​

    **dataSource**

    Set `type` to `"dataSource"`.

    `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
    :   **Deprecated:** Use dataSourceRefName, rather than searching directly by DataSource.

        **dataset**

        Set `type` to `"dataset"`.

        `dataset` string (RID)
        :   ​

        **connection**

        Set `type` to `"connection"`.

        `connection` string (RID)
        :   ​

        **logSet**

        Set `type` to `"logSet"`.

        `logSet` string (RID)
        :   ​

        **video**

        Set `type` to `"video"`.

        `video` string (RID)
        :   ​

        **spatial**

        Set `type` to `"spatial"`.

        `spatial` string (RID)
        :   ​

    **runNumber**

    Set `type` to `"runNumber"`.

    `runNumber` integer (int64)
    :   ​

    **runPrefix**

    Set `type` to `"runPrefix"`.

    `runPrefix` string
    :   ​

    **checkAlertStatesFilter**

    Set `type` to `"checkAlertStatesFilter"`.

    `checkAlertStatesFilter` [`CheckAlertStatesFilter`](https://dev.nominal.io/api/rest/run-service.md#checkalertstatesfilter)
    :   Search for runs where its aggregated check alert satisfy a given operator and threshold.

        Fields of `CheckAlertStatesFilter`

        `checkAlertState` [`CheckAlertState`](https://dev.nominal.io/api/rest/run-service.md#checkalertstate) required
        :   ​

            **pendingReview**

            Set `type` to `"pendingReview"`.

            `pendingReview` [`PendingReviewAlertState`](https://dev.nominal.io/api/rest/run-service.md#pendingreviewalertstate)
            :   ​

            **closedWithFurtherAction**

            Set `type` to `"closedWithFurtherAction"`.

            `closedWithFurtherAction` [`ClosedWithFurtherActionAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithfurtheractionalertstate)
            :   ​

                Fields of `ClosedWithFurtherActionAlertState`

                `comment` string required
                :   ​

                `closedBy` string (RID) required
                :   ​

            **closedWithIgnore**

            Set `type` to `"closedWithIgnore"`.

            `closedWithIgnore` [`ClosedWithIgnoreAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithignorealertstate)
            :   ​

                Fields of `ClosedWithIgnoreAlertState`

                `comment` string required
                :   ​

                `closedBy` string (RID) required
                :   ​

        `operator` [`Operator`](https://dev.nominal.io/api/rest/run-service.md#operator) required
        :   ​

            Values of `Operator`

            `LEQ`
            :   ​

            `LT`
            :   ​

            `GEQ`
            :   ​

            `GT`
            :   ​

            `EQ`
            :   ​

        `threshold` integer (int64) required
        :   ​

    **archived**

    Set `type` to `"archived"`.

    `archived` boolean
    :   ​

    **and**

    Set `type` to `"and"`.

    `and` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **or**

    Set `type` to `"or"`.

    `or` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **not**

    Set `type` to `"not"`.

    `not` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
    :   ​

    **workspace**

    Set `type` to `"workspace"`.

    `workspace` string (RID)
    :   ​

    **lockStatus**

    Set `type` to `"lockStatus"`.

    `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
    :   ​

        Values of `LockStatus`

        `LOCKED`
        :   ​

        `UNLOCKED`
        :   ​

    **datasetRids**

    Set `type` to `"datasetRids"`.

    `datasetRids` array 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.

`archivedStatuses` array of [`ArchivedStatus`](https://dev.nominal.io/api/rest/run-service.md#archivedstatus) deprecated
:   Default 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 `ArchivedStatus`

    `NOT_ARCHIVED`
    :   ​

    `ARCHIVED`
    :   ​

`includeMatchCount` boolean
:   When 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

`results` array of [`RunWithDataReviewSummary`](https://dev.nominal.io/api/rest/run-service.md#runwithdatareviewsummary)
:   ​

    Fields of `RunWithDataReviewSummary`

    `run` [`Run`](https://dev.nominal.io/api/rest/run-service.md#run)
    :   ​

        Fields of `Run`

        `rid` string (RID)
        :   ​

        `runNumber` integer (int64)
        :   ​

        `runPrefix` string
        :   ​

        `title` string
        :   ​

        `description` string
        :   ​

        `authorRid` string (RID)
        :   ​

        `startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

            Fields of `UtcTimestamp`

            `secondsSinceEpoch` integer (int64)
            :   ​

            `offsetNanoseconds` integer (int64)
            :   ​

        `endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
        :   ​

        `properties` map of `PropertyName` to string deprecated
        :   **Deprecated:** use typedProperties

        `typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
        :   ​

            **stringValue**

            Set `type` to `"stringValue"`.

            `stringValue` string
            :   ​

            **numericValue**

            Set `type` to `"numericValue"`.

            `numericValue` number
            :   ​

        `labels` array of string
        :   ​

        `links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
        :   ​

            Fields of `Link`

            `title` string
            :   ​

            `url` string
            :   ​

        `createdAt` string (date-time)
        :   ​

        `updatedAt` string (date-time)
        :   ​

        `assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
        :   Map from asset RIDs to their data scopes

            Fields of `DataScopes`

            `dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
            :   ​

                Fields of `DataScope`

                `dataScopeName` string
                :   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

                `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
                :   ​

                    **dataset**

                    Set `type` to `"dataset"`.

                    `dataset` string (RID)
                    :   ​

                    **connection**

                    Set `type` to `"connection"`.

                    `connection` string (RID)
                    :   ​

                    **logSet**

                    Set `type` to `"logSet"`.

                    `logSet` string (RID)
                    :   ​

                    **video**

                    Set `type` to `"video"`.

                    `video` string (RID)
                    :   ​

                    **spatial**

                    Set `type` to `"spatial"`.

                    `spatial` string (RID)
                    :   ​

                `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
                :   ​

                    Fields of `Duration`

                    `seconds` integer (int64)
                    :   ​

                    `nanos` integer (int64)
                    :   ​

                `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
                :   ​

                    Values of `WeakTimestampType`

                    `ABSOLUTE`
                    :   ​

                    `RELATIVE`
                    :   ​

                    `PENDING`
                    :   ​

                `seriesTags` map of `TagName` to string
                :   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

        `assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
        :   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

        `dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
        :   Map from refnames to run data sources. Will be empty for multi-asset runs.

            Fields of `RunDataSource`

            `dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource)
            :   ​

            `offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
            :   This 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.

            `refName` string
            :   Included for convenience, duplicated from the key of the map

            `timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype)
            :   ​

            `seriesTags` map of `TagName` to string
            :   Used to resolve logical series for this data source.

        `attachments` array of string (RID)
        :   ​

        `asset` string (RID) deprecated
        :   **Deprecated:** Use assets

        `assets` array of string (RID)
        :   ​

        `isArchived` boolean
        :   ​

        `lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
        :   When absent, defaults to UNLOCKED for back-compat.

            Values of `LockStatus`

            `LOCKED`
            :   ​

            `UNLOCKED`
            :   ​

    `dataReviewSummary` [`RunDataReviewSummary`](https://dev.nominal.io/api/rest/run-service.md#rundatareviewsummary)
    :   ​

        Fields of `RunDataReviewSummary`

        `evaluationStatus` [`RunDataReviewEvaluationStatus`](https://dev.nominal.io/api/rest/run-service.md#rundatareviewevaluationstatus)
        :   ​

            Values of `RunDataReviewEvaluationStatus`

            `NO_CHECKS_APPLIED`
            :   ​

            `FAILED_TO_EXECUTE`
            :   ​

            `EXECUTING`
            :   ​

            `PENDING_EXECUTION`
            :   ​

            `CLOSED_WITH_FURTHER_ACTION`
            :   ​

            `GENERATED_ALERTS`
            :   ​

            `CLOSED_WITH_IGNORE`
            :   ​

            `PASSING`
            :   ​

        `totalIssueCount` integer
        :   ​

        `reviewedIssueCount` integer
        :   ​

        `issuesWithFurtherActionCount` integer
        :   ​

        `executionErrorCount` integer
        :   ​

`nextPageToken` string
:   ​

Request

**curl**

```shell
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
    }
  }
}'
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
{
  "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

`rid` string (RID) required
:   ​

Query parameters

`includeLinkedWorkbooks` boolean
:   If 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**

```shell
curl -X PUT "https://api.gov.nominal.io/api/scout/v1/archive-run/<rid>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
true
```

### Unarchive run

PUT `/scout/v1/unarchive-run/{rid}`

Path parameters

`rid` string (RID) required
:   ​

Query parameters

`includeLinkedWorkbooks` boolean
:   If 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**

```shell
curl -X PUT "https://api.gov.nominal.io/api/scout/v1/unarchive-run/<rid>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
true
```

### Archive runs

POST `/scout/v1/archive-run`

Body

`rids` array of string (RID)
:   ​

`includeLinkedWorkbooks` boolean
:   If 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**

```shell
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
}'
```

**requests**

```python
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()
```

**httpx**

```python
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()
```

**aiohttp**

```python
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

`rids` array of string (RID)
:   ​

`includeLinkedWorkbooks` boolean
:   If 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**

```shell
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
}'
```

**requests**

```python
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()
```

**httpx**

```python
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()
```

**aiohttp**

```python
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

`workspaces` array 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`](https://dev.nominal.io/api/rest/run-service.md#refnameandtype).

Fields of `RefNameAndType`

`name` string
:   ​

`type` [`DataSourceType`](https://dev.nominal.io/api/rest/run-service.md#datasourcetype)
:   ​

    Values of `DataSourceType`

    `DATASET`
    :   ​

    `CONNECTION`
    :   ​

    `LOGSET`
    :   ​

    `VIDEO`
    :   ​

    `SPATIAL`
    :   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/scout/v1/data-source-ref-names-and-types" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
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())
```

**httpx**

```python
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())
```

**aiohttp**

```python
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`

```json
[
  {
    "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

`rid` string (RID) required
:   ​

Body

`attachmentsToAdd` array of string (RID)
:   ​

`attachmentsToRemove` array of string (RID)
:   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
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>"
  ]
}'
```

**requests**

```python
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()
```

**httpx**

```python
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()
```

**aiohttp**

```python
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](https://dev.nominal.io/api/legacy.md#errors) shows how these errors are sent.

Each error’s `errorName` is `Scout:` followed by its name below.

| Status | Name | Notes |
| --- | --- | --- |
| 400 | `AssetNotPresentInRun` |  |
| 400 | `BothAssetAndDataSourcesSpecified` |  |
| 400 | `InvalidConnectionRid` |  |
| 400 | `InvalidDataSourceRefNameType` |  |
| 400 | `InvalidDatasetRid` |  |
| 400 | `InvalidLogSetRid` |  |
| 400 | `InvalidVideoRid` |  |
| 400 | `RunBoundsInverted` |  |
| 400 | `RunPropertiesHaveNullValues` |  |
| 400 | `UnspecifiedAssetForMultiAssetRun` |  |
| 404 | `RunNotFound` |  |
| 404 | `RunNotFoundById` |  |
| 409 | `RefNamesAlreadyUsed` |  |
| 409 | `RunsLocked` | 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.

`assets` array of string (RID)
:   ​

### CheckAlertState

Set `type` to the name of one of the other fields, and set only that field.

`pendingReview` [`PendingReviewAlertState`](https://dev.nominal.io/api/rest/run-service.md#pendingreviewalertstate)
:   ​

`closedWithFurtherAction` [`ClosedWithFurtherActionAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithfurtheractionalertstate)
:   ​

`closedWithIgnore` [`ClosedWithIgnoreAlertState`](https://dev.nominal.io/api/rest/run-service.md#closedwithignorealertstate)
:   ​

### CheckAlertStatesFilter

`checkAlertState` [`CheckAlertState`](https://dev.nominal.io/api/rest/run-service.md#checkalertstate) required
:   ​

`operator` [`Operator`](https://dev.nominal.io/api/rest/run-service.md#operator) required
:   ​

`threshold` integer (int64) required
:   ​

### ClosedWithFurtherActionAlertState

`comment` string required
:   ​

`closedBy` string (RID) required
:   ​

### ClosedWithIgnoreAlertState

`comment` string required
:   ​

`closedBy` string (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.

`skip` [`SkipOnConflict`](https://dev.nominal.io/api/rest/run-service.md#skiponconflict)
:   ​

`overwrite` [`OverwriteOnConflict`](https://dev.nominal.io/api/rest/run-service.md#overwriteonconflict)
:   ​

### CreateRunDataSource

For write requests, we want to allow for optional fields

`dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
:   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence. **Deprecated:** Use dataSourceRid instead.

`dataSourceRid` string (RID)
:   One of dataSource and dataSourceRid must be present. dataSourceRid takes precedence.

`offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
:   ​

`seriesTags` map of `TagName` to string
:   Used to resolve logical series for this data source.

### CreateRunRequest

`title` string required
:   ​

`description` string required
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) required
:   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

`runPrefix` string
:   ​

`dataSources` map of `DataSourceRefName` to [`CreateRunDataSource`](https://dev.nominal.io/api/rest/run-service.md#createrundatasource)
:   ​

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`workspace` string (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

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

### DataReviewAlertMetrics

`pendingReview` integer required
:   ​

`closedWithIgnore` integer required
:   ​

`closedWithFurtherAction` integer required
:   ​

### DataReviewCheckMetrics

`pendingExecution` integer required
:   ​

`executing` integer required
:   ​

`passingAutomatic` integer required
:   ​

`pendingReview` integer required
:   ​

`closedWithIgnore` integer required
:   ​

`closedWithFurtherAction` integer required
:   ​

`failedToExecutePendingReview` integer required
:   ​

`failedToExecuteClosedWithIgnore` integer required
:   ​

`failedToExecuteClosedWithFurtherAction` integer required
:   ​

### DataReviewMetrics

`checks` [`DataReviewCheckMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewcheckmetrics) required
:   ​

`alerts` [`DataReviewAlertMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewalertmetrics) required
:   ​

### DataScope

`dataScopeName` string required
:   The name of the data scope. The name is guaranteed to be be unique within the context of an asset.

`dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) required
:   ​

`offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration)
:   ​

`timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype) required
:   ​

`seriesTags` map of `TagName` to string
:   Filters the data source to series matching these tag values. The filtered set of series should be the ones that belong to the asset.

### DataScopes

`dataScopes` map of `DataSourceRefName` to [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope)
:   ​

### DataSource

Set `type` to the name of one of the other fields, and set only that field.

`dataset` string (RID)
:   ​

`connection` string (RID)
:   ​

`logSet` string (RID)
:   ​

`video` string (RID)
:   ​

`spatial` string (RID)
:   ​

### DataSourceSeriesTag

`name` string required
:   ​

`value` string required
:   ​

### DataSourceType

`DATASET`
:   ​

`CONNECTION`
:   ​

`LOGSET`
:   ​

`VIDEO`
:   ​

`SPATIAL`
:   ​

### Duration

`seconds` integer (int64) required
:   ​

`nanos` integer (int64) required
:   ​

### LabelsFilter

`operator` [`SetOperator`](https://dev.nominal.io/api/rest/run-service.md#setoperator) required
:   ​

`labels` array of string
:   ​

### Link

`title` string
:   ​

`url` string 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.

`key` string required
:   ​

`source` array of string
:   ​

`target` string required
:   ​

### MetadataChange

Set `type` to the name of one of the other fields, and set only that field.

`renameLabel` [`RenameLabel`](https://dev.nominal.io/api/rest/run-service.md#renamelabel)
:   ​

`renamePropertyKey` [`RenamePropertyKey`](https://dev.nominal.io/api/rest/run-service.md#renamepropertykey)
:   ​

`mergePropertyValuesForKey` [`MergePropertyValuesForKey`](https://dev.nominal.io/api/rest/run-service.md#mergepropertyvaluesforkey)
:   ​

### 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.

`name` string required
:   ​

`value` number required
:   ​

`operator` [`PropertyComparisonOperator`](https://dev.nominal.io/api/rest/run-service.md#propertycomparisonoperator) required
:   ​

### 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.

`name` string required
:   ​

`min` number
:   ​

`max` number
:   ​

`operator` [`NumericPropertyRangeOperator`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangeoperator) required
:   ​

### 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.

`priority` array of string
:   ​

### PendingReviewAlertState

An empty JSON object, `{}`.

### PresetTimeframeDuration

`ALL_TIME`
:   ​

`LAST_DAY`
:   ​

`LAST_WEEK`
:   ​

`LAST_MONTH`
:   ​

`LAST_YEAR`
:   ​

### PresetTimeframeFilter

`duration` [`PresetTimeframeDuration`](https://dev.nominal.io/api/rest/run-service.md#presettimeframeduration) required
:   ​

### PropertiesFilter

`name` string required
:   ​

`values` array of string
:   ​

### Property

`name` string required
:   ​

`value` string 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

`name` string required
:   ​

`type` [`DataSourceType`](https://dev.nominal.io/api/rest/run-service.md#datasourcetype) required
:   ​

### RenameLabel

Rename or merge one or more source labels into a single target label.

`source` array of string
:   ​

`target` string 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.

`source` array of string
:   ​

`target` string required
:   ​

`onConflict` [`ConflictBehavior`](https://dev.nominal.io/api/rest/run-service.md#conflictbehavior) required
:   ​

### Run

`rid` string (RID) required
:   ​

`runNumber` integer (int64) required
:   ​

`runPrefix` string
:   ​

`title` string required
:   ​

`description` string required
:   ​

`authorRid` string (RID)
:   ​

`startTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) required
:   ​

`endTime` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`properties` map of `PropertyName` to string deprecated
:   **Deprecated:** use typedProperties

`typedProperties` map of `PropertyName` to [`TypedPropertyValue`](https://dev.nominal.io/api/rest/run-service.md#typedpropertyvalue)
:   ​

`labels` array of string
:   ​

`links` array of [`Link`](https://dev.nominal.io/api/rest/run-service.md#link)
:   ​

`createdAt` string (date-time) required
:   ​

`updatedAt` string (date-time) required
:   ​

`assetDataScopesMap` map of `AssetRid` to [`DataScopes`](https://dev.nominal.io/api/rest/run-service.md#datascopes)
:   Map from asset RIDs to their data scopes

`assetDataScopes` array of [`DataScope`](https://dev.nominal.io/api/rest/run-service.md#datascope) deprecated
:   **Deprecated:** Use assetDataScopesMap instead. Will be empty for multi-asset runs.

`dataSources` map of `DataSourceRefName` to [`RunDataSource`](https://dev.nominal.io/api/rest/run-service.md#rundatasource)
:   Map from refnames to run data sources. Will be empty for multi-asset runs.

`attachments` array of string (RID)
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use assets

`assets` array of string (RID)
:   ​

`isArchived` boolean required
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   When 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

`evaluationStatus` [`RunDataReviewEvaluationStatus`](https://dev.nominal.io/api/rest/run-service.md#rundatareviewevaluationstatus) required
:   ​

`totalIssueCount` integer required
:   ​

`reviewedIssueCount` integer required
:   ​

`issuesWithFurtherActionCount` integer required
:   ​

`executionErrorCount` integer required
:   ​

### RunDataSource

For read requests, we want to require all fields

`dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) required
:   ​

`offset` [`Duration`](https://dev.nominal.io/api/rest/run-service.md#duration) required
:   This 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.

`refName` string required
:   Included for convenience, duplicated from the key of the map

`timestampType` [`WeakTimestampType`](https://dev.nominal.io/api/rest/run-service.md#weaktimestamptype) required
:   ​

`seriesTags` map of `TagName` to string
:   Used to resolve logical series for this data source.

### RunWithDataReviewMetrics

`run` [`Run`](https://dev.nominal.io/api/rest/run-service.md#run) required
:   ​

`dataReviewMetrics` [`DataReviewMetrics`](https://dev.nominal.io/api/rest/run-service.md#datareviewmetrics) required
:   ​

### RunWithDataReviewSummary

`run` [`Run`](https://dev.nominal.io/api/rest/run-service.md#run) required
:   ​

`dataReviewSummary` [`RunDataReviewSummary`](https://dev.nominal.io/api/rest/run-service.md#rundatareviewsummary) required
:   ​

### SearchQuery

Set `type` to the name of one of the other fields, and set only that field.

`startTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
:   **Deprecated:** Use startTime instead

`startTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
:   ​

`endTimeInclusive` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp) deprecated
:   **Deprecated:** Use endTime instead

`endTime` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
:   ​

`timeRange` [`TimeRangeFilter`](https://dev.nominal.io/api/rest/run-service.md#timerangefilter)
:   ​

`createdAt` [`TimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#timeframefilter)
:   ​

`exactMatch` string
:   Performs case insensitive exact substring match search on the title.

`searchText` string
:   ​

`asset` string (RID) deprecated
:   **Deprecated:** Use getRunsByAsset rather than text-based search

`assets` [`AssetsFilter`](https://dev.nominal.io/api/rest/run-service.md#assetsfilter)
:   ​

`isSingleAsset` boolean
:   Search for either only single-asset runs (true), or only multi-asset runs (false).

`label` string deprecated
:   **Deprecated:** use labels instead

`labels` [`LabelsFilter`](https://dev.nominal.io/api/rest/run-service.md#labelsfilter)
:   ​

`property` [`Property`](https://dev.nominal.io/api/rest/run-service.md#property) deprecated
:   **Deprecated:** use properties

`propertyKey` string
:   Matches runs that have a property with this key, regardless of value.

`properties` [`PropertiesFilter`](https://dev.nominal.io/api/rest/run-service.md#propertiesfilter)
:   ​

`numericProperty` [`NumericPropertyPredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertypredicate)
:   Matches runs using a numeric property comparison.

`numericPropertyRange` [`NumericPropertyRangePredicate`](https://dev.nominal.io/api/rest/run-service.md#numericpropertyrangepredicate)
:   Matches runs using an inclusive numeric property range.

`dataSourceSeriesTag` [`DataSourceSeriesTag`](https://dev.nominal.io/api/rest/run-service.md#datasourceseriestag)
:   ​

`dataSourceRefName` string
:   ​

`dataSource` [`DataSource`](https://dev.nominal.io/api/rest/run-service.md#datasource) deprecated
:   **Deprecated:** Use dataSourceRefName, rather than searching directly by DataSource.

`runNumber` integer (int64)
:   ​

`runPrefix` string
:   ​

`checkAlertStatesFilter` [`CheckAlertStatesFilter`](https://dev.nominal.io/api/rest/run-service.md#checkalertstatesfilter)
:   Search for runs where its aggregated check alert satisfy a given operator and threshold.

`archived` boolean
:   ​

`and` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
:   ​

`or` array of [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
:   ​

`not` [`SearchQuery`](https://dev.nominal.io/api/rest/run-service.md#searchquery)
:   ​

`workspace` string (RID)
:   ​

`lockStatus` [`LockStatus`](https://dev.nominal.io/api/rest/run-service.md#lockstatus)
:   ​

`datasetRids` array 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.

`field` [`SortField`](https://dev.nominal.io/api/rest/run-service.md#sortfield)
:   ​

`property` [`SortProperty`](https://dev.nominal.io/api/rest/run-service.md#sortproperty)
:   Sort by a property value. Requires a property name, and will always sort null values last.

`numericProperty` [`SortProperty`](https://dev.nominal.io/api/rest/run-service.md#sortproperty)
:   Sort by a numeric property value. String-valued and missing properties are null and always sort last.

### SortKeyWithDirection

`sortKey` [`SortKey`](https://dev.nominal.io/api/rest/run-service.md#sortkey) required
:   ​

`isDescending` boolean required
:   ​

### SortOptions

`isDescending` boolean required
:   ​

`field` [`SortField`](https://dev.nominal.io/api/rest/run-service.md#sortfield) deprecated
:   **Deprecated:** use SortKey with SortField union type instead

`sortKey` [`SortKey`](https://dev.nominal.io/api/rest/run-service.md#sortkey)
:   Field to sort by. Includes both field and property-based sorting.

`additionalSortKeys` array of [`SortKeyWithDirection`](https://dev.nominal.io/api/rest/run-service.md#sortkeywithdirection)
:   Optional 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

`name` string required
:   ​

### TimeframeFilter

Set `type` to the name of one of the other fields, and set only that field.

`custom` [`CustomTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#customtimeframefilter)
:   ​

`preset` [`PresetTimeframeFilter`](https://dev.nominal.io/api/rest/run-service.md#presettimeframefilter)
:   ​

### TimeRangeFilter

searches for runs that have at least some intersection with the specified range.

`start` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

`end` [`UtcTimestamp`](https://dev.nominal.io/api/rest/run-service.md#utctimestamp)
:   ​

### 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.

`stringValue` string
:   ​

`numericValue` number
:   ​

### UtcTimestamp

`secondsSinceEpoch` integer (int64) required
:   ​

`offsetNanoseconds` integer (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](https://scalar.com), MIT License.
