# Catalog service

The Catalog Service provides the ability to query for information about Datasets that are stored in the Nominal platform. A Dataset is the Nominal representation of data that has been uploaded to Nominal via a file, primarily CSV.

OpenAPI file: [`CatalogService.json`](https://dev.nominal.io/api/_downloads/68058bf77083a9861b03ea21d5dc1380/CatalogService.json)

## Endpoints

### Get enriched dataset

GET `/catalog/v1/datasets/{datasetUuid}`

Path parameters

`datasetUuid` string (UUID) required
:   ​

Response

`rid` string (RID)
:   ​

`uuid` string (UUID)
:   ​

`name` string
:   ​

`description` string
:   ​

`displayName` string
:   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties.

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`ingestDate` string (date-time)
:   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

`lastIngestedAt` string (date-time)
:   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
:   **Deprecated:** Deprecated. Use lastIngestStatus.

    Values of `IngestStatus`

    `IN_PROGRESS`
    :   ​

    `COMPLETED`
    :   ​

    `FAILED`
    :   ​

    `DELETION_IN_PROGRESS`
    :   ​

    `DELETED`
    :   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   ​

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

        Fields of `Ingesting`

        `progress` number
        :   Optional fraction between 0 and 1 indicating progress through ingestion.

`retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy)
:   ​

    Fields of `RetentionPolicy`

    `type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype)
    :   ​

        Values of `RetentionPolicyType`

        `KEEP_UNTIL_EXPIRY`
        :   ​

        `KEEP_FOREVER`
        :   ​

    `expiryDays` integer
    :   ​

`source` string
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`labels` array of string
:   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`allowStreaming` boolean
:   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

`migratedFromConnectionRid` string (RID)
:   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

`externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
:   ​

    Fields of `ExternalConnectionMetadata`

    `connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails)
    :   ​

        **timescale**

        Set `type` to `"timescale"`.

        `timescale` [`TimescaleConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timescaleconnectiondetails)
        :   ​

        **influx**

        Set `type` to `"influx"`.

        `influx` [`Influx2ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx2connectiondetails)
        :   ​

        **influx1**

        Set `type` to `"influx1"`.

        `influx1` [`Influx1ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx1connectiondetails)
        :   ​

        **nominal**

        Set `type` to `"nominal"`.

        `nominal` [`NominalConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#nominalconnectiondetails)
        :   ​

        **timestream**

        Set `type` to `"timestream"`.

        `timestream` [`TimestreamConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamconnectiondetails)
        :   ​

        **visualCrossing**

        Set `type` to `"visualCrossing"`.

        `visualCrossing` [`VisualCrossingConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingconnectiondetails)
        :   ​

        **bigQuery**

        Set `type` to `"bigQuery"`.

        `bigQuery` [`BigQueryConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryconnectiondetails)
        :   ​

    `connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus)
    :   ​

        Fields of `ConnectionStatus`

        `isConnected` boolean
        :   ​

    `limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
    :   ​

        Fields of `LimitsConfig`

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

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

        Fields of `Commit`

        `id` string
        :   ​

        `resourceRid` string (RID)
        :   ​

        `parentCommit` string
        :   ​

        `mergeParentCommit` string
        :   ​

        `message` string
        :   ​

        `isWorkingState` boolean
        :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

        `committedBy` string (RID)
        :   ​

        `committedAt` string (date-time)
        :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset uuid>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset uuid>",
    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/catalog/v1/datasets/<dataset uuid>",
    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/catalog/v1/datasets/<dataset uuid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<rid>",
  "uuid": "<uuid>",
  "name": "<name>",
  "description": "<description>",
  "displayName": "<display name>",
  "metadata": {
    "<key>": "<value>"
  },
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "ingestDate": "2026-01-01T00:00:00Z",
  "lastIngestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": "IN_PROGRESS",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  },
  "lastIngestStatus": {
    "type": "success",
    "success": {}
  },
  "retentionPolicy": {
    "type": "KEEP_UNTIL_EXPIRY",
    "expiryDays": 1
  },
  "source": "<source>",
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "timestampType": "ABSOLUTE",
  "labels": [
    "<label>"
  ],
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "granularity": "NANOSECONDS",
  "allowStreaming": true,
  "isArchived": true,
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  },
  "migratedFromConnectionRid": "<connection rid>",
  "externalConnectionMetadata": {
    "connectionDetails": {
      "type": "timescale",
      "timescale": {
        "database": "<database>",
        "host": "<host>",
        "port": 1,
        "username": "<username>",
        "passwordSecretRid": "<secret rid>"
      }
    },
    "connectionStatus": {
      "isConnected": true
    },
    "limits": {
      "maxQueryRange": {
        "unit": "HOURS",
        "count": 1
      }
    }
  },
  "derivedDefinition": {
    "spec": {
      "type": "asset",
      "asset": {
        "rid": {
          "type": "literal",
          "literal": "<literal>"
        }
      }
    },
    "commit": {
      "id": "<commit id>",
      "resourceRid": "<resource rid>",
      "parentCommit": "<commit id>",
      "mergeParentCommit": "<commit id>",
      "message": "<message>",
      "isWorkingState": true,
      "committedBy": "<user rid>",
      "committedAt": "2026-01-01T00:00:00Z"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ]
}
```

### Get enriched datasets

POST `/catalog/v1/datasets/multiple`

Body

`datasetRids` array of string (RID)
:   ​

Response

The body is an array of [`EnrichedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#enricheddataset).

Fields of `EnrichedDataset`

`rid` string (RID)
:   ​

`uuid` string (UUID)
:   ​

`name` string
:   ​

`description` string
:   ​

`displayName` string
:   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties.

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

`ingestDate` string (date-time)
:   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

`lastIngestedAt` string (date-time)
:   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
:   **Deprecated:** Deprecated. Use lastIngestStatus.

    Values of `IngestStatus`

    `IN_PROGRESS`
    :   ​

    `COMPLETED`
    :   ​

    `FAILED`
    :   ​

    `DELETION_IN_PROGRESS`
    :   ​

    `DELETED`
    :   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

`lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   ​

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy)
:   ​

    Fields of `RetentionPolicy`

    `type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype)
    :   ​

    `expiryDays` integer
    :   ​

`source` string
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`labels` array of string
:   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`allowStreaming` boolean
:   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

`migratedFromConnectionRid` string (RID)
:   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

`externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
:   ​

    Fields of `ExternalConnectionMetadata`

    `connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails)
    :   ​

    `connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus)
    :   ​

    `limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
    :   ​

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/multiple" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "datasetRids": [
    "<dataset rids>"
  ]
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/multiple",
    headers={"Authorization": "Bearer <api key>"},
    json={"datasetRids": ["<dataset rids>"]},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/multiple",
    headers={"Authorization": "Bearer <api key>"},
    json={"datasetRids": ["<dataset rids>"]},
)
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/catalog/v1/datasets/multiple",
            headers={"Authorization": "Bearer <api key>"},
            json={"datasetRids": ["<dataset rids>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
[
  {
    "rid": "<rid>",
    "uuid": "<uuid>",
    "name": "<name>",
    "description": "<description>",
    "displayName": "<display name>",
    "metadata": {
      "<key>": "<value>"
    },
    "handle": {
      "type": "s3",
      "s3": {
        "bucket": "<bucket>",
        "key": "<key>"
      }
    },
    "ingestDate": "2026-01-01T00:00:00Z",
    "lastIngestedAt": "2026-01-01T00:00:00Z",
    "ingestStatus": "IN_PROGRESS",
    "originMetadata": {
      "path": "<path>",
      "xSeriesIsAbsolute": true,
      "schemaDirectivePath": "<schema directive path>",
      "xSeriesColumnName": "<x series column name>",
      "xSeriesTimeUnit": "DAYS",
      "timestampMetadata": {
        "seriesName": "<series name>",
        "timestampType": {
          "type": "relative",
          "relative": {
            "timeUnit": "DAYS",
            "offset": "2026-01-01T00:00:00Z"
          }
        }
      },
      "channelConfig": {
        "prefixTreeDelimiter": "<prefix tree delimiter>"
      }
    },
    "lastIngestStatus": {
      "type": "success",
      "success": {}
    },
    "retentionPolicy": {
      "type": "KEEP_UNTIL_EXPIRY",
      "expiryDays": 1
    },
    "source": "<source>",
    "bounds": {
      "start": {
        "seconds": 1,
        "nanos": 1
      },
      "end": {
        "seconds": 1,
        "nanos": 1
      },
      "type": "RELATIVE"
    },
    "timestampType": "ABSOLUTE",
    "labels": [
      "<label>"
    ],
    "properties": {
      "<key>": "<property value>"
    },
    "typedProperties": {
      "<key>": {
        "type": "stringValue",
        "stringValue": "<property value>"
      }
    },
    "granularity": "NANOSECONDS",
    "allowStreaming": true,
    "isArchived": true,
    "defaultGroupByAndAggregationConfig": {
      "numericAggregation": {
        "type": "sum",
        "sum": {}
      }
    },
    "migratedFromConnectionRid": "<connection rid>",
    "externalConnectionMetadata": {
      "connectionDetails": {
        "type": "timescale",
        "timescale": {
          "database": "<database>",
          "host": "<host>",
          "port": 1,
          "username": "<username>",
          "passwordSecretRid": "<secret rid>"
        }
      },
      "connectionStatus": {
        "isConnected": true
      },
      "limits": {
        "maxQueryRange": {
          "unit": "HOURS",
          "count": 1
        }
      }
    },
    "derivedDefinition": {
      "spec": {
        "type": "asset",
        "asset": {
          "rid": {
            "type": "literal",
            "literal": "<literal>"
          }
        }
      },
      "commit": {
        "id": "<commit id>",
        "resourceRid": "<resource rid>",
        "parentCommit": "<commit id>",
        "mergeParentCommit": "<commit id>",
        "message": "<message>",
        "isWorkingState": true,
        "committedBy": "<user rid>",
        "committedAt": "2026-01-01T00:00:00Z"
      }
    },
    "channelSearchSplitTagKeys": [
      "<tag name>"
    ]
  }
]
```

### Get dataset

GET `/catalog/v1/datasets-simple/{datasetUuid}`

Path parameters

`datasetUuid` string (UUID) required
:   ​

Response

`rid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`description` string
:   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`allowStreaming` boolean
:   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

        Fields of `Commit`

        `id` string
        :   ​

        `resourceRid` string (RID)
        :   ​

        `parentCommit` string
        :   ​

        `mergeParentCommit` string
        :   ​

        `message` string
        :   ​

        `isWorkingState` boolean
        :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

        `committedBy` string (RID)
        :   ​

        `committedAt` string (date-time)
        :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/datasets-simple/<dataset uuid>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets-simple/<dataset uuid>",
    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/catalog/v1/datasets-simple/<dataset uuid>",
    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/catalog/v1/datasets-simple/<dataset uuid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<rid>",
  "name": "<name>",
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "description": "<description>",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  },
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "labels": [
    "<label>"
  ],
  "timestampType": "ABSOLUTE",
  "allowStreaming": true,
  "granularity": "NANOSECONDS",
  "isArchived": true,
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  },
  "derivedDefinition": {
    "spec": {
      "type": "asset",
      "asset": {
        "rid": {
          "type": "literal",
          "literal": "<literal>"
        }
      }
    },
    "commit": {
      "id": "<commit id>",
      "resourceRid": "<resource rid>",
      "parentCommit": "<commit id>",
      "mergeParentCommit": "<commit id>",
      "message": "<message>",
      "isWorkingState": true,
      "committedBy": "<user rid>",
      "committedAt": "2026-01-01T00:00:00Z"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ]
}
```

### Get datasets

POST `/catalog/v1/datasets-simple/multiple`

Body

`datasetRids` array of string (RID)
:   ​

Response

The body is an array of [`catalog.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-dataset).

Fields of `catalog.Dataset`

`rid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

`description` string
:   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`allowStreaming` boolean
:   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets-simple/multiple" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "datasetRids": [
    "<dataset rids>"
  ]
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets-simple/multiple",
    headers={"Authorization": "Bearer <api key>"},
    json={"datasetRids": ["<dataset rids>"]},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets-simple/multiple",
    headers={"Authorization": "Bearer <api key>"},
    json={"datasetRids": ["<dataset rids>"]},
)
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/catalog/v1/datasets-simple/multiple",
            headers={"Authorization": "Bearer <api key>"},
            json={"datasetRids": ["<dataset rids>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
[
  {
    "rid": "<rid>",
    "name": "<name>",
    "handle": {
      "type": "s3",
      "s3": {
        "bucket": "<bucket>",
        "key": "<key>"
      }
    },
    "description": "<description>",
    "originMetadata": {
      "path": "<path>",
      "xSeriesIsAbsolute": true,
      "schemaDirectivePath": "<schema directive path>",
      "xSeriesColumnName": "<x series column name>",
      "xSeriesTimeUnit": "DAYS",
      "timestampMetadata": {
        "seriesName": "<series name>",
        "timestampType": {
          "type": "relative",
          "relative": {
            "timeUnit": "DAYS",
            "offset": "2026-01-01T00:00:00Z"
          }
        }
      },
      "channelConfig": {
        "prefixTreeDelimiter": "<prefix tree delimiter>"
      }
    },
    "bounds": {
      "start": {
        "seconds": 1,
        "nanos": 1
      },
      "end": {
        "seconds": 1,
        "nanos": 1
      },
      "type": "RELATIVE"
    },
    "properties": {
      "<key>": "<property value>"
    },
    "typedProperties": {
      "<key>": {
        "type": "stringValue",
        "stringValue": "<property value>"
      }
    },
    "labels": [
      "<label>"
    ],
    "timestampType": "ABSOLUTE",
    "allowStreaming": true,
    "granularity": "NANOSECONDS",
    "isArchived": true,
    "defaultGroupByAndAggregationConfig": {
      "numericAggregation": {
        "type": "sum",
        "sum": {}
      }
    },
    "derivedDefinition": {
      "spec": {
        "type": "asset",
        "asset": {
          "rid": {
            "type": "literal",
            "literal": "<literal>"
          }
        }
      },
      "commit": {
        "id": "<commit id>",
        "resourceRid": "<resource rid>",
        "parentCommit": "<commit id>",
        "mergeParentCommit": "<commit id>",
        "message": "<message>",
        "isWorkingState": true,
        "committedBy": "<user rid>",
        "committedAt": "2026-01-01T00:00:00Z"
      }
    },
    "channelSearchSplitTagKeys": [
      "<tag name>"
    ]
  }
]
```

### Get datasets with external connection config

POST `/catalog/v1/datasets-simple/external-config`

Gets the subset of dataset RIDs that currently have external connection config attached.

Body

`datasetRids` array of string (RID)
:   ​

Response

The body is an array of string (RID).

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets-simple/external-config" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "datasetRids": [
    "<dataset rids>"
  ]
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets-simple/external-config",
    headers={"Authorization": "Bearer <api key>"},
    json={"datasetRids": ["<dataset rids>"]},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets-simple/external-config",
    headers={"Authorization": "Bearer <api key>"},
    json={"datasetRids": ["<dataset rids>"]},
)
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/catalog/v1/datasets-simple/external-config",
            headers={"Authorization": "Bearer <api key>"},
            json={"datasetRids": ["<dataset rids>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
[
  "<dataset rid>"
]
```

### Register external connection config

POST `/catalog/v1/datasets/external-config`

Registers or updates external connection configuration for an existing dataset.

Body

`datasetRid` string (RID) required
:   ​

`connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails) required
:   ​

    **timescale**

    Set `type` to `"timescale"`.

    `timescale` [`TimescaleConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timescaleconnectiondetails)
    :   ​

        Fields of `TimescaleConnectionDetails`

        `database` string required
        :   ​

        `host` string required
        :   ​

        `port` integer required
        :   ​

        `username` string required
        :   This is also the reference to the secret containing the password

        `passwordSecretRid` string (RID) required
        :   Secret Rid of password secret stored in Secrets Service.

    **influx**

    Set `type` to `"influx"`.

    `influx` [`Influx2ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx2connectiondetails)
    :   ​

        Fields of `Influx2ConnectionDetails`

        `host` string required
        :   ​

        `port` integer required
        :   ​

        `headers` map of string to [`HeaderValue`](https://dev.nominal.io/api/rest/catalog-service.md#headervalue)
        :   A map of header name to value

            **plain**

            Set `type` to `"plain"`.

            `plain` string
            :   ​

            **secretRid**

            Set `type` to `"secretRid"`.

            `secretRid` string (RID)
            :   ​

        `org` string required
        :   ​

        `tokenSecretRid` string (RID) required
        :   Secret Rid of token secret stored in Secrets Service.

    **influx1**

    Set `type` to `"influx1"`.

    `influx1` [`Influx1ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx1connectiondetails)
    :   ​

        Fields of `Influx1ConnectionDetails`

        `host` string required
        :   ​

        `port` integer required
        :   ​

        `headers` map of string to [`HeaderValue`](https://dev.nominal.io/api/rest/catalog-service.md#headervalue)
        :   A map of header name to value

        `credentials` [`PasswordCredentials`](https://dev.nominal.io/api/rest/catalog-service.md#passwordcredentials)
        :   ​

            Fields of `PasswordCredentials`

            `username` string required
            :   ​

            `passwordSecretRid` string (RID) required
            :   Secret Rid of password secret stored in Secrets Service.

    **nominal**

    Set `type` to `"nominal"`.

    `nominal` [`NominalConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#nominalconnectiondetails)
    :   ​

        Fields of `NominalConnectionDetails`

        `nominalDataSourceRid` string (RID) required
        :   ​

    **timestream**

    Set `type` to `"timestream"`.

    `timestream` [`TimestreamConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamconnectiondetails)
    :   ​

        Fields of `TimestreamConnectionDetails`

        `nominalRoleArn` string required
        :   The role ARN owned by Nominal that has permission to assume the externalRoleArn.

        `nominalRoleRegion` string required
        :   AWS region that contains the Nominal role.

        `externalRegion` string required
        :   AWS region that contains the Timestream instance.

        `externalRoleArn` string required
        :   The role ARN used to make queries to Timestream. This role is owned by the AWS account that owns the Timestream instance.

        `database` string required
        :   Database inside of the Timestream instance to connect to.

    **visualCrossing**

    Set `type` to `"visualCrossing"`.

    `visualCrossing` [`VisualCrossingConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingconnectiondetails)
    :   ​

        Fields of `VisualCrossingConnectionDetails`

        `apiKeySecretRid` string (RID) required
        :   Secret Rid of API key stored in Secrets Service.

    **bigQuery**

    Set `type` to `"bigQuery"`.

    `bigQuery` [`BigQueryConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryconnectiondetails)
    :   ​

        Fields of `BigQueryConnectionDetails`

        `region` string required
        :   The region of the BigQuery Project (e.g. “us-east1”)

        `project` string required
        :   The name of the BigQuery Project

        `dataset` string required
        :   The name of the dataset within the project

        `table` string required
        :   The name of the table within the dataset

        `serviceAccountKeySecretRid` string (RID) required
        :   Secret Rid of service account key stored in Secrets Service.

`metadata` map of string to string
:   Metadata information about the external connection configuration.

`requiredTagNames` array of string
:   Additional tag names that are required to construct a fully qualified series.

`availableTagValues` map of `TagName` to array of string
:   Optional externally supplied tag values. In most cases these are indexed by scraping.

`scraping` [`ScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#scrapingconfig)
:   ​

    **influx**

    Set `type` to `"influx"`.

    `influx` [`InfluxScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#influxscrapingconfig)
    :   ​

        Fields of `InfluxScrapingConfig`

        `filter` array of [`InfluxScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#influxscrapingfilter)
        :   Filters are ANDed together

            **not**

            Set `type` to `"not"`.

            `not` [`InfluxScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#influxscrapingfilter)
            :   ​

            **matchBucket**

            Set `type` to `"matchBucket"`.

            `matchBucket` array of string
            :   Match any of the specified buckets

            **matchMeasurement**

            Set `type` to `"matchMeasurement"`.

            `matchMeasurement` array of string
            :   Match any of the specified measurements

        `seriesArchetypeConstruction` [`InfluxSeriesArchetypeConstructionConfig`](https://dev.nominal.io/api/rest/catalog-service.md#influxseriesarchetypeconstructionconfig) required
        :   ​

            Fields of `InfluxSeriesArchetypeConstructionConfig`

            `channelNameComponents` array of [`InfluxChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#influxchannelnamecomponent)
            :   ​

                **bucket**

                Set `type` to `"bucket"`.

                `bucket` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
                :   ​

                **measurement**

                Set `type` to `"measurement"`.

                `measurement` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
                :   ​

                **field**

                Set `type` to `"field"`.

                `field` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
                :   ​

            `separator` string required
            :   ​

    **nominal**

    Set `type` to `"nominal"`.

    `nominal` [`NominalScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#nominalscrapingconfig)
    :   ​

        Fields of `NominalScrapingConfig`

        `channelNameComponents` array of [`NominalChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#nominalchannelnamecomponent)
        :   channelNameComponents will be combined, together with separator, to form a fully qualified channel name.

            **channel**

            Set `type` to `"channel"`.

            `channel` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
            :   ​

            **valueOfTagWithName**

            Set `type` to `"valueOfTagWithName"`.

            `valueOfTagWithName` string
            :   The value of the specified TagName will be used. If the tag is not present, it will be omitted.

        `separator` string required
        :   ​

    **timestream**

    Set `type` to `"timestream"`.

    `timestream` [`TimestreamScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamscrapingconfig)
    :   ​

        Fields of `TimestreamScrapingConfig`

        `filter` array of [`TimestreamScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamscrapingfilter)
        :   In order for data to be picked up by the scraper, it must match all filters in this list.

            **matchTable**

            Set `type` to `"matchTable"`.

            `matchTable` array of string
            :   Match any of the specified tables in the database.

        `channelNameComponents` array of [`TimestreamChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamchannelnamecomponent)
        :   channelNameComponents will be combined, together with separator, to form a fully qualified channel name.

            **table**

            Set `type` to `"table"`.

            `table` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
            :   ​

            **measure**

            Set `type` to `"measure"`.

            `measure` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
            :   ​

            **attribute**

            Set `type` to `"attribute"`.

            `attribute` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
            :   ​

            **valueOfTagWithName**

            Set `type` to `"valueOfTagWithName"`.

            `valueOfTagWithName` string
            :   The value of the specified TagName will be used. If the tag is not present, it will be omitted.

        `separator` string required
        :   ​

        `maxLookBackPeriodHours` integer
        :   The maximum time in hours to look back over series data to find unique measure and tag combinations. If not specified, the default look back period will be used.

    **timescale**

    Set `type` to `"timescale"`.

    `timescale` [`PivotedTimescaleScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#pivotedtimescalescrapingconfig)
    :   ​

        Fields of `PivotedTimescaleScrapingConfig`

        `filter` array of [`TimescaleScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#timescalescrapingfilter)
        :   In order for data to be picked up by the scraper, it must match all filters in this list. To exclude chunks of data, it’s possible to use a not filter.

            **not**

            Set `type` to `"not"`.

            `not` [`TimescaleScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#timescalescrapingfilter)
            :   ​

            **matchTable**

            Set `type` to `"matchTable"`.

            `matchTable` array of string
            :   Match any of the specified tables in the database.

            **matchSchema**

            Set `type` to `"matchSchema"`.

            `matchSchema` array of string
            :   Match any of the specified schemas in the database.

        `timeColumn` string required
        :   The name of the column that holds the timestamp.

        `nameColumn` string required
        :   The name of the column that holds the series name.

        `valueColumn` string required
        :   The name of the column that holds the series values.

        `dimensionColumns` array of string
        :   The names of the columns that comprise a dimension. They should have a database index for efficient filtering. We do not discover dimensions based on hypertable schema because they are not necessarily configured properly.

        `channelNameComponents` array of [`PivotedTimescaleChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#pivotedtimescalechannelnamecomponent)
        :   channelNameComponents will be combined, together with separator, to form a fully qualified channel name.

            **table**

            Set `type` to `"table"`.

            `table` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
            :   ​

            **name**

            Set `type` to `"name"`.

            `name` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
            :   The value of the name column.

        `separator` string required
        :   ​

    **visualCrossing**

    Set `type` to `"visualCrossing"`.

    `visualCrossing` [`VisualCrossingScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingscrapingconfig)
    :   ​

        Fields of `VisualCrossingScrapingConfig`

        `availableSeries` array of [`VisualCrossingAvailableSeries`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingavailableseries) deprecated
        :   list of available channels **Deprecated:** No longer used for anything

            Fields of `VisualCrossingAvailableSeries`

            `channel` string required
            :   ​

            `unit` string
            :   ​

            `description` string
            :   ​

            `type` [`VisualCrossingType`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingtype) required
            :   ​

                Values of `VisualCrossingType`

                `DOUBLE`
                :   ​

                `STRING`
                :   ​

    **bigQuery**

    Set `type` to `"bigQuery"`.

    `bigQuery` [`BigQueryScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryscrapingconfig)
    :   ​

        Fields of `BigQueryScrapingConfig`

        `timeColumn` string required
        :   The name of the column that holds the timestamp.

        `tagColumns` array of string
        :   The name of the columns that should be interpreted as tag columns

        `channelNameComponents` [`BigQueryChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#bigquerychannelnamecomponent)
        :   channelNameComponents will be combined, together with separator, to form a fully qualified channel name. By default, we don’t add anything to the column name.

            Fields of `BigQueryChannelNameComponent`

            `includeProject` boolean required
            :   Whether to include the project name in the channel name.

            `includeDataset` boolean required
            :   Whether to include the dataset name in the channel name.

            `includeTable` boolean required
            :   Whether to include the table name in the channel name.

        `separator` string
        :   The separator that delimits the parts of the channel name. If ommitted, the default is a “.”.

    **api**

    Set `type` to `"api"`.

    `api` [`ApiScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#apiscrapingconfig)
    :   ​

        **allChannels**

        Set `type` to `"allChannels"`.

        `allChannels` [`AllChannelsConnectionsScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#allchannelsconnectionsscrapingconfig)
        :   ​

        **channelAllowList**

        Set `type` to `"channelAllowList"`.

        `channelAllowList` [`ChannelAllowListConnectionsScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelallowlistconnectionsscrapingconfig)
        :   ​

            Fields of `ChannelAllowListConnectionsScrapingConfig`

            `channelAllowList` array of string
            :   Only channels in this set will be scraped. Must not be empty.

        **channelBlockList**

        Set `type` to `"channelBlockList"`.

        `channelBlockList` [`ChannelBlockListConnectionsScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelblocklistconnectionsscrapingconfig)
        :   ​

            Fields of `ChannelBlockListConnectionsScrapingConfig`

            `channelBlockList` array of string
            :   Only channels not in this set will be scraped. Must not be empty.

`shouldScrape` boolean required
:   ​

`limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
:   ​

    Fields of `LimitsConfig`

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

        Fields of `connection.api.Duration`

        `unit` [`TemporalUnit`](https://dev.nominal.io/api/rest/catalog-service.md#temporalunit) required
        :   ​

            Values of `TemporalUnit`

            `HOURS`
            :   ​

            `DAYS`
            :   ​

            `WEEKS`
            :   ​

        `count` integer required
        :   ​

Response

`rid` string (RID)
:   ​

`uuid` string (UUID)
:   ​

`name` string
:   ​

`description` string
:   ​

`displayName` string
:   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties.

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`ingestDate` string (date-time)
:   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

`lastIngestedAt` string (date-time)
:   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
:   **Deprecated:** Deprecated. Use lastIngestStatus.

    Values of `IngestStatus`

    `IN_PROGRESS`
    :   ​

    `COMPLETED`
    :   ​

    `FAILED`
    :   ​

    `DELETION_IN_PROGRESS`
    :   ​

    `DELETED`
    :   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   ​

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

        Fields of `Ingesting`

        `progress` number
        :   Optional fraction between 0 and 1 indicating progress through ingestion.

`retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy)
:   ​

    Fields of `RetentionPolicy`

    `type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype)
    :   ​

        Values of `RetentionPolicyType`

        `KEEP_UNTIL_EXPIRY`
        :   ​

        `KEEP_FOREVER`
        :   ​

    `expiryDays` integer
    :   ​

`source` string
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`labels` array of string
:   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`allowStreaming` boolean
:   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

`migratedFromConnectionRid` string (RID)
:   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

`externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
:   ​

    Fields of `ExternalConnectionMetadata`

    `connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails)
    :   ​

        **timescale**

        Set `type` to `"timescale"`.

        `timescale` [`TimescaleConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timescaleconnectiondetails)
        :   ​

        **influx**

        Set `type` to `"influx"`.

        `influx` [`Influx2ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx2connectiondetails)
        :   ​

        **influx1**

        Set `type` to `"influx1"`.

        `influx1` [`Influx1ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx1connectiondetails)
        :   ​

        **nominal**

        Set `type` to `"nominal"`.

        `nominal` [`NominalConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#nominalconnectiondetails)
        :   ​

        **timestream**

        Set `type` to `"timestream"`.

        `timestream` [`TimestreamConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamconnectiondetails)
        :   ​

        **visualCrossing**

        Set `type` to `"visualCrossing"`.

        `visualCrossing` [`VisualCrossingConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingconnectiondetails)
        :   ​

        **bigQuery**

        Set `type` to `"bigQuery"`.

        `bigQuery` [`BigQueryConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryconnectiondetails)
        :   ​

    `connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus)
    :   ​

        Fields of `ConnectionStatus`

        `isConnected` boolean
        :   ​

    `limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
    :   ​

        Fields of `LimitsConfig`

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

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

        Fields of `Commit`

        `id` string
        :   ​

        `resourceRid` string (RID)
        :   ​

        `parentCommit` string
        :   ​

        `mergeParentCommit` string
        :   ​

        `message` string
        :   ​

        `isWorkingState` boolean
        :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

        `committedBy` string (RID)
        :   ​

        `committedAt` string (date-time)
        :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/external-config" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "datasetRid": "<dataset rid>",
  "connectionDetails": {
    "type": "timescale",
    "timescale": {
      "database": "<database>",
      "host": "<host>",
      "port": 1,
      "username": "<username>",
      "passwordSecretRid": "<secret rid>"
    }
  },
  "shouldScrape": true
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/external-config",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "datasetRid": "<dataset rid>",
        "connectionDetails": {
            "type": "timescale",
            "timescale": {
                "database": "<database>",
                "host": "<host>",
                "port": 1,
                "username": "<username>",
                "passwordSecretRid": "<secret rid>",
            },
        },
        "shouldScrape": True,
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/external-config",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "datasetRid": "<dataset rid>",
        "connectionDetails": {
            "type": "timescale",
            "timescale": {
                "database": "<database>",
                "host": "<host>",
                "port": 1,
                "username": "<username>",
                "passwordSecretRid": "<secret rid>",
            },
        },
        "shouldScrape": 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.post(
            "https://api.gov.nominal.io/api/catalog/v1/datasets/external-config",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "datasetRid": "<dataset rid>",
                "connectionDetails": {
                    "type": "timescale",
                    "timescale": {
                        "database": "<database>",
                        "host": "<host>",
                        "port": 1,
                        "username": "<username>",
                        "passwordSecretRid": "<secret rid>",
                    },
                },
                "shouldScrape": True,
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<rid>",
  "uuid": "<uuid>",
  "name": "<name>",
  "description": "<description>",
  "displayName": "<display name>",
  "metadata": {
    "<key>": "<value>"
  },
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "ingestDate": "2026-01-01T00:00:00Z",
  "lastIngestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": "IN_PROGRESS",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  },
  "lastIngestStatus": {
    "type": "success",
    "success": {}
  },
  "retentionPolicy": {
    "type": "KEEP_UNTIL_EXPIRY",
    "expiryDays": 1
  },
  "source": "<source>",
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "timestampType": "ABSOLUTE",
  "labels": [
    "<label>"
  ],
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "granularity": "NANOSECONDS",
  "allowStreaming": true,
  "isArchived": true,
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  },
  "migratedFromConnectionRid": "<connection rid>",
  "externalConnectionMetadata": {
    "connectionDetails": {
      "type": "timescale",
      "timescale": {
        "database": "<database>",
        "host": "<host>",
        "port": 1,
        "username": "<username>",
        "passwordSecretRid": "<secret rid>"
      }
    },
    "connectionStatus": {
      "isConnected": true
    },
    "limits": {
      "maxQueryRange": {
        "unit": "HOURS",
        "count": 1
      }
    }
  },
  "derivedDefinition": {
    "spec": {
      "type": "asset",
      "asset": {
        "rid": {
          "type": "literal",
          "literal": "<literal>"
        }
      }
    },
    "commit": {
      "id": "<commit id>",
      "resourceRid": "<resource rid>",
      "parentCommit": "<commit id>",
      "mergeParentCommit": "<commit id>",
      "message": "<message>",
      "isWorkingState": true,
      "committedBy": "<user rid>",
      "committedAt": "2026-01-01T00:00:00Z"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ]
}
```

### Get dataset file

GET `/catalog/v1/dataset/{datasetRid}/file/{fileId}`

Path parameters

`datasetRid` string (RID) required
:   ​

`fileId` string (UUID) required
:   ​

Response

`id` string (UUID)
:   ​

`datasetRid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
:   ​

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`fileSizeBytes` integer (int64)
:   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

`uploadedAt` string (date-time)
:   Timestamp that the file was received and stored, but not processed or made available to consumers.

`ingestedAt` string (date-time)
:   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

`ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

            **queued**

            Set `type` to `"queued"`.

            `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
            :   ​

            **parsing**

            Set `type` to `"parsing"`.

            `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
            :   ​

            **ingesting**

            Set `type` to `"ingesting"`.

            `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
            :   ​

                Fields of `Ingesting`

                `progress` number
                :   Optional fraction between 0 and 1 indicating progress through ingestion.

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   ​

    Fields of `TimestampMetadata`

    `seriesName` string
    :   ​

    `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
    :   ​

        **relative**

        Set `type` to `"relative"`.

        `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
        :   ​

            Fields of `RelativeTimestamp`

            `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
            :   ​

                Values of `TimeUnit`

                `DAYS`
                :   ​

                `HOURS`
                :   ​

                `MINUTES`
                :   ​

                `SECONDS`
                :   ​

                `MILLISECONDS`
                :   ​

                `MICROSECONDS`
                :   ​

                `NANOSECONDS`
                :   ​

            `offset` string (date-time)
            :   ​

        **absolute**

        Set `type` to `"absolute"`.

        `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
        :   ​

            **iso8601**

            Set `type` to `"iso8601"`.

            `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
            :   ​

            **epochOfTimeUnit**

            Set `type` to `"epochOfTimeUnit"`.

            `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
            :   ​

                Fields of `EpochTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

            **customFormat**

            Set `type` to `"customFormat"`.

            `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
            :   ​

                Fields of `CustomTimestamp`

                `format` string
                :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                `defaultYear` integer
                :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                `defaultDayOfYear` integer
                :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

`ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
:   ​

    Fields of `IngestTagMetadata`

    `tagColumns` map of `TagName` to string
    :   A map of tag names to column names to derive the tag values from.

    `additionalFileTags` map of `TagName` to string
    :   ​

`originFilePaths` array of string
:   ​

`ingestJobRid` string (RID)
:   ​

`ingestTransformRid` string (RID)
:   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

`deletedAt` string (date-time)
:   Timestamp that the file is deleted at, only present if the file has been deleted.

`metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
:   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

    **video**

    Set `type` to `"video"`.

    `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
    :   ​

        Fields of `VideoFileMetadata`

        `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
        :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

            **mcap**

            Set `type` to `"mcap"`.

            `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
            :   ​

                Fields of `McapTimestampManifest`

                `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                :   ​

                    **topic**

                    Set `type` to `"topic"`.

                    `topic` string
                    :   ​

                    **id**

                    Set `type` to `"id"`.

                    `id` integer
                    :   ​

            **s3path**

            Set `type` to `"s3path"`.

            `s3path` string
            :   ​

            **s3paths**

            Set `type` to `"s3paths"`.

            `s3paths` array of string
            :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

            **noManifest**

            Set `type` to `"noManifest"`.

            `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
            :   ​

                Fields of `NoTimestampManifest`

                `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                :   Specifies the original starting timestamp of the video.

                `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                    **trueFrameRate**

                    Set `type` to `"trueFrameRate"`.

                    `trueFrameRate` number
                    :   ​

                    **endingTimestamp**

                    Set `type` to `"endingTimestamp"`.

                    `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   ​

                    **scaleFactor**

                    Set `type` to `"scaleFactor"`.

                    `scaleFactor` number
                    :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

        `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
        :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

            Fields of `VideoSegmentsMetadata`

            `numFrames` integer
            :   Total number of frames across all segments.

            `numSegments` integer
            :   Number of segments the video was split into.

            `scaleFactor` number
            :   Scale factor applied to timestamps during segmentation.

            `mediaDurationSeconds` number
            :   Total duration of the video in seconds.

            `mediaFrameRate` number
            :   Average frame rate (FPS) calculated as total frames / duration.

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/dataset/<dataset rid>/file/<file id>" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/dataset/<dataset rid>/file/<file id>",
    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/catalog/v1/dataset/<dataset rid>/file/<file id>",
    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/catalog/v1/dataset/<dataset rid>/file/<file id>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "id": "<dataset file id>",
  "datasetRid": "<dataset rid>",
  "name": "<name>",
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "fileSizeBytes": 1,
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "uploadedAt": "2026-01-01T00:00:00Z",
  "ingestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": {
    "type": "success",
    "success": {}
  },
  "timestampMetadata": {
    "seriesName": "<series name>",
    "timestampType": {
      "type": "relative",
      "relative": {
        "timeUnit": "DAYS",
        "offset": "2026-01-01T00:00:00Z"
      }
    }
  },
  "ingestTagMetadata": {
    "tagColumns": {
      "<key>": "<column name>"
    },
    "additionalFileTags": {
      "<key>": "<tag value>"
    }
  },
  "originFilePaths": [
    "<origin file paths>"
  ],
  "ingestJobRid": "<ingest job rid>",
  "ingestTransformRid": "<ingest transform rid>",
  "deletedAt": "2026-01-01T00:00:00Z",
  "metadata": {
    "type": "video",
    "video": {
      "timestampManifest": {
        "type": "mcap",
        "mcap": {
          "mcapChannelLocator": {
            "type": "topic",
            "topic": "<mcap channel topic>"
          }
        }
      },
      "segmentMetadata": {
        "numFrames": 1,
        "numSegments": 1,
        "scaleFactor": 1,
        "mediaDurationSeconds": 1,
        "mediaFrameRate": 1
      }
    }
  }
}
```

### Batch get dataset files

POST `/catalog/v1/dataset-files/batchGet`

Returns dataset files for the given file IDs within a single dataset. Only returns files that exist and belong to the specified dataset. Useful for checking ingestion status of many files at once.

Body

`datasetRid` string (RID) required
:   ​

`fileIds` array of string (UUID)
:   ​

Response

The body is a map of `DatasetFileId` to [`DatasetFile`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfile).

Fields of `DatasetFile`

`id` string (UUID)
:   ​

`datasetRid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
:   ​

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`fileSizeBytes` integer (int64)
:   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

`uploadedAt` string (date-time)
:   Timestamp that the file was received and stored, but not processed or made available to consumers.

`ingestedAt` string (date-time)
:   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

`ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

            **queued**

            Set `type` to `"queued"`.

            `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
            :   ​

            **parsing**

            Set `type` to `"parsing"`.

            `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
            :   ​

            **ingesting**

            Set `type` to `"ingesting"`.

            `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
            :   ​

                Fields of `Ingesting`

                `progress` number
                :   Optional fraction between 0 and 1 indicating progress through ingestion.

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   ​

    Fields of `TimestampMetadata`

    `seriesName` string
    :   ​

    `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
    :   ​

        **relative**

        Set `type` to `"relative"`.

        `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
        :   ​

            Fields of `RelativeTimestamp`

            `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
            :   ​

                Values of `TimeUnit`

                `DAYS`
                :   ​

                `HOURS`
                :   ​

                `MINUTES`
                :   ​

                `SECONDS`
                :   ​

                `MILLISECONDS`
                :   ​

                `MICROSECONDS`
                :   ​

                `NANOSECONDS`
                :   ​

            `offset` string (date-time)
            :   ​

        **absolute**

        Set `type` to `"absolute"`.

        `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
        :   ​

            **iso8601**

            Set `type` to `"iso8601"`.

            `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
            :   ​

            **epochOfTimeUnit**

            Set `type` to `"epochOfTimeUnit"`.

            `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
            :   ​

                Fields of `EpochTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

            **customFormat**

            Set `type` to `"customFormat"`.

            `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
            :   ​

                Fields of `CustomTimestamp`

                `format` string
                :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                `defaultYear` integer
                :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                `defaultDayOfYear` integer
                :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

`ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
:   ​

    Fields of `IngestTagMetadata`

    `tagColumns` map of `TagName` to string
    :   A map of tag names to column names to derive the tag values from.

    `additionalFileTags` map of `TagName` to string
    :   ​

`originFilePaths` array of string
:   ​

`ingestJobRid` string (RID)
:   ​

`ingestTransformRid` string (RID)
:   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

`deletedAt` string (date-time)
:   Timestamp that the file is deleted at, only present if the file has been deleted.

`metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
:   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

    **video**

    Set `type` to `"video"`.

    `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
    :   ​

        Fields of `VideoFileMetadata`

        `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
        :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

            **mcap**

            Set `type` to `"mcap"`.

            `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
            :   ​

                Fields of `McapTimestampManifest`

                `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                :   ​

                    **topic**

                    Set `type` to `"topic"`.

                    `topic` string
                    :   ​

                    **id**

                    Set `type` to `"id"`.

                    `id` integer
                    :   ​

            **s3path**

            Set `type` to `"s3path"`.

            `s3path` string
            :   ​

            **s3paths**

            Set `type` to `"s3paths"`.

            `s3paths` array of string
            :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

            **noManifest**

            Set `type` to `"noManifest"`.

            `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
            :   ​

                Fields of `NoTimestampManifest`

                `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                :   Specifies the original starting timestamp of the video.

                `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                    **trueFrameRate**

                    Set `type` to `"trueFrameRate"`.

                    `trueFrameRate` number
                    :   ​

                    **endingTimestamp**

                    Set `type` to `"endingTimestamp"`.

                    `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   ​

                    **scaleFactor**

                    Set `type` to `"scaleFactor"`.

                    `scaleFactor` number
                    :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

        `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
        :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

            Fields of `VideoSegmentsMetadata`

            `numFrames` integer
            :   Total number of frames across all segments.

            `numSegments` integer
            :   Number of segments the video was split into.

            `scaleFactor` number
            :   Scale factor applied to timestamps during segmentation.

            `mediaDurationSeconds` number
            :   Total duration of the video in seconds.

            `mediaFrameRate` number
            :   Average frame rate (FPS) calculated as total frames / duration.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/dataset-files/batchGet" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "datasetRid": "<dataset rid>"
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/dataset-files/batchGet",
    headers={"Authorization": "Bearer <api key>"},
    json={"datasetRid": "<dataset rid>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/dataset-files/batchGet",
    headers={"Authorization": "Bearer <api key>"},
    json={"datasetRid": "<dataset 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/catalog/v1/dataset-files/batchGet",
            headers={"Authorization": "Bearer <api key>"},
            json={"datasetRid": "<dataset rid>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "<key>": {
    "id": "<dataset file id>",
    "datasetRid": "<dataset rid>",
    "name": "<name>",
    "handle": {
      "type": "s3",
      "s3": {
        "bucket": "<bucket>",
        "key": "<key>"
      }
    },
    "fileSizeBytes": 1,
    "bounds": {
      "start": {
        "seconds": 1,
        "nanos": 1
      },
      "end": {
        "seconds": 1,
        "nanos": 1
      },
      "type": "RELATIVE"
    },
    "uploadedAt": "2026-01-01T00:00:00Z",
    "ingestedAt": "2026-01-01T00:00:00Z",
    "ingestStatus": {
      "type": "success",
      "success": {}
    },
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "ingestTagMetadata": {
      "tagColumns": {
        "<key>": "<column name>"
      },
      "additionalFileTags": {
        "<key>": "<tag value>"
      }
    },
    "originFilePaths": [
      "<origin file paths>"
    ],
    "ingestJobRid": "<ingest job rid>",
    "ingestTransformRid": "<ingest transform rid>",
    "deletedAt": "2026-01-01T00:00:00Z",
    "metadata": {
      "type": "video",
      "video": {
        "timestampManifest": {
          "type": "mcap",
          "mcap": {
            "mcapChannelLocator": {
              "type": "topic",
              "topic": "<mcap channel topic>"
            }
          }
        },
        "segmentMetadata": {
          "numFrames": 1,
          "numSegments": 1,
          "scaleFactor": 1,
          "mediaDurationSeconds": 1,
          "mediaFrameRate": 1
        }
      }
    }
  }
}
```

### Get dataset files for job

GET `/catalog/v1/ingest-job/{ingestJobRid}/files`

Path parameters

`ingestJobRid` string (RID) required
:   ​

Query parameters

`nextPageToken` string
:   ​

Response

`files` array of [`DatasetFile`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfile)
:   ​

    Fields of `DatasetFile`

    `id` string (UUID)
    :   ​

    `datasetRid` string (RID)
    :   ​

    `name` string
    :   ​

    `handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
    :   ​

        **s3**

        Set `type` to `"s3"`.

        `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
        :   ​

            Fields of `S3Handle`

            `bucket` string
            :   ​

            `key` string
            :   ​

    `fileSizeBytes` integer (int64)
    :   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

    `bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
    :   ​

        Fields of `Bounds`

        `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
        :   ​

            Fields of `Timestamp`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
        :   ​

        `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
        :   ​

            Values of `datasource.TimestampType`

            `RELATIVE`
            :   ​

            `ABSOLUTE`
            :   ​

    `uploadedAt` string (date-time)
    :   Timestamp that the file was received and stored, but not processed or made available to consumers.

    `ingestedAt` string (date-time)
    :   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

    `ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
    :   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

        **success**

        Set `type` to `"success"`.

        `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
        :   ​

        **error**

        Set `type` to `"error"`.

        `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
        :   ​

            Fields of `ErrorResult`

            `errorType` string
            :   ​

            `message` string
            :   ​

            `errorInstanceId` string
            :   ​

        **inProgress**

        Set `type` to `"inProgress"`.

        `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
        :   ​

            Fields of `InProgressResult`

            `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
            :   ​

                **queued**

                Set `type` to `"queued"`.

                `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
                :   ​

                **parsing**

                Set `type` to `"parsing"`.

                `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
                :   ​

                **ingesting**

                Set `type` to `"ingesting"`.

                `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
                :   ​

                    Fields of `Ingesting`

                    `progress` number
                    :   Optional fraction between 0 and 1 indicating progress through ingestion.

        **deletionInProgress**

        Set `type` to `"deletionInProgress"`.

        `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
        :   ​

        **deleted**

        Set `type` to `"deleted"`.

        `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
        :   ​

        **queued**

        Set `type` to `"queued"`.

        `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
        :   ​

        **parsing**

        Set `type` to `"parsing"`.

        `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
        :   ​

        **ingesting**

        Set `type` to `"ingesting"`.

        `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   ​

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

            **relative**

            Set `type` to `"relative"`.

            `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
            :   ​

                Fields of `RelativeTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

                    Values of `TimeUnit`

                    `DAYS`
                    :   ​

                    `HOURS`
                    :   ​

                    `MINUTES`
                    :   ​

                    `SECONDS`
                    :   ​

                    `MILLISECONDS`
                    :   ​

                    `MICROSECONDS`
                    :   ​

                    `NANOSECONDS`
                    :   ​

                `offset` string (date-time)
                :   ​

            **absolute**

            Set `type` to `"absolute"`.

            `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
            :   ​

                **iso8601**

                Set `type` to `"iso8601"`.

                `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
                :   ​

                **epochOfTimeUnit**

                Set `type` to `"epochOfTimeUnit"`.

                `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
                :   ​

                    Fields of `EpochTimestamp`

                    `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                    :   ​

                **customFormat**

                Set `type` to `"customFormat"`.

                `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
                :   ​

                    Fields of `CustomTimestamp`

                    `format` string
                    :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                    `defaultYear` integer
                    :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                    `defaultDayOfYear` integer
                    :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

    `ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
    :   ​

        Fields of `IngestTagMetadata`

        `tagColumns` map of `TagName` to string
        :   A map of tag names to column names to derive the tag values from.

        `additionalFileTags` map of `TagName` to string
        :   ​

    `originFilePaths` array of string
    :   ​

    `ingestJobRid` string (RID)
    :   ​

    `ingestTransformRid` string (RID)
    :   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

    `deletedAt` string (date-time)
    :   Timestamp that the file is deleted at, only present if the file has been deleted.

    `metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
    :   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

        **video**

        Set `type` to `"video"`.

        `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
        :   ​

            Fields of `VideoFileMetadata`

            `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
            :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

                **mcap**

                Set `type` to `"mcap"`.

                `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
                :   ​

                    Fields of `McapTimestampManifest`

                    `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                    :   ​

                        **topic**

                        Set `type` to `"topic"`.

                        `topic` string
                        :   ​

                        **id**

                        Set `type` to `"id"`.

                        `id` integer
                        :   ​

                **s3path**

                Set `type` to `"s3path"`.

                `s3path` string
                :   ​

                **s3paths**

                Set `type` to `"s3paths"`.

                `s3paths` array of string
                :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

                **noManifest**

                Set `type` to `"noManifest"`.

                `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
                :   ​

                    Fields of `NoTimestampManifest`

                    `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   Specifies the original starting timestamp of the video.

                    `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                    :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                        **trueFrameRate**

                        Set `type` to `"trueFrameRate"`.

                        `trueFrameRate` number
                        :   ​

                        **endingTimestamp**

                        Set `type` to `"endingTimestamp"`.

                        `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                        :   ​

                        **scaleFactor**

                        Set `type` to `"scaleFactor"`.

                        `scaleFactor` number
                        :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

            `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
            :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

                Fields of `VideoSegmentsMetadata`

                `numFrames` integer
                :   Total number of frames across all segments.

                `numSegments` integer
                :   Number of segments the video was split into.

                `scaleFactor` number
                :   Scale factor applied to timestamps during segmentation.

                `mediaDurationSeconds` number
                :   Total duration of the video in seconds.

                `mediaFrameRate` number
                :   Average frame rate (FPS) calculated as total frames / duration.

`nextPage` string
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/ingest-job/<ingest job rid>/files" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/ingest-job/<ingest job rid>/files",
    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/catalog/v1/ingest-job/<ingest job rid>/files",
    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/catalog/v1/ingest-job/<ingest job rid>/files",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "files": [
    {
      "id": "<dataset file id>",
      "datasetRid": "<dataset rid>",
      "name": "<name>",
      "handle": {
        "type": "s3",
        "s3": {
          "bucket": "<bucket>",
          "key": "<key>"
        }
      },
      "fileSizeBytes": 1,
      "bounds": {
        "start": {
          "seconds": 1,
          "nanos": 1
        },
        "end": {
          "seconds": 1,
          "nanos": 1
        },
        "type": "RELATIVE"
      },
      "uploadedAt": "2026-01-01T00:00:00Z",
      "ingestedAt": "2026-01-01T00:00:00Z",
      "ingestStatus": {
        "type": "success",
        "success": {}
      },
      "timestampMetadata": {
        "seriesName": "<series name>",
        "timestampType": {
          "type": "relative",
          "relative": {
            "timeUnit": "DAYS",
            "offset": "2026-01-01T00:00:00Z"
          }
        }
      },
      "ingestTagMetadata": {
        "tagColumns": {
          "<key>": "<column name>"
        },
        "additionalFileTags": {
          "<key>": "<tag value>"
        }
      },
      "originFilePaths": [
        "<origin file paths>"
      ],
      "ingestJobRid": "<ingest job rid>",
      "ingestTransformRid": "<ingest transform rid>",
      "deletedAt": "2026-01-01T00:00:00Z",
      "metadata": {
        "type": "video",
        "video": {
          "timestampManifest": {
            "type": "mcap",
            "mcap": {
              "mcapChannelLocator": {
                "type": "topic",
                "topic": "<mcap channel topic>"
              }
            }
          },
          "segmentMetadata": {
            "numFrames": 1,
            "numSegments": 1,
            "scaleFactor": 1,
            "mediaDurationSeconds": 1,
            "mediaFrameRate": 1
          }
        }
      }
    }
  ],
  "nextPage": "<token>"
}
```

### Search datasets

POST `/catalog/v1/search-datasets-v2`

Body

`query` [`SearchDatasetsQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetsquery) required
:   ​

    **searchText**

    Set `type` to `"searchText"`.

    `searchText` string
    :   ​

    **exactMatch**

    Set `type` to `"exactMatch"`.

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

    **label**

    Set `type` to `"label"`.

    `label` string
    :   ​

    **properties**

    Set `type` to `"properties"`.

    `properties` [`nominal.api.Property`](https://dev.nominal.io/api/rest/catalog-service.md#nominal-api-property)
    :   ​

        Fields of `nominal.api.Property`

        `name` string required
        :   ​

        `value` string required
        :   ​

    **numericProperty**

    Set `type` to `"numericProperty"`.

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

        Fields of `NumericPropertyPredicate`

        `name` string required
        :   ​

        `value` number required
        :   ​

        `operator` [`PropertyComparisonOperator`](https://dev.nominal.io/api/rest/catalog-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/catalog-service.md#numericpropertyrangepredicate)
    :   Matches datasets using an inclusive numeric property range.

        Fields of `NumericPropertyRangePredicate`

        `name` string required
        :   ​

        `min` number
        :   ​

        `max` number
        :   ​

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

            Values of `NumericPropertyRangeOperator`

            `BETWEEN`
            :   ​

            `NOT_BETWEEN`
            :   ​

    **ingestStatus**

    Set `type` to `"ingestStatus"`.

    `ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus)
    :   ​

        Values of `IngestStatus`

        `IN_PROGRESS`
        :   ​

        `COMPLETED`
        :   ​

        `FAILED`
        :   ​

        `DELETION_IN_PROGRESS`
        :   ​

        `DELETED`
        :   ​

    **ingestedBeforeInclusive**

    Set `type` to `"ingestedBeforeInclusive"`.

    `ingestedBeforeInclusive` string (date-time)
    :   Inclusive upper bound on dataset creation time (ingestDate), not lastIngestedAt.

    **ingestedAfterInclusive**

    Set `type` to `"ingestedAfterInclusive"`.

    `ingestedAfterInclusive` string (date-time)
    :   Inclusive lower bound on dataset creation time (ingestDate), not lastIngestedAt.

    **archiveStatus**

    Set `type` to `"archiveStatus"`.

    `archiveStatus` boolean
    :   ​

    **derived**

    Set `type` to `"derived"`.

    `derived` boolean
    :   Filters datasets by whether they have a derived definition.

    **and**

    Set `type` to `"and"`.

    `and` array of [`SearchDatasetsQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetsquery)
    :   ​

    **or**

    Set `type` to `"or"`.

    `or` array of [`SearchDatasetsQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetsquery)
    :   ​

    **workspace**

    Set `type` to `"workspace"`.

    `workspace` string (RID)
    :   ​

`pageSize` integer
:   Defaults to 100. Will throw if larger than 1000.

`token` string
:   ​

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

    Fields of `SortOptions`

    `isDescending` boolean required
    :   ​

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

        Values of `SortField`

        `INGEST_DATE`
        :   Dataset creation time (created_at). The name is historical; use LAST_INGESTED_AT for when data was last added.

        `START_TIME`
        :   Start of the dataset’s data bounds.

        `END_TIME`
        :   End of the dataset’s data bounds.

        `LAST_INGESTED_AT`
        :   When data was last added, as the latest of a successful file ingest and streaming-session activity. Datasets that have never received either sort last.

Response

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

    Fields of `EnrichedDataset`

    `rid` string (RID)
    :   ​

    `uuid` string (UUID)
    :   ​

    `name` string
    :   ​

    `description` string
    :   ​

    `displayName` string
    :   ​

    `metadata` map of string to string deprecated
    :   **Deprecated:** Deprecated in favor of properties.

    `handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
    :   **Deprecated:** Deprecated. Use DatasetFile#handle

        **s3**

        Set `type` to `"s3"`.

        `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
        :   ​

    `ingestDate` string (date-time)
    :   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

    `lastIngestedAt` string (date-time)
    :   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

    `ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
    :   **Deprecated:** Deprecated. Use lastIngestStatus.

        Values of `IngestStatus`

        `IN_PROGRESS`
        :   ​

        `COMPLETED`
        :   ​

        `FAILED`
        :   ​

        `DELETION_IN_PROGRESS`
        :   ​

        `DELETED`
        :   ​

    `originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
    :   ​

        Fields of `DatasetOriginMetadata`

        `path` string
        :   Deprecated in favor of FileOriginMetadata

        `xSeriesIsAbsolute` boolean
        :   Deprecated in favor of FileOriginMetadata

        `schemaDirectivePath` string
        :   Deprecated in favor of FileOriginMetadata

        `xSeriesColumnName` string
        :   Deprecated in favor of FileOriginMetadata

        `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
        :   Deprecated in favor of FileOriginMetadata

        `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
        :   Deprecated in favor of FileOriginMetadata

        `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
        :   ​

    `lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
    :   ​

        **success**

        Set `type` to `"success"`.

        `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
        :   ​

        **error**

        Set `type` to `"error"`.

        `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
        :   ​

        **inProgress**

        Set `type` to `"inProgress"`.

        `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
        :   ​

        **deletionInProgress**

        Set `type` to `"deletionInProgress"`.

        `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
        :   ​

        **deleted**

        Set `type` to `"deleted"`.

        `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
        :   ​

        **queued**

        Set `type` to `"queued"`.

        `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
        :   ​

        **parsing**

        Set `type` to `"parsing"`.

        `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
        :   ​

        **ingesting**

        Set `type` to `"ingesting"`.

        `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
        :   ​

    `retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy)
    :   ​

        Fields of `RetentionPolicy`

        `type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype)
        :   ​

        `expiryDays` integer
        :   ​

    `source` string
    :   ​

    `bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
    :   ​

        Fields of `Bounds`

        `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
        :   ​

        `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
        :   ​

        `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
        :   ​

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

        Values of `WeakTimestampType`

        `ABSOLUTE`
        :   ​

        `RELATIVE`
        :   ​

        `PENDING`
        :   ​

    `labels` array of string
    :   ​

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

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

        **stringValue**

        Set `type` to `"stringValue"`.

        `stringValue` string
        :   ​

        **numericValue**

        Set `type` to `"numericValue"`.

        `numericValue` number
        :   ​

    `granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
    :   ​

        Values of `Granularity`

        `NANOSECONDS`
        :   ​

    `allowStreaming` boolean
    :   ​

    `isArchived` boolean
    :   ​

    `defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
    :   ​

        Fields of `DefaultGroupByAndAggregationConfig`

        `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
        :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

    `migratedFromConnectionRid` string (RID)
    :   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

    `externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
    :   ​

        Fields of `ExternalConnectionMetadata`

        `connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails)
        :   ​

        `connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus)
        :   ​

        `limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
        :   ​

    `derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
    :   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

        Fields of `DerivedDefinition`

        `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   ​

        `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
        :   ​

    `channelSearchSplitTagKeys` array of string
    :   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

`nextPageToken` string
:   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/search-datasets-v2" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "query": {
    "type": "searchText",
    "searchText": "<search text>"
  },
  "sortOptions": {
    "isDescending": true,
    "field": "INGEST_DATE"
  }
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/search-datasets-v2",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "query": {"type": "searchText", "searchText": "<search text>"},
        "sortOptions": {"isDescending": True, "field": "INGEST_DATE"},
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/search-datasets-v2",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "query": {"type": "searchText", "searchText": "<search text>"},
        "sortOptions": {"isDescending": True, "field": "INGEST_DATE"},
    },
)
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/catalog/v1/search-datasets-v2",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "query": {"type": "searchText", "searchText": "<search text>"},
                "sortOptions": {"isDescending": True, "field": "INGEST_DATE"},
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "results": [
    {
      "rid": "<rid>",
      "uuid": "<uuid>",
      "name": "<name>",
      "description": "<description>",
      "displayName": "<display name>",
      "metadata": {
        "<key>": "<value>"
      },
      "handle": {
        "type": "s3",
        "s3": {
          "bucket": "<bucket>",
          "key": "<key>"
        }
      },
      "ingestDate": "2026-01-01T00:00:00Z",
      "lastIngestedAt": "2026-01-01T00:00:00Z",
      "ingestStatus": "IN_PROGRESS",
      "originMetadata": {
        "path": "<path>",
        "xSeriesIsAbsolute": true,
        "schemaDirectivePath": "<schema directive path>",
        "xSeriesColumnName": "<x series column name>",
        "xSeriesTimeUnit": "DAYS",
        "timestampMetadata": {
          "seriesName": "<series name>",
          "timestampType": {
            "type": "relative",
            "relative": {
              "timeUnit": "DAYS",
              "offset": "2026-01-01T00:00:00Z"
            }
          }
        },
        "channelConfig": {
          "prefixTreeDelimiter": "<prefix tree delimiter>"
        }
      },
      "lastIngestStatus": {
        "type": "success",
        "success": {}
      },
      "retentionPolicy": {
        "type": "KEEP_UNTIL_EXPIRY",
        "expiryDays": 1
      },
      "source": "<source>",
      "bounds": {
        "start": {
          "seconds": 1,
          "nanos": 1
        },
        "end": {
          "seconds": 1,
          "nanos": 1
        },
        "type": "RELATIVE"
      },
      "timestampType": "ABSOLUTE",
      "labels": [
        "<label>"
      ],
      "properties": {
        "<key>": "<property value>"
      },
      "typedProperties": {
        "<key>": {
          "type": "stringValue",
          "stringValue": "<property value>"
        }
      },
      "granularity": "NANOSECONDS",
      "allowStreaming": true,
      "isArchived": true,
      "defaultGroupByAndAggregationConfig": {
        "numericAggregation": {
          "type": "sum",
          "sum": {}
        }
      },
      "migratedFromConnectionRid": "<connection rid>",
      "externalConnectionMetadata": {
        "connectionDetails": {
          "type": "timescale",
          "timescale": {
            "database": "<database>",
            "host": "<host>",
            "port": 1,
            "username": "<username>",
            "passwordSecretRid": "<secret rid>"
          }
        },
        "connectionStatus": {
          "isConnected": true
        },
        "limits": {
          "maxQueryRange": {
            "unit": "HOURS",
            "count": 1
          }
        }
      },
      "derivedDefinition": {
        "spec": {
          "type": "asset",
          "asset": {
            "rid": {
              "type": "literal",
              "literal": "<literal>"
            }
          }
        },
        "commit": {
          "id": "<commit id>",
          "resourceRid": "<resource rid>",
          "parentCommit": "<commit id>",
          "mergeParentCommit": "<commit id>",
          "message": "<message>",
          "isWorkingState": true,
          "committedBy": "<user rid>",
          "committedAt": "2026-01-01T00:00:00Z"
        }
      },
      "channelSearchSplitTagKeys": [
        "<tag name>"
      ]
    }
  ],
  "nextPageToken": "<token>"
}
```

### Update dataset ingest status v2

PUT `/catalog/v1/datasets/ingest-status-v2`

Body

`status` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2) required
:   ​

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string required
        :   ​

        `message` string required
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

            **queued**

            Set `type` to `"queued"`.

            `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
            :   ​

            **parsing**

            Set `type` to `"parsing"`.

            `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
            :   ​

            **ingesting**

            Set `type` to `"ingesting"`.

            `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
            :   ​

                Fields of `Ingesting`

                `progress` number
                :   Optional fraction between 0 and 1 indicating progress through ingestion.

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`datasetUuid` string (UUID) required
:   ​

Response

A [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2) union.

**success**

Set `type` to `"success"`.

`success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
:   ​

**error**

Set `type` to `"error"`.

`error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
:   ​

    Fields of `ErrorResult`

    `errorType` string
    :   ​

    `message` string
    :   ​

    `errorInstanceId` string
    :   ​

**inProgress**

Set `type` to `"inProgress"`.

`inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
:   ​

    Fields of `InProgressResult`

    `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
    :   ​

        **queued**

        Set `type` to `"queued"`.

        `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
        :   ​

        **parsing**

        Set `type` to `"parsing"`.

        `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
        :   ​

        **ingesting**

        Set `type` to `"ingesting"`.

        `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
        :   ​

            Fields of `Ingesting`

            `progress` number
            :   Optional fraction between 0 and 1 indicating progress through ingestion.

**deletionInProgress**

Set `type` to `"deletionInProgress"`.

`deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
:   ​

**deleted**

Set `type` to `"deleted"`.

`deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
:   ​

**queued**

Set `type` to `"queued"`.

`queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
:   ​

**parsing**

Set `type` to `"parsing"`.

`parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
:   ​

**ingesting**

Set `type` to `"ingesting"`.

`ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
:   ​

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/catalog/v1/datasets/ingest-status-v2" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "status": {
    "type": "success",
    "success": {}
  },
  "datasetUuid": "<dataset uuid>"
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/ingest-status-v2",
    headers={"Authorization": "Bearer <api key>"},
    json={"status": {"type": "success", "success": {}}, "datasetUuid": "<dataset uuid>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/ingest-status-v2",
    headers={"Authorization": "Bearer <api key>"},
    json={"status": {"type": "success", "success": {}}, "datasetUuid": "<dataset uuid>"},
)
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/catalog/v1/datasets/ingest-status-v2",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "status": {"type": "success", "success": {}},
                "datasetUuid": "<dataset uuid>",
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "type": "success",
  "success": {}
}
```

### Get ingest progress v2

GET `/catalog/v1/datasets/{datasetRid}/ingest-progress-v2`

**Deprecated:** Deprecated in favor of getDatasetFile.

Path parameters

`datasetRid` string (RID) required
:   ​

Response

`startTime` string (date-time)
:   Timestamp at start of ingest

`endTime` string (date-time)
:   Timestamp at end of ingest, empty if still in progress

`ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   Status of ingest, contains error if failed

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

            **queued**

            Set `type` to `"queued"`.

            `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
            :   ​

            **parsing**

            Set `type` to `"parsing"`.

            `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
            :   ​

            **ingesting**

            Set `type` to `"ingesting"`.

            `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
            :   ​

                Fields of `Ingesting`

                `progress` number
                :   Optional fraction between 0 and 1 indicating progress through ingestion.

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`incalculable` boolean
:   Whether ingest duration can be reliably calculated

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/ingest-progress-v2" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/ingest-progress-v2",
    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/catalog/v1/datasets/<dataset rid>/ingest-progress-v2",
    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/catalog/v1/datasets/<dataset rid>/ingest-progress-v2",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "startTime": "2026-01-01T00:00:00Z",
  "endTime": "2026-01-01T00:00:00Z",
  "ingestStatus": {
    "type": "success",
    "success": {}
  },
  "incalculable": true
}
```

### Get handle for dataset

GET `/catalog/v1/datasets/{dataset}/handle`

**Deprecated:** Returned in Dataset

Path parameters

`dataset` string (UUID) required
:   ​

Response

A [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) union.

**s3**

Set `type` to `"s3"`.

`s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
:   ​

    Fields of `S3Handle`

    `bucket` string
    :   ​

    `key` string
    :   ​

When there is nothing to return, the response is HTTP 204 with no body.

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset>/handle" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset>/handle",
    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/catalog/v1/datasets/<dataset>/handle",
    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/catalog/v1/datasets/<dataset>/handle",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "type": "s3",
  "s3": {
    "bucket": "<bucket>",
    "key": "<key>"
  }
}
```

### Create dataset

POST `/catalog/v1/datasets`

Body

`name` string required
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Handles should only be specified when adding files to datasets

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string required
        :   ​

        `key` string required
        :   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata) required
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string required
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype) required
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`labels` array of string
:   ​

`properties` map of `PropertyName` to string deprecated
:   User-defined dataset properties. The UTF-8 JSON serialization must not exceed 2,000 bytes. **Deprecated:** use typedProperties

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`description` string
:   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   Granularity of dataset timestamps. Defaults to nanoseconds.

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`isV2Dataset` boolean deprecated
:   If true, the dataset should be ingested to the v2 tables and is compatible with streaming. **Deprecated:** Regardless of what value is specified, this flag is treated as true by the service.

`workspace` string (RID)
:   The workspace in which to create the dataset. If not provided, the dataset will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured.

`markingRids` array of string (RID)
:   The markings to apply to the created dataset. If not provided, the dataset will be visible to all users in the same workspace.

`derivedDefinition` [`CreateDerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#createderiveddefinition)
:   Definition for a derived dataset. When present, the created dataset is virtual and does not ingest or persist dataset files.

    Fields of `CreateDerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
    :   Initial derived dataset logic.

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `message` string required
    :   Initial commit message for the derived definition’s main branch.

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Every key must be produced by `derivedDefinition`; ingested tag keys, and keys supplied without a `derivedDefinition`, are rejected.

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   If set, the dataset’s default group-by and aggregation config.

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

Response

`rid` string (RID)
:   ​

`uuid` string (UUID)
:   ​

`name` string
:   ​

`description` string
:   ​

`displayName` string
:   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties.

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`ingestDate` string (date-time)
:   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

`lastIngestedAt` string (date-time)
:   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
:   **Deprecated:** Deprecated. Use lastIngestStatus.

    Values of `IngestStatus`

    `IN_PROGRESS`
    :   ​

    `COMPLETED`
    :   ​

    `FAILED`
    :   ​

    `DELETION_IN_PROGRESS`
    :   ​

    `DELETED`
    :   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   ​

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

        Fields of `Ingesting`

        `progress` number
        :   Optional fraction between 0 and 1 indicating progress through ingestion.

`retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy)
:   ​

    Fields of `RetentionPolicy`

    `type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype)
    :   ​

        Values of `RetentionPolicyType`

        `KEEP_UNTIL_EXPIRY`
        :   ​

        `KEEP_FOREVER`
        :   ​

    `expiryDays` integer
    :   ​

`source` string
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`labels` array of string
:   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`allowStreaming` boolean
:   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

`migratedFromConnectionRid` string (RID)
:   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

`externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
:   ​

    Fields of `ExternalConnectionMetadata`

    `connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails)
    :   ​

        **timescale**

        Set `type` to `"timescale"`.

        `timescale` [`TimescaleConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timescaleconnectiondetails)
        :   ​

        **influx**

        Set `type` to `"influx"`.

        `influx` [`Influx2ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx2connectiondetails)
        :   ​

        **influx1**

        Set `type` to `"influx1"`.

        `influx1` [`Influx1ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx1connectiondetails)
        :   ​

        **nominal**

        Set `type` to `"nominal"`.

        `nominal` [`NominalConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#nominalconnectiondetails)
        :   ​

        **timestream**

        Set `type` to `"timestream"`.

        `timestream` [`TimestreamConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamconnectiondetails)
        :   ​

        **visualCrossing**

        Set `type` to `"visualCrossing"`.

        `visualCrossing` [`VisualCrossingConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingconnectiondetails)
        :   ​

        **bigQuery**

        Set `type` to `"bigQuery"`.

        `bigQuery` [`BigQueryConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryconnectiondetails)
        :   ​

    `connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus)
    :   ​

        Fields of `ConnectionStatus`

        `isConnected` boolean
        :   ​

    `limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
    :   ​

        Fields of `LimitsConfig`

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

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

        Fields of `Commit`

        `id` string
        :   ​

        `resourceRid` string (RID)
        :   ​

        `parentCommit` string
        :   ​

        `mergeParentCommit` string
        :   ​

        `message` string
        :   ​

        `isWorkingState` boolean
        :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

        `committedBy` string (RID)
        :   ​

        `committedAt` string (date-time)
        :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "name": "<name>",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  }
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "name": "<name>",
        "originMetadata": {
            "path": "<path>",
            "xSeriesIsAbsolute": True,
            "schemaDirectivePath": "<schema directive path>",
            "xSeriesColumnName": "<x series column name>",
            "xSeriesTimeUnit": "DAYS",
            "timestampMetadata": {
                "seriesName": "<series name>",
                "timestampType": {"type": "relative", "relative": {"timeUnit": "DAYS"}},
            },
            "channelConfig": {"prefixTreeDelimiter": "<prefix tree delimiter>"},
        },
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "name": "<name>",
        "originMetadata": {
            "path": "<path>",
            "xSeriesIsAbsolute": True,
            "schemaDirectivePath": "<schema directive path>",
            "xSeriesColumnName": "<x series column name>",
            "xSeriesTimeUnit": "DAYS",
            "timestampMetadata": {
                "seriesName": "<series name>",
                "timestampType": {"type": "relative", "relative": {"timeUnit": "DAYS"}},
            },
            "channelConfig": {"prefixTreeDelimiter": "<prefix tree delimiter>"},
        },
    },
)
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/catalog/v1/datasets",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "name": "<name>",
                "originMetadata": {
                    "path": "<path>",
                    "xSeriesIsAbsolute": True,
                    "schemaDirectivePath": "<schema directive path>",
                    "xSeriesColumnName": "<x series column name>",
                    "xSeriesTimeUnit": "DAYS",
                    "timestampMetadata": {
                        "seriesName": "<series name>",
                        "timestampType": {
                            "type": "relative",
                            "relative": {"timeUnit": "DAYS"},
                        },
                    },
                    "channelConfig": {"prefixTreeDelimiter": "<prefix tree delimiter>"},
                },
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<rid>",
  "uuid": "<uuid>",
  "name": "<name>",
  "description": "<description>",
  "displayName": "<display name>",
  "metadata": {
    "<key>": "<value>"
  },
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "ingestDate": "2026-01-01T00:00:00Z",
  "lastIngestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": "IN_PROGRESS",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  },
  "lastIngestStatus": {
    "type": "success",
    "success": {}
  },
  "retentionPolicy": {
    "type": "KEEP_UNTIL_EXPIRY",
    "expiryDays": 1
  },
  "source": "<source>",
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "timestampType": "ABSOLUTE",
  "labels": [
    "<label>"
  ],
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "granularity": "NANOSECONDS",
  "allowStreaming": true,
  "isArchived": true,
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  },
  "migratedFromConnectionRid": "<connection rid>",
  "externalConnectionMetadata": {
    "connectionDetails": {
      "type": "timescale",
      "timescale": {
        "database": "<database>",
        "host": "<host>",
        "port": 1,
        "username": "<username>",
        "passwordSecretRid": "<secret rid>"
      }
    },
    "connectionStatus": {
      "isConnected": true
    },
    "limits": {
      "maxQueryRange": {
        "unit": "HOURS",
        "count": 1
      }
    }
  },
  "derivedDefinition": {
    "spec": {
      "type": "asset",
      "asset": {
        "rid": {
          "type": "literal",
          "literal": "<literal>"
        }
      }
    },
    "commit": {
      "id": "<commit id>",
      "resourceRid": "<resource rid>",
      "parentCommit": "<commit id>",
      "mergeParentCommit": "<commit id>",
      "message": "<message>",
      "isWorkingState": true,
      "committedBy": "<user rid>",
      "committedAt": "2026-01-01T00:00:00Z"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ]
}
```

### Create or update dataset

POST `/catalog/v1/datasets/create-or-update`

**Deprecated:** Use createDataset instead.

Creates a dataset if the s3 path does not exist, otherwise updates the dataset

Body

`name` string required
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Handles should only be specified when adding files to datasets

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string required
        :   ​

        `key` string required
        :   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata) required
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string required
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype) required
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`labels` array of string
:   ​

`properties` map of `PropertyName` to string deprecated
:   User-defined dataset properties. The UTF-8 JSON serialization must not exceed 2,000 bytes. **Deprecated:** use typedProperties

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`description` string
:   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   Granularity of dataset timestamps. Defaults to nanoseconds.

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`isV2Dataset` boolean deprecated
:   If true, the dataset should be ingested to the v2 tables and is compatible with streaming. **Deprecated:** Regardless of what value is specified, this flag is treated as true by the service.

`workspace` string (RID)
:   The workspace in which to create the dataset. If not provided, the dataset will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured.

`markingRids` array of string (RID)
:   The markings to apply to the created dataset. If not provided, the dataset will be visible to all users in the same workspace.

`derivedDefinition` [`CreateDerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#createderiveddefinition)
:   Definition for a derived dataset. When present, the created dataset is virtual and does not ingest or persist dataset files.

    Fields of `CreateDerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
    :   Initial derived dataset logic.

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `message` string required
    :   Initial commit message for the derived definition’s main branch.

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Every key must be produced by `derivedDefinition`; ingested tag keys, and keys supplied without a `derivedDefinition`, are rejected.

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   If set, the dataset’s default group-by and aggregation config.

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

Response

`rid` string (RID)
:   ​

`uuid` string (UUID)
:   ​

`name` string
:   ​

`description` string
:   ​

`displayName` string
:   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties.

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`ingestDate` string (date-time)
:   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

`lastIngestedAt` string (date-time)
:   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
:   **Deprecated:** Deprecated. Use lastIngestStatus.

    Values of `IngestStatus`

    `IN_PROGRESS`
    :   ​

    `COMPLETED`
    :   ​

    `FAILED`
    :   ​

    `DELETION_IN_PROGRESS`
    :   ​

    `DELETED`
    :   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   ​

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

        Fields of `Ingesting`

        `progress` number
        :   Optional fraction between 0 and 1 indicating progress through ingestion.

`retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy)
:   ​

    Fields of `RetentionPolicy`

    `type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype)
    :   ​

        Values of `RetentionPolicyType`

        `KEEP_UNTIL_EXPIRY`
        :   ​

        `KEEP_FOREVER`
        :   ​

    `expiryDays` integer
    :   ​

`source` string
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`labels` array of string
:   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`allowStreaming` boolean
:   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

`migratedFromConnectionRid` string (RID)
:   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

`externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
:   ​

    Fields of `ExternalConnectionMetadata`

    `connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails)
    :   ​

        **timescale**

        Set `type` to `"timescale"`.

        `timescale` [`TimescaleConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timescaleconnectiondetails)
        :   ​

        **influx**

        Set `type` to `"influx"`.

        `influx` [`Influx2ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx2connectiondetails)
        :   ​

        **influx1**

        Set `type` to `"influx1"`.

        `influx1` [`Influx1ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx1connectiondetails)
        :   ​

        **nominal**

        Set `type` to `"nominal"`.

        `nominal` [`NominalConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#nominalconnectiondetails)
        :   ​

        **timestream**

        Set `type` to `"timestream"`.

        `timestream` [`TimestreamConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamconnectiondetails)
        :   ​

        **visualCrossing**

        Set `type` to `"visualCrossing"`.

        `visualCrossing` [`VisualCrossingConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingconnectiondetails)
        :   ​

        **bigQuery**

        Set `type` to `"bigQuery"`.

        `bigQuery` [`BigQueryConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryconnectiondetails)
        :   ​

    `connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus)
    :   ​

        Fields of `ConnectionStatus`

        `isConnected` boolean
        :   ​

    `limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
    :   ​

        Fields of `LimitsConfig`

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

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

        Fields of `Commit`

        `id` string
        :   ​

        `resourceRid` string (RID)
        :   ​

        `parentCommit` string
        :   ​

        `mergeParentCommit` string
        :   ​

        `message` string
        :   ​

        `isWorkingState` boolean
        :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

        `committedBy` string (RID)
        :   ​

        `committedAt` string (date-time)
        :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/create-or-update" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "name": "<name>",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  }
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/create-or-update",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "name": "<name>",
        "originMetadata": {
            "path": "<path>",
            "xSeriesIsAbsolute": True,
            "schemaDirectivePath": "<schema directive path>",
            "xSeriesColumnName": "<x series column name>",
            "xSeriesTimeUnit": "DAYS",
            "timestampMetadata": {
                "seriesName": "<series name>",
                "timestampType": {"type": "relative", "relative": {"timeUnit": "DAYS"}},
            },
            "channelConfig": {"prefixTreeDelimiter": "<prefix tree delimiter>"},
        },
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/create-or-update",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "name": "<name>",
        "originMetadata": {
            "path": "<path>",
            "xSeriesIsAbsolute": True,
            "schemaDirectivePath": "<schema directive path>",
            "xSeriesColumnName": "<x series column name>",
            "xSeriesTimeUnit": "DAYS",
            "timestampMetadata": {
                "seriesName": "<series name>",
                "timestampType": {"type": "relative", "relative": {"timeUnit": "DAYS"}},
            },
            "channelConfig": {"prefixTreeDelimiter": "<prefix tree delimiter>"},
        },
    },
)
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/catalog/v1/datasets/create-or-update",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "name": "<name>",
                "originMetadata": {
                    "path": "<path>",
                    "xSeriesIsAbsolute": True,
                    "schemaDirectivePath": "<schema directive path>",
                    "xSeriesColumnName": "<x series column name>",
                    "xSeriesTimeUnit": "DAYS",
                    "timestampMetadata": {
                        "seriesName": "<series name>",
                        "timestampType": {
                            "type": "relative",
                            "relative": {"timeUnit": "DAYS"},
                        },
                    },
                    "channelConfig": {"prefixTreeDelimiter": "<prefix tree delimiter>"},
                },
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<rid>",
  "uuid": "<uuid>",
  "name": "<name>",
  "description": "<description>",
  "displayName": "<display name>",
  "metadata": {
    "<key>": "<value>"
  },
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "ingestDate": "2026-01-01T00:00:00Z",
  "lastIngestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": "IN_PROGRESS",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  },
  "lastIngestStatus": {
    "type": "success",
    "success": {}
  },
  "retentionPolicy": {
    "type": "KEEP_UNTIL_EXPIRY",
    "expiryDays": 1
  },
  "source": "<source>",
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "timestampType": "ABSOLUTE",
  "labels": [
    "<label>"
  ],
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "granularity": "NANOSECONDS",
  "allowStreaming": true,
  "isArchived": true,
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  },
  "migratedFromConnectionRid": "<connection rid>",
  "externalConnectionMetadata": {
    "connectionDetails": {
      "type": "timescale",
      "timescale": {
        "database": "<database>",
        "host": "<host>",
        "port": 1,
        "username": "<username>",
        "passwordSecretRid": "<secret rid>"
      }
    },
    "connectionStatus": {
      "isConnected": true
    },
    "limits": {
      "maxQueryRange": {
        "unit": "HOURS",
        "count": 1
      }
    }
  },
  "derivedDefinition": {
    "spec": {
      "type": "asset",
      "asset": {
        "rid": {
          "type": "literal",
          "literal": "<literal>"
        }
      }
    },
    "commit": {
      "id": "<commit id>",
      "resourceRid": "<resource rid>",
      "parentCommit": "<commit id>",
      "mergeParentCommit": "<commit id>",
      "message": "<message>",
      "isWorkingState": true,
      "committedBy": "<user rid>",
      "committedAt": "2026-01-01T00:00:00Z"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ]
}
```

### Create dataset with uuid

POST `/catalog/v1/datasets/with-uuid`

Creates a dataset with a specific UUID. This is useful for migrations and advanced use cases where the dataset UUID must be controlled by the caller. Throws a conflict error if a dataset with the specified UUID already exists. This endpoint is not intended for general use. Use /datasets instead to create a new dataset.

Body

`uuid` string (UUID) required
:   The UUID to assign to the new dataset.

`createDataset` [`CreateDataset`](https://dev.nominal.io/api/rest/catalog-service.md#createdataset) required
:   ​

    Fields of `CreateDataset`

    `name` string required
    :   ​

    `handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
    :   **Deprecated:** Handles should only be specified when adding files to datasets

        **s3**

        Set `type` to `"s3"`.

        `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
        :   ​

    `metadata` map of string to string deprecated
    :   **Deprecated:** Deprecated in favor of properties

    `originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata) required
    :   ​

        Fields of `DatasetOriginMetadata`

        `path` string
        :   Deprecated in favor of FileOriginMetadata

        `xSeriesIsAbsolute` boolean
        :   Deprecated in favor of FileOriginMetadata

        `schemaDirectivePath` string
        :   Deprecated in favor of FileOriginMetadata

        `xSeriesColumnName` string
        :   Deprecated in favor of FileOriginMetadata

        `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
        :   Deprecated in favor of FileOriginMetadata

        `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
        :   Deprecated in favor of FileOriginMetadata

        `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
        :   ​

    `labels` array of string
    :   ​

    `properties` map of `PropertyName` to string deprecated
    :   User-defined dataset properties. The UTF-8 JSON serialization must not exceed 2,000 bytes. **Deprecated:** use typedProperties

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

        **stringValue**

        Set `type` to `"stringValue"`.

        `stringValue` string
        :   ​

        **numericValue**

        Set `type` to `"numericValue"`.

        `numericValue` number
        :   ​

    `description` string
    :   ​

    `granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
    :   Granularity of dataset timestamps. Defaults to nanoseconds.

        Values of `Granularity`

        `NANOSECONDS`
        :   ​

    `isV2Dataset` boolean deprecated
    :   If true, the dataset should be ingested to the v2 tables and is compatible with streaming. **Deprecated:** Regardless of what value is specified, this flag is treated as true by the service.

    `workspace` string (RID)
    :   The workspace in which to create the dataset. If not provided, the dataset will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured.

    `markingRids` array of string (RID)
    :   The markings to apply to the created dataset. If not provided, the dataset will be visible to all users in the same workspace.

    `derivedDefinition` [`CreateDerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#createderiveddefinition)
    :   Definition for a derived dataset. When present, the created dataset is virtual and does not ingest or persist dataset files.

        Fields of `CreateDerivedDefinition`

        `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   Initial derived dataset logic.

        `message` string required
        :   Initial commit message for the derived definition’s main branch.

    `channelSearchSplitTagKeys` array of string
    :   Tag keys whose distinct values channel search surfaces as separate series. Every key must be produced by `derivedDefinition`; ingested tag keys, and keys supplied without a `derivedDefinition`, are rejected.

    `defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
    :   If set, the dataset’s default group-by and aggregation config.

        Fields of `DefaultGroupByAndAggregationConfig`

        `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
        :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

Response

`rid` string (RID)
:   ​

`uuid` string (UUID)
:   ​

`name` string
:   ​

`description` string
:   ​

`displayName` string
:   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties.

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`ingestDate` string (date-time)
:   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

`lastIngestedAt` string (date-time)
:   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
:   **Deprecated:** Deprecated. Use lastIngestStatus.

    Values of `IngestStatus`

    `IN_PROGRESS`
    :   ​

    `COMPLETED`
    :   ​

    `FAILED`
    :   ​

    `DELETION_IN_PROGRESS`
    :   ​

    `DELETED`
    :   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   ​

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

        Fields of `Ingesting`

        `progress` number
        :   Optional fraction between 0 and 1 indicating progress through ingestion.

`retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy)
:   ​

    Fields of `RetentionPolicy`

    `type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype)
    :   ​

        Values of `RetentionPolicyType`

        `KEEP_UNTIL_EXPIRY`
        :   ​

        `KEEP_FOREVER`
        :   ​

    `expiryDays` integer
    :   ​

`source` string
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`labels` array of string
:   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`allowStreaming` boolean
:   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

`migratedFromConnectionRid` string (RID)
:   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

`externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
:   ​

    Fields of `ExternalConnectionMetadata`

    `connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails)
    :   ​

        **timescale**

        Set `type` to `"timescale"`.

        `timescale` [`TimescaleConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timescaleconnectiondetails)
        :   ​

        **influx**

        Set `type` to `"influx"`.

        `influx` [`Influx2ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx2connectiondetails)
        :   ​

        **influx1**

        Set `type` to `"influx1"`.

        `influx1` [`Influx1ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx1connectiondetails)
        :   ​

        **nominal**

        Set `type` to `"nominal"`.

        `nominal` [`NominalConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#nominalconnectiondetails)
        :   ​

        **timestream**

        Set `type` to `"timestream"`.

        `timestream` [`TimestreamConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamconnectiondetails)
        :   ​

        **visualCrossing**

        Set `type` to `"visualCrossing"`.

        `visualCrossing` [`VisualCrossingConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingconnectiondetails)
        :   ​

        **bigQuery**

        Set `type` to `"bigQuery"`.

        `bigQuery` [`BigQueryConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryconnectiondetails)
        :   ​

    `connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus)
    :   ​

        Fields of `ConnectionStatus`

        `isConnected` boolean
        :   ​

    `limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
    :   ​

        Fields of `LimitsConfig`

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

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

        Fields of `Commit`

        `id` string
        :   ​

        `resourceRid` string (RID)
        :   ​

        `parentCommit` string
        :   ​

        `mergeParentCommit` string
        :   ​

        `message` string
        :   ​

        `isWorkingState` boolean
        :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

        `committedBy` string (RID)
        :   ​

        `committedAt` string (date-time)
        :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/with-uuid" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "uuid": "<uuid>",
  "createDataset": {
    "name": "<name>",
    "originMetadata": {
      "path": "<path>",
      "xSeriesIsAbsolute": true,
      "schemaDirectivePath": "<schema directive path>",
      "xSeriesColumnName": "<x series column name>",
      "xSeriesTimeUnit": "DAYS",
      "timestampMetadata": {
        "seriesName": "<series name>",
        "timestampType": {
          "type": "relative",
          "relative": {
            "timeUnit": "DAYS"
          }
        }
      },
      "channelConfig": {
        "prefixTreeDelimiter": "<prefix tree delimiter>"
      }
    }
  }
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/with-uuid",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "uuid": "<uuid>",
        "createDataset": {
            "name": "<name>",
            "originMetadata": {
                "path": "<path>",
                "xSeriesIsAbsolute": True,
                "schemaDirectivePath": "<schema directive path>",
                "xSeriesColumnName": "<x series column name>",
                "xSeriesTimeUnit": "DAYS",
                "timestampMetadata": {
                    "seriesName": "<series name>",
                    "timestampType": {
                        "type": "relative",
                        "relative": {"timeUnit": "DAYS"},
                    },
                },
                "channelConfig": {"prefixTreeDelimiter": "<prefix tree delimiter>"},
            },
        },
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/with-uuid",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "uuid": "<uuid>",
        "createDataset": {
            "name": "<name>",
            "originMetadata": {
                "path": "<path>",
                "xSeriesIsAbsolute": True,
                "schemaDirectivePath": "<schema directive path>",
                "xSeriesColumnName": "<x series column name>",
                "xSeriesTimeUnit": "DAYS",
                "timestampMetadata": {
                    "seriesName": "<series name>",
                    "timestampType": {
                        "type": "relative",
                        "relative": {"timeUnit": "DAYS"},
                    },
                },
                "channelConfig": {"prefixTreeDelimiter": "<prefix tree delimiter>"},
            },
        },
    },
)
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/catalog/v1/datasets/with-uuid",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "uuid": "<uuid>",
                "createDataset": {
                    "name": "<name>",
                    "originMetadata": {
                        "path": "<path>",
                        "xSeriesIsAbsolute": True,
                        "schemaDirectivePath": "<schema directive path>",
                        "xSeriesColumnName": "<x series column name>",
                        "xSeriesTimeUnit": "DAYS",
                        "timestampMetadata": {
                            "seriesName": "<series name>",
                            "timestampType": {
                                "type": "relative",
                                "relative": {"timeUnit": "DAYS"},
                            },
                        },
                        "channelConfig": {
                            "prefixTreeDelimiter": "<prefix tree delimiter>",
                        },
                    },
                },
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<rid>",
  "uuid": "<uuid>",
  "name": "<name>",
  "description": "<description>",
  "displayName": "<display name>",
  "metadata": {
    "<key>": "<value>"
  },
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "ingestDate": "2026-01-01T00:00:00Z",
  "lastIngestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": "IN_PROGRESS",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  },
  "lastIngestStatus": {
    "type": "success",
    "success": {}
  },
  "retentionPolicy": {
    "type": "KEEP_UNTIL_EXPIRY",
    "expiryDays": 1
  },
  "source": "<source>",
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "timestampType": "ABSOLUTE",
  "labels": [
    "<label>"
  ],
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "granularity": "NANOSECONDS",
  "allowStreaming": true,
  "isArchived": true,
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  },
  "migratedFromConnectionRid": "<connection rid>",
  "externalConnectionMetadata": {
    "connectionDetails": {
      "type": "timescale",
      "timescale": {
        "database": "<database>",
        "host": "<host>",
        "port": 1,
        "username": "<username>",
        "passwordSecretRid": "<secret rid>"
      }
    },
    "connectionStatus": {
      "isConnected": true
    },
    "limits": {
      "maxQueryRange": {
        "unit": "HOURS",
        "count": 1
      }
    }
  },
  "derivedDefinition": {
    "spec": {
      "type": "asset",
      "asset": {
        "rid": {
          "type": "literal",
          "literal": "<literal>"
        }
      }
    },
    "commit": {
      "id": "<commit id>",
      "resourceRid": "<resource rid>",
      "parentCommit": "<commit id>",
      "mergeParentCommit": "<commit id>",
      "message": "<message>",
      "isWorkingState": true,
      "committedBy": "<user rid>",
      "committedAt": "2026-01-01T00:00:00Z"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ]
}
```

### Add file to dataset

POST `/catalog/v1/datasets/{datasetRid}/add-file`

Adds a single file to an existing dataset.

Path parameters

`datasetRid` string (RID) required
:   ​

Body

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

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string required
        :   ​

        `key` string required
        :   ​

`fileSize` integer (int64) required
:   The size of the file in bytes.

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   ​

    Fields of `TimestampMetadata`

    `seriesName` string required
    :   ​

    `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype) required
    :   ​

        **relative**

        Set `type` to `"relative"`.

        `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
        :   ​

            Fields of `RelativeTimestamp`

            `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit) required
            :   ​

                Values of `TimeUnit`

                `DAYS`
                :   ​

                `HOURS`
                :   ​

                `MINUTES`
                :   ​

                `SECONDS`
                :   ​

                `MILLISECONDS`
                :   ​

                `MICROSECONDS`
                :   ​

                `NANOSECONDS`
                :   ​

            `offset` string (date-time)
            :   ​

        **absolute**

        Set `type` to `"absolute"`.

        `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
        :   ​

            **iso8601**

            Set `type` to `"iso8601"`.

            `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
            :   ​

            **epochOfTimeUnit**

            Set `type` to `"epochOfTimeUnit"`.

            `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
            :   ​

                Fields of `EpochTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit) required
                :   ​

            **customFormat**

            Set `type` to `"customFormat"`.

            `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
            :   ​

                Fields of `CustomTimestamp`

                `format` string required
                :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                `defaultYear` integer
                :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                `defaultDayOfYear` integer
                :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

`ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
:   ​

    Fields of `IngestTagMetadata`

    `tagColumns` map of `TagName` to string
    :   A map of tag names to column names to derive the tag values from.

    `additionalFileTags` map of `TagName` to string
    :   ​

`originFileHandles` array of [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
:   ​

`ingestJobRid` string (RID)
:   ​

`metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
:   File-type-specific metadata. For video files, contains timestamp manifest.

    **video**

    Set `type` to `"video"`.

    `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
    :   ​

        Fields of `VideoFileMetadata`

        `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest) required
        :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

            **mcap**

            Set `type` to `"mcap"`.

            `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
            :   ​

                Fields of `McapTimestampManifest`

                `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator) required
                :   ​

                    **topic**

                    Set `type` to `"topic"`.

                    `topic` string
                    :   ​

                    **id**

                    Set `type` to `"id"`.

                    `id` integer
                    :   ​

            **s3path**

            Set `type` to `"s3path"`.

            `s3path` string
            :   ​

            **s3paths**

            Set `type` to `"s3paths"`.

            `s3paths` array of string
            :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

            **noManifest**

            Set `type` to `"noManifest"`.

            `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
            :   ​

                Fields of `NoTimestampManifest`

                `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
                :   Specifies the original starting timestamp of the video.

                    Fields of `Timestamp`

                    `seconds` integer (int64) required
                    :   ​

                    `nanos` integer (int64) required
                    :   ​

                `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                    **trueFrameRate**

                    Set `type` to `"trueFrameRate"`.

                    `trueFrameRate` number
                    :   ​

                    **endingTimestamp**

                    Set `type` to `"endingTimestamp"`.

                    `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   ​

                    **scaleFactor**

                    Set `type` to `"scaleFactor"`.

                    `scaleFactor` number
                    :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

        `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
        :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

            Fields of `VideoSegmentsMetadata`

            `numFrames` integer required
            :   Total number of frames across all segments.

            `numSegments` integer required
            :   Number of segments the video was split into.

            `scaleFactor` number required
            :   Scale factor applied to timestamps during segmentation.

            `mediaDurationSeconds` number required
            :   Total duration of the video in seconds.

            `mediaFrameRate` number required
            :   Average frame rate (FPS) calculated as total frames / duration.

Response

`id` string (UUID)
:   ​

`datasetRid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
:   ​

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`fileSizeBytes` integer (int64)
:   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

`uploadedAt` string (date-time)
:   Timestamp that the file was received and stored, but not processed or made available to consumers.

`ingestedAt` string (date-time)
:   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

`ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

            **queued**

            Set `type` to `"queued"`.

            `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
            :   ​

            **parsing**

            Set `type` to `"parsing"`.

            `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
            :   ​

            **ingesting**

            Set `type` to `"ingesting"`.

            `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
            :   ​

                Fields of `Ingesting`

                `progress` number
                :   Optional fraction between 0 and 1 indicating progress through ingestion.

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   ​

    Fields of `TimestampMetadata`

    `seriesName` string
    :   ​

    `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
    :   ​

        **relative**

        Set `type` to `"relative"`.

        `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
        :   ​

            Fields of `RelativeTimestamp`

            `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
            :   ​

                Values of `TimeUnit`

                `DAYS`
                :   ​

                `HOURS`
                :   ​

                `MINUTES`
                :   ​

                `SECONDS`
                :   ​

                `MILLISECONDS`
                :   ​

                `MICROSECONDS`
                :   ​

                `NANOSECONDS`
                :   ​

            `offset` string (date-time)
            :   ​

        **absolute**

        Set `type` to `"absolute"`.

        `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
        :   ​

            **iso8601**

            Set `type` to `"iso8601"`.

            `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
            :   ​

            **epochOfTimeUnit**

            Set `type` to `"epochOfTimeUnit"`.

            `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
            :   ​

                Fields of `EpochTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

            **customFormat**

            Set `type` to `"customFormat"`.

            `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
            :   ​

                Fields of `CustomTimestamp`

                `format` string
                :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                `defaultYear` integer
                :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                `defaultDayOfYear` integer
                :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

`ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
:   ​

    Fields of `IngestTagMetadata`

    `tagColumns` map of `TagName` to string
    :   A map of tag names to column names to derive the tag values from.

    `additionalFileTags` map of `TagName` to string
    :   ​

`originFilePaths` array of string
:   ​

`ingestJobRid` string (RID)
:   ​

`ingestTransformRid` string (RID)
:   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

`deletedAt` string (date-time)
:   Timestamp that the file is deleted at, only present if the file has been deleted.

`metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
:   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

    **video**

    Set `type` to `"video"`.

    `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
    :   ​

        Fields of `VideoFileMetadata`

        `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
        :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

            **mcap**

            Set `type` to `"mcap"`.

            `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
            :   ​

                Fields of `McapTimestampManifest`

                `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                :   ​

                    **topic**

                    Set `type` to `"topic"`.

                    `topic` string
                    :   ​

                    **id**

                    Set `type` to `"id"`.

                    `id` integer
                    :   ​

            **s3path**

            Set `type` to `"s3path"`.

            `s3path` string
            :   ​

            **s3paths**

            Set `type` to `"s3paths"`.

            `s3paths` array of string
            :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

            **noManifest**

            Set `type` to `"noManifest"`.

            `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
            :   ​

                Fields of `NoTimestampManifest`

                `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                :   Specifies the original starting timestamp of the video.

                `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                    **trueFrameRate**

                    Set `type` to `"trueFrameRate"`.

                    `trueFrameRate` number
                    :   ​

                    **endingTimestamp**

                    Set `type` to `"endingTimestamp"`.

                    `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   ​

                    **scaleFactor**

                    Set `type` to `"scaleFactor"`.

                    `scaleFactor` number
                    :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

        `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
        :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

            Fields of `VideoSegmentsMetadata`

            `numFrames` integer
            :   Total number of frames across all segments.

            `numSegments` integer
            :   Number of segments the video was split into.

            `scaleFactor` number
            :   Scale factor applied to timestamps during segmentation.

            `mediaDurationSeconds` number
            :   Total duration of the video in seconds.

            `mediaFrameRate` number
            :   Average frame rate (FPS) calculated as total frames / duration.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/add-file" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "fileSize": 1
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/add-file",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "handle": {"type": "s3", "s3": {"bucket": "<bucket>", "key": "<key>"}},
        "fileSize": 1,
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/add-file",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "handle": {"type": "s3", "s3": {"bucket": "<bucket>", "key": "<key>"}},
        "fileSize": 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/catalog/v1/datasets/<dataset rid>/add-file",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "handle": {"type": "s3", "s3": {"bucket": "<bucket>", "key": "<key>"}},
                "fileSize": 1,
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "id": "<dataset file id>",
  "datasetRid": "<dataset rid>",
  "name": "<name>",
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "fileSizeBytes": 1,
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "uploadedAt": "2026-01-01T00:00:00Z",
  "ingestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": {
    "type": "success",
    "success": {}
  },
  "timestampMetadata": {
    "seriesName": "<series name>",
    "timestampType": {
      "type": "relative",
      "relative": {
        "timeUnit": "DAYS",
        "offset": "2026-01-01T00:00:00Z"
      }
    }
  },
  "ingestTagMetadata": {
    "tagColumns": {
      "<key>": "<column name>"
    },
    "additionalFileTags": {
      "<key>": "<tag value>"
    }
  },
  "originFilePaths": [
    "<origin file paths>"
  ],
  "ingestJobRid": "<ingest job rid>",
  "ingestTransformRid": "<ingest transform rid>",
  "deletedAt": "2026-01-01T00:00:00Z",
  "metadata": {
    "type": "video",
    "video": {
      "timestampManifest": {
        "type": "mcap",
        "mcap": {
          "mcapChannelLocator": {
            "type": "topic",
            "topic": "<mcap channel topic>"
          }
        }
      },
      "segmentMetadata": {
        "numFrames": 1,
        "numSegments": 1,
        "scaleFactor": 1,
        "mediaDurationSeconds": 1,
        "mediaFrameRate": 1
      }
    }
  }
}
```

### List dataset files

GET `/catalog/v1/datasets/{datasetRid}/files`

Path parameters

`datasetRid` string (RID) required
:   ​

Query parameters

`nextPageToken` string
:   ​

Response

`files` array of [`DatasetFile`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfile)
:   ​

    Fields of `DatasetFile`

    `id` string (UUID)
    :   ​

    `datasetRid` string (RID)
    :   ​

    `name` string
    :   ​

    `handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
    :   ​

        **s3**

        Set `type` to `"s3"`.

        `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
        :   ​

            Fields of `S3Handle`

            `bucket` string
            :   ​

            `key` string
            :   ​

    `fileSizeBytes` integer (int64)
    :   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

    `bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
    :   ​

        Fields of `Bounds`

        `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
        :   ​

            Fields of `Timestamp`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
        :   ​

        `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
        :   ​

            Values of `datasource.TimestampType`

            `RELATIVE`
            :   ​

            `ABSOLUTE`
            :   ​

    `uploadedAt` string (date-time)
    :   Timestamp that the file was received and stored, but not processed or made available to consumers.

    `ingestedAt` string (date-time)
    :   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

    `ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
    :   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

        **success**

        Set `type` to `"success"`.

        `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
        :   ​

        **error**

        Set `type` to `"error"`.

        `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
        :   ​

            Fields of `ErrorResult`

            `errorType` string
            :   ​

            `message` string
            :   ​

            `errorInstanceId` string
            :   ​

        **inProgress**

        Set `type` to `"inProgress"`.

        `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
        :   ​

            Fields of `InProgressResult`

            `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
            :   ​

                **queued**

                Set `type` to `"queued"`.

                `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
                :   ​

                **parsing**

                Set `type` to `"parsing"`.

                `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
                :   ​

                **ingesting**

                Set `type` to `"ingesting"`.

                `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
                :   ​

                    Fields of `Ingesting`

                    `progress` number
                    :   Optional fraction between 0 and 1 indicating progress through ingestion.

        **deletionInProgress**

        Set `type` to `"deletionInProgress"`.

        `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
        :   ​

        **deleted**

        Set `type` to `"deleted"`.

        `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
        :   ​

        **queued**

        Set `type` to `"queued"`.

        `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
        :   ​

        **parsing**

        Set `type` to `"parsing"`.

        `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
        :   ​

        **ingesting**

        Set `type` to `"ingesting"`.

        `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   ​

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

            **relative**

            Set `type` to `"relative"`.

            `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
            :   ​

                Fields of `RelativeTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

                    Values of `TimeUnit`

                    `DAYS`
                    :   ​

                    `HOURS`
                    :   ​

                    `MINUTES`
                    :   ​

                    `SECONDS`
                    :   ​

                    `MILLISECONDS`
                    :   ​

                    `MICROSECONDS`
                    :   ​

                    `NANOSECONDS`
                    :   ​

                `offset` string (date-time)
                :   ​

            **absolute**

            Set `type` to `"absolute"`.

            `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
            :   ​

                **iso8601**

                Set `type` to `"iso8601"`.

                `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
                :   ​

                **epochOfTimeUnit**

                Set `type` to `"epochOfTimeUnit"`.

                `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
                :   ​

                    Fields of `EpochTimestamp`

                    `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                    :   ​

                **customFormat**

                Set `type` to `"customFormat"`.

                `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
                :   ​

                    Fields of `CustomTimestamp`

                    `format` string
                    :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                    `defaultYear` integer
                    :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                    `defaultDayOfYear` integer
                    :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

    `ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
    :   ​

        Fields of `IngestTagMetadata`

        `tagColumns` map of `TagName` to string
        :   A map of tag names to column names to derive the tag values from.

        `additionalFileTags` map of `TagName` to string
        :   ​

    `originFilePaths` array of string
    :   ​

    `ingestJobRid` string (RID)
    :   ​

    `ingestTransformRid` string (RID)
    :   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

    `deletedAt` string (date-time)
    :   Timestamp that the file is deleted at, only present if the file has been deleted.

    `metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
    :   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

        **video**

        Set `type` to `"video"`.

        `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
        :   ​

            Fields of `VideoFileMetadata`

            `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
            :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

                **mcap**

                Set `type` to `"mcap"`.

                `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
                :   ​

                    Fields of `McapTimestampManifest`

                    `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                    :   ​

                        **topic**

                        Set `type` to `"topic"`.

                        `topic` string
                        :   ​

                        **id**

                        Set `type` to `"id"`.

                        `id` integer
                        :   ​

                **s3path**

                Set `type` to `"s3path"`.

                `s3path` string
                :   ​

                **s3paths**

                Set `type` to `"s3paths"`.

                `s3paths` array of string
                :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

                **noManifest**

                Set `type` to `"noManifest"`.

                `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
                :   ​

                    Fields of `NoTimestampManifest`

                    `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   Specifies the original starting timestamp of the video.

                    `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                    :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                        **trueFrameRate**

                        Set `type` to `"trueFrameRate"`.

                        `trueFrameRate` number
                        :   ​

                        **endingTimestamp**

                        Set `type` to `"endingTimestamp"`.

                        `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                        :   ​

                        **scaleFactor**

                        Set `type` to `"scaleFactor"`.

                        `scaleFactor` number
                        :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

            `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
            :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

                Fields of `VideoSegmentsMetadata`

                `numFrames` integer
                :   Total number of frames across all segments.

                `numSegments` integer
                :   Number of segments the video was split into.

                `scaleFactor` number
                :   Scale factor applied to timestamps during segmentation.

                `mediaDurationSeconds` number
                :   Total duration of the video in seconds.

                `mediaFrameRate` number
                :   Average frame rate (FPS) calculated as total frames / duration.

`nextPage` string
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/files" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/files",
    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/catalog/v1/datasets/<dataset rid>/files",
    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/catalog/v1/datasets/<dataset rid>/files",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "files": [
    {
      "id": "<dataset file id>",
      "datasetRid": "<dataset rid>",
      "name": "<name>",
      "handle": {
        "type": "s3",
        "s3": {
          "bucket": "<bucket>",
          "key": "<key>"
        }
      },
      "fileSizeBytes": 1,
      "bounds": {
        "start": {
          "seconds": 1,
          "nanos": 1
        },
        "end": {
          "seconds": 1,
          "nanos": 1
        },
        "type": "RELATIVE"
      },
      "uploadedAt": "2026-01-01T00:00:00Z",
      "ingestedAt": "2026-01-01T00:00:00Z",
      "ingestStatus": {
        "type": "success",
        "success": {}
      },
      "timestampMetadata": {
        "seriesName": "<series name>",
        "timestampType": {
          "type": "relative",
          "relative": {
            "timeUnit": "DAYS",
            "offset": "2026-01-01T00:00:00Z"
          }
        }
      },
      "ingestTagMetadata": {
        "tagColumns": {
          "<key>": "<column name>"
        },
        "additionalFileTags": {
          "<key>": "<tag value>"
        }
      },
      "originFilePaths": [
        "<origin file paths>"
      ],
      "ingestJobRid": "<ingest job rid>",
      "ingestTransformRid": "<ingest transform rid>",
      "deletedAt": "2026-01-01T00:00:00Z",
      "metadata": {
        "type": "video",
        "video": {
          "timestampManifest": {
            "type": "mcap",
            "mcap": {
              "mcapChannelLocator": {
                "type": "topic",
                "topic": "<mcap channel topic>"
              }
            }
          },
          "segmentMetadata": {
            "numFrames": 1,
            "numSegments": 1,
            "scaleFactor": 1,
            "mediaDurationSeconds": 1,
            "mediaFrameRate": 1
          }
        }
      }
    }
  ],
  "nextPage": "<token>"
}
```

### Search dataset files

POST `/catalog/v1/search-dataset-files`

Body

`datasetRid` string (RID) required
:   ​

`query` [`SearchDatasetFilesQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetfilesquery) required
:   ​

    **timeRange**

    Set `type` to `"timeRange"`.

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

        Fields of `TimeRangeFilter`

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

            Fields of `UtcTimestamp`

            `secondsSinceEpoch` integer (int64) required
            :   ​

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

    **uploadedAtRange**

    Set `type` to `"uploadedAtRange"`.

    `uploadedAtRange` [`UploadedAtFilter`](https://dev.nominal.io/api/rest/catalog-service.md#uploadedatfilter)
    :   ​

        Fields of `UploadedAtFilter`

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

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

    **fileTags**

    Set `type` to `"fileTags"`.

    `fileTags` map of `TagName` to string
    :   ​

    **and**

    Set `type` to `"and"`.

    `and` array of [`SearchDatasetFilesQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetfilesquery)
    :   ​

    **or**

    Set `type` to `"or"`.

    `or` array of [`SearchDatasetFilesQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetfilesquery)
    :   ​

`pageSize` integer
:   Defaults to 100. Will throw if larger than 1000.

`token` string
:   ​

`sortOptions` [`DatasetFileSortOptions`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilesortoptions) required
:   ​

    Fields of `DatasetFileSortOptions`

    `isDescending` boolean required
    :   ​

    `field` [`DatasetFileSortField`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilesortfield) required
    :   ​

        Values of `DatasetFileSortField`

        `UPLOADED_AT`
        :   ​

Response

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

    Fields of `DatasetFile`

    `id` string (UUID)
    :   ​

    `datasetRid` string (RID)
    :   ​

    `name` string
    :   ​

    `handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
    :   ​

        **s3**

        Set `type` to `"s3"`.

        `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
        :   ​

            Fields of `S3Handle`

            `bucket` string
            :   ​

            `key` string
            :   ​

    `fileSizeBytes` integer (int64)
    :   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

    `bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
    :   ​

        Fields of `Bounds`

        `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
        :   ​

            Fields of `Timestamp`

            `seconds` integer (int64)
            :   ​

            `nanos` integer (int64)
            :   ​

        `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
        :   ​

        `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
        :   ​

            Values of `datasource.TimestampType`

            `RELATIVE`
            :   ​

            `ABSOLUTE`
            :   ​

    `uploadedAt` string (date-time)
    :   Timestamp that the file was received and stored, but not processed or made available to consumers.

    `ingestedAt` string (date-time)
    :   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

    `ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
    :   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

        **success**

        Set `type` to `"success"`.

        `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
        :   ​

        **error**

        Set `type` to `"error"`.

        `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
        :   ​

            Fields of `ErrorResult`

            `errorType` string
            :   ​

            `message` string
            :   ​

            `errorInstanceId` string
            :   ​

        **inProgress**

        Set `type` to `"inProgress"`.

        `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
        :   ​

            Fields of `InProgressResult`

            `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
            :   ​

                **queued**

                Set `type` to `"queued"`.

                `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
                :   ​

                **parsing**

                Set `type` to `"parsing"`.

                `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
                :   ​

                **ingesting**

                Set `type` to `"ingesting"`.

                `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
                :   ​

                    Fields of `Ingesting`

                    `progress` number
                    :   Optional fraction between 0 and 1 indicating progress through ingestion.

        **deletionInProgress**

        Set `type` to `"deletionInProgress"`.

        `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
        :   ​

        **deleted**

        Set `type` to `"deleted"`.

        `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
        :   ​

        **queued**

        Set `type` to `"queued"`.

        `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
        :   ​

        **parsing**

        Set `type` to `"parsing"`.

        `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
        :   ​

        **ingesting**

        Set `type` to `"ingesting"`.

        `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   ​

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

            **relative**

            Set `type` to `"relative"`.

            `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
            :   ​

                Fields of `RelativeTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

                    Values of `TimeUnit`

                    `DAYS`
                    :   ​

                    `HOURS`
                    :   ​

                    `MINUTES`
                    :   ​

                    `SECONDS`
                    :   ​

                    `MILLISECONDS`
                    :   ​

                    `MICROSECONDS`
                    :   ​

                    `NANOSECONDS`
                    :   ​

                `offset` string (date-time)
                :   ​

            **absolute**

            Set `type` to `"absolute"`.

            `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
            :   ​

                **iso8601**

                Set `type` to `"iso8601"`.

                `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
                :   ​

                **epochOfTimeUnit**

                Set `type` to `"epochOfTimeUnit"`.

                `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
                :   ​

                    Fields of `EpochTimestamp`

                    `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                    :   ​

                **customFormat**

                Set `type` to `"customFormat"`.

                `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
                :   ​

                    Fields of `CustomTimestamp`

                    `format` string
                    :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                    `defaultYear` integer
                    :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                    `defaultDayOfYear` integer
                    :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

    `ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
    :   ​

        Fields of `IngestTagMetadata`

        `tagColumns` map of `TagName` to string
        :   A map of tag names to column names to derive the tag values from.

        `additionalFileTags` map of `TagName` to string
        :   ​

    `originFilePaths` array of string
    :   ​

    `ingestJobRid` string (RID)
    :   ​

    `ingestTransformRid` string (RID)
    :   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

    `deletedAt` string (date-time)
    :   Timestamp that the file is deleted at, only present if the file has been deleted.

    `metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
    :   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

        **video**

        Set `type` to `"video"`.

        `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
        :   ​

            Fields of `VideoFileMetadata`

            `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
            :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

                **mcap**

                Set `type` to `"mcap"`.

                `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
                :   ​

                    Fields of `McapTimestampManifest`

                    `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                    :   ​

                        **topic**

                        Set `type` to `"topic"`.

                        `topic` string
                        :   ​

                        **id**

                        Set `type` to `"id"`.

                        `id` integer
                        :   ​

                **s3path**

                Set `type` to `"s3path"`.

                `s3path` string
                :   ​

                **s3paths**

                Set `type` to `"s3paths"`.

                `s3paths` array of string
                :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

                **noManifest**

                Set `type` to `"noManifest"`.

                `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
                :   ​

                    Fields of `NoTimestampManifest`

                    `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   Specifies the original starting timestamp of the video.

                    `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                    :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                        **trueFrameRate**

                        Set `type` to `"trueFrameRate"`.

                        `trueFrameRate` number
                        :   ​

                        **endingTimestamp**

                        Set `type` to `"endingTimestamp"`.

                        `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                        :   ​

                        **scaleFactor**

                        Set `type` to `"scaleFactor"`.

                        `scaleFactor` number
                        :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

            `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
            :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

                Fields of `VideoSegmentsMetadata`

                `numFrames` integer
                :   Total number of frames across all segments.

                `numSegments` integer
                :   Number of segments the video was split into.

                `scaleFactor` number
                :   Scale factor applied to timestamps during segmentation.

                `mediaDurationSeconds` number
                :   Total duration of the video in seconds.

                `mediaFrameRate` number
                :   Average frame rate (FPS) calculated as total frames / duration.

`nextPageToken` string
:   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/search-dataset-files" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "datasetRid": "<dataset rid>",
  "query": {
    "type": "timeRange",
    "timeRange": {
      "start": {
        "secondsSinceEpoch": 1
      },
      "end": {
        "secondsSinceEpoch": 1
      }
    }
  },
  "sortOptions": {
    "isDescending": true,
    "field": "UPLOADED_AT"
  }
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/search-dataset-files",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "datasetRid": "<dataset rid>",
        "query": {
            "type": "timeRange",
            "timeRange": {
                "start": {"secondsSinceEpoch": 1},
                "end": {"secondsSinceEpoch": 1},
            },
        },
        "sortOptions": {"isDescending": True, "field": "UPLOADED_AT"},
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/search-dataset-files",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "datasetRid": "<dataset rid>",
        "query": {
            "type": "timeRange",
            "timeRange": {
                "start": {"secondsSinceEpoch": 1},
                "end": {"secondsSinceEpoch": 1},
            },
        },
        "sortOptions": {"isDescending": True, "field": "UPLOADED_AT"},
    },
)
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/catalog/v1/search-dataset-files",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "datasetRid": "<dataset rid>",
                "query": {
                    "type": "timeRange",
                    "timeRange": {
                        "start": {"secondsSinceEpoch": 1},
                        "end": {"secondsSinceEpoch": 1},
                    },
                },
                "sortOptions": {"isDescending": True, "field": "UPLOADED_AT"},
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "results": [
    {
      "id": "<dataset file id>",
      "datasetRid": "<dataset rid>",
      "name": "<name>",
      "handle": {
        "type": "s3",
        "s3": {
          "bucket": "<bucket>",
          "key": "<key>"
        }
      },
      "fileSizeBytes": 1,
      "bounds": {
        "start": {
          "seconds": 1,
          "nanos": 1
        },
        "end": {
          "seconds": 1,
          "nanos": 1
        },
        "type": "RELATIVE"
      },
      "uploadedAt": "2026-01-01T00:00:00Z",
      "ingestedAt": "2026-01-01T00:00:00Z",
      "ingestStatus": {
        "type": "success",
        "success": {}
      },
      "timestampMetadata": {
        "seriesName": "<series name>",
        "timestampType": {
          "type": "relative",
          "relative": {
            "timeUnit": "DAYS",
            "offset": "2026-01-01T00:00:00Z"
          }
        }
      },
      "ingestTagMetadata": {
        "tagColumns": {
          "<key>": "<column name>"
        },
        "additionalFileTags": {
          "<key>": "<tag value>"
        }
      },
      "originFilePaths": [
        "<origin file paths>"
      ],
      "ingestJobRid": "<ingest job rid>",
      "ingestTransformRid": "<ingest transform rid>",
      "deletedAt": "2026-01-01T00:00:00Z",
      "metadata": {
        "type": "video",
        "video": {
          "timestampManifest": {
            "type": "mcap",
            "mcap": {
              "mcapChannelLocator": {
                "type": "topic",
                "topic": "<mcap channel topic>"
              }
            }
          },
          "segmentMetadata": {
            "numFrames": 1,
            "numSegments": 1,
            "scaleFactor": 1,
            "mediaDurationSeconds": 1,
            "mediaFrameRate": 1
          }
        }
      }
    }
  ],
  "nextPageToken": "<token>"
}
```

### Get dataset file uri

GET `/catalog/v1/datasets/{datasetRid}/{fileId}/uri`

Path parameters

`datasetRid` string (RID) required
:   ​

`fileId` string (UUID) required
:   ​

Response

`uri` string
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/<file id>/uri" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/<file id>/uri",
    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/catalog/v1/datasets/<dataset rid>/<file id>/uri",
    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/catalog/v1/datasets/<dataset rid>/<file id>/uri",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "uri": "<uri>"
}
```

### Get video file uri

GET `/catalog/v1/videos/{videoFileRid}/uri`

Path parameters

`videoFileRid` string (RID) required
:   ​

Response

`uri` string
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/videos/<video file rid>/uri" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/videos/<video file rid>/uri",
    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/catalog/v1/videos/<video file rid>/uri",
    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/catalog/v1/videos/<video file rid>/uri",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "uri": "<uri>"
}
```

### Get origin file uris

GET `/catalog/v1/datasets/{datasetRid}/{fileId}/origin-uris`

Path parameters

`datasetRid` string (RID) required
:   ​

`fileId` string (UUID) required
:   ​

Response

The body is an array of [`OriginFileUri`](https://dev.nominal.io/api/rest/catalog-service.md#originfileuri).

Fields of `OriginFileUri`

`uri` string
:   ​

`path` string
:   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/<file id>/origin-uris" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/<file id>/origin-uris",
    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/catalog/v1/datasets/<dataset rid>/<file id>/origin-uris",
    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/catalog/v1/datasets/<dataset rid>/<file id>/origin-uris",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
[
  {
    "uri": "<uri>",
    "path": "<path>"
  }
]
```

### Mark file ingest successful

PUT `/catalog/v1/datasets/{datasetRid}/file/{fileId}/success`

Path parameters

`datasetRid` string (RID) required
:   ​

`fileId` string (UUID) required
:   ​

Body

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

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64) required
        :   ​

        `nanos` integer (int64) required
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype) required
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

`ingestedAt` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
:   The ingestion timestamp is produced by CSV splitter and stored directly in the data store table. It’s produced externally and passed here to handle retries and failures, and must be nanosecond precision. Two files cannot have the same ingested at timestamp.

Response

`id` string (UUID)
:   ​

`datasetRid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
:   ​

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`fileSizeBytes` integer (int64)
:   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

`uploadedAt` string (date-time)
:   Timestamp that the file was received and stored, but not processed or made available to consumers.

`ingestedAt` string (date-time)
:   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

`ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

            **queued**

            Set `type` to `"queued"`.

            `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
            :   ​

            **parsing**

            Set `type` to `"parsing"`.

            `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
            :   ​

            **ingesting**

            Set `type` to `"ingesting"`.

            `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
            :   ​

                Fields of `Ingesting`

                `progress` number
                :   Optional fraction between 0 and 1 indicating progress through ingestion.

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   ​

    Fields of `TimestampMetadata`

    `seriesName` string
    :   ​

    `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
    :   ​

        **relative**

        Set `type` to `"relative"`.

        `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
        :   ​

            Fields of `RelativeTimestamp`

            `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
            :   ​

                Values of `TimeUnit`

                `DAYS`
                :   ​

                `HOURS`
                :   ​

                `MINUTES`
                :   ​

                `SECONDS`
                :   ​

                `MILLISECONDS`
                :   ​

                `MICROSECONDS`
                :   ​

                `NANOSECONDS`
                :   ​

            `offset` string (date-time)
            :   ​

        **absolute**

        Set `type` to `"absolute"`.

        `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
        :   ​

            **iso8601**

            Set `type` to `"iso8601"`.

            `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
            :   ​

            **epochOfTimeUnit**

            Set `type` to `"epochOfTimeUnit"`.

            `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
            :   ​

                Fields of `EpochTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

            **customFormat**

            Set `type` to `"customFormat"`.

            `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
            :   ​

                Fields of `CustomTimestamp`

                `format` string
                :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                `defaultYear` integer
                :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                `defaultDayOfYear` integer
                :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

`ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
:   ​

    Fields of `IngestTagMetadata`

    `tagColumns` map of `TagName` to string
    :   A map of tag names to column names to derive the tag values from.

    `additionalFileTags` map of `TagName` to string
    :   ​

`originFilePaths` array of string
:   ​

`ingestJobRid` string (RID)
:   ​

`ingestTransformRid` string (RID)
:   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

`deletedAt` string (date-time)
:   Timestamp that the file is deleted at, only present if the file has been deleted.

`metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
:   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

    **video**

    Set `type` to `"video"`.

    `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
    :   ​

        Fields of `VideoFileMetadata`

        `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
        :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

            **mcap**

            Set `type` to `"mcap"`.

            `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
            :   ​

                Fields of `McapTimestampManifest`

                `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                :   ​

                    **topic**

                    Set `type` to `"topic"`.

                    `topic` string
                    :   ​

                    **id**

                    Set `type` to `"id"`.

                    `id` integer
                    :   ​

            **s3path**

            Set `type` to `"s3path"`.

            `s3path` string
            :   ​

            **s3paths**

            Set `type` to `"s3paths"`.

            `s3paths` array of string
            :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

            **noManifest**

            Set `type` to `"noManifest"`.

            `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
            :   ​

                Fields of `NoTimestampManifest`

                `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                :   Specifies the original starting timestamp of the video.

                `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                    **trueFrameRate**

                    Set `type` to `"trueFrameRate"`.

                    `trueFrameRate` number
                    :   ​

                    **endingTimestamp**

                    Set `type` to `"endingTimestamp"`.

                    `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   ​

                    **scaleFactor**

                    Set `type` to `"scaleFactor"`.

                    `scaleFactor` number
                    :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

        `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
        :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

            Fields of `VideoSegmentsMetadata`

            `numFrames` integer
            :   Total number of frames across all segments.

            `numSegments` integer
            :   Number of segments the video was split into.

            `scaleFactor` number
            :   Scale factor applied to timestamps during segmentation.

            `mediaDurationSeconds` number
            :   Total duration of the video in seconds.

            `mediaFrameRate` number
            :   Average frame rate (FPS) calculated as total frames / duration.

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/success" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "ingestedAt": {
    "seconds": 1,
    "nanos": 1
  }
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/success",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "bounds": {
            "start": {"seconds": 1, "nanos": 1},
            "end": {"seconds": 1, "nanos": 1},
            "type": "RELATIVE",
        },
        "ingestedAt": {"seconds": 1, "nanos": 1},
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/success",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "bounds": {
            "start": {"seconds": 1, "nanos": 1},
            "end": {"seconds": 1, "nanos": 1},
            "type": "RELATIVE",
        },
        "ingestedAt": {"seconds": 1, "nanos": 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.put(
            "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/success",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "bounds": {
                    "start": {"seconds": 1, "nanos": 1},
                    "end": {"seconds": 1, "nanos": 1},
                    "type": "RELATIVE",
                },
                "ingestedAt": {"seconds": 1, "nanos": 1},
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "id": "<dataset file id>",
  "datasetRid": "<dataset rid>",
  "name": "<name>",
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "fileSizeBytes": 1,
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "uploadedAt": "2026-01-01T00:00:00Z",
  "ingestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": {
    "type": "success",
    "success": {}
  },
  "timestampMetadata": {
    "seriesName": "<series name>",
    "timestampType": {
      "type": "relative",
      "relative": {
        "timeUnit": "DAYS",
        "offset": "2026-01-01T00:00:00Z"
      }
    }
  },
  "ingestTagMetadata": {
    "tagColumns": {
      "<key>": "<column name>"
    },
    "additionalFileTags": {
      "<key>": "<tag value>"
    }
  },
  "originFilePaths": [
    "<origin file paths>"
  ],
  "ingestJobRid": "<ingest job rid>",
  "ingestTransformRid": "<ingest transform rid>",
  "deletedAt": "2026-01-01T00:00:00Z",
  "metadata": {
    "type": "video",
    "video": {
      "timestampManifest": {
        "type": "mcap",
        "mcap": {
          "mcapChannelLocator": {
            "type": "topic",
            "topic": "<mcap channel topic>"
          }
        }
      },
      "segmentMetadata": {
        "numFrames": 1,
        "numSegments": 1,
        "scaleFactor": 1,
        "mediaDurationSeconds": 1,
        "mediaFrameRate": 1
      }
    }
  }
}
```

### Mark file ingest error

PUT `/catalog/v1/datasets/{datasetRid}/file/{fileId}/error`

Path parameters

`datasetRid` string (RID) required
:   ​

`fileId` string (UUID) required
:   ​

Body

`errorResult` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult) required
:   ​

    Fields of `ErrorResult`

    `errorType` string required
    :   ​

    `message` string required
    :   ​

    `errorInstanceId` string
    :   ​

Response

`id` string (UUID)
:   ​

`datasetRid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
:   ​

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`fileSizeBytes` integer (int64)
:   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

`uploadedAt` string (date-time)
:   Timestamp that the file was received and stored, but not processed or made available to consumers.

`ingestedAt` string (date-time)
:   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

`ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

            **queued**

            Set `type` to `"queued"`.

            `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
            :   ​

            **parsing**

            Set `type` to `"parsing"`.

            `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
            :   ​

            **ingesting**

            Set `type` to `"ingesting"`.

            `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
            :   ​

                Fields of `Ingesting`

                `progress` number
                :   Optional fraction between 0 and 1 indicating progress through ingestion.

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   ​

    Fields of `TimestampMetadata`

    `seriesName` string
    :   ​

    `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
    :   ​

        **relative**

        Set `type` to `"relative"`.

        `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
        :   ​

            Fields of `RelativeTimestamp`

            `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
            :   ​

                Values of `TimeUnit`

                `DAYS`
                :   ​

                `HOURS`
                :   ​

                `MINUTES`
                :   ​

                `SECONDS`
                :   ​

                `MILLISECONDS`
                :   ​

                `MICROSECONDS`
                :   ​

                `NANOSECONDS`
                :   ​

            `offset` string (date-time)
            :   ​

        **absolute**

        Set `type` to `"absolute"`.

        `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
        :   ​

            **iso8601**

            Set `type` to `"iso8601"`.

            `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
            :   ​

            **epochOfTimeUnit**

            Set `type` to `"epochOfTimeUnit"`.

            `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
            :   ​

                Fields of `EpochTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

            **customFormat**

            Set `type` to `"customFormat"`.

            `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
            :   ​

                Fields of `CustomTimestamp`

                `format` string
                :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                `defaultYear` integer
                :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                `defaultDayOfYear` integer
                :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

`ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
:   ​

    Fields of `IngestTagMetadata`

    `tagColumns` map of `TagName` to string
    :   A map of tag names to column names to derive the tag values from.

    `additionalFileTags` map of `TagName` to string
    :   ​

`originFilePaths` array of string
:   ​

`ingestJobRid` string (RID)
:   ​

`ingestTransformRid` string (RID)
:   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

`deletedAt` string (date-time)
:   Timestamp that the file is deleted at, only present if the file has been deleted.

`metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
:   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

    **video**

    Set `type` to `"video"`.

    `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
    :   ​

        Fields of `VideoFileMetadata`

        `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
        :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

            **mcap**

            Set `type` to `"mcap"`.

            `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
            :   ​

                Fields of `McapTimestampManifest`

                `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                :   ​

                    **topic**

                    Set `type` to `"topic"`.

                    `topic` string
                    :   ​

                    **id**

                    Set `type` to `"id"`.

                    `id` integer
                    :   ​

            **s3path**

            Set `type` to `"s3path"`.

            `s3path` string
            :   ​

            **s3paths**

            Set `type` to `"s3paths"`.

            `s3paths` array of string
            :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

            **noManifest**

            Set `type` to `"noManifest"`.

            `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
            :   ​

                Fields of `NoTimestampManifest`

                `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                :   Specifies the original starting timestamp of the video.

                `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                    **trueFrameRate**

                    Set `type` to `"trueFrameRate"`.

                    `trueFrameRate` number
                    :   ​

                    **endingTimestamp**

                    Set `type` to `"endingTimestamp"`.

                    `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   ​

                    **scaleFactor**

                    Set `type` to `"scaleFactor"`.

                    `scaleFactor` number
                    :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

        `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
        :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

            Fields of `VideoSegmentsMetadata`

            `numFrames` integer
            :   Total number of frames across all segments.

            `numSegments` integer
            :   Number of segments the video was split into.

            `scaleFactor` number
            :   Scale factor applied to timestamps during segmentation.

            `mediaDurationSeconds` number
            :   Total duration of the video in seconds.

            `mediaFrameRate` number
            :   Average frame rate (FPS) calculated as total frames / duration.

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/error" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "errorResult": {
    "errorType": "<error type>",
    "message": "<message>"
  }
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/error",
    headers={"Authorization": "Bearer <api key>"},
    json={"errorResult": {"errorType": "<error type>", "message": "<message>"}},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/error",
    headers={"Authorization": "Bearer <api key>"},
    json={"errorResult": {"errorType": "<error type>", "message": "<message>"}},
)
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/catalog/v1/datasets/<dataset rid>/file/<file id>/error",
            headers={"Authorization": "Bearer <api key>"},
            json={"errorResult": {"errorType": "<error type>", "message": "<message>"}},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "id": "<dataset file id>",
  "datasetRid": "<dataset rid>",
  "name": "<name>",
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "fileSizeBytes": 1,
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "uploadedAt": "2026-01-01T00:00:00Z",
  "ingestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": {
    "type": "success",
    "success": {}
  },
  "timestampMetadata": {
    "seriesName": "<series name>",
    "timestampType": {
      "type": "relative",
      "relative": {
        "timeUnit": "DAYS",
        "offset": "2026-01-01T00:00:00Z"
      }
    }
  },
  "ingestTagMetadata": {
    "tagColumns": {
      "<key>": "<column name>"
    },
    "additionalFileTags": {
      "<key>": "<tag value>"
    }
  },
  "originFilePaths": [
    "<origin file paths>"
  ],
  "ingestJobRid": "<ingest job rid>",
  "ingestTransformRid": "<ingest transform rid>",
  "deletedAt": "2026-01-01T00:00:00Z",
  "metadata": {
    "type": "video",
    "video": {
      "timestampManifest": {
        "type": "mcap",
        "mcap": {
          "mcapChannelLocator": {
            "type": "topic",
            "topic": "<mcap channel topic>"
          }
        }
      },
      "segmentMetadata": {
        "numFrames": 1,
        "numSegments": 1,
        "scaleFactor": 1,
        "mediaDurationSeconds": 1,
        "mediaFrameRate": 1
      }
    }
  }
}
```

### Update dataset file metadata

PUT `/catalog/v1/datasets/{datasetRid}/file/{fileId}/metadata`

Updates file-type-specific metadata for a dataset file. Currently used to update video segment metadata after video segmentation is complete.

Path parameters

`datasetRid` string (RID) required
:   ​

`fileId` string (UUID) required
:   ​

Body

A [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata) union.

**video**

Set `type` to `"video"`.

`video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
:   ​

    Fields of `VideoFileMetadata`

    `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest) required
    :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

        **mcap**

        Set `type` to `"mcap"`.

        `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
        :   ​

            Fields of `McapTimestampManifest`

            `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator) required
            :   ​

                **topic**

                Set `type` to `"topic"`.

                `topic` string
                :   ​

                **id**

                Set `type` to `"id"`.

                `id` integer
                :   ​

        **s3path**

        Set `type` to `"s3path"`.

        `s3path` string
        :   ​

        **s3paths**

        Set `type` to `"s3paths"`.

        `s3paths` array of string
        :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

        **noManifest**

        Set `type` to `"noManifest"`.

        `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
        :   ​

            Fields of `NoTimestampManifest`

            `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
            :   Specifies the original starting timestamp of the video.

                Fields of `Timestamp`

                `seconds` integer (int64) required
                :   ​

                `nanos` integer (int64) required
                :   ​

            `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
            :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                **trueFrameRate**

                Set `type` to `"trueFrameRate"`.

                `trueFrameRate` number
                :   ​

                **endingTimestamp**

                Set `type` to `"endingTimestamp"`.

                `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                :   ​

                **scaleFactor**

                Set `type` to `"scaleFactor"`.

                `scaleFactor` number
                :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

    `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
    :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

        Fields of `VideoSegmentsMetadata`

        `numFrames` integer required
        :   Total number of frames across all segments.

        `numSegments` integer required
        :   Number of segments the video was split into.

        `scaleFactor` number required
        :   Scale factor applied to timestamps during segmentation.

        `mediaDurationSeconds` number required
        :   Total duration of the video in seconds.

        `mediaFrameRate` number required
        :   Average frame rate (FPS) calculated as total frames / duration.

Response

`id` string (UUID)
:   ​

`datasetRid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle)
:   ​

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`fileSizeBytes` integer (int64)
:   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

`uploadedAt` string (date-time)
:   Timestamp that the file was received and stored, but not processed or made available to consumers.

`ingestedAt` string (date-time)
:   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

`ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

            **queued**

            Set `type` to `"queued"`.

            `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
            :   ​

            **parsing**

            Set `type` to `"parsing"`.

            `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
            :   ​

            **ingesting**

            Set `type` to `"ingesting"`.

            `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
            :   ​

                Fields of `Ingesting`

                `progress` number
                :   Optional fraction between 0 and 1 indicating progress through ingestion.

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   ​

    Fields of `TimestampMetadata`

    `seriesName` string
    :   ​

    `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
    :   ​

        **relative**

        Set `type` to `"relative"`.

        `relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
        :   ​

            Fields of `RelativeTimestamp`

            `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
            :   ​

                Values of `TimeUnit`

                `DAYS`
                :   ​

                `HOURS`
                :   ​

                `MINUTES`
                :   ​

                `SECONDS`
                :   ​

                `MILLISECONDS`
                :   ​

                `MICROSECONDS`
                :   ​

                `NANOSECONDS`
                :   ​

            `offset` string (date-time)
            :   ​

        **absolute**

        Set `type` to `"absolute"`.

        `absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
        :   ​

            **iso8601**

            Set `type` to `"iso8601"`.

            `iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
            :   ​

            **epochOfTimeUnit**

            Set `type` to `"epochOfTimeUnit"`.

            `epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
            :   ​

                Fields of `EpochTimestamp`

                `timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
                :   ​

            **customFormat**

            Set `type` to `"customFormat"`.

            `customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
            :   ​

                Fields of `CustomTimestamp`

                `format` string
                :   The format string should be in the format of the `DateTimeFormatter` class in Java.

                `defaultYear` integer
                :   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

                `defaultDayOfYear` integer
                :   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

`ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
:   ​

    Fields of `IngestTagMetadata`

    `tagColumns` map of `TagName` to string
    :   A map of tag names to column names to derive the tag values from.

    `additionalFileTags` map of `TagName` to string
    :   ​

`originFilePaths` array of string
:   ​

`ingestJobRid` string (RID)
:   ​

`ingestTransformRid` string (RID)
:   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

`deletedAt` string (date-time)
:   Timestamp that the file is deleted at, only present if the file has been deleted.

`metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
:   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

    **video**

    Set `type` to `"video"`.

    `video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
    :   ​

        Fields of `VideoFileMetadata`

        `timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest)
        :   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

            **mcap**

            Set `type` to `"mcap"`.

            `mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
            :   ​

                Fields of `McapTimestampManifest`

                `mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator)
                :   ​

                    **topic**

                    Set `type` to `"topic"`.

                    `topic` string
                    :   ​

                    **id**

                    Set `type` to `"id"`.

                    `id` integer
                    :   ​

            **s3path**

            Set `type` to `"s3path"`.

            `s3path` string
            :   ​

            **s3paths**

            Set `type` to `"s3paths"`.

            `s3paths` array of string
            :   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

            **noManifest**

            Set `type` to `"noManifest"`.

            `noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
            :   ​

                Fields of `NoTimestampManifest`

                `startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                :   Specifies the original starting timestamp of the video.

                `scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
                :   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

                    **trueFrameRate**

                    Set `type` to `"trueFrameRate"`.

                    `trueFrameRate` number
                    :   ​

                    **endingTimestamp**

                    Set `type` to `"endingTimestamp"`.

                    `endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
                    :   ​

                    **scaleFactor**

                    Set `type` to `"scaleFactor"`.

                    `scaleFactor` number
                    :   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

        `segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
        :   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

            Fields of `VideoSegmentsMetadata`

            `numFrames` integer
            :   Total number of frames across all segments.

            `numSegments` integer
            :   Number of segments the video was split into.

            `scaleFactor` number
            :   Scale factor applied to timestamps during segmentation.

            `mediaDurationSeconds` number
            :   Total duration of the video in seconds.

            `mediaFrameRate` number
            :   Average frame rate (FPS) calculated as total frames / duration.

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/metadata" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "type": "video",
  "video": {
    "timestampManifest": {
      "type": "mcap",
      "mcap": {
        "mcapChannelLocator": {
          "type": "topic",
          "topic": "<mcap channel topic>"
        }
      }
    }
  }
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/metadata",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "type": "video",
        "video": {
            "timestampManifest": {
                "type": "mcap",
                "mcap": {
                    "mcapChannelLocator": {
                        "type": "topic",
                        "topic": "<mcap channel topic>",
                    },
                },
            },
        },
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/file/<file id>/metadata",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "type": "video",
        "video": {
            "timestampManifest": {
                "type": "mcap",
                "mcap": {
                    "mcapChannelLocator": {
                        "type": "topic",
                        "topic": "<mcap channel topic>",
                    },
                },
            },
        },
    },
)
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/catalog/v1/datasets/<dataset rid>/file/<file id>/metadata",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "type": "video",
                "video": {
                    "timestampManifest": {
                        "type": "mcap",
                        "mcap": {
                            "mcapChannelLocator": {
                                "type": "topic",
                                "topic": "<mcap channel topic>",
                            },
                        },
                    },
                },
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "id": "<dataset file id>",
  "datasetRid": "<dataset rid>",
  "name": "<name>",
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "fileSizeBytes": 1,
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "uploadedAt": "2026-01-01T00:00:00Z",
  "ingestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": {
    "type": "success",
    "success": {}
  },
  "timestampMetadata": {
    "seriesName": "<series name>",
    "timestampType": {
      "type": "relative",
      "relative": {
        "timeUnit": "DAYS",
        "offset": "2026-01-01T00:00:00Z"
      }
    }
  },
  "ingestTagMetadata": {
    "tagColumns": {
      "<key>": "<column name>"
    },
    "additionalFileTags": {
      "<key>": "<tag value>"
    }
  },
  "originFilePaths": [
    "<origin file paths>"
  ],
  "ingestJobRid": "<ingest job rid>",
  "ingestTransformRid": "<ingest transform rid>",
  "deletedAt": "2026-01-01T00:00:00Z",
  "metadata": {
    "type": "video",
    "video": {
      "timestampManifest": {
        "type": "mcap",
        "mcap": {
          "mcapChannelLocator": {
            "type": "topic",
            "topic": "<mcap channel topic>"
          }
        }
      },
      "segmentMetadata": {
        "numFrames": 1,
        "numSegments": 1,
        "scaleFactor": 1,
        "mediaDurationSeconds": 1,
        "mediaFrameRate": 1
      }
    }
  }
}
```

### Update dataset metadata

PUT `/catalog/v1/datasets/{datasetRid}`

Path parameters

`datasetRid` string (RID) required
:   ​

Body

`name` string
:   ​

`description` string
:   ​

`labels` array of string
:   ​

`properties` map of `PropertyName` to string deprecated
:   User-defined dataset properties. When supplied, the UTF-8 JSON serialization must not exceed 2,000 bytes. **Deprecated:** use typedProperties

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Absent leaves the current keys unchanged; an empty set clears them. Every key must be produced by the dataset’s `derivedDefinition`.

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   If set, replaces the dataset’s default group-by and aggregation config in full.

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

            Fields of `Percentile`

            `percentile` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
            :   Percentile to compute, in range [0, 1]. E.g. 0.5 for median, 0.95 for p95.

                **literal**

                Set `type` to `"literal"`.

                `literal` number
                :   Create from a literal floating-point value.

                **variable**

                Set `type` to `"variable"`.

                `variable` string
                :   Create from a named reference name.

                **builtin**

                Set `type` to `"builtin"`.

                `builtin` [`BuiltinConstant`](https://dev.nominal.io/api/rest/catalog-service.md#builtinconstant)
                :   Create from a named builtin constant; the server resolves the numeric value.

                    **math**

                    Set `type` to `"math"`.

                    `math` [`MathConstant`](https://dev.nominal.io/api/rest/catalog-service.md#mathconstant)
                    :   ​

                        Values of `MathConstant`

                        `PI`
                        :   The circle constant π (dimensionless).

                        `TAU`
                        :   The circle constant τ = 2π (dimensionless).

                        `E`
                        :   Euler’s number e (dimensionless).

                    **physical**

                    Set `type` to `"physical"`.

                    `physical` [`PhysicalConstant`](https://dev.nominal.io/api/rest/catalog-service.md#physicalconstant)
                    :   ​

                        Values of `PhysicalConstant`

                        `SPEED_OF_LIGHT`
                        :   Speed of light in vacuum, 299792458 m/s (exact).

                        `AVOGADRO`
                        :   Avogadro constant, 6.02214076e23 mol^-1 (exact).

                        `BOLTZMANN`
                        :   Boltzmann constant, 1.380649e-23 J/K (exact).

                        `PLANCK`
                        :   Planck constant, 6.62607015e-34 J*s (exact).

                        `ELEMENTARY_CHARGE`
                        :   Elementary charge, 1.602176634e-19 C (exact).

                        `GAS_CONSTANT`
                        :   Molar gas constant, 8.31446261815324 J/(mol*K) (exact, Avogadro times Boltzmann).

                        `STANDARD_GRAVITY`
                        :   Standard acceleration of gravity, 9.80665 m/s^2 (exact by convention).

                        `STANDARD_ATMOSPHERE`
                        :   Standard atmosphere, 101325 Pa (exact by convention).

                        `ABSOLUTE_ZERO_CELSIUS`
                        :   Absolute zero expressed in degrees Celsius, -273.15 (exact).

                        `GRAVITATIONAL_CONSTANT`
                        :   Newtonian constant of gravitation, 6.67430e-11 m^3/(kg*s^2) (CODATA 2022, measured).

                        `STEFAN_BOLTZMANN`
                        :   Stefan-Boltzmann constant, 5.670374419e-8 W/(m^2*K^4) (exact derived).

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

            Fields of `NumericAggregationUdf`

            `source` [`UdfSource`](https://dev.nominal.io/api/rest/catalog-service.md#udfsource) required
            :   ​

                **rust**

                Set `type` to `"rust"`.

                `rust` [`RustUdfSource`](https://dev.nominal.io/api/rest/catalog-service.md#rustudfsource)
                :   ​

                    Fields of `RustUdfSource`

                    `sourceCode` string required
                    :   Rust source code to transpile into WASM. The operation consuming this source defines the entrypoint signature: scalar UDFs receive one scalar per input series, while aggregation UDFs receive grouped value vectors. If several functions appear at the top level, annotate the entrypoint with `#[main]`.

Response

`rid` string (RID)
:   ​

`uuid` string (UUID)
:   ​

`name` string
:   ​

`description` string
:   ​

`displayName` string
:   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties.

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`ingestDate` string (date-time)
:   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

`lastIngestedAt` string (date-time)
:   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
:   **Deprecated:** Deprecated. Use lastIngestStatus.

    Values of `IngestStatus`

    `IN_PROGRESS`
    :   ​

    `COMPLETED`
    :   ​

    `FAILED`
    :   ​

    `DELETION_IN_PROGRESS`
    :   ​

    `DELETED`
    :   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2)
:   ​

    **success**

    Set `type` to `"success"`.

    `success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
    :   ​

    **error**

    Set `type` to `"error"`.

    `error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
    :   ​

        Fields of `ErrorResult`

        `errorType` string
        :   ​

        `message` string
        :   ​

        `errorInstanceId` string
        :   ​

    **inProgress**

    Set `type` to `"inProgress"`.

    `inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
    :   ​

        Fields of `InProgressResult`

        `inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
        :   ​

    **deletionInProgress**

    Set `type` to `"deletionInProgress"`.

    `deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
    :   ​

    **deleted**

    Set `type` to `"deleted"`.

    `deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
    :   ​

    **queued**

    Set `type` to `"queued"`.

    `queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
    :   ​

    **parsing**

    Set `type` to `"parsing"`.

    `parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
    :   ​

    **ingesting**

    Set `type` to `"ingesting"`.

    `ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
    :   ​

        Fields of `Ingesting`

        `progress` number
        :   Optional fraction between 0 and 1 indicating progress through ingestion.

`retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy)
:   ​

    Fields of `RetentionPolicy`

    `type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype)
    :   ​

        Values of `RetentionPolicyType`

        `KEEP_UNTIL_EXPIRY`
        :   ​

        `KEEP_FOREVER`
        :   ​

    `expiryDays` integer
    :   ​

`source` string
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`labels` array of string
:   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`allowStreaming` boolean
:   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

`migratedFromConnectionRid` string (RID)
:   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

`externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
:   ​

    Fields of `ExternalConnectionMetadata`

    `connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails)
    :   ​

        **timescale**

        Set `type` to `"timescale"`.

        `timescale` [`TimescaleConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timescaleconnectiondetails)
        :   ​

        **influx**

        Set `type` to `"influx"`.

        `influx` [`Influx2ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx2connectiondetails)
        :   ​

        **influx1**

        Set `type` to `"influx1"`.

        `influx1` [`Influx1ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx1connectiondetails)
        :   ​

        **nominal**

        Set `type` to `"nominal"`.

        `nominal` [`NominalConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#nominalconnectiondetails)
        :   ​

        **timestream**

        Set `type` to `"timestream"`.

        `timestream` [`TimestreamConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamconnectiondetails)
        :   ​

        **visualCrossing**

        Set `type` to `"visualCrossing"`.

        `visualCrossing` [`VisualCrossingConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingconnectiondetails)
        :   ​

        **bigQuery**

        Set `type` to `"bigQuery"`.

        `bigQuery` [`BigQueryConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryconnectiondetails)
        :   ​

    `connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus)
    :   ​

        Fields of `ConnectionStatus`

        `isConnected` boolean
        :   ​

    `limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
    :   ​

        Fields of `LimitsConfig`

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

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

        Fields of `Commit`

        `id` string
        :   ​

        `resourceRid` string (RID)
        :   ​

        `parentCommit` string
        :   ​

        `mergeParentCommit` string
        :   ​

        `message` string
        :   ​

        `isWorkingState` boolean
        :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

        `committedBy` string (RID)
        :   ​

        `committedAt` string (date-time)
        :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "name": "<name>",
  "description": "<description>",
  "labels": [
    "<label>"
  ],
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ],
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  }
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "name": "<name>",
        "description": "<description>",
        "labels": ["<label>"],
        "properties": {"<key>": "<property value>"},
        "typedProperties": {
            "<key>": {"type": "stringValue", "stringValue": "<property value>"},
        },
        "channelSearchSplitTagKeys": ["<tag name>"],
        "defaultGroupByAndAggregationConfig": {
            "numericAggregation": {"type": "sum", "sum": {}},
        },
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "name": "<name>",
        "description": "<description>",
        "labels": ["<label>"],
        "properties": {"<key>": "<property value>"},
        "typedProperties": {
            "<key>": {"type": "stringValue", "stringValue": "<property value>"},
        },
        "channelSearchSplitTagKeys": ["<tag name>"],
        "defaultGroupByAndAggregationConfig": {
            "numericAggregation": {"type": "sum", "sum": {}},
        },
    },
)
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/catalog/v1/datasets/<dataset rid>",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "name": "<name>",
                "description": "<description>",
                "labels": ["<label>"],
                "properties": {"<key>": "<property value>"},
                "typedProperties": {
                    "<key>": {"type": "stringValue", "stringValue": "<property value>"},
                },
                "channelSearchSplitTagKeys": ["<tag name>"],
                "defaultGroupByAndAggregationConfig": {
                    "numericAggregation": {"type": "sum", "sum": {}},
                },
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<rid>",
  "uuid": "<uuid>",
  "name": "<name>",
  "description": "<description>",
  "displayName": "<display name>",
  "metadata": {
    "<key>": "<value>"
  },
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "ingestDate": "2026-01-01T00:00:00Z",
  "lastIngestedAt": "2026-01-01T00:00:00Z",
  "ingestStatus": "IN_PROGRESS",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  },
  "lastIngestStatus": {
    "type": "success",
    "success": {}
  },
  "retentionPolicy": {
    "type": "KEEP_UNTIL_EXPIRY",
    "expiryDays": 1
  },
  "source": "<source>",
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "timestampType": "ABSOLUTE",
  "labels": [
    "<label>"
  ],
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "granularity": "NANOSECONDS",
  "allowStreaming": true,
  "isArchived": true,
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  },
  "migratedFromConnectionRid": "<connection rid>",
  "externalConnectionMetadata": {
    "connectionDetails": {
      "type": "timescale",
      "timescale": {
        "database": "<database>",
        "host": "<host>",
        "port": 1,
        "username": "<username>",
        "passwordSecretRid": "<secret rid>"
      }
    },
    "connectionStatus": {
      "isConnected": true
    },
    "limits": {
      "maxQueryRange": {
        "unit": "HOURS",
        "count": 1
      }
    }
  },
  "derivedDefinition": {
    "spec": {
      "type": "asset",
      "asset": {
        "rid": {
          "type": "literal",
          "literal": "<literal>"
        }
      }
    },
    "commit": {
      "id": "<commit id>",
      "resourceRid": "<resource rid>",
      "parentCommit": "<commit id>",
      "mergeParentCommit": "<commit id>",
      "message": "<message>",
      "isWorkingState": true,
      "committedBy": "<user rid>",
      "committedAt": "2026-01-01T00:00:00Z"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ]
}
```

### Get dataset derived definition

GET `/catalog/v1/datasets/{datasetRid}/derived-definition`

Returns a versioned derived definition. If commit is omitted, returns the latest commit on main. Where the deployment resolves derived datasets through their same-UUID pipelines, the definition and its commits are the pipeline’s; a commit from the dataset’s own earlier history still resolves.

Path parameters

`datasetRid` string (RID) required
:   ​

Query parameters

`commit` string
:   ​

Response

`spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
:   ​

    **asset**

    Set `type` to `"asset"`.

    `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
    :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        Fields of `Asset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Resource identifier of an asset

    **run**

    Set `type` to `"run"`.

    `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
    :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        Fields of `Run`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Resource identifier of a run

    **saved**

    Set `type` to `"saved"`.

    `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
    :   ​

        Fields of `SavedDataset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   A data source RID, given as a literal or as a variable resolved from `Context`. A pipeline’s logic only accepts catalog datasets/pipelines, since it is persisted without context.

    **search**

    Set `type` to `"search"`.

    `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
    :   ​

        Fields of `SearchDataset`

        `target` [`SearchTarget`](https://dev.nominal.io/api/rest/catalog-service.md#searchtarget)
        :   Whether to search assets or runs and with which query.

        `maxResults` integer
        :   Maximum number of assets or runs returned from search. Defaults to 10000 when omitted.

    **combine**

    Set `type` to `"combine"`.

    `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
    :   ​

        Fields of `CombinedDataset`

        `inputs` array of [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The datasets to combine.

    **tag**

    Set `type` to `"tag"`.

    `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
    :   ​

        Fields of `TaggedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to tag.

        `key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Tag key to inject onto each series in the dataset.

        `value` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Tag value to assign to the injected key.

    **filter**

    Set `type` to `"filter"`.

    `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
    :   ​

        Fields of `FilteredDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to filter.

        `predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate)
        :   Conjunctive tag predicate used to keep matching series.

    **timeShift**

    Set `type` to `"timeShift"`.

    `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
    :   ​

        Fields of `TimeShiftedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to time-shift.

        `offset` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
        :   The time shift to apply. Positive values shift data forward in time, negative values shift backward.

    **alignByAnchor**

    Set `type` to `"alignByAnchor"`.

    `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
    :   ​

        Fields of `AnchorAlignedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The dataset to align.

        `anchor` [`DatasetAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#datasetanchor)
        :   Selects the timestamp each anchored portion of the input is aligned by.

        `reference` [`AnchorReference`](https://dev.nominal.io/api/rest/catalog-service.md#anchorreference)
        :   When present, each anchor is aligned onto the referenced anchor timestamp instead of onto timestamp zero, so output remains in the input’s absolute time domain and the referenced portion is unshifted. When absent, the selected anchor becomes timestamp zero.

    **withSeries**

    Set `type` to `"withSeries"`.

    `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
    :   ​

        Fields of `WithSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The base dataset to which the new series will be added.

        `series` array of [`NamedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#namedseries)
        :   The named derived series to add.

    **dropSeries**

    Set `type` to `"dropSeries"`.

    `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
    :   ​

        Fields of `DropSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The base dataset to drop series from.

        `names` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Names of the series to drop.

    **reference**

    Set `type` to `"reference"`.

    `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
    :   ​

        Fields of `DatasetReference`

        `name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Name of the dataset reference to resolve from the context.

    **withDimensions**

    Set `type` to `"withDimensions"`.

    `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
    :   ​

        Fields of `DimensionsDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to tag.

        `dimensions` array of [`Dimension`](https://dev.nominal.io/api/rest/catalog-service.md#dimension)
        :   The dimensions to inject. Must not be empty, must have at most 10 entries, and every dimension must have a distinct tag key. A tag key must not be a `ReservedTagKey`, start with `EVENT_LABEL_PREFIX:`, or start with `NOMINAL_`.

`commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
:   ​

    Fields of `Commit`

    `id` string
    :   ​

    `resourceRid` string (RID)
    :   ​

    `parentCommit` string
    :   ​

    `mergeParentCommit` string
    :   ​

    `message` string
    :   ​

    `isWorkingState` boolean
    :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

    `committedBy` string (RID)
    :   ​

    `committedAt` string (date-time)
    :   ​

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/derived-definition" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/derived-definition",
    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/catalog/v1/datasets/<dataset rid>/derived-definition",
    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/catalog/v1/datasets/<dataset rid>/derived-definition",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "spec": {
    "type": "asset",
    "asset": {
      "rid": {
        "type": "literal",
        "literal": "<literal>"
      }
    }
  },
  "commit": {
    "id": "<commit id>",
    "resourceRid": "<resource rid>",
    "parentCommit": "<commit id>",
    "mergeParentCommit": "<commit id>",
    "message": "<message>",
    "isWorkingState": true,
    "committedBy": "<user rid>",
    "committedAt": "2026-01-01T00:00:00Z"
  }
}
```

### Create dataset derived definition

POST `/catalog/v1/datasets/{datasetRid}/derived-definition`

Initializes a derived definition on a dataset that is not yet derived and has no ingest or streaming state (files, create-time handle, bounds, external connection, or streaming sessions). Subsequent changes use commitDerivedDefinition. Throws if the dataset is already derived, is non-empty, referenced datasets are unauthorized, or the definition is nested/unsupported. Where the deployment resolves derived datasets through their pipelines, the same-UUID pipeline is created alongside, and later commits go to it.

Path parameters

`datasetRid` string (RID) required
:   ​

Body

`spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   Initial derived dataset logic.

    **asset**

    Set `type` to `"asset"`.

    `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
    :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        Fields of `Asset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Resource identifier of an asset

    **run**

    Set `type` to `"run"`.

    `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
    :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        Fields of `Run`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Resource identifier of a run

    **saved**

    Set `type` to `"saved"`.

    `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
    :   ​

        Fields of `SavedDataset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   A data source RID, given as a literal or as a variable resolved from `Context`. A pipeline’s logic only accepts catalog datasets/pipelines, since it is persisted without context.

    **search**

    Set `type` to `"search"`.

    `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
    :   ​

        Fields of `SearchDataset`

        `target` [`SearchTarget`](https://dev.nominal.io/api/rest/catalog-service.md#searchtarget) required
        :   Whether to search assets or runs and with which query.

        `maxResults` integer
        :   Maximum number of assets or runs returned from search. Defaults to 10000 when omitted.

    **combine**

    Set `type` to `"combine"`.

    `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
    :   ​

        Fields of `CombinedDataset`

        `inputs` array of [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The datasets to combine.

    **tag**

    Set `type` to `"tag"`.

    `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
    :   ​

        Fields of `TaggedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The underlying dataset to tag.

        `key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Tag key to inject onto each series in the dataset.

        `value` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Tag value to assign to the injected key.

    **filter**

    Set `type` to `"filter"`.

    `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
    :   ​

        Fields of `FilteredDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The underlying dataset to filter.

        `predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
        :   Conjunctive tag predicate used to keep matching series.

    **timeShift**

    Set `type` to `"timeShift"`.

    `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
    :   ​

        Fields of `TimeShiftedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The underlying dataset to time-shift.

        `offset` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
        :   The time shift to apply. Positive values shift data forward in time, negative values shift backward.

    **alignByAnchor**

    Set `type` to `"alignByAnchor"`.

    `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
    :   ​

        Fields of `AnchorAlignedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The dataset to align.

        `anchor` [`DatasetAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#datasetanchor) required
        :   Selects the timestamp each anchored portion of the input is aligned by.

        `reference` [`AnchorReference`](https://dev.nominal.io/api/rest/catalog-service.md#anchorreference)
        :   When present, each anchor is aligned onto the referenced anchor timestamp instead of onto timestamp zero, so output remains in the input’s absolute time domain and the referenced portion is unshifted. When absent, the selected anchor becomes timestamp zero.

    **withSeries**

    Set `type` to `"withSeries"`.

    `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
    :   ​

        Fields of `WithSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The base dataset to which the new series will be added.

        `series` array of [`NamedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#namedseries)
        :   The named derived series to add.

    **dropSeries**

    Set `type` to `"dropSeries"`.

    `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
    :   ​

        Fields of `DropSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The base dataset to drop series from.

        `names` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Names of the series to drop.

    **reference**

    Set `type` to `"reference"`.

    `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
    :   ​

        Fields of `DatasetReference`

        `name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Name of the dataset reference to resolve from the context.

    **withDimensions**

    Set `type` to `"withDimensions"`.

    `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
    :   ​

        Fields of `DimensionsDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The underlying dataset to tag.

        `dimensions` array of [`Dimension`](https://dev.nominal.io/api/rest/catalog-service.md#dimension)
        :   The dimensions to inject. Must not be empty, must have at most 10 entries, and every dimension must have a distinct tag key. A tag key must not be a `ReservedTagKey`, start with `EVENT_LABEL_PREFIX:`, or start with `NOMINAL_`.

`message` string required
:   Initial commit message for the derived definition’s main branch.

Response

`spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
:   ​

    **asset**

    Set `type` to `"asset"`.

    `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
    :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        Fields of `Asset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Resource identifier of an asset

    **run**

    Set `type` to `"run"`.

    `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
    :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        Fields of `Run`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Resource identifier of a run

    **saved**

    Set `type` to `"saved"`.

    `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
    :   ​

        Fields of `SavedDataset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   A data source RID, given as a literal or as a variable resolved from `Context`. A pipeline’s logic only accepts catalog datasets/pipelines, since it is persisted without context.

    **search**

    Set `type` to `"search"`.

    `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
    :   ​

        Fields of `SearchDataset`

        `target` [`SearchTarget`](https://dev.nominal.io/api/rest/catalog-service.md#searchtarget)
        :   Whether to search assets or runs and with which query.

        `maxResults` integer
        :   Maximum number of assets or runs returned from search. Defaults to 10000 when omitted.

    **combine**

    Set `type` to `"combine"`.

    `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
    :   ​

        Fields of `CombinedDataset`

        `inputs` array of [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The datasets to combine.

    **tag**

    Set `type` to `"tag"`.

    `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
    :   ​

        Fields of `TaggedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to tag.

        `key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Tag key to inject onto each series in the dataset.

        `value` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Tag value to assign to the injected key.

    **filter**

    Set `type` to `"filter"`.

    `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
    :   ​

        Fields of `FilteredDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to filter.

        `predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate)
        :   Conjunctive tag predicate used to keep matching series.

    **timeShift**

    Set `type` to `"timeShift"`.

    `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
    :   ​

        Fields of `TimeShiftedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to time-shift.

        `offset` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
        :   The time shift to apply. Positive values shift data forward in time, negative values shift backward.

    **alignByAnchor**

    Set `type` to `"alignByAnchor"`.

    `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
    :   ​

        Fields of `AnchorAlignedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The dataset to align.

        `anchor` [`DatasetAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#datasetanchor)
        :   Selects the timestamp each anchored portion of the input is aligned by.

        `reference` [`AnchorReference`](https://dev.nominal.io/api/rest/catalog-service.md#anchorreference)
        :   When present, each anchor is aligned onto the referenced anchor timestamp instead of onto timestamp zero, so output remains in the input’s absolute time domain and the referenced portion is unshifted. When absent, the selected anchor becomes timestamp zero.

    **withSeries**

    Set `type` to `"withSeries"`.

    `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
    :   ​

        Fields of `WithSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The base dataset to which the new series will be added.

        `series` array of [`NamedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#namedseries)
        :   The named derived series to add.

    **dropSeries**

    Set `type` to `"dropSeries"`.

    `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
    :   ​

        Fields of `DropSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The base dataset to drop series from.

        `names` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Names of the series to drop.

    **reference**

    Set `type` to `"reference"`.

    `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
    :   ​

        Fields of `DatasetReference`

        `name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Name of the dataset reference to resolve from the context.

    **withDimensions**

    Set `type` to `"withDimensions"`.

    `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
    :   ​

        Fields of `DimensionsDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to tag.

        `dimensions` array of [`Dimension`](https://dev.nominal.io/api/rest/catalog-service.md#dimension)
        :   The dimensions to inject. Must not be empty, must have at most 10 entries, and every dimension must have a distinct tag key. A tag key must not be a `ReservedTagKey`, start with `EVENT_LABEL_PREFIX:`, or start with `NOMINAL_`.

`commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
:   ​

    Fields of `Commit`

    `id` string
    :   ​

    `resourceRid` string (RID)
    :   ​

    `parentCommit` string
    :   ​

    `mergeParentCommit` string
    :   ​

    `message` string
    :   ​

    `isWorkingState` boolean
    :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

    `committedBy` string (RID)
    :   ​

    `committedAt` string (date-time)
    :   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/derived-definition" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "spec": {
    "type": "asset",
    "asset": {
      "rid": {
        "type": "literal",
        "literal": "<literal>"
      }
    }
  },
  "message": "<message>"
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/derived-definition",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "spec": {
            "type": "asset",
            "asset": {"rid": {"type": "literal", "literal": "<literal>"}},
        },
        "message": "<message>",
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/derived-definition",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "spec": {
            "type": "asset",
            "asset": {"rid": {"type": "literal", "literal": "<literal>"}},
        },
        "message": "<message>",
    },
)
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/catalog/v1/datasets/<dataset rid>/derived-definition",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "spec": {
                    "type": "asset",
                    "asset": {"rid": {"type": "literal", "literal": "<literal>"}},
                },
                "message": "<message>",
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "spec": {
    "type": "asset",
    "asset": {
      "rid": {
        "type": "literal",
        "literal": "<literal>"
      }
    }
  },
  "commit": {
    "id": "<commit id>",
    "resourceRid": "<resource rid>",
    "parentCommit": "<commit id>",
    "mergeParentCommit": "<commit id>",
    "message": "<message>",
    "isWorkingState": true,
    "committedBy": "<user rid>",
    "committedAt": "2026-01-01T00:00:00Z"
  }
}
```

### Commit derived definition

POST `/catalog/v1/datasets/{datasetRid}/derived-definition/commit`

Replaces the current derived definition by creating a permanent commit on main. Throws if the dataset is not derived, if referenced datasets are unauthorized, or if latestCommit is stale. Where the deployment resolves derived datasets through their same-UUID pipelines, this commits to the pipeline, and latestCommit is checked against the pipeline’s head.

Path parameters

`datasetRid` string (RID) required
:   ​

Body

`spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   ​

    **asset**

    Set `type` to `"asset"`.

    `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
    :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        Fields of `Asset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Resource identifier of an asset

    **run**

    Set `type` to `"run"`.

    `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
    :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        Fields of `Run`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Resource identifier of a run

    **saved**

    Set `type` to `"saved"`.

    `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
    :   ​

        Fields of `SavedDataset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   A data source RID, given as a literal or as a variable resolved from `Context`. A pipeline’s logic only accepts catalog datasets/pipelines, since it is persisted without context.

    **search**

    Set `type` to `"search"`.

    `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
    :   ​

        Fields of `SearchDataset`

        `target` [`SearchTarget`](https://dev.nominal.io/api/rest/catalog-service.md#searchtarget) required
        :   Whether to search assets or runs and with which query.

        `maxResults` integer
        :   Maximum number of assets or runs returned from search. Defaults to 10000 when omitted.

    **combine**

    Set `type` to `"combine"`.

    `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
    :   ​

        Fields of `CombinedDataset`

        `inputs` array of [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The datasets to combine.

    **tag**

    Set `type` to `"tag"`.

    `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
    :   ​

        Fields of `TaggedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The underlying dataset to tag.

        `key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Tag key to inject onto each series in the dataset.

        `value` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Tag value to assign to the injected key.

    **filter**

    Set `type` to `"filter"`.

    `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
    :   ​

        Fields of `FilteredDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The underlying dataset to filter.

        `predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
        :   Conjunctive tag predicate used to keep matching series.

    **timeShift**

    Set `type` to `"timeShift"`.

    `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
    :   ​

        Fields of `TimeShiftedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The underlying dataset to time-shift.

        `offset` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
        :   The time shift to apply. Positive values shift data forward in time, negative values shift backward.

    **alignByAnchor**

    Set `type` to `"alignByAnchor"`.

    `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
    :   ​

        Fields of `AnchorAlignedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The dataset to align.

        `anchor` [`DatasetAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#datasetanchor) required
        :   Selects the timestamp each anchored portion of the input is aligned by.

        `reference` [`AnchorReference`](https://dev.nominal.io/api/rest/catalog-service.md#anchorreference)
        :   When present, each anchor is aligned onto the referenced anchor timestamp instead of onto timestamp zero, so output remains in the input’s absolute time domain and the referenced portion is unshifted. When absent, the selected anchor becomes timestamp zero.

    **withSeries**

    Set `type` to `"withSeries"`.

    `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
    :   ​

        Fields of `WithSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The base dataset to which the new series will be added.

        `series` array of [`NamedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#namedseries)
        :   The named derived series to add.

    **dropSeries**

    Set `type` to `"dropSeries"`.

    `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
    :   ​

        Fields of `DropSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The base dataset to drop series from.

        `names` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Names of the series to drop.

    **reference**

    Set `type` to `"reference"`.

    `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
    :   ​

        Fields of `DatasetReference`

        `name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
        :   Name of the dataset reference to resolve from the context.

    **withDimensions**

    Set `type` to `"withDimensions"`.

    `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
    :   ​

        Fields of `DimensionsDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
        :   The underlying dataset to tag.

        `dimensions` array of [`Dimension`](https://dev.nominal.io/api/rest/catalog-service.md#dimension)
        :   The dimensions to inject. Must not be empty, must have at most 10 entries, and every dimension must have a distinct tag key. A tag key must not be a `ReservedTagKey`, start with `EVENT_LABEL_PREFIX:`, or start with `NOMINAL_`.

`message` string required
:   ​

`latestCommit` string
:   If present, validates that the latest commit on main matches this id, and otherwise throws CommitConflict.

Response

`spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
:   ​

    **asset**

    Set `type` to `"asset"`.

    `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
    :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        Fields of `Asset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Resource identifier of an asset

    **run**

    Set `type` to `"run"`.

    `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
    :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        Fields of `Run`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Resource identifier of a run

    **saved**

    Set `type` to `"saved"`.

    `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
    :   ​

        Fields of `SavedDataset`

        `rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   A data source RID, given as a literal or as a variable resolved from `Context`. A pipeline’s logic only accepts catalog datasets/pipelines, since it is persisted without context.

    **search**

    Set `type` to `"search"`.

    `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
    :   ​

        Fields of `SearchDataset`

        `target` [`SearchTarget`](https://dev.nominal.io/api/rest/catalog-service.md#searchtarget)
        :   Whether to search assets or runs and with which query.

        `maxResults` integer
        :   Maximum number of assets or runs returned from search. Defaults to 10000 when omitted.

    **combine**

    Set `type` to `"combine"`.

    `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
    :   ​

        Fields of `CombinedDataset`

        `inputs` array of [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The datasets to combine.

    **tag**

    Set `type` to `"tag"`.

    `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
    :   ​

        Fields of `TaggedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to tag.

        `key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Tag key to inject onto each series in the dataset.

        `value` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Tag value to assign to the injected key.

    **filter**

    Set `type` to `"filter"`.

    `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
    :   ​

        Fields of `FilteredDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to filter.

        `predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate)
        :   Conjunctive tag predicate used to keep matching series.

    **timeShift**

    Set `type` to `"timeShift"`.

    `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
    :   ​

        Fields of `TimeShiftedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to time-shift.

        `offset` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
        :   The time shift to apply. Positive values shift data forward in time, negative values shift backward.

    **alignByAnchor**

    Set `type` to `"alignByAnchor"`.

    `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
    :   ​

        Fields of `AnchorAlignedDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The dataset to align.

        `anchor` [`DatasetAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#datasetanchor)
        :   Selects the timestamp each anchored portion of the input is aligned by.

        `reference` [`AnchorReference`](https://dev.nominal.io/api/rest/catalog-service.md#anchorreference)
        :   When present, each anchor is aligned onto the referenced anchor timestamp instead of onto timestamp zero, so output remains in the input’s absolute time domain and the referenced portion is unshifted. When absent, the selected anchor becomes timestamp zero.

    **withSeries**

    Set `type` to `"withSeries"`.

    `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
    :   ​

        Fields of `WithSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The base dataset to which the new series will be added.

        `series` array of [`NamedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#namedseries)
        :   The named derived series to add.

    **dropSeries**

    Set `type` to `"dropSeries"`.

    `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
    :   ​

        Fields of `DropSeriesDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The base dataset to drop series from.

        `names` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Names of the series to drop.

    **reference**

    Set `type` to `"reference"`.

    `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
    :   ​

        Fields of `DatasetReference`

        `name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
        :   Name of the dataset reference to resolve from the context.

    **withDimensions**

    Set `type` to `"withDimensions"`.

    `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
    :   ​

        Fields of `DimensionsDataset`

        `input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
        :   The underlying dataset to tag.

        `dimensions` array of [`Dimension`](https://dev.nominal.io/api/rest/catalog-service.md#dimension)
        :   The dimensions to inject. Must not be empty, must have at most 10 entries, and every dimension must have a distinct tag key. A tag key must not be a `ReservedTagKey`, start with `EVENT_LABEL_PREFIX:`, or start with `NOMINAL_`.

`commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
:   ​

    Fields of `Commit`

    `id` string
    :   ​

    `resourceRid` string (RID)
    :   ​

    `parentCommit` string
    :   ​

    `mergeParentCommit` string
    :   ​

    `message` string
    :   ​

    `isWorkingState` boolean
    :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

    `committedBy` string (RID)
    :   ​

    `committedAt` string (date-time)
    :   ​

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/derived-definition/commit" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "spec": {
    "type": "asset",
    "asset": {
      "rid": {
        "type": "literal",
        "literal": "<literal>"
      }
    }
  },
  "message": "<message>"
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/derived-definition/commit",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "spec": {
            "type": "asset",
            "asset": {"rid": {"type": "literal", "literal": "<literal>"}},
        },
        "message": "<message>",
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/derived-definition/commit",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "spec": {
            "type": "asset",
            "asset": {"rid": {"type": "literal", "literal": "<literal>"}},
        },
        "message": "<message>",
    },
)
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/catalog/v1/datasets/<dataset rid>/derived-definition/commit",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "spec": {
                    "type": "asset",
                    "asset": {"rid": {"type": "literal", "literal": "<literal>"}},
                },
                "message": "<message>",
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "spec": {
    "type": "asset",
    "asset": {
      "rid": {
        "type": "literal",
        "literal": "<literal>"
      }
    }
  },
  "commit": {
    "id": "<commit id>",
    "resourceRid": "<resource rid>",
    "parentCommit": "<commit id>",
    "mergeParentCommit": "<commit id>",
    "message": "<message>",
    "isWorkingState": true,
    "committedBy": "<user rid>",
    "committedAt": "2026-01-01T00:00:00Z"
  }
}
```

### Update global dataset bounds

PUT `/catalog/v1/datasets/{rid}/bounds-from-streaming`

Update the bounds for a dataset without updating bounds of files within the dataset. If the current bounds of the dataset are not set, then the bounds of the request will be used. Otherwise, the bounds will be min(current start, request start), max(current end, request end).

Path parameters

`rid` string (RID) required
:   ​

Body

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

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64) required
        :   ​

        `nanos` integer (int64) required
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype) required
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

Response

`rid` string (RID)
:   ​

`name` string
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

    **s3**

    Set `type` to `"s3"`.

    `s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
    :   ​

        Fields of `S3Handle`

        `bucket` string
        :   ​

        `key` string
        :   ​

`description` string
:   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata)
:   ​

    Fields of `DatasetOriginMetadata`

    `path` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesIsAbsolute` boolean
    :   Deprecated in favor of FileOriginMetadata

    `schemaDirectivePath` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesColumnName` string
    :   Deprecated in favor of FileOriginMetadata

    `xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
    :   Deprecated in favor of FileOriginMetadata

        Values of `TimeUnit`

        `DAYS`
        :   ​

        `HOURS`
        :   ​

        `MINUTES`
        :   ​

        `SECONDS`
        :   ​

        `MILLISECONDS`
        :   ​

        `MICROSECONDS`
        :   ​

        `NANOSECONDS`
        :   ​

    `timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
    :   Deprecated in favor of FileOriginMetadata

        Fields of `TimestampMetadata`

        `seriesName` string
        :   ​

        `timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype)
        :   ​

    `channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
    :   ​

        Fields of `ChannelConfig`

        `prefixTreeDelimiter` string
        :   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

    Fields of `Bounds`

    `start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

        Fields of `Timestamp`

        `seconds` integer (int64)
        :   ​

        `nanos` integer (int64)
        :   ​

    `end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
    :   ​

    `type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype)
    :   ​

        Values of `datasource.TimestampType`

        `RELATIVE`
        :   ​

        `ABSOLUTE`
        :   ​

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

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

    **stringValue**

    Set `type` to `"stringValue"`.

    `stringValue` string
    :   ​

    **numericValue**

    Set `type` to `"numericValue"`.

    `numericValue` number
    :   ​

`labels` array of string
:   ​

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

    Values of `WeakTimestampType`

    `ABSOLUTE`
    :   ​

    `RELATIVE`
    :   ​

    `PENDING`
    :   ​

`allowStreaming` boolean
:   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   ​

    Values of `Granularity`

    `NANOSECONDS`
    :   ​

`isArchived` boolean
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

    Fields of `DefaultGroupByAndAggregationConfig`

    `numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
    :   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

        **sum**

        Set `type` to `"sum"`.

        `sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
        :   ​

        **average**

        Set `type` to `"average"`.

        `average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
        :   ​

        **min**

        Set `type` to `"min"`.

        `min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
        :   ​

        **max**

        Set `type` to `"max"`.

        `max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
        :   ​

        **count**

        Set `type` to `"count"`.

        `count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
        :   ​

        **standardDeviation**

        Set `type` to `"standardDeviation"`.

        `standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
        :   ​

        **rootMeanSquare**

        Set `type` to `"rootMeanSquare"`.

        `rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
        :   ​

        **percentile**

        Set `type` to `"percentile"`.

        `percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
        :   ​

        **udf**

        Set `type` to `"udf"`.

        `udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
        :   ​

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

    Fields of `DerivedDefinition`

    `spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
    :   ​

        **asset**

        Set `type` to `"asset"`.

        `asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
        :   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

        **run**

        Set `type` to `"run"`.

        `run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
        :   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

        **saved**

        Set `type` to `"saved"`.

        `saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
        :   ​

        **search**

        Set `type` to `"search"`.

        `search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
        :   ​

        **combine**

        Set `type` to `"combine"`.

        `combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
        :   ​

        **tag**

        Set `type` to `"tag"`.

        `tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
        :   ​

        **filter**

        Set `type` to `"filter"`.

        `filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
        :   ​

        **timeShift**

        Set `type` to `"timeShift"`.

        `timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
        :   ​

        **alignByAnchor**

        Set `type` to `"alignByAnchor"`.

        `alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
        :   ​

        **withSeries**

        Set `type` to `"withSeries"`.

        `withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
        :   ​

        **dropSeries**

        Set `type` to `"dropSeries"`.

        `dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
        :   ​

        **reference**

        Set `type` to `"reference"`.

        `reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
        :   ​

        **withDimensions**

        Set `type` to `"withDimensions"`.

        `withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
        :   ​

    `commit` [`Commit`](https://dev.nominal.io/api/rest/catalog-service.md#commit)
    :   ​

        Fields of `Commit`

        `id` string
        :   ​

        `resourceRid` string (RID)
        :   ​

        `parentCommit` string
        :   ​

        `mergeParentCommit` string
        :   ​

        `message` string
        :   ​

        `isWorkingState` boolean
        :   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

        `committedBy` string (RID)
        :   ​

        `committedAt` string (date-time)
        :   ​

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

Request

**curl**

```shell
curl -X PUT "https://api.gov.nominal.io/api/catalog/v1/datasets/<rid>/bounds-from-streaming" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  }
}'
```

**requests**

```python
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<rid>/bounds-from-streaming",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "bounds": {
            "start": {"seconds": 1, "nanos": 1},
            "end": {"seconds": 1, "nanos": 1},
            "type": "RELATIVE",
        },
    },
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<rid>/bounds-from-streaming",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "bounds": {
            "start": {"seconds": 1, "nanos": 1},
            "end": {"seconds": 1, "nanos": 1},
            "type": "RELATIVE",
        },
    },
)
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/catalog/v1/datasets/<rid>/bounds-from-streaming",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "bounds": {
                    "start": {"seconds": 1, "nanos": 1},
                    "end": {"seconds": 1, "nanos": 1},
                    "type": "RELATIVE",
                },
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "rid": "<rid>",
  "name": "<name>",
  "handle": {
    "type": "s3",
    "s3": {
      "bucket": "<bucket>",
      "key": "<key>"
    }
  },
  "description": "<description>",
  "originMetadata": {
    "path": "<path>",
    "xSeriesIsAbsolute": true,
    "schemaDirectivePath": "<schema directive path>",
    "xSeriesColumnName": "<x series column name>",
    "xSeriesTimeUnit": "DAYS",
    "timestampMetadata": {
      "seriesName": "<series name>",
      "timestampType": {
        "type": "relative",
        "relative": {
          "timeUnit": "DAYS",
          "offset": "2026-01-01T00:00:00Z"
        }
      }
    },
    "channelConfig": {
      "prefixTreeDelimiter": "<prefix tree delimiter>"
    }
  },
  "bounds": {
    "start": {
      "seconds": 1,
      "nanos": 1
    },
    "end": {
      "seconds": 1,
      "nanos": 1
    },
    "type": "RELATIVE"
  },
  "properties": {
    "<key>": "<property value>"
  },
  "typedProperties": {
    "<key>": {
      "type": "stringValue",
      "stringValue": "<property value>"
    }
  },
  "labels": [
    "<label>"
  ],
  "timestampType": "ABSOLUTE",
  "allowStreaming": true,
  "granularity": "NANOSECONDS",
  "isArchived": true,
  "defaultGroupByAndAggregationConfig": {
    "numericAggregation": {
      "type": "sum",
      "sum": {}
    }
  },
  "derivedDefinition": {
    "spec": {
      "type": "asset",
      "asset": {
        "rid": {
          "type": "literal",
          "literal": "<literal>"
        }
      }
    },
    "commit": {
      "id": "<commit id>",
      "resourceRid": "<resource rid>",
      "parentCommit": "<commit id>",
      "mergeParentCommit": "<commit id>",
      "message": "<message>",
      "isWorkingState": true,
      "committedBy": "<user rid>",
      "committedAt": "2026-01-01T00:00:00Z"
    }
  },
  "channelSearchSplitTagKeys": [
    "<tag name>"
  ]
}
```

### Archive dataset

POST `/catalog/v1/datasets/{datasetRid}/archive`

Archives a dataset, which will hide it from search results unless the includeArchived flag is set to true. The dataset can still be directly accessed by its UUID/rid.

Path parameters

`datasetRid` string (RID) required
:   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/archive" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/archive",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/archive",
    headers={"Authorization": "Bearer <api key>"},
)
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/catalog/v1/datasets/<dataset rid>/archive",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()

asyncio.run(main())
```

Response: `204`

No content.

### Unarchive dataset

POST `/catalog/v1/datasets/{datasetRid}/unarchive`

Undoes the archiving of a dataset.

Path parameters

`datasetRid` string (RID) required
:   ​

Response

No content (HTTP 204).

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/unarchive" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/unarchive",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/<dataset rid>/unarchive",
    headers={"Authorization": "Bearer <api key>"},
)
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/catalog/v1/datasets/<dataset rid>/unarchive",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()

asyncio.run(main())
```

Response: `204`

No content.

### Get all properties and labels

GET `/catalog/v1/datasets/all-properties-labels`

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/catalog/v1/datasets/all-properties-labels" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/datasets/all-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/catalog/v1/datasets/all-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/catalog/v1/datasets/all-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>"
  ]
}
```

### Get log dataset for workspace

GET `/catalog/v1/workspaces/{workspaceRid}/log-dataset`

Returns the log dataset RID for the specified workspace if configured and accessible to the caller.

Path parameters

`workspaceRid` string (RID) required
:   ​

Response

The body is a string (RID).

When there is nothing to return, the response is HTTP 204 with no body.

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/catalog/v1/workspaces/<workspace rid>/log-dataset" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/catalog/v1/workspaces/<workspace rid>/log-dataset",
    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/catalog/v1/workspaces/<workspace rid>/log-dataset",
    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/catalog/v1/workspaces/<workspace rid>/log-dataset",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
"<dataset rid>"
```

## Errors

[Errors](https://dev.nominal.io/api/legacy.md#errors) shows how these errors are sent.

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

| Status | Name | Notes |
| --- | --- | --- |
| 400 | `CannotAddFileToDerivedDataset` | Derived datasets are backed by other datasets and do not support file ingest. |
| 400 | `CannotAddToLegacyDataset` | The current dataset is legacy and does not support multiple files. Please re-ingest this dataset. |
| 400 | `CannotCreateNestedDerivedDataset` | Derived datasets cannot currently be backed by other derived datasets. |
| 400 | `CannotCreateUnsupportedDerivedDataset` | Derived datasets can currently only be backed by ordinary datasets. |
| 400 | `CannotInitializeDerivedOnNonEmptyDataset` | A derived definition can only be initialized on a dataset with no ingest or streaming state: no files, no create-time file handle, no global bounds, no external connection config, and no streaming sessions. |
| 400 | `CannotUpdateNonDerivedDataset` | Dataset derived definitions can only be updated for datasets that are already derived. To initialize a derived definition on an empty dataset, use createDatasetDerivedDefinition. |
| 400 | `ChannelSearchSplitTagKeyNotInDerivedDefinition` | A channel-search split tag key is not injected by the dataset’s derived definition. Split tag keys must name a tag the definition produces. |
| 400 | `ChannelSearchSplitTagKeysWithoutDerivedDefinition` | Channel-search split tag keys were supplied for a dataset with no derived definition. Only tag keys a derived definition produces can be split on; ingested tag keys cannot. |
| 400 | `GranularityMismatch` | Different time units are not allowed for the same dataset. Must be all nanoseconds. |
| 404 | `ChannelNotFound` |  |
| 404 | `DatasetFileNotFound` |  |
| 404 | `DatasetNotFound` |  |
| 404 | `DatasetsNotFound` |  |
| 404 | `VideoFileNotFound` |  |
| 409 | `ConflictOnDatasetCreation` |  |
| 409 | `ConflictOnDatasetFileCreateOrUpdate` | Dataset files must have globally unique S3 paths on creation. On update, the ingested_at timestamp must be unique. |
| 409 | `ConflictOnSeriesCreation` |  |
| 409 | `DatasetAlreadyDerived` | The dataset already has a derived definition. Use commitDerivedDefinition to update it. |
| 409 | `DatasetExistsInOtherWorkspace` | The dataset with the requested path already exists in another workspace. |
| 409 | `InvalidStateForAddingAdditionalFile` | The current dataset is not in a valid state for uploading an additional file - it is either failed or still ingesting the previous file. |
| 500 | `DerivedDatasetsNotEnabled` | Derived dataset creation is not enabled for this environment. |

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

| Status | Name | Notes |
| --- | --- | --- |
| 404 | `RunNotFound` |  |

## Types

### Abs

Computes the absolute value of each point in the series.

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series.

### AbsoluteThreshold

Threshold defined as a real number corresponding the unit of a series.

`value` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   Allowed spread, in the series’ own unit.

### AbsoluteTimestamp

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

`iso8601` [`Iso8601Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#iso8601timestamp)
:   ​

`epochOfTimeUnit` [`EpochTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#epochtimestamp)
:   ​

`customFormat` [`CustomTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#customtimestamp)
:   ​

### AbsoluteTimestampSeries

Replaces values in a series with the absolute timestamps.

`input` [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series) required
:   ​

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit) required
:   The time unit used to define the output values. Throws an error if nanosecond or finer.

### Acos

Computes the arccosine of each value, returning radians.

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (values in [-1, 1]).

### Add

Adds two numeric series pointwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Left-hand operand.

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Right-hand operand.

### AfterPersistenceWindow

The first point in the output range will be the first point after the condition has been true for the min duration and min points.

An empty JSON object, `{}`.

### AggregateEnumSeries

Aggregates values with duplicate timestamps in the input series values into a single value using the specified aggregation function.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`function` [`EnumAggregationFunction`](https://dev.nominal.io/api/rest/catalog-service.md#enumaggregationfunction) required
:   ​

### AggregateNumericSeries

DEPRECATED. Use a dedicated group-by-and-aggregate nodes instead.

Aggregates values with duplicate timestamps in the input series values into a single value using the specified aggregation function.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`function` [`NumericAggregationFunction`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationfunction) required
:   ​

`groupByTags` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Tags to group by for the aggregation. If left empty, the tags to group by will be equivalent to those in the input series. If specified, the result will be grouped ONLY by the specified tags. The tags specified here MUST be a (non-strict) subset of the input series’s group by tags.

`aggregateByAllGroupings` boolean
:   This field’s purpose is to distinguish between the two flavors of groupByTags being empty. It has no effect when groupByTags is non-empty. When true and groupByTags is empty, aggregate across all series in the input. When false and groupByTags is empty, the result will be grouped by the same tags as the input series.

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   If provided, interpolates values at timestamps where the input series has values before aggregating. If not provided, only aggregates when timestamps match exactly (existing behavior). **Deprecated:** Setting interpolation on this node is deprecated.

### AggregateUnderRangesSeries

Aggregates the input series under the ranges in the provided ranges series, and outputs a new series with one point at the start of each range, where the value is the aggregation result. If a range has no points, no point will be produced for it. If a range has no start, the point produced for it will be at the start of the compute request range.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`ranges` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

`operation` [`NumericAggregationFunction`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationfunction) required deprecated
:   **Deprecated:** Use a dedicated group-by-and-aggregate node instead (coming in a follow-up PR). This field is retained as required for backwards compatibility with existing callers.

### AggregationBuilder

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

`rollingTime` [`RollingTimeAggregationBuilder`](https://dev.nominal.io/api/rest/catalog-service.md#rollingtimeaggregationbuilder)
:   ​

`rollingPoints` [`RollingPointsAggregationBuilder`](https://dev.nominal.io/api/rest/catalog-service.md#rollingpointsaggregationbuilder)
:   ​

`groupBy` [`GroupByAggregationBuilder`](https://dev.nominal.io/api/rest/catalog-service.md#groupbyaggregationbuilder)
:   ​

### Alignment

Specifies how to set the timestamp grid for multi-input operations.

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

`driverSeries` [`DriverSeries`](https://dev.nominal.io/api/rest/catalog-service.md#driverseries)
:   ​

`union` [`Union`](https://dev.nominal.io/api/rest/catalog-service.md#union)
:   ​

### AllChannelsConnectionsScrapingConfig

An empty JSON object, `{}`.

### AllowNegativeValues

An empty JSON object, `{}`.

### AnchorAlignedDataset

Aligns each anchored portion of the input dataset onto a common anchor timestamp while preserving grouping tags. Without a `reference` the selected anchor becomes timestamp zero, so the output is in a relative time domain; with a `reference` the anchors are aligned onto the referenced portion’s anchor and the output stays in the input’s absolute time domain. Currently run boundary, event, and range anchors are supported, and every storage-backed leaf of the input must resolve to run-backed branches.

`input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   The dataset to align.

`anchor` [`DatasetAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#datasetanchor) required
:   Selects the timestamp each anchored portion of the input is aligned by.

`reference` [`AnchorReference`](https://dev.nominal.io/api/rest/catalog-service.md#anchorreference)
:   When present, each anchor is aligned onto the referenced anchor timestamp instead of onto timestamp zero, so output remains in the input’s absolute time domain and the referenced portion is unshifted. When absent, the selected anchor becomes timestamp zero.

### AnchorReference

Selects the anchor timestamp every other anchor is aligned onto.

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

`earliestAnchor` [`EarliestAnchorReference`](https://dev.nominal.io/api/rest/catalog-service.md#earliestanchorreference)
:   Aligns every anchor onto the earliest anchor resolved from the input, so the earliest-anchored run is unshifted and every other run shifts backwards onto it.

### AndSeries

Combines two boolean series point-wise using logical AND, producing true where both inputs are true and false otherwise.

`left` [`BooleanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#booleanseries) required
:   ​

`right` [`BooleanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#booleanseries) required
:   ​

### api.Dataset

A logical bundle of named series. For the time being, columns are each a time series (series name + tags). A dataset is either rooted in persisted data (asset or dataset) or defined as a transformation of another dataset.

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

`asset` [`Asset`](https://dev.nominal.io/api/rest/catalog-service.md#asset)
:   Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`.

`run` [`Run`](https://dev.nominal.io/api/rest/catalog-service.md#run)
:   Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`.

`saved` [`SavedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#saveddataset)
:   ​

`search` [`SearchDataset`](https://dev.nominal.io/api/rest/catalog-service.md#searchdataset)
:   ​

`combine` [`CombinedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#combineddataset)
:   ​

`tag` [`TaggedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#taggeddataset)
:   ​

`filter` [`FilteredDataset`](https://dev.nominal.io/api/rest/catalog-service.md#filtereddataset)
:   ​

`timeShift` [`TimeShiftedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#timeshifteddataset)
:   ​

`alignByAnchor` [`AnchorAlignedDataset`](https://dev.nominal.io/api/rest/catalog-service.md#anchoraligneddataset)
:   ​

`withSeries` [`WithSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#withseriesdataset)
:   ​

`dropSeries` [`DropSeriesDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dropseriesdataset)
:   ​

`reference` [`DatasetReference`](https://dev.nominal.io/api/rest/catalog-service.md#datasetreference)
:   ​

`withDimensions` [`DimensionsDataset`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionsdataset)
:   ​

### ApiScrapingConfig

This config is used to scrape data from an external connections service.

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

`allChannels` [`AllChannelsConnectionsScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#allchannelsconnectionsscrapingconfig)
:   ​

`channelAllowList` [`ChannelAllowListConnectionsScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelallowlistconnectionsscrapingconfig)
:   ​

`channelBlockList` [`ChannelBlockListConnectionsScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelblocklistconnectionsscrapingconfig)
:   ​

### ApproximateThresholdOperator

`EQUAL_TO`
:   ​

`NOT_EQUAL_TO`
:   ​

### ApproximateThresholdRanges

Produces a list of ranges for which the threshold condition is satisfied.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`threshold` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

`tolerance` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

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

`persistenceWindowConfiguration` [`PersistenceWindowConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#persistencewindowconfiguration)
:   ​

### ArithmeticSeries

`inputs` map of `LocalVariableName` to [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   ​

`expression` string required
:   ​

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### ArraySeries

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

`numeric1d` [`Numeric1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darrayseries)
:   ​

`enum1d` [`Enum1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darrayseries)
:   ​

### Asin

Computes the arcsine of each value, returning radians.

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (values in [-1, 1]).

### Asset

Asset reference for `Dataset.asset`. The `rid` field accepts either a literal asset RID or a `StringConstant` reference resolved from `Context`.

`rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Resource identifier of an asset

### AssetChannel

`assetRid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`dataScopeName` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Used to disambiguate when multiple data scopes within this asset contain channels with the same name.

`channel` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`additionalTags` map of string to [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) deprecated
:   **Deprecated:** Use additionalTagFilters

`additionalTagFilters` [`TagFilters`](https://dev.nominal.io/api/rest/catalog-service.md#tagfilters)
:   Tags to filter the channel by, in addition to tag filters defined for a given Asset data scope. Throws on collisions with tag keys already defined for the given Asset data scope. Only returns points that match both sets of tag filters. For log series, include arg filters here in addition to tag filters.

`tagsToGroupBy` array of string deprecated
:   **Deprecated:** Use groupByTags instead. Throws if both tagsToGroupBy and groupByTags are specified.

`groupByTags` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Tags that the channel should be grouped by. If this is non-empty a grouped result will be returned with an entry for each grouping. Only one of tagsToGroupBy and groupByTags should be specified.

### AssetsSearchTarget

Search assets. Each match expands to one grouping per data scope on that asset.

`query` [`ResourceSearchQuery`](https://dev.nominal.io/api/rest/catalog-service.md#resourcesearchquery) required
:   Predicate tree used to filter matching assets.

### Atan2

Computes the two-argument arctangent atan2(y, x) using signs to determine the quadrant.

`y` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Y-coordinate series.

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   X-coordinate series.

### Average

A average that gives the same weight to each observation inside the time window

An empty JSON object, `{}`.

### BandPassConfiguration

`lowPassbandFrequency` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

`highPassbandFrequency` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

### BandStopConfiguration

`lowStopbandFrequency` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

`highStopbandFrequency` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

### BigQueryChannelNameComponent

`includeProject` boolean required
:   Whether to include the project name in the channel name.

`includeDataset` boolean required
:   Whether to include the dataset name in the channel name.

`includeTable` boolean required
:   Whether to include the table name in the channel name.

### BigQueryConnectionDetails

`region` string required
:   The region of the BigQuery Project (e.g. “us-east1”)

`project` string required
:   The name of the BigQuery Project

`dataset` string required
:   The name of the dataset within the project

`table` string required
:   The name of the table within the dataset

`serviceAccountKeySecretRid` string (RID) required
:   Secret Rid of service account key stored in Secrets Service.

### BigQueryScrapingConfig

`timeColumn` string required
:   The name of the column that holds the timestamp.

`tagColumns` array of string
:   The name of the columns that should be interpreted as tag columns

`channelNameComponents` [`BigQueryChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#bigquerychannelnamecomponent)
:   channelNameComponents will be combined, together with separator, to form a fully qualified channel name. By default, we don’t add anything to the column name.

`separator` string
:   The separator that delimits the parts of the channel name. If ommitted, the default is a “.”.

### BinaryArithmeticOperation

`ATAN2`
:   Calculates the angle measure between the x-axis and a ray from the origin to a point (input2, input1) in radians. Note the order of arguments.

### BinaryArithmeticSeries

Applies a point-wise transformation to a pair of series.

`input1` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`input2` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`operation` [`BinaryArithmeticOperation`](https://dev.nominal.io/api/rest/catalog-service.md#binaryarithmeticoperation) required
:   ​

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### BitAnd

Applies a bitwise AND between each value (cast to int64) and the operand.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (values cast to int64).

`operand` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The value to AND with each point.

### BitAndFunction

`operand` integer (int64) required
:   ​

### BitOperationFunction

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

`and` [`BitAndFunction`](https://dev.nominal.io/api/rest/catalog-service.md#bitandfunction)
:   ​

`or` [`BitOrFunction`](https://dev.nominal.io/api/rest/catalog-service.md#bitorfunction)
:   ​

`xor` [`BitXorFunction`](https://dev.nominal.io/api/rest/catalog-service.md#bitxorfunction)
:   ​

`shiftRight` [`BitShiftRightFunction`](https://dev.nominal.io/api/rest/catalog-service.md#bitshiftrightfunction)
:   ​

`shiftLeft` [`BitShiftLeftFunction`](https://dev.nominal.io/api/rest/catalog-service.md#bitshiftleftfunction)
:   ​

`bitTest` [`BitTestFunction`](https://dev.nominal.io/api/rest/catalog-service.md#bittestfunction)
:   ​

### BitOperationSeries

Casts input series values to long before applying the bitwise operation.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`function` [`BitOperationFunction`](https://dev.nominal.io/api/rest/catalog-service.md#bitoperationfunction) required
:   ​

### BitOr

Applies a bitwise OR between each value (cast to int64) and the operand.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (values cast to int64).

`operand` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The value to OR with each point.

### BitOrFunction

`operand` integer (int64) required
:   ​

### BitShiftLeft

Left-shifts the bits in each value (cast to int64) by the given number of positions.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (values cast to int64).

`operand` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Number of positions to shift left.

### BitShiftLeftFunction

Shifts the bits in each value left according to the given operand.

`operand` integer required
:   ​

### BitShiftRight

Right-shifts the bits in each value (cast to int64) by the given number of positions.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (values cast to int64).

`operand` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Number of positions to shift right.

### BitShiftRightFunction

Right shifts the bits in each value right according to the given operand.

`operand` integer required
:   ​

### BitTest

Returns the bit at the specified index for each value (cast to int64), where index 0 is the least significant bit.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (values cast to int64).

`index` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Zero-based bit index, where 0 is the least significant bit.

### BitTestFunction

Returns the bit at the specified index, where the right-most bit has index 0.

`index` integer required
:   ​

### BitXor

Applies a bitwise XOR between each value (cast to int64) and the operand.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (values cast to int64).

`operand` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The value to XOR with each point.

### BitXorFunction

`operand` integer (int64) required
:   ​

### BooleanRanges

Produces ranges spanning the regions where a boolean input is true.

The condition is evaluated point-wise at each aligned timestamp; the numeric series it compares are aligned against each other the same way arithmetic between them would be.

`input` [`BooleanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#booleanseries) required
:   The condition whose true regions become ranges.

`minPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Minimum number of matching points. Defaults to 1.

`minDuration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
:   Minimum matching duration. Defaults to one nanosecond.

`rangeStart` [`RangeStart`](https://dev.nominal.io/api/rest/catalog-service.md#rangestart)
:   Selects whether the output begins at the first match or after persistence is satisfied.

### BooleanSeries

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

`greaterThan` [`GreaterThanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#greaterthanseries)
:   ​

`lessThan` [`LessThanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#lessthanseries)
:   ​

`equalTo` [`EqualToSeries`](https://dev.nominal.io/api/rest/catalog-service.md#equaltoseries)
:   ​

`notEqualTo` [`NotEqualToSeries`](https://dev.nominal.io/api/rest/catalog-service.md#notequaltoseries)
:   ​

`greaterThanOrEqualTo` [`GreaterThanOrEqualToSeries`](https://dev.nominal.io/api/rest/catalog-service.md#greaterthanorequaltoseries)
:   ​

`lessThanOrEqualTo` [`LessThanOrEqualToSeries`](https://dev.nominal.io/api/rest/catalog-service.md#lessthanorequaltoseries)
:   ​

`and` [`AndSeries`](https://dev.nominal.io/api/rest/catalog-service.md#andseries)
:   ​

`or` [`OrSeries`](https://dev.nominal.io/api/rest/catalog-service.md#orseries)
:   ​

### Bounds

`start` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
:   ​

`end` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
:   ​

`type` [`datasource.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#datasource-timestamptype) required
:   ​

### BuiltinConstant

A system-defined constant referenceable by name. The server resolves the symbol to its numeric value during query resolution.

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

`math` [`MathConstant`](https://dev.nominal.io/api/rest/catalog-service.md#mathconstant)
:   ​

`physical` [`PhysicalConstant`](https://dev.nominal.io/api/rest/catalog-service.md#physicalconstant)
:   ​

### BuiltInCurveFit

A closed-form curve fit (exponential, logarithmic, or power) of the enclosing target (`y`) against the chosen independent variable (`x`): either sample time (a `time` variable) or another series (a `numeric` variable).

`independentVariable` [`CurveFitVariable`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitvariable) required
:   The `x` axis the target is fit against — either relative sample time or another series.

### catalog.Dataset

`rid` string (RID) required
:   ​

`name` string required
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

`description` string
:   ​

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata) required
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

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

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

`labels` array of string
:   ​

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

`allowStreaming` boolean required
:   ​

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

`isArchived` boolean required
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

### catalog.TimestampType

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

`relative` [`RelativeTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#relativetimestamp)
:   ​

`absolute` [`AbsoluteTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestamp)
:   ​

### CategoricalEqualityRangesV2

Produces ranges where all categorical inputs are equal or are not all equal.

`inputs` array of [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries)
:   The series compared against each other. At least two are required.

`minPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Minimum number of matching points. Defaults to 1.

`minDuration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
:   Minimum matching duration. Defaults to one nanosecond.

`rangeStart` [`RangeStart`](https://dev.nominal.io/api/rest/catalog-service.md#rangestart)
:   Selects whether the output begins at the first match or after persistence is satisfied.

`equalityOperator` [`EqualityOperator`](https://dev.nominal.io/api/rest/catalog-service.md#equalityoperator) required
:   ​

### CategoricalOnChangeRangesV2

Produces a zero-duration range whenever a categorical input changes value.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

### CategoricalStaleRangesV2

Produces ranges where a categorical input has no data for at least a duration.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`threshold` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Minimum gap without data that produces an output range.

### CategoryFilterRangesV2

Produces ranges where a categorical input matches a set of values.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`values` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Category labels matched against each input point.

`minPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Minimum number of matching points. Defaults to 1.

`minDuration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
:   Minimum matching duration. Defaults to one nanosecond.

`rangeStart` [`RangeStart`](https://dev.nominal.io/api/rest/catalog-service.md#rangestart)
:   Selects whether the output begins at the first match or after persistence is satisfied.

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

### ChannelAllowListConnectionsScrapingConfig

`channelAllowList` array of string
:   Only channels in this set will be scraped. Must not be empty.

### ChannelBlockListConnectionsScrapingConfig

`channelBlockList` array of string
:   Only channels not in this set will be scraped. Must not be empty.

### ChannelConfig

`prefixTreeDelimiter` string
:   If set, will construct a prefix tree for channels of the dataset using the given delimiter.

### ChannelSeries

Deprecated: prefer SelectSeries-based nodes with an explicit dataset (or `VariableValue.series` when binding a series to a variable), which select from an arbitrary dataset and let the consuming node decide the series type.

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

`dataSource` [`DataSourceChannel`](https://dev.nominal.io/api/rest/catalog-service.md#datasourcechannel)
:   ​

`asset` [`AssetChannel`](https://dev.nominal.io/api/rest/catalog-service.md#assetchannel)
:   ​

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

### CombinedDataset

Combines multiple datasets into a single dataset by taking the union of all points from each input (akin to SQL {@code UNION ALL}). Duplicate timestamps are preserved rather than merged; callers that need aggregation should wrap the selected series downstream.

`inputs` array of [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
:   The datasets to combine.

### CombineStructSeries

Combines named input series into one struct-valued series. Each map key becomes a field name in the resulting struct; a downstream UDF receives the struct as a JSON object keyed by these names and parses it itself. Alignment uses the interpolation configuration before producing row-aligned values.

`inputs` map of string to [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series)
:   Input series keyed by struct field name.

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Optional interpolation rules used when aligning input series before combining them. **Deprecated:** Setting interpolation on this node is deprecated.

### Commit

`id` string required
:   ​

`resourceRid` string (RID) required
:   ​

`parentCommit` string
:   ​

`mergeParentCommit` string
:   ​

`message` string required
:   ​

`isWorkingState` boolean required
:   A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist.

`committedBy` string (RID) required
:   ​

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

### compute.api.Duration

A length of time. Can be constructed from literal values in various units or composed via arithmetic. Used for window sizes, time shifts, persistence thresholds, and resampling intervals.

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

`reference` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`nanoseconds` [`DurationNanoseconds`](https://dev.nominal.io/api/rest/catalog-service.md#durationnanoseconds)
:   ​

`milliseconds` [`DurationMilliseconds`](https://dev.nominal.io/api/rest/catalog-service.md#durationmilliseconds)
:   ​

`seconds` [`DurationSeconds`](https://dev.nominal.io/api/rest/catalog-service.md#durationseconds)
:   ​

`minutes` [`DurationMinutes`](https://dev.nominal.io/api/rest/catalog-service.md#durationminutes)
:   ​

`hours` [`DurationHours`](https://dev.nominal.io/api/rest/catalog-service.md#durationhours)
:   ​

`days` [`DurationDays`](https://dev.nominal.io/api/rest/catalog-service.md#durationdays)
:   ​

`add` [`DurationAdd`](https://dev.nominal.io/api/rest/catalog-service.md#durationadd)
:   ​

`subtract` [`DurationSubtract`](https://dev.nominal.io/api/rest/catalog-service.md#durationsubtract)
:   ​

`negate` [`DurationNegate`](https://dev.nominal.io/api/rest/catalog-service.md#durationnegate)
:   ​

### ComputeEventQuery

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

`searchText` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`after` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   Filters to events after this timestamp, exclusive. This includes events that start before, but end after this time.

`before` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   Filters to events before this timestamp, exclusive. This includes events that start before, but end after this time.

`advancedTimeFilter` [`EventTimeFilter`](https://dev.nominal.io/api/rest/catalog-service.md#eventtimefilter)
:   ​

`asset` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`template` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`workbook` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`dataReview` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`originType` [`SearchEventOriginType`](https://dev.nominal.io/api/rest/catalog-service.md#searcheventorigintype)
:   ​

`dataReviewCheck` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`dispositionStatus` [`EventDispositionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#eventdispositionstatus)
:   ​

`priority` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`assignee` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`eventType` [`EventType`](https://dev.nominal.io/api/rest/catalog-service.md#eventtype)
:   ​

`createdBy` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`label` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`property` [`rids.api.Property`](https://dev.nominal.io/api/rest/catalog-service.md#rids-api-property)
:   ​

`and` array of [`ComputeEventQuery`](https://dev.nominal.io/api/rest/catalog-service.md#computeeventquery)
:   ​

`or` array of [`ComputeEventQuery`](https://dev.nominal.io/api/rest/catalog-service.md#computeeventquery)
:   ​

`not` [`ComputeEventQuery`](https://dev.nominal.io/api/rest/catalog-service.md#computeeventquery)
:   ​

`workspace` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`procedure` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`procedureExecution` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`stepId` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### ComputeNode

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

`enum` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries)
:   ​

`numeric` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   ​

`log` [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries)
:   ​

`ranges` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries)
:   ​

`array` [`ArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#arrayseries)
:   ​

`struct` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries)
:   ​

`curveFit` [`CurveFit`](https://dev.nominal.io/api/rest/catalog-service.md#curvefit)
:   Deprecated: use `curveV2` (CurveFitV2) instead.

`curveV2` [`CurveFitV2`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitv2)
:   ​

`video` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference) deprecated
:   **Deprecated:** wrap raw references in a typed compute node.

### ComputeNodeWithContext

`seriesNode` [`ComputeNode`](https://dev.nominal.io/api/rest/catalog-service.md#computenode) required
:   ​

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

### connection.api.Duration

`unit` [`TemporalUnit`](https://dev.nominal.io/api/rest/catalog-service.md#temporalunit) required
:   ​

`count` integer required
:   ​

### ConnectionDetails

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

`timescale` [`TimescaleConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timescaleconnectiondetails)
:   ​

`influx` [`Influx2ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx2connectiondetails)
:   ​

`influx1` [`Influx1ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#influx1connectiondetails)
:   ​

`nominal` [`NominalConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#nominalconnectiondetails)
:   ​

`timestream` [`TimestreamConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamconnectiondetails)
:   ​

`visualCrossing` [`VisualCrossingConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingconnectiondetails)
:   ​

`bigQuery` [`BigQueryConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryconnectiondetails)
:   ​

### ConnectionStatus

`isConnected` boolean required
:   ​

### ConstantNumericSeries

A synthetic series that produces a constant value across the entire time range.

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

`double` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Create from a floating-point constant.

### ContainsSeries

Maps each log line to 1.0 when `operator` matches it and 0.0 otherwise.

`input` [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries) required
:   ​

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

### Context

`variables` map of `VariableName` to [`VariableValue`](https://dev.nominal.io/api/rest/catalog-service.md#variablevalue)
:   ​

`functionVariables` map of `FunctionReference` to [`FunctionVariables`](https://dev.nominal.io/api/rest/catalog-service.md#functionvariables) deprecated
:   **Deprecated:** This field is deprecated and will be removed in a future version.

`datasetReferences` map of `DatasetReferenceName` to [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
:   Named datasets looked up by `DatasetReference` nodes in the compute tree.

`defaultFillStrategy` [`FillStrategy`](https://dev.nominal.io/api/rest/catalog-service.md#fillstrategy)
:   Default fill strategy applied at every multi-input alignment boundary where no per-node interpolationConfiguration is specified. When absent, falls back to the server-configured default (forward fill with a 1 second fill limit).

`defaultAlignmentStrategy` [`Alignment`](https://dev.nominal.io/api/rest/catalog-service.md#alignment)
:   Default alignment strategy applied at every multi-input alignment boundary where no per-node alignment strategy is specified. When absent, falls back to the server default (driver-series alignment).

`applyDataScopeOffsets` boolean
:   When true, dataset resolution applies each data scope’s persisted offset as a time shift, and the client must not pre-apply those offsets itself. When absent or false, scope offsets are left to the client, preserving behavior for legacy clients that inject equivalent timeShift nodes into the compute request. Read from the context in scope at resolution time.

`resolveAssetsThroughDatasets` boolean
:   When true, `Dataset.asset`, the asset-typed sources of `Dataset.run`, and asset or run search expand through each asset’s mirrored derived dataset instead of its data scopes. Branches then carry the dataset’s declared channel-search split tag keys in place of the reserved `DATA_SCOPE` tag, so callers must filter and group on those keys; the definition’s own time shifts apply regardless of `applyDataScopeOffsets`; and an asset with no mirrored dataset resolves to no data. When absent or false, assets expand from their data scopes as before.

### Cos

Computes the trigonometric cosine of each value (input in radians).

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (radians).

### Count

The number of points inside the time window.

An empty JSON object, `{}`.

### CreateDataset

`name` string required
:   ​

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Handles should only be specified when adding files to datasets

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata) required
:   ​

`labels` array of string
:   ​

`properties` map of `PropertyName` to string deprecated
:   User-defined dataset properties. The UTF-8 JSON serialization must not exceed 2,000 bytes. **Deprecated:** use typedProperties

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

`description` string
:   ​

`granularity` [`Granularity`](https://dev.nominal.io/api/rest/catalog-service.md#granularity)
:   Granularity of dataset timestamps. Defaults to nanoseconds.

`isV2Dataset` boolean deprecated
:   If true, the dataset should be ingested to the v2 tables and is compatible with streaming. **Deprecated:** Regardless of what value is specified, this flag is treated as true by the service.

`workspace` string (RID)
:   The workspace in which to create the dataset. If not provided, the dataset will be created in the default workspace for the user’s organization, if the default workspace for the organization is configured.

`markingRids` array of string (RID)
:   The markings to apply to the created dataset. If not provided, the dataset will be visible to all users in the same workspace.

`derivedDefinition` [`CreateDerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#createderiveddefinition)
:   Definition for a derived dataset. When present, the created dataset is virtual and does not ingest or persist dataset files.

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Every key must be produced by `derivedDefinition`; ingested tag keys, and keys supplied without a `derivedDefinition`, are rejected.

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   If set, the dataset’s default group-by and aggregation config.

### CreateDerivedDefinition

`spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   Initial derived dataset logic.

`message` string required
:   Initial commit message for the derived definition’s main branch.

### CumulativeSumSeries

Calculates the running total of the series values.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`startTimestamp` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant) required
:   ​

### CurveFit

Deprecated: use CurveFitV2 instead.

`curveFitPlotType` [`CurveFitPlotType`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitplottype) required
:   ​

`curveFitDetails` [`CurveFitDetails`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitdetails) required
:   ​

`curveFitOptions` [`CurveFitOptions`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitoptions) required
:   ​

### CurveFitBoundsConfiguration

`min` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   ​

`max` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   ​

### CurveFitDetails

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

`exponential` [`ExponentialCurve`](https://dev.nominal.io/api/rest/catalog-service.md#exponentialcurve)
:   ​

`logarithmic` [`LogarithmicCurve`](https://dev.nominal.io/api/rest/catalog-service.md#logarithmiccurve)
:   ​

`polynomial` [`PolynomialCurve`](https://dev.nominal.io/api/rest/catalog-service.md#polynomialcurve)
:   ​

`power` [`PowerCurve`](https://dev.nominal.io/api/rest/catalog-service.md#powercurve)
:   ​

### CurveFitOptions

`startTime` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant) required
:   ​

`endTime` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant) required
:   ​

### CurveFitPlotType

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

`timeSeries` [`TimeSeriesCurveFit`](https://dev.nominal.io/api/rest/catalog-service.md#timeseriescurvefit)
:   ​

`scatter` [`ScatterCurveFit`](https://dev.nominal.io/api/rest/catalog-service.md#scattercurvefit)
:   ​

### CurveFitRange

`startTime` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant) required
:   ​

`endTime` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant) required
:   ​

### CurveFitSeriesVariable

`series` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`boundsConfig` [`CurveFitBoundsConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitboundsconfiguration)
:   Optional inclusive bounds selecting which variable samples are fit. Samples outside the bounds are excluded.

### CurveFitTarget

The series a curve is fit against (the `y` of the fit). Modeled as a union so additional target types can be added in the future; today the only arm is a numeric series.

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

`numeric` [`CurveFitSeriesVariable`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitseriesvariable)
:   ​

### CurveFitTimeVariable

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
:   The unit of the time variable in the formula expression. If not specified, the time unit is assumed to be seconds.

### CurveFitV2

`target` [`CurveFitTarget`](https://dev.nominal.io/api/rest/catalog-service.md#curvefittarget) required
:   Target to fit the equation against.

`fitRange` [`CurveFitRange`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitrange) required
:   The range to fit the curve over

`curveToFit` [`CurveFitV2Details`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitv2details) required
:   The curve type to fit against the target series.

### CurveFitV2Details

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

`exponential` [`BuiltInCurveFit`](https://dev.nominal.io/api/rest/catalog-service.md#builtincurvefit)
:   ​

`logarithmic` [`BuiltInCurveFit`](https://dev.nominal.io/api/rest/catalog-service.md#builtincurvefit)
:   ​

`polynomial` [`PolynomialCurveFit`](https://dev.nominal.io/api/rest/catalog-service.md#polynomialcurvefit)
:   ​

`power` [`BuiltInCurveFit`](https://dev.nominal.io/api/rest/catalog-service.md#builtincurvefit)
:   ​

`custom` [`CustomCurveFit`](https://dev.nominal.io/api/rest/catalog-service.md#customcurvefit)
:   ​

### CurveFitVariable

A series a curve fit reads from: another numeric series, or the target’s own sample timestamps. Used both as the named formula inputs of a custom fit and as the independent (`x`) axis of a built-in fit.

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

`numeric` [`CurveFitSeriesVariable`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitseriesvariable)
:   ​

`time` [`CurveFitTimeVariable`](https://dev.nominal.io/api/rest/catalog-service.md#curvefittimevariable)
:   ​

### CustomCurveFit

`formula` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   A mathematical expression in terms of variable and parameter names, e.g. `a * x + b * sin(x)`. Variable names must match keys in the `variables` map; parameter names must match keys in the `parameters` map.

`variables` map of `LocalVariableName` to [`CurveFitVariable`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitvariable)
:   Named input series referenced in the formula. Keys must match the variable names used in the formula expression.

`parameters` map of string to [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Named fitting parameters and their initial guesses. Keys must match the parameter names used in the formula expression; values are the starting points passed to the optimizer. The target the curve is fit against is the `y` of the enclosing curve fit (the timeSeries series values, or the scatter `y` series).

### CustomTimestamp

`format` string required
:   The format string should be in the format of the `DateTimeFormatter` class in Java.

`defaultYear` integer
:   Year is accepted as an optional field for cases like IRIG time format, and will be assumed as current year if not provided.

`defaultDayOfYear` integer
:   Default day of year is accepted as an optional field for cases like IRIG time format and will be overridden by day of year in time format.

### DatasetAnchor

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

`run` [`IntervalAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#intervalanchor)
:   Uses the start or end of each run as its anchor. The input dataset must resolve exclusively to run-backed branches.

### DatasetFile

`id` string (UUID) required
:   ​

`datasetRid` string (RID) required
:   ​

`name` string required
:   ​

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

`fileSizeBytes` integer (int64)
:   Size in bytes of the stored dataset file; for transforming ingests this is the produced output, not the original upload.

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

`uploadedAt` string (date-time) required
:   Timestamp that the file was received and stored, but not processed or made available to consumers.

`ingestedAt` string (date-time)
:   Timestamp that the file is ingested at and made available for processing. If the file has failed to be ingested for any reason or is still being processed, then this value will be empty.

`ingestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2) required
:   Ingest status. The in-progress sub-phases (queued, parsing, ingesting) are surfaced as inProgress with the phase carried in InProgressResult.inProgressDetails, so consumers see a stable top-level lifecycle.

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   ​

`ingestTagMetadata` [`IngestTagMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#ingesttagmetadata)
:   ​

`originFilePaths` array of string
:   ​

`ingestJobRid` string (RID)
:   ​

`ingestTransformRid` string (RID)
:   The ingest transform within ingestJobRid that produced this file. An ingest job may fan out to many transforms, so this pins the file to the specific unit of work (and extractor) that created it — resolvable via IngestJobService#getIngestTransform. Extractor logs are tagged with this transform’s UUID (the RID locator), so this also links a file to the logs of the transform that produced it. Absent for directly uploaded files and for files ingested before this link was recorded.

`deletedAt` string (date-time)
:   Timestamp that the file is deleted at, only present if the file has been deleted.

`metadata` [`DatasetFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilemetadata)
:   File-type-specific metadata. For video files, contains timestamp manifest and segment metadata.

### DatasetFileMetadata

Metadata specific to different file types stored in datasets.

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

`video` [`VideoFileMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videofilemetadata)
:   ​

### DatasetFileSortField

`UPLOADED_AT`
:   ​

### DatasetFileSortOptions

`isDescending` boolean required
:   ​

`field` [`DatasetFileSortField`](https://dev.nominal.io/api/rest/catalog-service.md#datasetfilesortfield) required
:   ​

### DatasetOriginMetadata

`path` string
:   Deprecated in favor of FileOriginMetadata

`xSeriesIsAbsolute` boolean
:   Deprecated in favor of FileOriginMetadata

`schemaDirectivePath` string
:   Deprecated in favor of FileOriginMetadata

`xSeriesColumnName` string
:   Deprecated in favor of FileOriginMetadata

`xSeriesTimeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
:   Deprecated in favor of FileOriginMetadata

`timestampMetadata` [`TimestampMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#timestampmetadata)
:   Deprecated in favor of FileOriginMetadata

`channelConfig` [`ChannelConfig`](https://dev.nominal.io/api/rest/catalog-service.md#channelconfig)
:   ​

### DatasetReference

References a named dataset in `Context.datasetReferences`.

`name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Name of the dataset reference to resolve from the context.

### datasource.TimestampType

`RELATIVE`
:   ​

`ABSOLUTE`
:   ​

### DataSourceChannel

`dataSourceRid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`channel` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`tags` map of string to [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) deprecated
:   **Deprecated:** Use tagFilters

`tagFilters` [`TagFilters`](https://dev.nominal.io/api/rest/catalog-service.md#tagfilters)
:   Tags to filter the channel by. Only returns points from the channel where tag values match the provided expression. For log series, include arg filters here in addition to tag filters.

`tagsToGroupBy` array of string deprecated
:   **Deprecated:** Use groupByTags instead. Throws if both tagsToGroupBy and groupByTags are specified.

`groupByTags` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Tags that the channel should be grouped by. If this is non-empty a grouped result will be returned with an entry for each grouping. Only one of tagsToGroupBy and groupByTags should be specified.

### DefaultGroupByAndAggregationConfig

Dataset-level defaults that clients apply when creating new channel references.

`numericAggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator)
:   If set, the default aggregation applied to merge points of a numeric series that share an exact timestamp.

### Deleted

An empty JSON object, `{}`.

### DeletionInProgress

An empty JSON object, `{}`.

### DerivativeSeries

Calculates the rate of change between subsequent points.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
:   Time unit used to calculate the derivative. Defaults to seconds if not specified.

`negativeValuesConfiguration` [`NegativeValueConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#negativevalueconfiguration)
:   Defines the strategy for handling negative output values. Defaults to allowNegativeValues if not specified.

### DerivedDefinition

A derived dataset definition pinned to the commit that produced it.

`spec` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   ​

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

### DerivedSeries

Represents a derived series within a compute graph. This is a series that is derived from a function within a module.

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

`function` [`FunctionDerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#functionderivedseries)
:   ​

### Dimension

A value derived per asset or run, injected as a tag.

`tagKey` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   The tag key to inject the value under. Defaults to the key derived by `value`.

`value` [`DimensionValue`](https://dev.nominal.io/api/rest/catalog-service.md#dimensionvalue) required
:   The value to inject.

### DimensionsDataset

Injects one tag per dimension onto every series of the underlying dataset, valued from the asset or run the series belongs to. This makes resource metadata usable as a grouping, filtering and aggregation dimension with `selectTags`, tag predicates and `groupByTags`. Group by the dimension together with `ASSET_RID` (or `RUN_RID`) to keep each resource separate, or by the dimension alone to pivot so that resources sharing a value fall into one group.

Dimensions are only supported on asset and run branches. Any other branch, such as a saved dataset or a derived series from `withSeries`, gets the reserved value `NOMINAL_ABSENT` for every dimension. To group derived series by a dimension, apply `withDimensions` to the `withSeries` input instead, so that the series they are computed from carry the dimension tags. A dimension tag replaces a series tag with the same key.

`input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   The underlying dataset to tag.

`dimensions` array of [`Dimension`](https://dev.nominal.io/api/rest/catalog-service.md#dimension)
:   The dimensions to inject. Must not be empty, must have at most 10 entries, and every dimension must have a distinct tag key. A tag key must not be a `ReservedTagKey`, start with `EVENT_LABEL_PREFIX:`, or start with `NOMINAL_`.

### DimensionValue

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

`stringProperty` [`StringPropertyDimension`](https://dev.nominal.io/api/rest/catalog-service.md#stringpropertydimension)
:   The value of a string property on the asset or run.

`identity` [`IdentityDimension`](https://dev.nominal.io/api/rest/catalog-service.md#identitydimension)
:   The value of an asset’s primary key under one of its types.

### Divide

Divides left by right pointwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Numerator.

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Denominator.

### DoubleConstant

A floating-point constant that can be a literal value, a named variable reference, or a named builtin constant.

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

`literal` number
:   Create from a literal floating-point value.

`variable` string
:   Create from a named reference name.

`builtin` [`BuiltinConstant`](https://dev.nominal.io/api/rest/catalog-service.md#builtinconstant)
:   Create from a named builtin constant; the server resolves the numeric value.

### DriverSeries

Uses the driver series timestamps as the alignment grid.

An empty JSON object, `{}`.

### DropSeriesDataset

Removes series from the base dataset by name: raw and derived series alike are no longer selectable under those names. Dropping a name absent from `input` has no effect. Combined with `WithSeriesDataset`, which can expose a series under another name, this renames a series: `dropSeries(withSeries(input, [newName = select(oldName)]), [oldName])`.

`input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   The base dataset to drop series from.

`names` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Names of the series to drop.

### DurationAdd

The sum of two durations.

`left` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   First duration.

`right` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Second duration.

### DurationConstant

A duration constant that can be a literal value or a named variable reference.

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

`literal` [`run.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#run-api-duration)
:   Create from a literal duration value.

`variable` string
:   Create from a named reference name.

### DurationDays

Constructs a duration from a number of days.

`days` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The number of days.

### DurationFilterRanges

Filters a list of ranges down to only those satisfying a threshold condition on the range’s duration.

`input` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

`threshold` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

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

`unboundedBehavior` [`UnboundedBehavior`](https://dev.nominal.io/api/rest/catalog-service.md#unboundedbehavior)
:   ​

### DurationFilterRangesV2

Filters ranges by duration using an authored Duration expression.

`input` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

`duration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   The duration each input range is compared against.

`unboundedBehavior` [`UnboundedBehavior`](https://dev.nominal.io/api/rest/catalog-service.md#unboundedbehavior)
:   How a range with an open start or end is measured. Defaults to treating the missing bound as the edge of the compute request window.

`comparison` [`ThresholdOperator`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdoperator) required
:   ​

### DurationHours

Constructs a duration from a number of hours.

`hours` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The number of hours.

### DurationMilliseconds

Constructs a duration from a number of milliseconds.

`milliseconds` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The number of milliseconds.

### DurationMinutes

Constructs a duration from a number of minutes.

`minutes` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The number of minutes.

### DurationNanoseconds

Constructs a duration from a number of nanoseconds. Limited to values within the 32-bit integer range (~2.1 billion ns, or ~2.1 seconds). For larger durations, use DurationSeconds or DurationMilliseconds.

`nanoseconds` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The number of nanoseconds.

### DurationNegate

Negates a duration (reverses its sign).

`input` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   The duration to negate.

### DurationSeconds

Constructs a duration from a number of seconds.

`seconds` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The number of seconds.

### DurationSubtract

The difference of two durations (left minus right).

`left` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Duration to subtract from.

`right` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Duration to subtract.

### EarliestAnchorReference

Selects the earliest anchor resolved from the input.

An empty JSON object, `{}`.

### Empty

An empty JSON object, `{}`.

### EnrichedDataset

`rid` string (RID) required
:   ​

`uuid` string (UUID) required
:   ​

`name` string required
:   ​

`description` string
:   ​

`displayName` string required
:   ​

`metadata` map of string to string deprecated
:   **Deprecated:** Deprecated in favor of properties.

`handle` [`Handle`](https://dev.nominal.io/api/rest/catalog-service.md#handle) deprecated
:   **Deprecated:** Deprecated. Use DatasetFile#handle

`ingestDate` string (date-time) required
:   Dataset creation time. The name is historical; use lastIngestedAt for when data was last added.

`lastIngestedAt` string (date-time)
:   When data was last added to this dataset, as the latest of a successful file ingest and streaming-session activity. Empty when the dataset has never received either.

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus) deprecated
:   **Deprecated:** Deprecated. Use lastIngestStatus.

`originMetadata` [`DatasetOriginMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#datasetoriginmetadata) required
:   ​

`lastIngestStatus` [`IngestStatusV2`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatusv2) required
:   ​

`retentionPolicy` [`RetentionPolicy`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicy) required
:   ​

`source` string
:   ​

`bounds` [`Bounds`](https://dev.nominal.io/api/rest/catalog-service.md#bounds)
:   ​

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

`labels` array of string
:   ​

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

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

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

`allowStreaming` boolean required
:   ​

`isArchived` boolean required
:   ​

`defaultGroupByAndAggregationConfig` [`DefaultGroupByAndAggregationConfig`](https://dev.nominal.io/api/rest/catalog-service.md#defaultgroupbyandaggregationconfig)
:   ​

`migratedFromConnectionRid` string (RID)
:   Connection RID whose data source was migrated into this dataset. Empty for datasets that were not created by the legacy connection-to-dataset migrations, or when the original connection row no longer exists.

`externalConnectionMetadata` [`ExternalConnectionMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#externalconnectionmetadata)
:   ​

`derivedDefinition` [`DerivedDefinition`](https://dev.nominal.io/api/rest/catalog-service.md#deriveddefinition)
:   Definition for a derived dataset. When present, this dataset is virtual and backed by the referenced provided Dataset definition instead of persisted dataset files.

`channelSearchSplitTagKeys` array of string
:   Tag keys whose distinct values channel search surfaces as separate series. Each listed key is retained on this dataset’s channel-search locators, so a channel carrying two values of that key appears once per value instead of collapsing into a single entry — the behavior a data scope has on an asset. Keys not listed here stay available for filtering and grouping but do not contribute to series cardinality. Every key must be produced by this dataset’s `derivedDefinition`. Ingested tag keys cannot be split on.

### Enum1dArraySelectTagsSeries

Subsets the tag dimensions of the input enum 1d array series to the given tag keys. Preserves the input series’ cardinality: points that share the selected keys but differ on dropped keys remain distinct.

`input` [`Enum1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darrayseries) required
:   ​

`tagKeys` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### Enum1dArraySeries

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

`channel` [`ChannelSeries`](https://dev.nominal.io/api/rest/catalog-service.md#channelseries)
:   ​

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`derived` [`DerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivedseries)
:   ​

`selectEnum1dArray` [`SelectSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectseries)
:   ​

`extractFromStruct` [`ExtractEnum1dArrayFromStructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#extractenum1darrayfromstructseries)
:   ​

`toStartOfInterval` [`Enum1dArrayToStartOfIntervalSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darraytostartofintervalseries)
:   ​

`timeShift` [`Enum1dArrayTimeShiftSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darraytimeshiftseries)
:   ​

`filterByTag` [`Enum1dArrayTagFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darraytagfilterseries)
:   ​

`selectTags` [`Enum1dArraySelectTagsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darrayselecttagsseries)
:   ​

### Enum1dArrayTagFilterSeries

Applies a tag predicate to the enum 1d array series produced by input.

`input` [`Enum1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darrayseries) required
:   ​

`predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   ​

### Enum1dArrayTimeShiftSeries

`input` [`Enum1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darrayseries) required
:   ​

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

### Enum1dArrayToStartOfIntervalSeries

Snaps each point’s timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.

`input` [`Enum1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darrayseries) required
:   ​

`window` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   ​

### EnumAggregation

Aggregates an input series using an enum aggregation operator. Rolling aggregation builders are not supported; only the group-by shape is accepted at resolution time. `Min` and `Max` require a categorical input series. `Udf` also accepts a numeric input, which reaches the function as `Vec<f64>`; a categorical input reaches it as `Vec<String>`.

`input` [`AggregationBuilder`](https://dev.nominal.io/api/rest/catalog-service.md#aggregationbuilder) required
:   The aggregation shape to apply the operator over. Only the group-by shape is supported; rolling builders are rejected at resolution time. The Python `enum_aggregation(...)` sugar form is categorical-only. Numeric builders expose the UDF-only `enum_udf(...)` and `rust_enum_udf(...)` terminals instead.

`operator` [`EnumAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#enumaggregationoperator) required
:   The enum reduction applied to each group (min, max, or a user-defined function).

### EnumAggregationFunction

Aggregates duplicate timestamps on a single enum series. For aggregating across tag groupings, use `EnumSeries.enumAggregation` with `aggregation.AggregationBuilder.groupBy`.

`MIN`
:   ​

`MAX`
:   ​

### EnumAggregationOperator

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

`min` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`max` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`udf` [`EnumAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#enumaggregationudf)
:   ​

### EnumAggregationUdf

A user-defined enum aggregation. The supported ABI is a Rust function with one vector input and a `String` return value. Numeric input series use `Vec<f64>` and enum input series use `Vec<String>`.

`source` [`UdfSource`](https://dev.nominal.io/api/rest/catalog-service.md#udfsource) required
:   ​

### EnumConstantResampleInterpolationConfiguration

Fills all empty resample intervals with a single constant value.

If a resampled time interval (bucket) contains no data points from the input, it will be assigned the specified ‘constant’ as a default value. This applies to gaps at the start of the series, between data points, and at the end.

`constant` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

### EnumCountDuplicateSeries

Counts the number of points along each timestamp in the input series.

`inputs` array of [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries)
:   ​

### EnumFilterOperator

`IS_IN`
:   True when the value is contained in the set.

`IS_NOT_IN`
:   True when the value is not contained in the set.

`MATCHES_ANY_REGEX`
:   True when the value matches at least one pattern in the set. Values are RE2 regular expressions, anchored to the entire string.

### EnumFilterRanges

Produces a list of ranges for which the filter condition is satisfied.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

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

`values` [`StringSetConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringsetconstant) required
:   The set of literal values (for IS_IN / IS_NOT_IN) or RE2 regex patterns (for MATCHES_ANY_REGEX) to match against.

`persistenceWindowConfiguration` [`PersistenceWindowConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#persistencewindowconfiguration)
:   ​

### EnumFilterTransformationSeries

Outputs categorical input values that fall within the supplied ranges.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`filter` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   Keeps only input points whose timestamp falls inside one of these ranges.

### EnumNthPointDownsampleSeries

Keeps every Nth row of the timestamp-ordered input, per series. No grid arithmetic, no interpolation, no boundary handling. Output count is ceil(input_count / n) per series. Caller is responsible for choosing n consistent with the input’s sample rate; output spacing is only uniform when the input is.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`n` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Keep every Nth point starting from the earliest in each series. Must be >= 1.

### EnumResampleConfiguration

`interval` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   Interval between resampled points

`interpolation` [`EnumResampleInterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#enumresampleinterpolationconfiguration)
:   Interpolation strategy to use (defaults to forward fill).

### EnumResampleInterpolationConfiguration

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

`forwardFillResampleInterpolationConfiguration` [`ForwardFillResampleInterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#forwardfillresampleinterpolationconfiguration)
:   ​

`constantResampleInterpolationConfiguration` [`EnumConstantResampleInterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#enumconstantresampleinterpolationconfiguration)
:   ​

### EnumResampleSeries

Resamples the input series to a new resolution using interpolation. Outputs data for timestamps corresponding to the defined frequency. Based on interpolation strategy, determines range of timestamps to output data for and interpolates values where necessary.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`resampleConfiguration` [`EnumResampleConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#enumresampleconfiguration) required
:   The interval at which to resample the series and interpolation strategy

### EnumResampleSeriesV2

Resamples categorical points at the authored interval using forward-fill interpolation.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`interval` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Interval at which to resample.

### EnumSelectTagsSeries

Subsets the tag dimensions of the input enum series to the given tag keys. Preserves the input series’ cardinality: points that share the selected keys but differ on dropped keys remain distinct.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`tagKeys` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### EnumSeries

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

`aggregate` [`AggregateEnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#aggregateenumseries) deprecated
:   **Deprecated:** AggregateEnumSeries is deprecated. Use `enumAggregation` with `aggregation.GroupByAggregationBuilder` instead.

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`channel` [`ChannelSeries`](https://dev.nominal.io/api/rest/catalog-service.md#channelseries)
:   ​

`derived` [`DerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivedseries)
:   ​

`resample` [`EnumResampleSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumresampleseries)
:   ​

`resampleV2` [`EnumResampleSeriesV2`](https://dev.nominal.io/api/rest/catalog-service.md#enumresampleseriesv2)
:   ​

`nthPointDownsample` [`EnumNthPointDownsampleSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumnthpointdownsampleseries)
:   ​

`timeRangeFilter` [`EnumTimeRangeFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumtimerangefilterseries)
:   ​

`timeShift` [`EnumTimeShiftSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumtimeshiftseries)
:   ​

`timeShiftV2` [`EnumTimeShiftSeriesV2`](https://dev.nominal.io/api/rest/catalog-service.md#enumtimeshiftseriesv2)
:   ​

`union` [`EnumUnionSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumunionseries)
:   ​

`filterTransformation` [`EnumFilterTransformationSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumfiltertransformationseries)
:   ​

`valueMap` [`ValueMapSeries`](https://dev.nominal.io/api/rest/catalog-service.md#valuemapseries)
:   ​

`select1dArrayIndex` [`SelectIndexFrom1dEnumArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectindexfrom1denumarrayseries)
:   ​

`extractFromStruct` [`ExtractEnumFromStructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#extractenumfromstructseries)
:   ​

`eventAggregation` [`EventsEnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#eventsenumseries)
:   ​

`enumAggregation` [`EnumAggregation`](https://dev.nominal.io/api/rest/catalog-service.md#enumaggregation)
:   ​

`selectEnum` [`SelectSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectseries)
:   ​

`selectCategoricalProperty` [`SelectProperty`](https://dev.nominal.io/api/rest/catalog-service.md#selectproperty)
:   ​

`filterByTag` [`EnumTagFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumtagfilterseries)
:   ​

`selectTags` [`EnumSelectTagsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumselecttagsseries)
:   ​

`scalarUdf` [`ScalarUdfSeries`](https://dev.nominal.io/api/rest/catalog-service.md#scalarudfseries)
:   ​

`toStartOfInterval` [`EnumToStartOfIntervalSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumtostartofintervalseries)
:   ​

### EnumSeriesEqualityRanges

Produces a list of ranges for which provided enum series are all equal (or are not all equal).

`input` array of [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries)
:   ​

`equalityOperator` [`EqualityOperator`](https://dev.nominal.io/api/rest/catalog-service.md#equalityoperator) required
:   ​

`persistenceWindowConfiguration` [`PersistenceWindowConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#persistencewindowconfiguration)
:   ​

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### EnumTagFilterSeries

Applies a tag predicate to the enum series produced by input.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   ​

### EnumTimeRangeFilterSeries

Filters the series to points within the specified time range.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`startTime` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   Represents the start time (inclusive) of the time range.

`endTime` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   Represents the end time (inclusive) of the time range.

### EnumTimeShiftSeries

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

### EnumTimeShiftSeriesV2

Shifts the timestamps in the input series by the resolved duration.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`duration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Duration to shift the input series by.

### EnumToNumericSeries

Maps an enumerated series to a numeric series by mapping each string value to a double.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`mapping` map of string to [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   The mapping from enum values to doubles.

`defaultValue` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   The value to use for enum values not present in the mapping. If not specified, points with unmapped enum values will be dropped.

### EnumToStartOfIntervalSeries

Snaps each point’s timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.

`input` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries) required
:   ​

`window` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   ​

### EnumUnionOperation

`THROW`
:   Throws an exception if two series contain points with a duplicate timestamp.

`MAX`
:   Aggregates duplicates by String MAX.

`MIN`
:   Aggregates duplicates by String MIN.

### EnumUnionSeries

Combines multiple enum series together and outputs a single series. The strategy to merge input values with the same timestamp together is specified in the operation field.

`input` array of [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries)
:   ​

`operation` [`EnumUnionOperation`](https://dev.nominal.io/api/rest/catalog-service.md#enumunionoperation) required
:   The strategy to merge points with duplicate timestamps.

### EpochTimestamp

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit) required
:   ​

### EqualityOperator

`ALL_EQUAL`
:   ​

`NOT_ALL_EQUAL`
:   ​

### EqualToSeries

Compares two numeric series point-wise, producing true where left == right and false otherwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

### ErrorResult

`errorType` string required
:   ​

`message` string required
:   ​

`errorInstanceId` string
:   ​

### EventAnchor

Uses the start timestamp of the event at the configured zero-based index from this query whose event time lies in the anchor window [start, end), or [start, +infinity) when the end is absent. The window is the run bounds for a run anchor. Shares the wire shape of `numeric.EventTimeShift`, which tagByIntervals time shifts use; a separate type so dataset anchors evolve independently.

`query` [`ComputeEventQuery`](https://dev.nominal.io/api/rest/catalog-service.md#computeeventquery) required
:   ​

`index` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Zero-based event index after sorting. Defaults to zero and must be non-negative.

`sortOrder` [`EventSortOrder`](https://dev.nominal.io/api/rest/catalog-service.md#eventsortorder)
:   Ordering by event start timestamp before selecting the index. Defaults to ASC.

### EventDispositionStatus

`PENDING_REVIEW`
:   ​

`CLOSED_IGNORED`
:   ​

`CLOSED_REQUIRES_FURTHER_ACTION`
:   ​

`NO_DISPOSITION`
:   ​

### EventIntervalSource

Intervals come from an event query. Each event defines [timestamp, timestamp+duration).

`query` [`ComputeEventQuery`](https://dev.nominal.io/api/rest/catalog-service.md#computeeventquery) required
:   ​

`tagBy` array of [`EventTagSource`](https://dev.nominal.io/api/rest/catalog-service.md#eventtagsource)
:   Non-empty ordered list of tag sources. Each contributes a tag key-value pair per event interval.

### EventLabelTag

`label` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

### EventLevelTag

An empty JSON object, `{}`.

### EventPropertyTag

`propertyName` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

### EventsEnumSeries

Queries events and emits an enum series where each data point corresponds to an event and the enum value is derived from a single event field (property, label, etc).

`query` [`ComputeEventQuery`](https://dev.nominal.io/api/rest/catalog-service.md#computeeventquery) required
:   ​

`valueSource` [`EventsEnumValueSource`](https://dev.nominal.io/api/rest/catalog-service.md#eventsenumvaluesource) required
:   ​

### EventsEnumValueSource

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

`property` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Name of the event property whose value should be used as the enum value.

`level` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   The event level (INFO, FLAG, VIOLATION, SUCCESS). This field corresponds to the event type.

### EventSortOrder

`ASC`
:   ​

`DESC`
:   ​

### EventsSearchRanges

Produces a range series with a range for each event matching the query. Throws if there are more than 1,000 results.

`query` [`ComputeEventQuery`](https://dev.nominal.io/api/rest/catalog-service.md#computeeventquery) required
:   ​

### EventTagSource

A dimension contributing a tag key-value pair per event interval.

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

`intervalIndex` [`IntervalIndexTag`](https://dev.nominal.io/api/rest/catalog-service.md#intervalindextag)
:   ​

`level` [`EventLevelTag`](https://dev.nominal.io/api/rest/catalog-service.md#eventleveltag)
:   ​

`property` [`EventPropertyTag`](https://dev.nominal.io/api/rest/catalog-service.md#eventpropertytag)
:   ​

`label` [`EventLabelTag`](https://dev.nominal.io/api/rest/catalog-service.md#eventlabeltag)
:   ​

`rangeStartTimestamp` [`IntervalStartTimestampTag`](https://dev.nominal.io/api/rest/catalog-service.md#intervalstarttimestamptag)
:   ​

### EventTimeFilter

`timestamp` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant) required
:   ​

`timestampCondition` [`EventTimeFilterCondition`](https://dev.nominal.io/api/rest/catalog-service.md#eventtimefiltercondition) required
:   ​

### EventTimeFilterCondition

`START_TIME_BEFORE_INCLUSIVE`
:   ​

`START_TIME_BEFORE_EXCLUSIVE`
:   ​

`START_TIME_AFTER_INCLUSIVE`
:   ​

`START_TIME_AFTER_EXCLUSIVE`
:   ​

`END_TIME_BEFORE_INCLUSIVE`
:   ​

`END_TIME_BEFORE_EXCLUSIVE`
:   ​

`END_TIME_AFTER_INCLUSIVE`
:   ​

`END_TIME_AFTER_EXCLUSIVE`
:   ​

### EventTimeShift

Shift by the start timestamp of the event at the configured zero-based index from this query whose event time lies in the anchor window [start, end), or [start, +infinity) when the end is absent. The window is the tagging interval for tagByIntervals and the run bounds for a run anchor. The query may differ from the query that produced a tagging interval.

`query` [`ComputeEventQuery`](https://dev.nominal.io/api/rest/catalog-service.md#computeeventquery) required
:   ​

`index` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Zero-based event index after sorting. Defaults to zero and must be non-negative.

`sortOrder` [`EventSortOrder`](https://dev.nominal.io/api/rest/catalog-service.md#eventsortorder)
:   Ordering by event start timestamp before selecting the index. Defaults to ASC.

### EventType

`INFO`
:   ​

`FLAG`
:   ​

`ERROR`
:   ​

`SUCCESS`
:   ​

### EveryNthPerSeriesSampling

Returns every Nth timestamp-ordered point from each distinct series.

`n` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Keep every Nth point starting from the earliest in each series. Must be > 1.

### ExcludeNegativeValues

An empty JSON object, `{}`.

### ExponentialCurve

An empty JSON object, `{}`.

### ExternalConnectionMetadata

`connectionDetails` [`ConnectionDetails`](https://dev.nominal.io/api/rest/catalog-service.md#connectiondetails) required
:   ​

`connectionStatus` [`ConnectionStatus`](https://dev.nominal.io/api/rest/catalog-service.md#connectionstatus) required
:   ​

`limits` [`LimitsConfig`](https://dev.nominal.io/api/rest/catalog-service.md#limitsconfig)
:   ​

### ExtractEnum1dArrayFromStructSeries

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`fieldPath` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### ExtractEnumFromStructSeries

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`fieldPath` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Path segments that are joined to locate a nested enum field. Use dots to traverse objects (e.g. `a.b.c`) and 0-based brackets to index into arrays (e.g. `items[0].value`). A bare numeric name like `0` refers to an object key named “0”; use `[0]` to index into an array. Rows where the path is invalid or resolves to a nested object rather than a scalar are filtered out.

### ExtractNumeric1dArrayFromStructSeries

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`fieldPath` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### ExtractNumericFromStructSeries

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`fieldPath` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Path segments that are joined to locate a nested numeric field. Use dots to traverse objects (e.g. `a.b.c`) and 0-based brackets to index into arrays (e.g. `items[0].value`). A bare numeric name like `0` refers to an object key named “0”; use [0] to index into an array. Rows where the path is invalid or the value cannot be converted to the specified type are filtered out.

`dataType` [`NumericDataType`](https://dev.nominal.io/api/rest/catalog-service.md#numericdatatype)
:   The type the numeric data will be cast to, defaults to FLOAT64

### ExtractStructFromStructSeries

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`fieldPath` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Path segments that are joined to locate a nested struct field. Use dots to traverse objects (e.g. `a.b.c`) and 0-based brackets to index into arrays (e.g. `items[0].value`). A bare numeric name like `0` refers to an object key named “0”; use [0] to index into an array. Returns an empty struct when the path does not resolve to a valid JSON object.

### ExtremaRangesV2

Produces ranges for the selected extrema type.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`minimumProminence` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   The minimum topographic prominence for an extrema to be returned.

`selection` [`PeakType`](https://dev.nominal.io/api/rest/catalog-service.md#peaktype) required
:   ​

### FillLimit

How far forward in time a sample’s value may be carried.

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

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant)
:   ​

### FillStrategy

Default strategy for filling gaps when aligning multi-input series.

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

`forwardFill` [`ForwardFill`](https://dev.nominal.io/api/rest/catalog-service.md#forwardfill)
:   ​

### FilterByExpressionSeries

Keeps points from the base series where the boolean expression evaluates to true. Only outputs timestamps where all input series have an entry for that timestamp, or a value can be filled using the interpolation configuration.

`base` string required
:   The variable name for the series that will be returned by this filter. The expression can filter points conditional on multiple series. The base defines which series’ points will be returned after applying all the filters.

`inputs` map of `LocalVariableName` to [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   A map containing all the numeric series present in the expression.

`expression` string required
:   An expression that evaluates to a boolean. For example - a > 5.

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### FilteredDataset

Applies a conjunctive tag predicate to the series produced by the inner dataset. Resolved by threading tag filters into channel specs and folding against known tag assignments; does not add a resolved numeric node.

`input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   The underlying dataset to filter.

`predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   Conjunctive tag predicate used to keep matching series.

### FirstPointMatchingCondition

The first point in the output range will be the first point where the condition evaluates to true.

An empty JSON object, `{}`.

### FloorDivide

Divides left by right pointwise and rounds down to the nearest integer.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Numerator.

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Denominator.

### ForwardFill

At each grid point, carries the most recent prior sample value forward. The value is held only up to the configured `limit`; grid points with no prior sample within that window are left empty.

`limit` [`FillLimit`](https://dev.nominal.io/api/rest/catalog-service.md#filllimit) required
:   ​

### ForwardFillInterpolation

`interpolationRadius` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

### ForwardFillResampleInterpolationConfiguration

Forward fill interpolation for resampling. Rounds the earliest and latest timestamp up to the nearest interval multiple and generates timestamps at the given interval between the new earliest and latest timestamps. For every timestamp in the resampled timestamps, takes the last known value before the timestamp as the value.

An empty JSON object, `{}`.

### FunctionDerivedSeries

A reference to a derived series resulting from applying a function to a set of arguments.

`moduleName` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`functionName` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`versionReference` [`ModuleVersionReference`](https://dev.nominal.io/api/rest/catalog-service.md#moduleversionreference) required
:   ​

`functionArgs` map of `FunctionParameterName` to [`FunctionParameterValue`](https://dev.nominal.io/api/rest/catalog-service.md#functionparametervalue)
:   Map of function input names to their values. The function inputs must match the function’s parameter names and types. An input must be specified for each of the referenced function’s parameters.

### FunctionParameterValue

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

`variable` string
:   ​

`value` [`VariableValue`](https://dev.nominal.io/api/rest/catalog-service.md#variablevalue)
:   ​

### FunctionVariables

`variables` map of `VariableName` to [`VariableValue`](https://dev.nominal.io/api/rest/catalog-service.md#variablevalue)
:   ​

`subFunctionVariables` map of `FunctionReference` to [`FunctionVariables`](https://dev.nominal.io/api/rest/catalog-service.md#functionvariables)
:   ​

### Granularity

`NANOSECONDS`
:   ​

### GreaterThanOrEqualToSeries

Compares two numeric series point-wise, producing true where left >= right and false otherwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

### GreaterThanSeries

Compares two numeric series point-wise, producing true where left > right and false otherwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

### GroupByAggregationBuilder

Groups points by a tag selection and a timestamp policy and applies the operator.

`input` [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series) required
:   The series to group and aggregate.

`tags` [`GroupByTags`](https://dev.nominal.io/api/rest/catalog-service.md#groupbytags) required
:   Selects which tag keys form the grouping key: `GroupByTags.Current()` keeps the input series’ currently selected tags, or `GroupByTags.Subset([...])` restricts the grouping to a subset of them.

`timestamp` [`GroupByTimestamp`](https://dev.nominal.io/api/rest/catalog-service.md#groupbytimestamp) required
:   Selects how timestamps participate in the grouping key: `GroupByTimestamp.Current()` groups on existing timestamps, and `GroupByTimestamp.Every(duration)` buckets points into fixed-size, epoch-aligned tumbling windows.

`alignment` [`GroupByAlignment`](https://dev.nominal.io/api/rest/catalog-service.md#groupbyalignment)
:   Optionally aligns source tag groups that map to the same output tag group before aggregation. Alignment is currently supported only with `GroupByTimestamp.Current()` and built-in numeric aggregation operators.

### GroupByAlignment

Selects how source tag groups are aligned before aggregation.

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

`contextDefaults` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   Use the compute context’s `defaultAlignmentStrategy` and `defaultFillStrategy`.

### GroupBySubsetTags

`tags` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Tag keys to group by.

### GroupByTags

Selects which tag keys form the grouping key.

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

`current` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   Group by the tags currently selected on the input series.

`subset` [`GroupBySubsetTags`](https://dev.nominal.io/api/rest/catalog-service.md#groupbysubsettags)
:   Group by exactly the listed tag keys. Must be a (non-strict) subset of the input series’s currently selected tags.

### GroupByTimestamp

Selects how timestamps participate in the grouping key.

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

`current` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   Use the current timestamps.

`every` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
:   Bucket timestamps into a tumbling fixed-size, epoch-aligned window. A point at timestamp `t` (nanoseconds) falls into the bucket `[floor(t / window) * window, +window)`, and one aggregated point is emitted per bucket per tag grouping at the bucket start timestamp.

### GroupWithinRangesSeriesV2

Aggregates the input series within each supplied range and emits one point at the range start. Empty ranges emit no point, and ranges without a start use the compute request start.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`ranges` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   One output point is emitted per range, at the range’s start.

`aggregation` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator) required
:   ​

### Handle

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

`s3` [`S3Handle`](https://dev.nominal.io/api/rest/catalog-service.md#s3handle)
:   ​

### HashSubsampleSampling

Keeps approximately 1/N of raw points via a stateless hash of each point’s timestamp.

`n` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Keep approximately one out of every N points. Must be > 1.

### HeaderValue

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

`plain` string
:   ​

`secretRid` string (RID)
:   ​

### HighPassConfiguration

`cutoffFrequency` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

### IdentityDimension

Injects the value of a type’s primary key, under a tag key equal to the primary key’s property name by default. The primary key is read when the query runs, so it follows changes to the type. Only asset branches of an asset with the type have a value; every other branch, including run branches, gets the reserved value `NOMINAL_ABSENT`.

`typeRid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Resource identifier of the type whose primary key identifies the asset.

### Influx1ConnectionDetails

`host` string required
:   ​

`port` integer required
:   ​

`headers` map of string to [`HeaderValue`](https://dev.nominal.io/api/rest/catalog-service.md#headervalue)
:   A map of header name to value

`credentials` [`PasswordCredentials`](https://dev.nominal.io/api/rest/catalog-service.md#passwordcredentials)
:   ​

### Influx2ConnectionDetails

`host` string required
:   ​

`port` integer required
:   ​

`headers` map of string to [`HeaderValue`](https://dev.nominal.io/api/rest/catalog-service.md#headervalue)
:   A map of header name to value

`org` string required
:   ​

`tokenSecretRid` string (RID) required
:   Secret Rid of token secret stored in Secrets Service.

### InfluxChannelNameComponent

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

`bucket` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`measurement` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`field` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

### InfluxScrapingConfig

`filter` array of [`InfluxScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#influxscrapingfilter)
:   Filters are ANDed together

`seriesArchetypeConstruction` [`InfluxSeriesArchetypeConstructionConfig`](https://dev.nominal.io/api/rest/catalog-service.md#influxseriesarchetypeconstructionconfig) required
:   ​

### InfluxScrapingFilter

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

`not` [`InfluxScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#influxscrapingfilter)
:   ​

`matchBucket` array of string
:   Match any of the specified buckets

`matchMeasurement` array of string
:   Match any of the specified measurements

### InfluxSeriesArchetypeConstructionConfig

For example, for config of the form {components: [measurement, field, tag: vehicle], separator: “.”} will construct a channel that looks like vehicle_a.measurement.field. Tags will automatically be specified inside of the archetype.

`channelNameComponents` array of [`InfluxChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#influxchannelnamecomponent)
:   ​

`separator` string required
:   ​

### Ingesting

`progress` number
:   Optional fraction between 0 and 1 indicating progress through ingestion.

### IngestStatus

`IN_PROGRESS`
:   ​

`COMPLETED`
:   ​

`FAILED`
:   ​

`DELETION_IN_PROGRESS`
:   ​

`DELETED`
:   ​

### IngestStatusV2

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

`success` [`SuccessResult`](https://dev.nominal.io/api/rest/catalog-service.md#successresult)
:   ​

`error` [`ErrorResult`](https://dev.nominal.io/api/rest/catalog-service.md#errorresult)
:   ​

`inProgress` [`InProgressResult`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressresult)
:   ​

`deletionInProgress` [`DeletionInProgress`](https://dev.nominal.io/api/rest/catalog-service.md#deletioninprogress)
:   ​

`deleted` [`Deleted`](https://dev.nominal.io/api/rest/catalog-service.md#deleted)
:   ​

`queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
:   ​

`parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
:   ​

`ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
:   ​

### IngestTagMetadata

The tags used when ingesting the dataset file.

`tagColumns` map of `TagName` to string
:   A map of tag names to column names to derive the tag values from.

`additionalFileTags` map of `TagName` to string
:   ​

### InProgressDetails

Sub-phase of an in-progress ingest. Absent on InProgressResult for a generic in-progress file; when present it indicates where in the pipeline the in-progress file currently is.

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

`queued` [`Queued`](https://dev.nominal.io/api/rest/catalog-service.md#queued)
:   ​

`parsing` [`Parsing`](https://dev.nominal.io/api/rest/catalog-service.md#parsing)
:   ​

`ingesting` [`Ingesting`](https://dev.nominal.io/api/rest/catalog-service.md#ingesting)
:   ​

### InProgressResult

`inProgressDetails` [`InProgressDetails`](https://dev.nominal.io/api/rest/catalog-service.md#inprogressdetails)
:   ​

### IntegerConstant

An integer constant that can be a literal value or a named variable reference.

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

`literal` integer
:   Create from a literal integer value.

`variable` string
:   Create from a named reference name.

### IntegralSeries

Calculates the running sum of the area underneath a series using the trapezoidal rule.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`startTimestamp` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant) required
:   ​

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
:   Time unit used to calculate the integral. Defaults to seconds if not specified.

### InterpolationConfiguration

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

`forwardFillInterpolation` [`ForwardFillInterpolation`](https://dev.nominal.io/api/rest/catalog-service.md#forwardfillinterpolation)
:   ​

### IntersectRanges

Produces the intersection of the input ranges: the ranges of time covered by every input. For best performance, pass inputs in the order in which they should be evaluated, listing the ranges that are cheapest to compute first.

`inputs` array of [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries)
:   ​

### IntervalAnchor

Selects which boundary of an interval to use as its anchor.

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

`intervalStart` [`IntervalStartTimeShift`](https://dev.nominal.io/api/rest/catalog-service.md#intervalstarttimeshift)
:   Uses the interval’s start timestamp.

`intervalEnd` [`IntervalEndTimeShift`](https://dev.nominal.io/api/rest/catalog-service.md#intervalendtimeshift)
:   Uses the interval’s end timestamp.

`eventInInterval` [`EventAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#eventanchor)
:   ​

`rangeInInterval` [`RangesAnchor`](https://dev.nominal.io/api/rest/catalog-service.md#rangesanchor)
:   ​

### IntervalEndTimeShift

Shift by each tagging interval’s resolved end; resolution throws if end is missing.

An empty JSON object, `{}`.

### IntervalIndexTag

An empty JSON object, `{}`.

### IntervalSource

Where the intervals come from and how each is labeled.

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

`events` [`EventIntervalSource`](https://dev.nominal.io/api/rest/catalog-service.md#eventintervalsource)
:   ​

`ranges` [`RangeIntervalSource`](https://dev.nominal.io/api/rest/catalog-service.md#rangeintervalsource)
:   ​

### IntervalStartTimeShift

Shift by each tagging interval’s resolved start; resolution throws if start is missing.

An empty JSON object, `{}`.

### IntervalStartTimestampTag

An empty JSON object, `{}`.

### Iso8601Timestamp

An empty JSON object, `{}`.

### LabelsFilter

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

`labels` array of string
:   ​

### LessThanOrEqualToSeries

Compares two numeric series point-wise, producing true where left <= right and false otherwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

### LessThanSeries

Compares two numeric series point-wise, producing true where left < right and false otherwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

### LimitsConfig

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

### LiteralRange

A literal range of values.

`startTimestamp` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   ​

`endTimestamp` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   ​

`tags` map of string to string
:   ​

### LiteralRanges

A list of literal ranges.

`literalRanges` array of [`LiteralRange`](https://dev.nominal.io/api/rest/catalog-service.md#literalrange)
:   ​

### Ln

Computes the natural logarithm (base e) of each value.

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (positive values).

### Log10

Computes the base-10 logarithm of each value.

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (positive values).

### LogArgFilterOperator

Matches against a single log arg.

`key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

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

### LogarithmicCurve

An empty JSON object, `{}`.

### LogExactMatchCaseInsensitiveFilter

Filters points such that the log message in each point contains an exact case-insensitive match of the provided token.

`token` string required
:   ​

### LogFilterOperator

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

`regexFilter` [`LogRegexFilterOperator`](https://dev.nominal.io/api/rest/catalog-service.md#logregexfilteroperator)
:   ​

`exactMatchCaseInsensitiveFilter` [`LogExactMatchCaseInsensitiveFilter`](https://dev.nominal.io/api/rest/catalog-service.md#logexactmatchcaseinsensitivefilter)
:   ​

`arg` [`LogArgFilterOperator`](https://dev.nominal.io/api/rest/catalog-service.md#logargfilteroperator)
:   ​

`and` array of [`LogFilterOperator`](https://dev.nominal.io/api/rest/catalog-service.md#logfilteroperator)
:   ​

`or` array of [`LogFilterOperator`](https://dev.nominal.io/api/rest/catalog-service.md#logfilteroperator)
:   ​

`not` [`LogFilterOperator`](https://dev.nominal.io/api/rest/catalog-service.md#logfilteroperator)
:   ​

### LogFilterSeries

Outputs only values of the log plot that satisfy the filter.

`input` [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries) required
:   ​

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

### LogRegexFilterOperator

Matches a text value against the given re2 regular expression. Regular expression syntax: https://github.com/google/re2/wiki/Syntax.

`regex` string required
:   ​

### LogSelectTagsSeries

Subsets the tag dimensions of the input log series to the given tag keys. Preserves the input series’ cardinality: points that share the selected keys but differ on dropped keys remain distinct.

`input` [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries) required
:   ​

`tagKeys` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### LogSeries

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

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`channel` [`ChannelSeries`](https://dev.nominal.io/api/rest/catalog-service.md#channelseries)
:   ​

`derived` [`DerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivedseries)
:   ​

`selectLogs` [`SelectSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectseries)
:   ​

`union` [`LogUnionSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logunionseries)
:   ​

`filter` [`LogFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logfilterseries)
:   ​

`timeShift` [`LogTimeShiftSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logtimeshiftseries)
:   ​

`toStartOfInterval` [`LogToStartOfIntervalSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logtostartofintervalseries)
:   ​

`filterByTag` [`LogTagFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logtagfilterseries)
:   ​

`selectTags` [`LogSelectTagsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logselecttagsseries)
:   ​

### LogTagFilterSeries

Applies a tag predicate to the log series produced by input.

`input` [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries) required
:   ​

`predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   ​

### LogTimeShiftSeries

`input` [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries) required
:   ​

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

### LogToStartOfIntervalSeries

Snaps each point’s timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.

`input` [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries) required
:   ​

`window` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   ​

### LogUnionOperation

`KEEP_ALL`
:   Keeps all points if multiple series contain points with a duplicate timestamp.

### LogUnionSeries

Combines multiple log series together and outputs a single series. The strategy to merge input values with the same timestamp together is specified in the operation field.

`input` array of [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries)
:   ​

`operation` [`LogUnionOperation`](https://dev.nominal.io/api/rest/catalog-service.md#logunionoperation) required
:   The strategy to merge points with duplicate timestamps.

### LowPassConfiguration

`cutoffFrequency` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

### MathConstant

Math constants referenceable by name.

`PI`
:   The circle constant π (dimensionless).

`TAU`
:   The circle constant τ = 2π (dimensionless).

`E`
:   Euler’s number e (dimensionless).

### Maximum

The maximum value of points inside the time window.

An empty JSON object, `{}`.

### MaxSeries

For every timestamp specified in the input series, outputs a value that is the maximum for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.

`inputs` array of [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   Input series across which to take the pointwise maximum

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### McapChannelLocator

Locator for a channel in an mcap file. Channel name is not guaranteed to be unique, so channel ID should be used for mcap files with duplicate channel names.

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

`topic` string
:   ​

`id` integer
:   ​

### McapTimestampManifest

Timestamps are derived from the mcap file containing the video frames.

`mcapChannelLocator` [`McapChannelLocator`](https://dev.nominal.io/api/rest/catalog-service.md#mcapchannellocator) required
:   ​

### MeanSeries

For every timestamp specified in the input series, outputs a value that is the mean for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.

`inputs` array of [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   Input series across which to take the pointwise mean

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### Minimum

The minimum value of points inside the time window.

An empty JSON object, `{}`.

### MinMaxThresholdOperator

`OUTSIDE_BOUNDS`
:   ​

`OUTSIDE_OR_EQUAL_TO_BOUNDS`
:   ​

`INSIDE_BOUNDS`
:   ​

`INSIDE_OR_EQUAL_TO_BOUNDS`
:   ​

### MinMaxThresholdRanges

Produces a list of ranges for which the threshold condition is satisfied.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`lowerBound` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

`upperBound` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

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

`persistenceWindowConfiguration` [`PersistenceWindowConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#persistencewindowconfiguration)
:   ​

### MinSeries

For every timestamp specified in the input series, outputs a value that is the minimum for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.

`inputs` array of [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   Input series across which to take the pointwise minimum

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### ModuleVersionReference

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

`pinned` [`PinnedModuleVersionReference`](https://dev.nominal.io/api/rest/catalog-service.md#pinnedmoduleversionreference)
:   ​

### Modulo

Computes the remainder of left divided by right pointwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Dividend.

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Divisor.

### Multiply

Multiplies two numeric series pointwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Left-hand operand.

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Right-hand operand.

### NamedSeries

`name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Name of the new derived series.

`definition` [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series) required
:   Compute expression defining the series values.

### Negate

Negates each value in the series pointwise (multiplies by -1).

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series.

### NegativeValueConfiguration

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

`allowNegativeValues` [`AllowNegativeValues`](https://dev.nominal.io/api/rest/catalog-service.md#allownegativevalues)
:   Include negative output values

`setNegativeValuesToZero` [`SetNegativeValuesToZero`](https://dev.nominal.io/api/rest/catalog-service.md#setnegativevaluestozero)
:   Set negative output values to zero

`excludeNegativeValues` [`ExcludeNegativeValues`](https://dev.nominal.io/api/rest/catalog-service.md#excludenegativevalues)
:   Exclude points with negative output values

### nominal.api.Property

`name` string required
:   ​

`value` string required
:   ​

### NominalChannelNameComponent

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

`channel` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`valueOfTagWithName` string
:   The value of the specified TagName will be used. If the tag is not present, it will be omitted.

### NominalConnectionDetails

`nominalDataSourceRid` string (RID) required
:   ​

### NominalScrapingConfig

`channelNameComponents` array of [`NominalChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#nominalchannelnamecomponent)
:   channelNameComponents will be combined, together with separator, to form a fully qualified channel name.

`separator` string required
:   ​

### NotEqualToSeries

Compares two numeric series point-wise, producing true where left != right and false otherwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

### NoTimestampManifest

these values will not be updated after ingest time, to allow for resetting. The updated values are stored implicitly through the segment timestamps.

`startingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp) required
:   Specifies the original starting timestamp of the video.

`scaleParameter` [`ScaleParameter`](https://dev.nominal.io/api/rest/catalog-service.md#scaleparameter)
:   A field that specifies that the frame rate of the video does not match the frame rate of the camera | i.e. a slowed down or sped up video. Can specify either the camera frame rate or the absolute end time.

### NotRanges

The not ranges node will invert the ranges, filling the negative space in time.

`input` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

### Numeric1dArraySelectTagsSeries

Subsets the tag dimensions of the input numeric 1d array series to the given tag keys. Preserves the input series’ cardinality: points that share the selected keys but differ on dropped keys remain distinct.

`input` [`Numeric1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darrayseries) required
:   ​

`tagKeys` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### Numeric1dArraySeries

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

`channel` [`ChannelSeries`](https://dev.nominal.io/api/rest/catalog-service.md#channelseries)
:   ​

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`derived` [`DerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivedseries)
:   ​

`selectNumeric1dArray` [`SelectSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectseries)
:   ​

`extractFromStruct` [`ExtractNumeric1dArrayFromStructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#extractnumeric1darrayfromstructseries)
:   ​

`toStartOfInterval` [`Numeric1dArrayToStartOfIntervalSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darraytostartofintervalseries)
:   ​

`timeShift` [`Numeric1dArrayTimeShiftSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darraytimeshiftseries)
:   ​

`filterByTag` [`Numeric1dArrayTagFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darraytagfilterseries)
:   ​

`selectTags` [`Numeric1dArraySelectTagsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darrayselecttagsseries)
:   ​

### Numeric1dArrayTagFilterSeries

Applies a tag predicate to the numeric 1d array series produced by input.

`input` [`Numeric1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darrayseries) required
:   ​

`predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   ​

### Numeric1dArrayTimeShiftSeries

`input` [`Numeric1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darrayseries) required
:   ​

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

### Numeric1dArrayToStartOfIntervalSeries

Snaps each point’s timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.

`input` [`Numeric1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darrayseries) required
:   ​

`window` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   ​

### NumericAggregation

Aggregates an input series using the given operator. The shape of the aggregation (rolling time window, rolling point-count window, or group by) is selected by the aggregation builder passed as `input`. The operator must be compatible with that builder’s series, producing a numeric output: count reduces a series of any type, whereas SUM requires a numeric series.

`input` [`AggregationBuilder`](https://dev.nominal.io/api/rest/catalog-service.md#aggregationbuilder) required
:   The aggregation shape to apply the operator over: a rolling time window, a rolling point-count window, or a group-by.

`operator` [`NumericAggregationOperator`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationoperator) required
:   The reduction applied to each window or group (e.g. sum, mean, percentile). Must be compatible with the input series, producing a numeric output: Count works on any input series, whereas reductions like Sum require a numeric series.

### NumericAggregationFunction

DEPRECATED. Use `NumericAggregationOperator` instead.

`SUM`
:   ​

`MEAN`
:   ​

`MIN`
:   ​

`MAX`
:   ​

`COUNT`
:   ​

`STANDARD_DEVIATION`
:   ​

`ROOT_MEAN_SQUARE`
:   ​

### NumericAggregationOperator

Unified numeric aggregation used across rolling windows, plain aggregates, range aggregates, union merges, and per-bucket summarization.

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

`sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
:   ​

`average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
:   ​

`min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
:   ​

`max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
:   ​

`count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
:   ​

`standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
:   ​

`rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
:   ​

`percentile` [`Percentile`](https://dev.nominal.io/api/rest/catalog-service.md#percentile)
:   ​

`udf` [`NumericAggregationUdf`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregationudf)
:   ​

### NumericAggregationUdf

A user-defined numeric aggregation. The aggregation builder controls grouping/windowing. Supported Rust entrypoints accept grouped value vectors, optionally with leading sample timestamps, and return either one numeric value or timestamped numeric point(s), e.g. `fn rms(values: Vec<f64>) -> f64`, `fn energy(timestamp_ns: Vec<i64>, values: Vec<f64>) -> f64`, `fn first(timestamp_ns: Vec<i64>, values: Vec<f64>) -> (i64, f64)`, or `fn passthrough(timestamp_ns: Vec<i64>, values: Vec<f64>) -> Vec<(i64, f64)>`. The value vector’s element type follows the aggregated series: `Vec<f64>` for a numeric series, and `Vec<String>` for a categorical or struct series, where each struct row arrives as a JSON object. A UDF over a combined struct series may instead take one vector per named struct field it needs, e.g. `fn mean_product(channel0: Vec<f64>, channel1: Vec<f64>) -> f64`. Parameter names select the fields, so a subset of the struct’s fields in any order is accepted.

`source` [`UdfSource`](https://dev.nominal.io/api/rest/catalog-service.md#udfsource) required
:   ​

### NumericApproximateFilterSeries

Outputs the values of the numeric plot value that are approximately equal to the threshold value.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`threshold` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

`tolerance` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

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

### NumericConstantResampleInterpolationConfiguration

Fills all empty resample intervals with a single constant value.

If a resampled time interval (bucket) contains no data points from the input, it will be assigned the specified ‘constant’ as a default value. This applies to gaps at the start of the series, between data points, and at the end.

`constant` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

### NumericDataType

Supported numeric data types for value casting.

`INT64`
:   ​

`FLOAT64`
:   ​

`UINT64`
:   ​

### NumericEqualityRangesV2

Produces ranges where all numeric inputs are equal or are not all equal.

`inputs` array of [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   The series compared against each other. At least two are required.

`tolerance` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Maximum spread between the inputs still counted as equal. Defaults to zero, i.e. exact equality.

`minPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Minimum number of matching points. Defaults to 1.

`minDuration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
:   Minimum matching duration. Defaults to one nanosecond.

`rangeStart` [`RangeStart`](https://dev.nominal.io/api/rest/catalog-service.md#rangestart)
:   Selects whether the output begins at the first match or after persistence is satisfied.

`equalityOperator` [`EqualityOperator`](https://dev.nominal.io/api/rest/catalog-service.md#equalityoperator) required
:   ​

### NumericFilterTransformationSeries

Outputs the input points whose timestamps fall within the supplied ranges.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`filter` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   Keeps input points whose timestamps fall inside any of these ranges.

### NumericFilterWhereSeries

Outputs numeric input values where the provided Boolean expression evaluates to true.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`condition` [`BooleanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#booleanseries) required
:   Condition evaluated point-wise at each input timestamp. A point is only kept where the condition is true.

### NumericIfElseSeries

Selects between two numeric series point-wise based on a boolean condition series. For every aligned timestamp, emits the value from `trueValue` where `condition` is true, and the value from `falseValue` otherwise.

`condition` [`BooleanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#booleanseries) required
:   Boolean series evaluated at each point to choose between the `trueValue` and `falseValue` branches.

`trueValue` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Value emitted at points where `condition` is true.

`falseValue` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Value emitted at points where `condition` is false.

### NumericLargestTriangleThreeBucketsSeries

Applies Largest-Triangle-Three-Buckets to a numeric time series for visualization-oriented downsampling. The algorithm preserves the first and last points, partitions the remaining input points based on the requested output count, and selects points that preserve the visual shape of the series. Results are selected input timestamp/value points, not fixed-width bucket aggregate rows.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`maxPointsToReturn` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Maximum number of selected points to return. Must be positive and no greater than 10,000.

### NumericNanFilter

Removes points where the value is NaN from the input series.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series.

### NumericNthPointDownsampleSeries

Keeps every Nth row of the timestamp-ordered input, per series. No grid arithmetic, no interpolation, no boundary handling. Output count is ceil(input_count / n) per series. Caller is responsible for choosing n consistent with the input’s sample rate; output spacing is only uniform when the input is.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`n` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Keep every Nth point starting from the earliest in each series. Must be >= 1.

### 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/catalog-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/catalog-service.md#numericpropertyrangeoperator) required
:   ​

### NumericResampleConfiguration

`interval` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   Interval between resampled points

`interpolation` [`NumericResampleInterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#numericresampleinterpolationconfiguration)
:   Interpolation strategy to use (defaults to forward fill).

### NumericResampleInterpolationConfiguration

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

`forwardFillResampleInterpolationConfiguration` [`ForwardFillResampleInterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#forwardfillresampleinterpolationconfiguration)
:   ​

`constantResampleInterpolationConfiguration` [`NumericConstantResampleInterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#numericconstantresampleinterpolationconfiguration)
:   ​

### NumericResampleSeries

Resamples the input series to a new resolution using interpolation. Outputs data for timestamps corresponding to the defined frequency. Based on interpolation strategy, determines range of timestamps to output data for and interpolates values where necessary.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`resampleConfiguration` [`NumericResampleConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#numericresampleconfiguration) required
:   The interpolation strategy and interval at which to resample the series

### NumericResampleSeriesV2

Resamples the input series at the authored interval using forward-fill.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`interval` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Interval at which to resample.

### NumericSelectTagsSeries

Subsets the tag dimensions of the input numeric series to the given tag keys. Preserves the input series’ cardinality: points that share the selected keys but differ on dropped keys remain distinct.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`tagKeys` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### NumericSeries

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

`abs` [`Abs`](https://dev.nominal.io/api/rest/catalog-service.md#abs)
:   ​

`negate` [`Negate`](https://dev.nominal.io/api/rest/catalog-service.md#negate)
:   ​

`cos` [`Cos`](https://dev.nominal.io/api/rest/catalog-service.md#cos)
:   ​

`sin` [`Sin`](https://dev.nominal.io/api/rest/catalog-service.md#sin)
:   ​

`tan` [`Tan`](https://dev.nominal.io/api/rest/catalog-service.md#tan)
:   ​

`acos` [`Acos`](https://dev.nominal.io/api/rest/catalog-service.md#acos)
:   ​

`asin` [`Asin`](https://dev.nominal.io/api/rest/catalog-service.md#asin)
:   ​

`ln` [`Ln`](https://dev.nominal.io/api/rest/catalog-service.md#ln)
:   ​

`log10` [`Log10`](https://dev.nominal.io/api/rest/catalog-service.md#log10)
:   ​

`sqrt` [`Sqrt`](https://dev.nominal.io/api/rest/catalog-service.md#sqrt)
:   ​

`add` [`Add`](https://dev.nominal.io/api/rest/catalog-service.md#add)
:   ​

`subtract` [`Subtract`](https://dev.nominal.io/api/rest/catalog-service.md#subtract)
:   ​

`multiply` [`Multiply`](https://dev.nominal.io/api/rest/catalog-service.md#multiply)
:   ​

`divide` [`Divide`](https://dev.nominal.io/api/rest/catalog-service.md#divide)
:   ​

`floorDivide` [`FloorDivide`](https://dev.nominal.io/api/rest/catalog-service.md#floordivide)
:   ​

`power` [`Power`](https://dev.nominal.io/api/rest/catalog-service.md#power)
:   ​

`modulo` [`Modulo`](https://dev.nominal.io/api/rest/catalog-service.md#modulo)
:   ​

`atan2` [`Atan2`](https://dev.nominal.io/api/rest/catalog-service.md#atan2)
:   ​

`max` [`MaxSeries`](https://dev.nominal.io/api/rest/catalog-service.md#maxseries)
:   ​

`mean` [`MeanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#meanseries)
:   ​

`min` [`MinSeries`](https://dev.nominal.io/api/rest/catalog-service.md#minseries)
:   ​

`sum` [`SumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#sumseries)
:   ​

`union` [`NumericUnionSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericunionseries)
:   ​

`product` [`ProductSeries`](https://dev.nominal.io/api/rest/catalog-service.md#productseries)
:   ​

`constant` [`ConstantNumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#constantnumericseries)
:   ​

`selectNewestPoints` [`SelectNewestPointsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectnewestpointsseries)
:   ​

`selectNumeric` [`SelectSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectseries)
:   ​

`selectNumericProperty` [`SelectProperty`](https://dev.nominal.io/api/rest/catalog-service.md#selectproperty)
:   ​

`selectOldestPoints` [`SelectOldestPointsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectoldestpointsseries)
:   ​

`bitAnd` [`BitAnd`](https://dev.nominal.io/api/rest/catalog-service.md#bitand)
:   ​

`bitOr` [`BitOr`](https://dev.nominal.io/api/rest/catalog-service.md#bitor)
:   ​

`bitXor` [`BitXor`](https://dev.nominal.io/api/rest/catalog-service.md#bitxor)
:   ​

`bitShiftRight` [`BitShiftRight`](https://dev.nominal.io/api/rest/catalog-service.md#bitshiftright)
:   ​

`bitShiftLeft` [`BitShiftLeft`](https://dev.nominal.io/api/rest/catalog-service.md#bitshiftleft)
:   ​

`bitTest` [`BitTest`](https://dev.nominal.io/api/rest/catalog-service.md#bittest)
:   ​

`ifElse` [`NumericIfElseSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericifelseseries)
:   ​

`numericAggregation` [`NumericAggregation`](https://dev.nominal.io/api/rest/catalog-service.md#numericaggregation)
:   ​

`countDuplicate` [`EnumCountDuplicateSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumcountduplicateseries)
:   ​

`cumulativeSum` [`CumulativeSumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#cumulativesumseries)
:   ​

`derivative` [`DerivativeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivativeseries)
:   ​

`integral` [`IntegralSeries`](https://dev.nominal.io/api/rest/catalog-service.md#integralseries)
:   ​

`zScore` [`ZscoreSeries`](https://dev.nominal.io/api/rest/catalog-service.md#zscoreseries)
:   ​

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`derived` [`DerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivedseries)
:   ​

`resample` [`NumericResampleSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericresampleseries)
:   ​

`resampleV2` [`NumericResampleSeriesV2`](https://dev.nominal.io/api/rest/catalog-service.md#numericresampleseriesv2)
:   ​

`nthPointDownsample` [`NumericNthPointDownsampleSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericnthpointdownsampleseries)
:   ​

`largestTriangleThreeBuckets` [`NumericLargestTriangleThreeBucketsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericlargesttrianglethreebucketsseries)
:   ​

`signalFilter` [`SignalFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#signalfilterseries)
:   ​

`timeDifference` [`TimeDifferenceSeries`](https://dev.nominal.io/api/rest/catalog-service.md#timedifferenceseries)
:   ​

`absoluteTimestamp` [`AbsoluteTimestampSeries`](https://dev.nominal.io/api/rest/catalog-service.md#absolutetimestampseries)
:   ​

`timeRangeFilter` [`NumericTimeRangeFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numerictimerangefilterseries)
:   ​

`timeShift` [`NumericTimeShiftSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numerictimeshiftseries)
:   ​

`timeShiftV2` [`NumericTimeShiftSeriesV2`](https://dev.nominal.io/api/rest/catalog-service.md#numerictimeshiftseriesv2)
:   ​

`unitConversion` [`UnitConversionSeries`](https://dev.nominal.io/api/rest/catalog-service.md#unitconversionseries)
:   ​

`unitOverride` [`UnitOverrideSeries`](https://dev.nominal.io/api/rest/catalog-service.md#unitoverrideseries)
:   ​

`valueDifference` [`ValueDifferenceSeries`](https://dev.nominal.io/api/rest/catalog-service.md#valuedifferenceseries)
:   ​

`filterTransformation` [`NumericFilterTransformationSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericfiltertransformationseries)
:   ​

`filterWhere` [`NumericFilterWhereSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericfilterwhereseries)
:   ​

`thresholdFilter` [`NumericThresholdFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericthresholdfilterseries)
:   ​

`approximateFilter` [`NumericApproximateFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericapproximatefilterseries)
:   ​

`dropNan` [`NumericNanFilter`](https://dev.nominal.io/api/rest/catalog-service.md#numericnanfilter)
:   ​

`select1dArrayIndex` [`SelectIndexFrom1dNumericArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectindexfrom1dnumericarrayseries)
:   ​

`aggregateUnderRanges` [`AggregateUnderRangesSeries`](https://dev.nominal.io/api/rest/catalog-service.md#aggregateunderrangesseries)
:   ​

`rangeDuration` [`RangeDurationSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangedurationseries)
:   ​

`groupWithinRangesV2` [`GroupWithinRangesSeriesV2`](https://dev.nominal.io/api/rest/catalog-service.md#groupwithinrangesseriesv2)
:   ​

`filterByExpression` [`FilterByExpressionSeries`](https://dev.nominal.io/api/rest/catalog-service.md#filterbyexpressionseries)
:   ​

`scalarUdf` [`ScalarUdfSeries`](https://dev.nominal.io/api/rest/catalog-service.md#scalarudfseries)
:   ​

`enumToNumeric` [`EnumToNumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumtonumericseries)
:   ​

`contains` [`ContainsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#containsseries)
:   ​

`refprop` [`RefpropSeries`](https://dev.nominal.io/api/rest/catalog-service.md#refpropseries)
:   ​

`refpropV2` [`RefpropSeriesV2`](https://dev.nominal.io/api/rest/catalog-service.md#refpropseriesv2)
:   ​

`extractFromStruct` [`ExtractNumericFromStructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#extractnumericfromstructseries)
:   ​

`tagByIntervals` [`TagByIntervalsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#tagbyintervalsseries)
:   ​

`filterByTag` [`NumericTagFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numerictagfilterseries)
:   ​

`selectTags` [`NumericSelectTagsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericselecttagsseries)
:   ​

`toStartOfInterval` [`NumericToStartOfIntervalSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numerictostartofintervalseries)
:   ​

`phaseUnwrap` [`PhaseUnwrapSeries`](https://dev.nominal.io/api/rest/catalog-service.md#phaseunwrapseries)
:   ​

`aggregate` [`AggregateNumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#aggregatenumericseries) deprecated
:   **Deprecated:** AggregateNumericSeries is deprecated. Use `numericAggregation` with `aggregation.GroupByAggregationBuilder` instead.

`rollingOperation` [`RollingOperationSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rollingoperationseries) deprecated
:   **Deprecated:** RollingOperationSeries is deprecated. Use `numericAggregation` with `aggregation.RollingTimeAggregationBuilder` instead.

`bitOperation` [`BitOperationSeries`](https://dev.nominal.io/api/rest/catalog-service.md#bitoperationseries) deprecated
:   **Deprecated:** BitOperationSeries is deprecated in favor of individual nodes for each operation.

`channel` [`ChannelSeries`](https://dev.nominal.io/api/rest/catalog-service.md#channelseries) deprecated
:   **Deprecated:** Deprecated in favor of the SelectSeries node

`offset` [`OffsetSeries`](https://dev.nominal.io/api/rest/catalog-service.md#offsetseries) deprecated
:   **Deprecated:** OffsetSeries is deprecated in favor of add with a constant.

`scale` [`ScaleSeries`](https://dev.nominal.io/api/rest/catalog-service.md#scaleseries) deprecated
:   **Deprecated:** ScaleSeries is deprecated in favor of multiply with a constant.

`arithmetic` [`ArithmeticSeries`](https://dev.nominal.io/api/rest/catalog-service.md#arithmeticseries) deprecated
:   **Deprecated:** ArithmeticSeries is deprecated in favor of individual nodes for each operation.

`unaryArithmetic` [`UnaryArithmeticSeries`](https://dev.nominal.io/api/rest/catalog-service.md#unaryarithmeticseries) deprecated
:   **Deprecated:** UnaryArithmeticSeries is deprecated in favor of individual nodes for each operation.

`binaryArithmetic` [`BinaryArithmeticSeries`](https://dev.nominal.io/api/rest/catalog-service.md#binaryarithmeticseries) deprecated
:   **Deprecated:** BinaryArithmeticSeries is deprecated in favor of individual nodes for each operation.

### NumericStaleRangesV2

Produces ranges where a numeric input has no data for at least a duration.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`threshold` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Minimum gap without data that produces an output range.

### NumericTagFilterSeries

Applies a tag predicate to the numeric series produced by input.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   ​

### NumericThresholdFilterSeries

Outputs only the values of the numeric plot value that satisfy the threshold condition.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`threshold` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

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

### NumericTimeRangeFilterSeries

Filters the series to points within the specified time range.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`startTime` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   Represents the start time (inclusive) of the time range.

`endTime` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   Represents the end time (inclusive) of the time range.

### NumericTimeShiftSeries

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

### NumericTimeShiftSeriesV2

Shifts the timestamps in the input series by the resolved duration.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`duration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Duration to shift the input series by.

### NumericToStartOfIntervalSeries

Snaps each point’s timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`window` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   ​

### NumericUnionOperation

DEPRECATED: apply aggregations as a separate step over the unioned output.

`MIN`
:   Combines multiple points by taking the minimum value

`MAX`
:   Combines multiple points by taking the maximum value

`MEAN`
:   Combines multiple points by taking the mean of the values

`SUM`
:   Combines multiple points by taking the sum of the values

`COUNT`
:   Combines multiple points by taking the count of the values

`STANDARD_DEVIATION`
:   Combines multiple points by taking the standard deviation of the values

`ROOT_MEAN_SQUARE`
:   Combines multiple points by taking the root mean square of the values

`THROW`
:   Throws a DuplicateTimestamp error if two series contain points with a duplicate timestamp.

### NumericUnionSeries

Combines multiple numeric series together and outputs a single series. By default, points from the inputs are concatenated (SQL {@code UNION ALL}) and duplicate timestamps across inputs are preserved. To aggregate values that share a timestamp, do a separate aggregation step next.

`input` array of [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   Input series to union

`operation` [`NumericUnionOperation`](https://dev.nominal.io/api/rest/catalog-service.md#numericunionoperation) deprecated
:   The strategy to merge points with duplicate timestamps. **Deprecated:** Apply aggregations as a separate step over the unioned output.

### OffsetSeries

For every timestamp specified in the input series, offset it by a constant factor.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`scalar` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   The constant to add to each point

### OnChangeRanges

Produces a list of ranges for each point that has a different value to the previous point. A range will have identical start and end times.

`input` [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series) required
:   ​

### OriginFileUri

Pre-signed URI that can be used to download an origin file directly. Expires if the download has not been initiated within 1 minute.

`uri` string required
:   ​

`path` string required
:   ​

### OrSeries

Combines two boolean series point-wise using logical OR, producing true where either input is true and false otherwise.

`left` [`BooleanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#booleanseries) required
:   ​

`right` [`BooleanSeries`](https://dev.nominal.io/api/rest/catalog-service.md#booleanseries) required
:   ​

### OutputRangeStart

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

`firstPointMatchingCondition` [`FirstPointMatchingCondition`](https://dev.nominal.io/api/rest/catalog-service.md#firstpointmatchingcondition)
:   The first point in the output range will be the first point where the condition evaluates to true.

`afterPersistenceWindow` [`AfterPersistenceWindow`](https://dev.nominal.io/api/rest/catalog-service.md#afterpersistencewindow)
:   The output range will contain points where the condition has been true for at least the min duration and min points.

### PaddedRanges

Expands ranges durations by adding temporal padding to the start, end, or both sides. Note that if the input ranges contain a RangeValue, it will be dropped.

`input` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

`padding` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

`paddingConfiguration` [`RangePaddingConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#rangepaddingconfiguration)
:   Configuration for how to apply padding to the ranges. Defaults to PAD_START_AND_END if not specified.

### PaddedRangesV2

Expands ranges using an authored Duration expression and a selected padding direction.

`input` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

`duration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   How far to extend each range on every padded side.

`paddingConfiguration` [`RangePaddingConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#rangepaddingconfiguration) required
:   ​

### Parsing

An empty JSON object, `{}`.

### PasswordCredentials

`username` string required
:   ​

`passwordSecretRid` string (RID) required
:   Secret Rid of password secret stored in Secrets Service.

### PeakRanges

Produces a list of ranges for each point that is greater than its neighbors. Peaks at edges are discarded, and continuous, multivalue, flat peaks will return all values.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`returnsPeaks` boolean deprecated
:   True if returning peaks, else troughs. **Deprecated:** No longer used, use returnType instead

`returnType` [`PeakType`](https://dev.nominal.io/api/rest/catalog-service.md#peaktype)
:   Optional for backcompatibility.

`minimumProminence` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   The minimum topographic prominence for an extrema to be returned. Prominence is the minimum vertical distance needed to travel from an extrema to one of greater magnitude.

### PeakType

`PEAK`
:   ​

`TROUGH`
:   ​

`BOTH`
:   ​

### PercentageThreshold

Threshold defined as the percentage of a given value.

`value` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   Allowed spread, as a percentage of the window’s mean value.

### Percentile

The value at the specified percentile.

`percentile` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   Percentile to compute, in range [0, 1]. E.g. 0.5 for median, 0.95 for p95.

### PersistenceWindowConfiguration

Configures how long a condition has to be true for to output a time range, and what to use as the start of the output range. For a point to be included in the output time range, both the minPoints and minDuration conditions must be satisfied.

`minPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   The minimum number of points for which this condition be must satisfied to include the time range in the output. Must be non-negative. If not present, will default to 1.

`minDuration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant)
:   The minimum number of points for which this condition must be satisfied to include the time range in the output. Must be non-negative. If not present, will default to 1 nanosecond.

`outputRangeStart` [`OutputRangeStart`](https://dev.nominal.io/api/rest/catalog-service.md#outputrangestart) required
:   Which point to use as the start of the output range. Defaults to firstPointMatchingCondition if not specified.

### PhaseUnwrapSeries

Removes discontinuities from a wrapping signal (e.g. phase or heading) by adding whole multiples of `period` whenever the step between consecutive samples exceeds half the period. Output length equals input length.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`period` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   The wrapping period of the signal (e.g. 2*pi for radians, 360 for degrees). A jump between consecutive samples greater than `period/2` in magnitude is corrected by adding/subtracting a whole multiple of `period`.

### PhysicalConstant

Physical constants referenceable by name. The server resolves the symbol to its numeric value in SI units.

`SPEED_OF_LIGHT`
:   Speed of light in vacuum, 299792458 m/s (exact).

`AVOGADRO`
:   Avogadro constant, 6.02214076e23 mol^-1 (exact).

`BOLTZMANN`
:   Boltzmann constant, 1.380649e-23 J/K (exact).

`PLANCK`
:   Planck constant, 6.62607015e-34 J*s (exact).

`ELEMENTARY_CHARGE`
:   Elementary charge, 1.602176634e-19 C (exact).

`GAS_CONSTANT`
:   Molar gas constant, 8.31446261815324 J/(mol*K) (exact, Avogadro times Boltzmann).

`STANDARD_GRAVITY`
:   Standard acceleration of gravity, 9.80665 m/s^2 (exact by convention).

`STANDARD_ATMOSPHERE`
:   Standard atmosphere, 101325 Pa (exact by convention).

`ABSOLUTE_ZERO_CELSIUS`
:   Absolute zero expressed in degrees Celsius, -273.15 (exact).

`GRAVITATIONAL_CONSTANT`
:   Newtonian constant of gravitation, 6.67430e-11 m^3/(kg*s^2) (CODATA 2022, measured).

`STEFAN_BOLTZMANN`
:   Stefan-Boltzmann constant, 5.670374419e-8 W/(m^2*K^4) (exact derived).

### PinnedModuleVersionReference

`version` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

### PivotedTimescaleChannelNameComponent

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

`table` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`name` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   The value of the name column.

### PivotedTimescaleScrapingConfig

This config is used to scrape data from a Timescale database that has a pivoted schema. time | name | value | device 1 | temperature | 1 | a

`filter` array of [`TimescaleScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#timescalescrapingfilter)
:   In order for data to be picked up by the scraper, it must match all filters in this list. To exclude chunks of data, it’s possible to use a not filter.

`timeColumn` string required
:   The name of the column that holds the timestamp.

`nameColumn` string required
:   The name of the column that holds the series name.

`valueColumn` string required
:   The name of the column that holds the series values.

`dimensionColumns` array of string
:   The names of the columns that comprise a dimension. They should have a database index for efficient filtering. We do not discover dimensions based on hypertable schema because they are not necessarily configured properly.

`channelNameComponents` array of [`PivotedTimescaleChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#pivotedtimescalechannelnamecomponent)
:   channelNameComponents will be combined, together with separator, to form a fully qualified channel name.

`separator` string required
:   ​

### PolynomialCurve

`degree` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The highest allowable degree of the fit polynomial.

`intercept` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   The y-value at the point x (or t) = 0. If omitted, the y-intercept will also be fit to the data.

### PolynomialCurveFit

A polynomial fit of the enclosing target (`y`) against the chosen independent variable (`x`).

`independentVariable` [`CurveFitVariable`](https://dev.nominal.io/api/rest/catalog-service.md#curvefitvariable) required
:   The `x` axis the target is fit against — either relative sample time or another series.

`degree` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The highest allowable degree of the fit polynomial.

`intercept` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   The y-value at the point x (or t) = 0. If omitted, the y-intercept will also be fit to the data.

### Power

Raises base to the power of exponent pointwise.

`base` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Base values.

`exponent` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Exponent values.

### PowerCurve

An empty JSON object, `{}`.

### ProductSeries

For every timestamp specified in the input series, outputs a value that is the product for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.

`inputs` array of [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   Input series across which to take the pointwise product

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### PropertiesFilter

`name` string required
:   ​

`values` array of string
:   ​

### PropertyComparisonOperator

`EQ`
:   ​

`NEQ`
:   ​

`GT`
:   ​

`GTE`
:   ​

`LT`
:   ​

`LTE`
:   ​

### Queued

An empty JSON object, `{}`.

### RangeAggregationOperation

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

`sum` [`Summation`](https://dev.nominal.io/api/rest/catalog-service.md#summation)
:   ​

`rootMeanSquare` [`RootMeanSquare`](https://dev.nominal.io/api/rest/catalog-service.md#rootmeansquare)
:   ​

`average` [`Average`](https://dev.nominal.io/api/rest/catalog-service.md#average)
:   ​

`min` [`Minimum`](https://dev.nominal.io/api/rest/catalog-service.md#minimum)
:   ​

`max` [`Maximum`](https://dev.nominal.io/api/rest/catalog-service.md#maximum)
:   ​

`standardDeviation` [`StandardDeviation`](https://dev.nominal.io/api/rest/catalog-service.md#standarddeviation)
:   ​

`count` [`Count`](https://dev.nominal.io/api/rest/catalog-service.md#count)
:   ​

`all` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

### RangeDurationSeries

Outputs a numeric series with one point per range: timestamp = range start, value = range duration.

`input` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

`unboundedRangeBehavior` [`UnboundedRangeBehavior`](https://dev.nominal.io/api/rest/catalog-service.md#unboundedrangebehavior) required
:   How to handle ranges with a missing start or end.

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
:   The time unit of the duration. Defaults to seconds if not specified.

### RangeIntervalSource

Intervals come from a range series. Must resolve to literal ranges.

`ranges` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

`tagBy` array of [`RangeTagSource`](https://dev.nominal.io/api/rest/catalog-service.md#rangetagsource)
:   Non-empty ordered list of tag sources. Each contributes a tag key-value pair per range interval.

### RangeMap

`start` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Inclusive start value. If not specified, the start is the prior range’s end value, or negative infinity.

`end` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Exclusive end value. If not specified, the end value is the next range’s start value, or positive infinity.

`output` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   The value to map to if the input value is within the range.

### RangePaddingConfiguration

`PAD_START`
:   ​

`PAD_END`
:   ​

`PAD_START_AND_END`
:   ​

### RangesAnchor

Uses the start timestamp of the range at the configured zero-based index from `ranges` evaluated over each interval, considering only ranges whose start lies in the anchor window [start, end), or [start, +infinity) when the end is absent. The window is the run bounds for a run anchor. A range already in progress when the window opens anchors at the window start. Series in `ranges` that select no explicit dataset resolve against the aligned input dataset, and the computed range groups must carry the aligned runs’ `runRid` grouping tags.

`ranges` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   The range series evaluated per interval to locate the anchor range.

`index` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Zero-based range index after sorting. Defaults to zero and must be non-negative.

`sortOrder` [`RangeSortOrder`](https://dev.nominal.io/api/rest/catalog-service.md#rangesortorder)
:   Ordering by range start timestamp before selecting the index. Defaults to ASC.

### RangeSeries

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

`approximateThreshold` [`ApproximateThresholdRanges`](https://dev.nominal.io/api/rest/catalog-service.md#approximatethresholdranges)
:   ​

`booleanRanges` [`BooleanRanges`](https://dev.nominal.io/api/rest/catalog-service.md#booleanranges)
:   ​

`thresholdRangesV2` [`ThresholdRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdrangesv2)
:   ​

`durationFilter` [`DurationFilterRanges`](https://dev.nominal.io/api/rest/catalog-service.md#durationfilterranges)
:   ​

`durationFilterV2` [`DurationFilterRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#durationfilterrangesv2)
:   ​

`enumFilter` [`EnumFilterRanges`](https://dev.nominal.io/api/rest/catalog-service.md#enumfilterranges)
:   ​

`categoryFilterRangesV2` [`CategoryFilterRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#categoryfilterrangesv2)
:   ​

`categoricalOnChangeRangesV2` [`CategoricalOnChangeRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#categoricalonchangerangesv2)
:   ​

`categoricalStaleRangesV2` [`CategoricalStaleRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#categoricalstalerangesv2)
:   ​

`categoricalEqualityRangesV2` [`CategoricalEqualityRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#categoricalequalityrangesv2)
:   ​

`enumSeriesEqualityRangesNode` [`EnumSeriesEqualityRanges`](https://dev.nominal.io/api/rest/catalog-service.md#enumseriesequalityranges)
:   ​

`eventsSearch` [`EventsSearchRanges`](https://dev.nominal.io/api/rest/catalog-service.md#eventssearchranges)
:   ​

`intersectRange` [`IntersectRanges`](https://dev.nominal.io/api/rest/catalog-service.md#intersectranges)
:   ​

`literalRanges` [`LiteralRanges`](https://dev.nominal.io/api/rest/catalog-service.md#literalranges)
:   ​

`minMaxThreshold` [`MinMaxThresholdRanges`](https://dev.nominal.io/api/rest/catalog-service.md#minmaxthresholdranges)
:   Computes ranges where the input time series matches a filter defined by lower and upper bounds, and an operator.

`not` [`NotRanges`](https://dev.nominal.io/api/rest/catalog-service.md#notranges)
:   ​

`onChange` [`OnChangeRanges`](https://dev.nominal.io/api/rest/catalog-service.md#onchangeranges)
:   ​

`peak` [`PeakRanges`](https://dev.nominal.io/api/rest/catalog-service.md#peakranges)
:   ​

`extremaRangesV2` [`ExtremaRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#extremarangesv2)
:   ​

`rangeNumericAggregation` [`RangesNumericAggregation`](https://dev.nominal.io/api/rest/catalog-service.md#rangesnumericaggregation)
:   ​

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`derived` [`DerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivedseries)
:   ​

`seriesCrossoverRangesNode` [`SeriesCrossoverRanges`](https://dev.nominal.io/api/rest/catalog-service.md#seriescrossoverranges)
:   ​

`seriesEqualityRangesNode` [`SeriesEqualityRanges`](https://dev.nominal.io/api/rest/catalog-service.md#seriesequalityranges)
:   ​

`numericEqualityRangesV2` [`NumericEqualityRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#numericequalityrangesv2)
:   ​

`stabilityDetection` [`StabilityDetectionRanges`](https://dev.nominal.io/api/rest/catalog-service.md#stabilitydetectionranges)
:   ​

`stabilityDetectionV2` [`StabilityDetectionRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#stabilitydetectionrangesv2)
:   ​

`staleRange` [`StaleRanges`](https://dev.nominal.io/api/rest/catalog-service.md#staleranges)
:   ​

`numericStaleRangesV2` [`NumericStaleRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#numericstalerangesv2)
:   ​

`threshold` [`ThresholdingRanges`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdingranges)
:   Computes ranges where the input time series matches a filter defined by a single threshold and an operator.

`unionRange` [`UnionRanges`](https://dev.nominal.io/api/rest/catalog-service.md#unionranges)
:   ​

`paddedRanges` [`PaddedRanges`](https://dev.nominal.io/api/rest/catalog-service.md#paddedranges)
:   ​

`paddedRangesV2` [`PaddedRangesV2`](https://dev.nominal.io/api/rest/catalog-service.md#paddedrangesv2)
:   ​

### RangesNumericAggregation

Aggregates the values of a numeric series at each range specified by the input ranges.

`ranges` [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries) required
:   ​

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`operation` [`RangeAggregationOperation`](https://dev.nominal.io/api/rest/catalog-service.md#rangeaggregationoperation) required
:   ​

### RangeSortOrder

Sort order for selecting ranges. ASC selects from earliest to latest, DESC selects from latest to earliest.

`ASC`
:   ​

`DESC`
:   ​

### RangeStart

Selects which point of a satisfied condition begins the output range.

`CONDITION_START`
:   ​

`PERSISTENCE_START`
:   ​

### RangeTagSource

A dimension contributing a tag key-value pair per range interval.

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

`intervalIndex` [`IntervalIndexTag`](https://dev.nominal.io/api/rest/catalog-service.md#intervalindextag)
:   ​

`rangeStartTimestamp` [`IntervalStartTimestampTag`](https://dev.nominal.io/api/rest/catalog-service.md#intervalstarttimestamptag)
:   ​

### Reference

`name` string required
:   A reference to a value not defined in the current compute scope.

### RefpropProperty

Supported properties for REFPROP calculations.

`TEMPERATURE`
:   ​

`PRESSURE`
:   ​

`MASS_DENSITY`
:   ​

`MASS_SPECIFIC_ENTHALPY`
:   ​

`MASS_SPECIFIC_INTERNAL_ENERGY`
:   ​

`MASS_SPECIFIC_ENTROPY`
:   ​

`VISCOSITY`
:   ​

### RefpropSeries

Computes the output property given input properties for the substance using REFPROP. Initial implementation only expects two input properties.

`inputs` map of string to [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   A map that maps a REFPROP property to its numeric series.

`outputProperty` [`RefpropProperty`](https://dev.nominal.io/api/rest/catalog-service.md#refpropproperty) required
:   The desired output property. This should not be one of the input properties.

`substance` [`RefpropSubstance`](https://dev.nominal.io/api/rest/catalog-service.md#refpropsubstance) required
:   The substance for REFPROP calculations.

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   **Deprecated:** Setting interpolation on this node is deprecated.

### RefpropSeriesV2

Computes a REFPROP output property from the supplied substance and output property.

`inputs` map of string to [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   Map of REFPROP property to its numeric series.

`substance` [`RefpropSubstance`](https://dev.nominal.io/api/rest/catalog-service.md#refpropsubstance) required
:   The substance for REFPROP calculations.

`outputProperty` [`RefpropProperty`](https://dev.nominal.io/api/rest/catalog-service.md#refpropproperty) required
:   The desired output property. This must not be one of the input properties.

### RefpropSubstance

Supported substances for REFPROP calculations

`NITROGEN`
:   ​

`OXYGEN`
:   ​

`HELIUM`
:   ​

`HYDROGEN`
:   ​

`METHANE`
:   ​

`PROPANE`
:   ​

`BUTANE`
:   ​

`WATER`
:   ​

`XENON`
:   ​

`AIR`
:   ​

`CARBON_DIOXIDE`
:   ​

`ARGON`
:   ​

`CARBON_MONOXIDE`
:   ​

`JET_A_4658`
:   ​

`JET_A_3638`
:   ​

### RelativeTimestamp

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit) required
:   ​

`offset` string (date-time)
:   ​

### ResourceSearchQuery

Predicate tree for filtering.

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

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

`numericProperty` [`NumericPropertyPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#numericpropertypredicate)
:   ​

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

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

`workspace` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

`and` array of [`ResourceSearchQuery`](https://dev.nominal.io/api/rest/catalog-service.md#resourcesearchquery)
:   ​

`or` array of [`ResourceSearchQuery`](https://dev.nominal.io/api/rest/catalog-service.md#resourcesearchquery)
:   ​

`not` [`ResourceSearchQuery`](https://dev.nominal.io/api/rest/catalog-service.md#resourcesearchquery)
:   ​

### RetentionPolicy

`type` [`RetentionPolicyType`](https://dev.nominal.io/api/rest/catalog-service.md#retentionpolicytype) required
:   ​

`expiryDays` integer
:   ​

### RetentionPolicyType

`KEEP_UNTIL_EXPIRY`
:   ​

`KEEP_FOREVER`
:   ​

### rids.api.Property

`name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`value` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

### RollingOperationSeries

DEPRECATED. Use `numericAggregation` with `aggregation.RollingTimeAggregationBuilder` instead.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

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

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

### RollingPointsAggregationBuilder

Rolling point-count aggregation: for each point in the input, aggregate the current point and the preceding N - 1 points within the same tag grouping.

`input` [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series) required
:   ​

`points` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   ​

### RollingTimeAggregationBuilder

Rolling time-window aggregation: for each point in the input, aggregate the values within the preceding time window.

`input` [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series) required
:   ​

`window` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   ​

### RootMeanSquare

The root mean square of points inside the time window.

An empty JSON object, `{}`.

### Run

Run reference for `Dataset.run`. The `rid` field accepts either a literal run RID or a `StringConstant` reference resolved from `Context`.

`rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Resource identifier of a run

### run.api.Duration

`seconds` integer (int64) required
:   ​

`nanos` integer (int64) required
:   ​

### RunChannel

`runRid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`assetRid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Used to disambiguate when multiple assets within this run contain data scopes with the same name. If not specified for a run with multiple assets, an error will be thrown.

`dataScopeName` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Used to disambiguate when multiple data scopes within this run contain channels with the same name.

`channel` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`additionalTags` map of string to [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) deprecated
:   **Deprecated:** Use additionalTagFilters

`additionalTagFilters` [`TagFilters`](https://dev.nominal.io/api/rest/catalog-service.md#tagfilters)
:   Tags to filter the channel by, in addition to tag filters defined for a given Run data scope. Throws on collisions with tag keys already defined for the given Run data scope. Only returns points that match both sets of tag filters. For log series, include arg filters here in addition to tag filters.

`tagsToGroupBy` array of string deprecated
:   **Deprecated:** Use groupByTags instead. Throws if both tagsToGroupBy and groupByTags are specified.

`groupByTags` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Tags that the channel should be grouped by. If this is non-empty a grouped result will be returned with an entry for each grouping. Only one of tagsToGroupBy and groupByTags should be specified.

### RunsSearchTarget

Search runs. Each matched run expands to one grouping per data source attached to the run: asset-typed data sources contribute one grouping per data scope on the asset; dataset-typed data sources contribute one grouping per dataset. Every grouping is tagged by `runRid` and `dataScope` (the asset’s data scope name for asset-typed sources, or the run-local data source ref name for dataset-typed sources); asset-typed groupings additionally carry `assetRid`.

`query` [`ResourceSearchQuery`](https://dev.nominal.io/api/rest/catalog-service.md#resourcesearchquery) required
:   Predicate tree used to filter matching runs.

### RustUdfSource

Rust source code defining the UDF entrypoint and any helper functions.

`sourceCode` string required
:   Rust source code to transpile into WASM. The operation consuming this source defines the entrypoint signature: scalar UDFs receive one scalar per input series, while aggregation UDFs receive grouped value vectors. If several functions appear at the top level, annotate the entrypoint with `#[main]`.

### S3Handle

`bucket` string required
:   ​

`key` string required
:   ​

### Sampling

Options for returning a sampled subset of raw series points.

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

`everyNthPerSeries` [`EveryNthPerSeriesSampling`](https://dev.nominal.io/api/rest/catalog-service.md#everynthperseriessampling)
:   ​

`hashSubsample` [`HashSubsampleSampling`](https://dev.nominal.io/api/rest/catalog-service.md#hashsubsamplesampling)
:   ​

### SavedDataset

A persisted source of data, named by its RID. Can be a catalog dataset, pipeline, connection, etc.

`rid` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   A data source RID, given as a literal or as a variable resolved from `Context`. A pipeline’s logic only accepts catalog datasets/pipelines, since it is persisted without context.

### ScalarUdfSeries

Executes user-provided scalar UDF code over aligned inputs. The function must return one output for each aligned input row, with the return type matching the series type that contains this node.

`inputs` array of [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series)
:   Input series passed to the UDF in argument order.

`source` [`UdfSource`](https://dev.nominal.io/api/rest/catalog-service.md#udfsource) required
:   Language-specific source definition for the UDF.

### ScaleParameter

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

`trueFrameRate` number
:   ​

`endingTimestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
:   ​

`scaleFactor` number
:   the scale factor can be used to calculate whether media duration differs from a video’s | real duration, and if so, the true frame rate of the camera. The video time will thus be scaled | by the ratio of the real duration to media duration, or media frame rate to true frame rate.

### ScaleSeries

For every timestamp specified in the input series, multiply it by a constant factor.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`scalar` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   The constant to multiply each point by

`scalarUnit` string
:   The units of the scalar to multiply by. If empty, the scalar is considered unit-less.

### Scatter

A scatter plot comprised of the values from one input series on the x-axis and values from another input series on the y-axis, for all points within a requested time range.

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`y` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

### ScatterCurveFit

Fits a curve to the scatter between two series.

`scatter` [`Scatter`](https://dev.nominal.io/api/rest/catalog-service.md#scatter) required
:   The x and y series to fit to.

`options` [`ScatterFitOptions`](https://dev.nominal.io/api/rest/catalog-service.md#scatterfitoptions) required
:   ​

### ScatterFitOptions

`minX` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Inclusive lower bound on the x values to fit to. If omitted, does not set a bound (equivalent to setting this to the minimum x value among all points in the time range).

`maxX` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Inclusive upper bound on the x values to fit to. If omitted, does not set a bound (equivalent to setting this to the maximum x value among all points in the time range).

`minY` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Inclusive lower bound on the y values to fit to. If omitted, does not set a bound (equivalent to setting this to the minimum y value among all points in the time range).

`maxY` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Inclusive upper bound on the y values to fit to. If omitted, does not set a bound (equivalent to setting this to the maximum y value among all points in the time range).

### ScrapingConfig

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

`influx` [`InfluxScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#influxscrapingconfig)
:   ​

`nominal` [`NominalScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#nominalscrapingconfig)
:   ​

`timestream` [`TimestreamScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamscrapingconfig)
:   ​

`timescale` [`PivotedTimescaleScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#pivotedtimescalescrapingconfig)
:   ​

`visualCrossing` [`VisualCrossingScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingscrapingconfig)
:   ​

`bigQuery` [`BigQueryScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#bigqueryscrapingconfig)
:   ​

`api` [`ApiScrapingConfig`](https://dev.nominal.io/api/rest/catalog-service.md#apiscrapingconfig)
:   ​

### SearchDataset

Resolves matching assets or runs from search, creating a combined dataset tagged by source rid and data scope.

`target` [`SearchTarget`](https://dev.nominal.io/api/rest/catalog-service.md#searchtarget) required
:   Whether to search assets or runs and with which query.

`maxResults` integer
:   Maximum number of assets or runs returned from search. Defaults to 10000 when omitted.

### SearchDatasetFilesQuery

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

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

`uploadedAtRange` [`UploadedAtFilter`](https://dev.nominal.io/api/rest/catalog-service.md#uploadedatfilter)
:   ​

`fileTags` map of `TagName` to string
:   ​

`and` array of [`SearchDatasetFilesQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetfilesquery)
:   ​

`or` array of [`SearchDatasetFilesQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetfilesquery)
:   ​

### SearchDatasetsQuery

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

`searchText` string
:   ​

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

`label` string
:   ​

`properties` [`nominal.api.Property`](https://dev.nominal.io/api/rest/catalog-service.md#nominal-api-property)
:   ​

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

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

`ingestStatus` [`IngestStatus`](https://dev.nominal.io/api/rest/catalog-service.md#ingeststatus)
:   ​

`ingestedBeforeInclusive` string (date-time)
:   Inclusive upper bound on dataset creation time (ingestDate), not lastIngestedAt.

`ingestedAfterInclusive` string (date-time)
:   Inclusive lower bound on dataset creation time (ingestDate), not lastIngestedAt.

`archiveStatus` boolean
:   ​

`derived` boolean
:   Filters datasets by whether they have a derived definition.

`and` array of [`SearchDatasetsQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetsquery)
:   ​

`or` array of [`SearchDatasetsQuery`](https://dev.nominal.io/api/rest/catalog-service.md#searchdatasetsquery)
:   ​

`workspace` string (RID)
:   ​

### SearchEventOriginType

`WORKBOOK`
:   ​

`TEMPLATE`
:   ​

`API`
:   ​

`DATA_REVIEW`
:   ​

`PROCEDURE`
:   ​

### SearchTarget

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

`assets` [`AssetsSearchTarget`](https://dev.nominal.io/api/rest/catalog-service.md#assetssearchtarget)
:   ​

`runs` [`RunsSearchTarget`](https://dev.nominal.io/api/rest/catalog-service.md#runssearchtarget)
:   ​

### SelectIndexFrom1dEnumArraySeries

For each timestamp, selects a single enum value from the 1D enum array at the specified index. If the index is out of bounds for an array at a given timestamp, it is omitted.

`input` [`Enum1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#enum1darrayseries) required
:   ​

`index` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   ​

### SelectIndexFrom1dNumericArraySeries

For each timestamp, selects a single numeric value from the 1D numeric array at the specified index. If the index is out of bounds for an array at a given timestamp, it is omitted.

`input` [`Numeric1dArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#numeric1darrayseries) required
:   ​

`index` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   ​

### SelectNewestPointsSeries

Select the most recent N points from the input series by timestamp.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   The input series to select the newest points from.

`numPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The number of points to select.

### SelectOldestPointsSeries

Select the earliest N points from the input series by timestamp.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   The input series to select the oldest points from.

`numPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   The number of points to select.

### SelectProperty

Selects a typed property value from every asset or run branch resolved from `dataset`. Inside a `WithSeriesDataset` definition, `dataset` may be omitted to use that node’s wrapping input; it is required everywhere else. Asset branches read properties directly from their asset. Run branches read properties directly from their run, never from a backing asset or dataset. Direct saved-dataset branches are unsupported.

`propertyName` string required
:   ​

`dataset` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
:   ​

### SelectSeries

Selects series from a dataset (might contain multiple tag groupings). When `name` is provided, selects that single channel. When `name` is omitted, selection starts from all channels in the dataset scope; callers narrow the selection with a `filterByTag` predicate on the reserved `NOMINAL_CHANNEL` tag key and preserve per-channel identity in the response with `selectTags`. Providing both `name` and a `NOMINAL_CHANNEL` filter is rejected as an invalid request. Raw and derived channels can both be selected through the reserved tag filter.

`name` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   The identifying series name to query

`dataset` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset)
:   The dataset providing the data to query. May be omitted inside a `WithSeriesDataset` series definition, in which case it defaults to that node’s wrapping `input`; required everywhere else.

`sampling` [`Sampling`](https://dev.nominal.io/api/rest/catalog-service.md#sampling)
:   Raw-series sampling options. Supported for numeric and enum raw series.

### Series

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

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference) deprecated
:   **Deprecated:** use typed value of series instead.

`enum` [`EnumSeries`](https://dev.nominal.io/api/rest/catalog-service.md#enumseries)
:   ​

`numeric` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   ​

`log` [`LogSeries`](https://dev.nominal.io/api/rest/catalog-service.md#logseries)
:   ​

`array` [`ArraySeries`](https://dev.nominal.io/api/rest/catalog-service.md#arrayseries)
:   ​

`struct` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries)
:   ​

`video` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

### SeriesCrossoverRanges

Produces a list of zero-duration ranges at the first point where two series cross over one another

`inputA` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`inputB` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   The series `inputA` is compared against.

### SeriesEqualityRanges

Produces a list of ranges for which provided series are all equal (or are not all equal).

`input` array of [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   ​

`equalityOperator` [`EqualityOperator`](https://dev.nominal.io/api/rest/catalog-service.md#equalityoperator) required
:   ​

`tolerance` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   ​

`persistenceWindowConfiguration` [`PersistenceWindowConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#persistencewindowconfiguration)
:   ​

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### SeriesVariable

A series selected from a dataset, bound to a variable. The series type (numeric, enum, …) is decided lazily by the node consuming the variable, matching the behaviour of channel variables.

`select` [`SelectSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectseries) required
:   ​

`groupByTags` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Tags that the series should be grouped by. If this is non-empty a grouped result will be returned with an entry for each grouping; otherwise all matching series are merged.

### SetNegativeValuesToZero

An empty JSON object, `{}`.

### SetOperator

`AND`
:   ​

`OR`
:   ​

### SignalFilterConfiguration

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

`lowPass` [`LowPassConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#lowpassconfiguration)
:   ​

`highPass` [`HighPassConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#highpassconfiguration)
:   ​

`bandPass` [`BandPassConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#bandpassconfiguration)
:   ​

`bandStop` [`BandStopConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#bandstopconfiguration)
:   ​

### SignalFilterSeries

Applies IIR-based signal filtering to input series. Includes low-pass, high-pass, band-pass, and band-stop filters. Currently supports variable-order bidirectional Butterworth filters, with fixed-size padding based on SciPy output.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`signalFilterConfiguration` [`SignalFilterConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#signalfilterconfiguration) required
:   Filter type and cutoff frequencies.

`order` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant) required
:   Order of filter. Must be a positive integer, and is effectively doubled for bidirectional filters.

`samplingFrequency` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   The sampling frequency of the input series. Used to calculate normalized frequency for cutoff frequencies.

### Sin

Computes the trigonometric sine of each value (input in radians).

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (radians).

### SortField

`INGEST_DATE`
:   Dataset creation time (created_at). The name is historical; use LAST_INGESTED_AT for when data was last added.

`START_TIME`
:   Start of the dataset’s data bounds.

`END_TIME`
:   End of the dataset’s data bounds.

`LAST_INGESTED_AT`
:   When data was last added, as the latest of a successful file ingest and streaming-session activity. Datasets that have never received either sort last.

### SortOptions

`isDescending` boolean required
:   ​

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

### Sqrt

Computes the square root of each value.

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (non-negative values).

### StabilityDetectionRanges

Outputs a set of ranges where the input series is stable. For each point, the min and max are calculated over the specified lookback window, including the current point. A point is considered stable if its value does not deviate from the calculated min and the max by more than the threshold and the total number of points within the window is at least the specified amount. The threshold can be either fixed values or percentages of the value. The lookback window must be strictly positive. The minimum points threshold defaults to 2.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`windowConfiguration` [`StabilityWindowConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#stabilitywindowconfiguration) required
:   ​

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

### StabilityDetectionRangesV2

Produces ranges where a numeric input is stable within a modern duration window.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`window` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   Lookback window over which the input’s spread is measured.

`minPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Minimum number of points in the window. Defaults to 2.

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

### StabilityWindowConfiguration

`minPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   The minimum number of points within the window to create a stable range. Must be non-negative. If not present, will default to 2.

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

### StaleRanges

Produces a list of ranges for which data does not exist for the specified duration or longer. Increases window size by the specified staleness threshold on both ends to capture edge cases of data not currently in view.

`input` [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series) required
:   ​

`threshold` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

`startTimestamp` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant)
:   The start timestamp of the range. If not specified, staleness will automatically use view range start.

`endTimestamp` [`TimestampConstant`](https://dev.nominal.io/api/rest/catalog-service.md#timestampconstant) deprecated
:   **Deprecated:** No longer used and will be removed

### StandardDeviation

The standard deviation of points inside the time window.

An empty JSON object, `{}`.

### StringConstant

A string constant that can be a literal value or a named variable reference.

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

`literal` string
:   Create from a literal string value.

`variable` string
:   Create from a named reference.

### StringPropertyDimension

Injects the value of a string property, under a tag key equal to the property name by default. Only supported on asset and run branches: asset branches read the asset’s properties, and run branches, including run branches backed by an asset, read the run’s properties, matching `SelectProperty`. Values are injected as is. A branch without the property, or whose property holds a numeric value, gets the reserved value `NOMINAL_ABSENT`.

`propertyName` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Name of the property whose value to inject. Also the default tag key.

### StringSetConstant

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

`literal` array of string
:   ​

`variable` string
:   ​

### StringSetConstantV2

A set of string constants that can be a literal set or a named variable reference.

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

`literal` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Create from a literal set of string constants.

`variable` string
:   Create from a named reference.

### StructSelectTagsSeries

Subsets the tag dimensions of the input struct series to the given tag keys. Preserves the input series’ cardinality: points that share the selected keys but differ on dropped keys remain distinct.

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`tagKeys` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

### StructSeries

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

`channel` [`ChannelSeries`](https://dev.nominal.io/api/rest/catalog-service.md#channelseries)
:   ​

`raw` [`Reference`](https://dev.nominal.io/api/rest/catalog-service.md#reference)
:   ​

`derived` [`DerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivedseries)
:   ​

`combine` [`CombineStructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#combinestructseries)
:   ​

`selectStruct` [`SelectSeries`](https://dev.nominal.io/api/rest/catalog-service.md#selectseries)
:   ​

`extractFromStruct` [`ExtractStructFromStructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#extractstructfromstructseries)
:   ​

`toStartOfInterval` [`StructToStartOfIntervalSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structtostartofintervalseries)
:   ​

`timeShift` [`StructTimeShiftSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structtimeshiftseries)
:   ​

`filterByTag` [`StructTagFilterSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structtagfilterseries)
:   ​

`selectTags` [`StructSelectTagsSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structselecttagsseries)
:   ​

### StructTagFilterSeries

Applies a tag predicate to the struct series produced by input.

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`predicate` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   ​

### StructTimeShiftSeries

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant) required
:   ​

### StructToStartOfIntervalSeries

Snaps each point’s timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.

`input` [`StructSeries`](https://dev.nominal.io/api/rest/catalog-service.md#structseries) required
:   ​

`window` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   ​

### Subtract

Subtracts right from left pointwise.

`left` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Left-hand operand (minuend).

`right` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Right-hand operand (subtrahend).

### SuccessResult

An empty JSON object, `{}`.

### Summation

The sum of points inside the time window.

An empty JSON object, `{}`.

### SumSeries

For every timestamp specified in the input series, outputs a value that is the sum for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.

`inputs` array of [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries)
:   Input series across which to take the pointwise sum

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Defaults to forward fill interpolation with a 1s interpolation radius **Deprecated:** Setting interpolation on this node is deprecated.

### TagAnd

Conjunction of two tag predicates (both must hold).

`left` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   ​

`right` [`TagPredicate`](https://dev.nominal.io/api/rest/catalog-service.md#tagpredicate) required
:   ​

### TagByIntervalsSeries

Injects tags derived from interval boundaries onto a numeric series. Points within an interval get tagged; points outside all intervals are dropped. Intervals come from either events or ranges. If intervals with different tag map overlap, a data point falling in multiple intervals is duplicated into each matching output group. Overlapping intervals with equal tag maps are not allowed. Optional time shift subtracts a per-interval anchor from timestamps after matching.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`intervals` [`IntervalSource`](https://dev.nominal.io/api/rest/catalog-service.md#intervalsource) required
:   ​

`timeShift` [`TagByIntervalsTimeShift`](https://dev.nominal.io/api/rest/catalog-service.md#tagbyintervalstimeshift)
:   When set, shift each matched point’s timestamp by the chosen anchor for that interval.

### TagByIntervalsTimeShift

How to shift timestamps after tagging (subtract anchor from each point in the interval slice).

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

`intervalStart` [`IntervalStartTimeShift`](https://dev.nominal.io/api/rest/catalog-service.md#intervalstarttimeshift)
:   ​

`intervalEnd` [`IntervalEndTimeShift`](https://dev.nominal.io/api/rest/catalog-service.md#intervalendtimeshift)
:   ​

`eventTimeShift` [`EventTimeShift`](https://dev.nominal.io/api/rest/catalog-service.md#eventtimeshift)
:   ​

### TagFilter

A filter on a single tag key and set of values. For an IN operator, the tag key must match at least one of the values in the set. For a NOT_IN operator, it must not match any of the values in the set.

`key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`values` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   ​

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

### TagFilterOperator

`IN`
:   ​

`NOT_IN`
:   ​

### TagFilters

A set of tag filters to apply to a channel. Allows for combining filters on multiple tag keys, but throws if any one tag key is specified in more than one filter.

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

`single` [`TagFilter`](https://dev.nominal.io/api/rest/catalog-service.md#tagfilter)
:   ​

`and` array of [`TagFilters`](https://dev.nominal.io/api/rest/catalog-service.md#tagfilters)
:   ​

### TaggedDataset

Injects one ephemeral tag (key and value) onto the underlying dataset.

`input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   The underlying dataset to tag.

`key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Tag key to inject onto each series in the dataset.

`value` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   Tag value to assign to the injected key.

### TagIn

Constrains a tag key to be in the given set of values.

`key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`values` [`StringSetConstantV2`](https://dev.nominal.io/api/rest/catalog-service.md#stringsetconstantv2) required
:   ​

### TagNotIn

Constrains a tag key to not be in the given set of values.

`key` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant) required
:   ​

`values` [`StringSetConstantV2`](https://dev.nominal.io/api/rest/catalog-service.md#stringsetconstantv2) required
:   ​

### TagPredicate

Conjunctive tag predicate for dataset filtering. Compiles to resolved TagFilters for storage and resolution-time folding against known tag assignments (e.g. TaggedDataset, search branches).

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

`in` [`TagIn`](https://dev.nominal.io/api/rest/catalog-service.md#tagin)
:   ​

`notIn` [`TagNotIn`](https://dev.nominal.io/api/rest/catalog-service.md#tagnotin)
:   ​

`and` [`TagAnd`](https://dev.nominal.io/api/rest/catalog-service.md#tagand)
:   ​

### Tan

Computes the trigonometric tangent of each value (input in radians).

`x` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   Input numeric series (radians).

### TemporalUnit

`HOURS`
:   ​

`DAYS`
:   ​

`WEEKS`
:   ​

### Threshold

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

`absolute` [`AbsoluteThreshold`](https://dev.nominal.io/api/rest/catalog-service.md#absolutethreshold)
:   ​

`percentage` [`PercentageThreshold`](https://dev.nominal.io/api/rest/catalog-service.md#percentagethreshold)
:   ​

### ThresholdingRanges

Produces a list of ranges for which the threshold condition is satisfied.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`threshold` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   ​

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

`persistenceWindowConfiguration` [`PersistenceWindowConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#persistencewindowconfiguration)
:   ​

### ThresholdOperator

`GREATER_THAN`
:   ​

`GREATER_THAN_OR_EQUAL_TO`
:   ​

`LESS_THAN`
:   ​

`LESS_THAN_OR_EQUAL_TO`
:   ​

`EQUAL_TO`
:   ​

`NOT_EQUAL_TO`
:   ​

### ThresholdRangesComparison

Selects the comparison applied to a numeric threshold.

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

`gt` [`ThresholdRangesOrderedComparison`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdrangesorderedcomparison)
:   ​

`ge` [`ThresholdRangesOrderedComparison`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdrangesorderedcomparison)
:   ​

`lt` [`ThresholdRangesOrderedComparison`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdrangesorderedcomparison)
:   ​

`le` [`ThresholdRangesOrderedComparison`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdrangesorderedcomparison)
:   ​

`eq` [`ThresholdRangesEqualityComparison`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdrangesequalitycomparison)
:   ​

`ne` [`ThresholdRangesEqualityComparison`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdrangesequalitycomparison)
:   ​

### ThresholdRangesEqualityComparison

An equality comparison against a numeric threshold, within an optional tolerance.

`threshold` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   The value each input point is compared against.

`tolerance` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant)
:   Maximum absolute difference from the threshold still counted as equal. Defaults to zero, i.e. exact equality.

### ThresholdRangesOrderedComparison

An ordering comparison against a single numeric threshold.

`threshold` [`DoubleConstant`](https://dev.nominal.io/api/rest/catalog-service.md#doubleconstant) required
:   The value each input point is compared against.

### ThresholdRangesV2

Produces ranges where a numeric input satisfies a threshold comparison.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`minPoints` [`IntegerConstant`](https://dev.nominal.io/api/rest/catalog-service.md#integerconstant)
:   Minimum number of matching points. Defaults to 1.

`minDuration` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration)
:   Minimum matching duration. Defaults to one nanosecond.

`rangeStart` [`RangeStart`](https://dev.nominal.io/api/rest/catalog-service.md#rangestart)
:   Selects whether the output begins at the first match or after persistence is satisfied.

`comparison` [`ThresholdRangesComparison`](https://dev.nominal.io/api/rest/catalog-service.md#thresholdrangescomparison) required
:   ​

### TimeDifferenceSeries

Outputs a new series where each value is the difference between the time of the current and previous points.

`input` [`Series`](https://dev.nominal.io/api/rest/catalog-service.md#series) required
:   ​

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
:   The time unit used to define the output values. Defaults to seconds if not specified.

### TimeRangeFilter

searches for files that intersect with the specified range.

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

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

### TimescaleConnectionDetails

`database` string required
:   ​

`host` string required
:   ​

`port` integer required
:   ​

`username` string required
:   This is also the reference to the secret containing the password

`passwordSecretRid` string (RID) required
:   Secret Rid of password secret stored in Secrets Service.

### TimescaleScrapingFilter

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

`not` [`TimescaleScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#timescalescrapingfilter)
:   ​

`matchTable` array of string
:   Match any of the specified tables in the database.

`matchSchema` array of string
:   Match any of the specified schemas in the database.

### TimeSeriesCurveFit

Fits a curve to a series vs its timestamps.

`series` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   The series to fit. Timestamps will be used as x values and data as y values. The leftmost (earliest) timestamp will be used as the value of 0, and all other timestamps will be relative to that.

`options` [`TimeSeriesFitOptions`](https://dev.nominal.io/api/rest/catalog-service.md#timeseriesfitoptions) required
:   ​

### TimeSeriesFitOptions

`timeUnit` [`TimeUnit`](https://dev.nominal.io/api/rest/catalog-service.md#timeunit)
:   Time unit used for the timestamps to fit against. Defaults to seconds if not specified.

### TimeShiftedDataset

Transforms a dataset by adding a time offset to all its data.

`input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   The underlying dataset to time-shift.

`offset` [`compute.api.Duration`](https://dev.nominal.io/api/rest/catalog-service.md#compute-api-duration) required
:   The time shift to apply. Positive values shift data forward in time, negative values shift backward.

### Timestamp

Deprecated for new APIs. Use google.protobuf.Timestamp for absolute instants in proto APIs.

This legacy nanosecond precision timestamp type is represented by an epoch time in seconds and a nanosecond offset. The nanosecond offset is from the start of the epoch second, so must be less than 1 billion.

`seconds` integer (int64) required
:   ​

`nanos` integer (int64) required
:   ​

### TimestampConstant

A timestamp constant that can be a literal value or a named variable reference.

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

`literal` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
:   Create from a literal timestamp value.

`variable` string
:   Create from a named reference.

### TimestampMetadata

`seriesName` string required
:   ​

`timestampType` [`catalog.TimestampType`](https://dev.nominal.io/api/rest/catalog-service.md#catalog-timestamptype) required
:   ​

### TimestreamChannelNameComponent

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

`table` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`measure` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`attribute` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   ​

`valueOfTagWithName` string
:   The value of the specified TagName will be used. If the tag is not present, it will be omitted.

### TimestreamConnectionDetails

`nominalRoleArn` string required
:   The role ARN owned by Nominal that has permission to assume the externalRoleArn.

`nominalRoleRegion` string required
:   AWS region that contains the Nominal role.

`externalRegion` string required
:   AWS region that contains the Timestream instance.

`externalRoleArn` string required
:   The role ARN used to make queries to Timestream. This role is owned by the AWS account that owns the Timestream instance.

`database` string required
:   Database inside of the Timestream instance to connect to.

### TimestreamScrapingConfig

`filter` array of [`TimestreamScrapingFilter`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamscrapingfilter)
:   In order for data to be picked up by the scraper, it must match all filters in this list.

`channelNameComponents` array of [`TimestreamChannelNameComponent`](https://dev.nominal.io/api/rest/catalog-service.md#timestreamchannelnamecomponent)
:   channelNameComponents will be combined, together with separator, to form a fully qualified channel name.

`separator` string required
:   ​

`maxLookBackPeriodHours` integer
:   The maximum time in hours to look back over series data to find unique measure and tag combinations. If not specified, the default look back period will be used.

### TimestreamScrapingFilter

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

`matchTable` array of string
:   Match any of the specified tables in the database.

### TimeUnit

`DAYS`
:   ​

`HOURS`
:   ​

`MINUTES`
:   ​

`SECONDS`
:   ​

`MILLISECONDS`
:   ​

`MICROSECONDS`
:   ​

`NANOSECONDS`
:   ​

### 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
:   ​

### UdfSource

Source provider for a user-defined function.

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

`rust` [`RustUdfSource`](https://dev.nominal.io/api/rest/catalog-service.md#rustudfsource)
:   ​

### UnaryArithmeticOperation

`COS`
:   Calculates the trigonometric cosine (input in radians)

`SIN`
:   Calculates the trigonometric sine (input in radians)

`TAN`
:   Calculates the trigonometric tangent (input in radians)

`ABS`
:   Calculates the absolute value

`ASIN`
:   Calculates the arcsine, returning radians

`ACOS`
:   Calculates the arccosine, returning radians

`LOG`
:   Calculates the base 10 logarithm

`LN`
:   Calculates the natural logarithm (base e)

`SQRT`
:   Calculates the square root

### UnaryArithmeticSeries

Applies a point-wise transformation to a series. The transformation function is applied to every individual data point.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`operation` [`UnaryArithmeticOperation`](https://dev.nominal.io/api/rest/catalog-service.md#unaryarithmeticoperation) required
:   ​

### UnboundedBehavior

Dictates how empty range bounds should be handled by the compute node. Defaults to INFINITY.

`INFINITY`
:   ​

`WINDOW_BOUND`
:   ​

### UnboundedRangeBehavior

How to handle ranges with a missing start or end.

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

`clampToWindow` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   Clamp a missing range start to the compute request window start and a missing range end to the compute request window end.

`drop` [`Empty`](https://dev.nominal.io/api/rest/catalog-service.md#empty)
:   Drop the range if it has a missing start or end.

### Union

Uses the union of all input timestamps as the alignment grid.

An empty JSON object, `{}`.

### UnionRanges

`inputs` array of [`RangeSeries`](https://dev.nominal.io/api/rest/catalog-service.md#rangeseries)
:   The ranges to union.

### UnitConversionSeries

Convert the given series to a different unit.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`outputUnit` string required
:   ​

### UnitOverrideSeries

Override the unit of the given series without changing its values. Unlike unit conversion, no compatibility with the input’s current unit is required.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`unit` string
:   The unit to report for the input series. If absent, the input’s unit is cleared.

### UploadedAtFilter

Searches for files whose uploadedAt falls within the specified range using half-open bounds [start, end). If start is omitted the range is unbounded below. If end is omitted the range is unbounded above.

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

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

### UtcTimestamp

`secondsSinceEpoch` integer (int64) required
:   ​

### ValueDifferenceSeries

Calculates the first discrete difference of the input series. For each point, computes the difference between the current value and the previous value (current - previous). The first point in the input series is omitted from the output since it has no previous point to compare against.

This is equivalent to pandas DataFrame.diff() with period=1. Useful for analyzing changes between consecutive data points in time series data, such as detecting value increases or decreases.

Example: For input values [1.0, 1.0, 2.0, 2.5, 1.8], the output would be [0.0, 1.0, 0.5, -0.7] at the corresponding timestamps (the first timestamp is omitted).

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`negativeValuesConfiguration` [`NegativeValueConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#negativevalueconfiguration)
:   Defines the strategy for handling negative output values. Defaults to allowNegativeValues if not specified.

### ValueMapSeries

Maps a continuous numeric series to a discrete enum series using the specified value ranges.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   The input series to map to an enumerated series

`mapping` array of [`RangeMap`](https://dev.nominal.io/api/rest/catalog-service.md#rangemap)
:   The output of the first capturing range will be used. Ranges are start inclusive, end exclusive, must not overlap, and increasing from lowest to highest. Ranges can be open ended to the edge of the next or prior range. The first range can be open ended to negative infinity, and the last range can be open ended to positive infinity.

`default` [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   The default value if not captured by any range. If not specified, points will be filtered.

### VariableValue

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

`double` number
:   ​

`computeNode` [`ComputeNodeWithContext`](https://dev.nominal.io/api/rest/catalog-service.md#computenodewithcontext)
:   ​

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

`integer` integer
:   ​

`channel` [`ChannelSeries`](https://dev.nominal.io/api/rest/catalog-service.md#channelseries) deprecated
:   **Deprecated:** use series instead.

`derived` [`DerivedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#derivedseries)
:   ​

`series` [`SeriesVariable`](https://dev.nominal.io/api/rest/catalog-service.md#seriesvariable)
:   ​

`string` string
:   ​

`stringSet` array of string
:   ​

`timestamp` [`Timestamp`](https://dev.nominal.io/api/rest/catalog-service.md#timestamp)
:   ​

### VideoFileMetadata

Metadata specific to video files.

`timestampManifest` [`VideoFileTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#videofiletimestampmanifest) required
:   Specifies how to determine absolute timestamps for each frame in the video. Can be an embedded MCAP manifest, an external sidecar file, or calculated from a starting offset applied to presentation timestamps.

`segmentMetadata` [`VideoSegmentsMetadata`](https://dev.nominal.io/api/rest/catalog-service.md#videosegmentsmetadata)
:   Cached aggregate metadata about the segments comprising this video file after segmentation has completed. Includes frame counts, duration, and frame rate. Empty until segmentation is complete. Note: Min/max timestamps are stored in DatasetFile.bounds field. Raw file size is stored in DatasetFile.fileSizeBytes.

### VideoFileTimestampManifest

A video file’s timestamp manifest specifies how to determine absolute timestamps for each frame. In an MCAP file, this data is embedded within the source file. Alternatively, the manifest may be provided as an external sidecar file. If no manifest is available, the timestamps are calculated by applying a starting offset to the presentation timestamp of each frame.

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

`mcap` [`McapTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#mcaptimestampmanifest)
:   ​

`s3path` string
:   ​

`s3paths` array of string
:   Multiple sidecar manifest files whose per-frame timestamps are concatenated in list order. Used when a video’s frame timestamps are recorded across several files.

`noManifest` [`NoTimestampManifest`](https://dev.nominal.io/api/rest/catalog-service.md#notimestampmanifest)
:   ​

### VideoSegmentsMetadata

Segment metadata for video files. Lightweight version that excludes bounds and RID since those are stored elsewhere.

`numFrames` integer required
:   Total number of frames across all segments.

`numSegments` integer required
:   Number of segments the video was split into.

`scaleFactor` number required
:   Scale factor applied to timestamps during segmentation.

`mediaDurationSeconds` number required
:   Total duration of the video in seconds.

`mediaFrameRate` number required
:   Average frame rate (FPS) calculated as total frames / duration.

### VisualCrossingAvailableSeries

Deprecated and not used for anything anymore, see record VisualCrossingAvailableSeries instead.

`channel` string required
:   ​

`unit` string
:   ​

`description` string
:   ​

`type` [`VisualCrossingType`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingtype) required
:   ​

### VisualCrossingConnectionDetails

`apiKeySecretRid` string (RID) required
:   Secret Rid of API key stored in Secrets Service.

### VisualCrossingScrapingConfig

`availableSeries` array of [`VisualCrossingAvailableSeries`](https://dev.nominal.io/api/rest/catalog-service.md#visualcrossingavailableseries) deprecated
:   list of available channels **Deprecated:** No longer used for anything

### VisualCrossingType

`DOUBLE`
:   ​

`STRING`
:   ​

### WeakTimestampType

If a CSV dataset is still being split, the timestamp type is not known.

`ABSOLUTE`
:   ​

`RELATIVE`
:   ​

`PENDING`
:   ​

### Window

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

`duration` [`DurationConstant`](https://dev.nominal.io/api/rest/catalog-service.md#durationconstant)
:   ​

### WithSeriesDataset

Adds one or more derived series to the base dataset. Each entry’s definition must reference only the wrapping `input`. Series names must be unique within the request; a derived name replaces a same-named series from `input`.

`input` [`api.Dataset`](https://dev.nominal.io/api/rest/catalog-service.md#api-dataset) required
:   The base dataset to which the new series will be added.

`series` array of [`NamedSeries`](https://dev.nominal.io/api/rest/catalog-service.md#namedseries)
:   The named derived series to add.

### ZscoreSeries

Computes the z-score for each series within a group-by family. For each group at each timestamp, the output is (value - mean) / stddev, where mean and stddev are computed across all groups in the family at that timestamp, using the interpolation configuration to align values across groups. When stddev is zero at a timestamp (e.g., all groups have the same value), that data point is excluded from the output. If groupByTags is empty, all groups in the input series will be considered as a single family. This node only produces meaningful results when the input has a group by.

`input` [`NumericSeries`](https://dev.nominal.io/api/rest/catalog-service.md#numericseries) required
:   ​

`groupByTags` array of [`StringConstant`](https://dev.nominal.io/api/rest/catalog-service.md#stringconstant)
:   Tags to group by for the normalization. If left empty, all groups in the input will be considered as a single family. Otherwise, inputs will be normalized separately across the groups specified by the tags.

`interpolationConfiguration` [`InterpolationConfiguration`](https://dev.nominal.io/api/rest/catalog-service.md#interpolationconfiguration) deprecated
:   Configuration for aligning values across groups at each timestamp. Defaults to forward fill interpolation with a 1s interpolation radius. **Deprecated:** Setting interpolation on this node is deprecated.

Page design based on [Scalar](https://scalar.com), MIT License.
