# Native extractor service

Workspace-facing surface for enabling and converging native catalog extractors.

OpenAPI file: [`nominal.ingest.v2.json`](https://dev.nominal.io/api/_downloads/064305915dc637b34369651e3e33dd72/nominal.ingest.v2.json)

## Endpoints

### List native extractors

GET `/extractors/v2/native`

Lists every catalog entry the deployment carries with this workspace’s installation state.

Query parameters

`workspaceRid` string required
:   ​

`pageSize` integer required
:   From 1 to 1,000.

`nextPageToken` string
:   ​

Response

`extractors` array of [`NativeExtractor`](https://dev.nominal.io/api/rest/native-extractor-service.md#nativeextractor)
:   ​

    Fields of `NativeExtractor`

    `catalogId` string
    :   Stable catalog identifier, e.g. “ardupilot-dataflash”.

    `availableVersions` array of string
    :   Versions the deployment’s catalog currently carries, ascending.

    `installation` [`ContainerizedExtractor`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerizedextractor)
    :   The workspace-local extractor materialized for this entry, set when enabled. Ingest requests target it exactly like a customer-authored extractor, and the catalog version it is installed at is its active image’s tag.

        Fields of `ContainerizedExtractor`

        `rid` string
        :   Unique resource identifier for this extractor.

        `workspaceRid` string
        :   Workspace that owns this extractor.

        `name` string
        :   User-supplied name. Need not be unique within a workspace.

        `description` string
        :   Free-form description shown in the UI.

        `createdAt` string (date-time)
        :   Timestamp at which this extractor was first registered.

        `isArchived` boolean
        :   True once the extractor has been archived. Archived extractors are hidden from default search results and reject new ingests; flip back to false on UpdateContainerizedExtractor to restore.

        `activeContainerImage` [`ContainerImage`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerimage)
        :   The container image currently selected to run this extractor. Unset until the first image for this extractor reaches READY status; ingest requests that arrive before then will fail. The schema fields (inputs, parameters, output_file_format, default_timestamp_metadata) live on this nested image.

            Fields of `ContainerImage`

            `rid` string
            :   ​

            `tag` string
            :   User-supplied tag, unique within (workspace, extractor).

            `sizeBytes` string (int64)
            :   Size of the stored image in bytes once the image reaches READY.

            `status` [`ContainerImageStatus`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerimagestatus)
            :   Current lifecycle status (PENDING while pushing, READY after a successful push, FAILED otherwise).

                Values of `ContainerImageStatus`

                `CONTAINER_IMAGE_STATUS_UNSPECIFIED`
                :   ​

                `CONTAINER_IMAGE_STATUS_PENDING`
                :   ​

                `CONTAINER_IMAGE_STATUS_READY`
                :   ​

                `CONTAINER_IMAGE_STATUS_FAILED`
                :   ​

            `createdAt` string (date-time)
            :   When the image record was created.

            `extractorRid` string
            :   The containerized extractor this image is built for.

            `inputs` array of [`FileExtractionInput`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileextractioninput)
            :   The input files this extractor requires, mapped to environment variables that store the path to each file.

                Fields of `FileExtractionInput`

                `environmentVariable` string
                :   The environment variable that stores the path to the input file.

                `name` string
                :   Name of the input file which users will be prompted with.

                `description` string
                :   Description of the input file which users will be prompted with.

                `fileFilters` array of [`FileFilter`](https://dev.nominal.io/api/rest/native-extractor-service.md#filefilter)
                :   Optionally filter files for file selection.

                    Fields of `FileFilter`

                    `suffix` [`FileSuffix`](https://dev.nominal.io/api/rest/native-extractor-service.md#filesuffix)
                    :   ​

                        Fields of `FileSuffix`

                        `suffix` string
                        :   ​

                `required` boolean
                :   Whether the input file is required for the extractor to run.

            `parameters` array of [`FileExtractionParameter`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileextractionparameter)
            :   Parameters the extractor accepts.

                Fields of `FileExtractionParameter`

                `environmentVariable` string
                :   The environment variable that stores the argument.

                `name` string
                :   Name of the parameter which users will be prompted with.

                `description` string
                :   Description of the parameter which users will be prompted with.

                `required` boolean
                :   Whether the parameter is required for the extractor to run.

            `fileOutputFormat` [`FileOutputFormat`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileoutputformat)
            :   Format of the output file produced by the extractor.

                Values of `FileOutputFormat`

                `FILE_OUTPUT_FORMAT_UNSPECIFIED`
                :   ​

                `FILE_OUTPUT_FORMAT_PARQUET`
                :   ​

                `FILE_OUTPUT_FORMAT_CSV`
                :   ​

                `FILE_OUTPUT_FORMAT_PARQUET_TAR`
                :   ​

                `FILE_OUTPUT_FORMAT_AVRO_STREAM`
                :   ​

                `FILE_OUTPUT_FORMAT_JSON_L`
                :   ​

                `FILE_OUTPUT_FORMAT_MANIFEST`
                :   ​

            `defaultTimestampMetadata` [`registry.v2.TimestampMetadata`](https://dev.nominal.io/api/rest/native-extractor-service.md#registry-v2-timestampmetadata)
            :   Metadata about the intermediate parquet this extractor will produce. If not set, timestamp metadata must be provided at ingest time.

                Fields of `registry.v2.TimestampMetadata`

                `seriesName` string
                :   Name of the series within the output whose values are used as the row timestamp.

                `timestampType` [`TimestampType`](https://dev.nominal.io/api/rest/native-extractor-service.md#timestamptype)
                :   How the values in `series_name` should be interpreted as timestamps.

                    Fields of `TimestampType`

                    one of `relative`, `absolute`
                    :   ​

                        **relative**

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

                            Fields of `RelativeTimestamp`

                            `timeUnit` string
                            :   Unit in which relative offsets are expressed. Aliases the classic REST TimeUnit alias.

                            `offset` string (date-time)
                            :   Starting timestamp to use when indexing the file.

                        **absolute**

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

                            Fields of `AbsoluteTimestamp`

                            one of `iso8601`, `epochOfTimeUnit`, `customFormat`
                            :   ​

                                **iso8601**

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

                                **epochOfTimeUnit**

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

                                    Fields of `EpochTimestamp`

                                    `timeUnit` string

Request

**curl**

```shell
curl "https://api.gov.nominal.io/api/extractors/v2/native?workspaceRid=<workspace rid>&pageSize=1" \
  -H "Authorization: Bearer <api key>"
```

**requests**

```python
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/extractors/v2/native?workspaceRid=<workspace rid>&pageSize=1",
    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/extractors/v2/native?workspaceRid=<workspace rid>&pageSize=1",
    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/extractors/v2/native?workspaceRid=<workspace rid>&pageSize=1",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "extractors": [
    {
      "catalogId": "<catalog id>",
      "availableVersions": [
        "<available versions>"
      ],
      "installation": {
        "rid": "<rid>",
        "workspaceRid": "<workspace rid>",
        "name": "<name>",
        "description": "<description>",
        "createdAt": "2026-01-01T00:00:00Z",
        "isArchived": true,
        "activeContainerImage": {
          "rid": "<rid>",
          "tag": "<tag>",
          "sizeBytes": "1",
          "status": "CONTAINER_IMAGE_STATUS_PENDING",
          "createdAt": "2026-01-01T00:00:00Z",
          "extractorRid": "<extractor rid>",
          "inputs": [
            {
              "environmentVariable": "<environment variable>",
              "name": "<name>",
              "description": "<description>",
              "fileFilters": [
                {
                  "suffix": {
                    "suffix": "<suffix>"
                  }
                }
              ],
              "required": true
            }
          ],
          "parameters": [
            {
              "environmentVariable": "<environment variable>",
              "name": "<name>",
              "description": "<description>",
              "required": true
            }
          ],
          "fileOutputFormat": "FILE_OUTPUT_FORMAT_PARQUET",
          "defaultTimestampMetadata": {
            "seriesName": "<series name>",
            "timestampType": {
              "relative": {
                "timeUnit": "<time unit>",
                "offset": "2026-01-01T00:00:00Z"
              }
            }
          },
          "exitCodeMappings": [
            {
              "exitCode": 1,
              "code": "<code>",
              "message": "<message>",
              "retryable": true
            }
          ],
          "resources": {
            "cpuCores": 1,
            "memoryGib": 1,
            "diskGib": 1
          }
        },
        "origin": "EXTRACTOR_ORIGIN_CUSTOMER",
        "catalogId": "<catalog id>",
        "properties": {
          "<key>": "<value>"
        },
        "labels": [
          "<labels>"
        ]
      },
      "desiredVersion": "<desired version>",
      "displayName": "<display name>",
      "description": "<description>"
    }
  ],
  "nextPageToken": "<next page token>"
}
```

### Disable native extractor

POST `/extractors/v2/native/{catalogId}/disable`

Archives the workspace’s extractor, which is the installation; re-enabling unarchives it.

Path parameters

`catalogId` string required
:   ​

Body

`workspaceRid` string required
:   ​

Response

An empty JSON object, `{}`.

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/extractors/v2/native/<catalog id>/disable" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "workspaceRid": "<workspace rid>"
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/extractors/v2/native/<catalog id>/disable",
    headers={"Authorization": "Bearer <api key>"},
    json={"workspaceRid": "<workspace rid>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/extractors/v2/native/<catalog id>/disable",
    headers={"Authorization": "Bearer <api key>"},
    json={"workspaceRid": "<workspace 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/extractors/v2/native/<catalog id>/disable",
            headers={"Authorization": "Bearer <api key>"},
            json={"workspaceRid": "<workspace rid>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{}
```

### Enable native extractor

POST `/extractors/v2/native/{catalogId}/enable`

Enables a catalog entry in a workspace and converges it to the deployment’s current desired version, materializing the workspace-local extractor and importing its container image. Idempotent: calling it on an already-enabled entry re-converges to the current desired version (this is also how a stale installation picks up a newly published version).

Path parameters

`catalogId` string required
:   ​

Body

`workspaceRid` string required
:   ​

Response

`extractor` [`NativeExtractor`](https://dev.nominal.io/api/rest/native-extractor-service.md#nativeextractor)
:   ​

    Fields of `NativeExtractor`

    `catalogId` string
    :   Stable catalog identifier, e.g. “ardupilot-dataflash”.

    `availableVersions` array of string
    :   Versions the deployment’s catalog currently carries, ascending.

    `installation` [`ContainerizedExtractor`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerizedextractor)
    :   The workspace-local extractor materialized for this entry, set when enabled. Ingest requests target it exactly like a customer-authored extractor, and the catalog version it is installed at is its active image’s tag.

        Fields of `ContainerizedExtractor`

        `rid` string
        :   Unique resource identifier for this extractor.

        `workspaceRid` string
        :   Workspace that owns this extractor.

        `name` string
        :   User-supplied name. Need not be unique within a workspace.

        `description` string
        :   Free-form description shown in the UI.

        `createdAt` string (date-time)
        :   Timestamp at which this extractor was first registered.

        `isArchived` boolean
        :   True once the extractor has been archived. Archived extractors are hidden from default search results and reject new ingests; flip back to false on UpdateContainerizedExtractor to restore.

        `activeContainerImage` [`ContainerImage`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerimage)
        :   The container image currently selected to run this extractor. Unset until the first image for this extractor reaches READY status; ingest requests that arrive before then will fail. The schema fields (inputs, parameters, output_file_format, default_timestamp_metadata) live on this nested image.

            Fields of `ContainerImage`

            `rid` string
            :   ​

            `tag` string
            :   User-supplied tag, unique within (workspace, extractor).

            `sizeBytes` string (int64)
            :   Size of the stored image in bytes once the image reaches READY.

            `status` [`ContainerImageStatus`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerimagestatus)
            :   Current lifecycle status (PENDING while pushing, READY after a successful push, FAILED otherwise).

                Values of `ContainerImageStatus`

                `CONTAINER_IMAGE_STATUS_UNSPECIFIED`
                :   ​

                `CONTAINER_IMAGE_STATUS_PENDING`
                :   ​

                `CONTAINER_IMAGE_STATUS_READY`
                :   ​

                `CONTAINER_IMAGE_STATUS_FAILED`
                :   ​

            `createdAt` string (date-time)
            :   When the image record was created.

            `extractorRid` string
            :   The containerized extractor this image is built for.

            `inputs` array of [`FileExtractionInput`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileextractioninput)
            :   The input files this extractor requires, mapped to environment variables that store the path to each file.

                Fields of `FileExtractionInput`

                `environmentVariable` string
                :   The environment variable that stores the path to the input file.

                `name` string
                :   Name of the input file which users will be prompted with.

                `description` string
                :   Description of the input file which users will be prompted with.

                `fileFilters` array of [`FileFilter`](https://dev.nominal.io/api/rest/native-extractor-service.md#filefilter)
                :   Optionally filter files for file selection.

                    Fields of `FileFilter`

                    `suffix` [`FileSuffix`](https://dev.nominal.io/api/rest/native-extractor-service.md#filesuffix)
                    :   ​

                        Fields of `FileSuffix`

                        `suffix` string
                        :   ​

                `required` boolean
                :   Whether the input file is required for the extractor to run.

            `parameters` array of [`FileExtractionParameter`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileextractionparameter)
            :   Parameters the extractor accepts.

                Fields of `FileExtractionParameter`

                `environmentVariable` string
                :   The environment variable that stores the argument.

                `name` string
                :   Name of the parameter which users will be prompted with.

                `description` string
                :   Description of the parameter which users will be prompted with.

                `required` boolean
                :   Whether the parameter is required for the extractor to run.

            `fileOutputFormat` [`FileOutputFormat`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileoutputformat)
            :   Format of the output file produced by the extractor.

                Values of `FileOutputFormat`

                `FILE_OUTPUT_FORMAT_UNSPECIFIED`
                :   ​

                `FILE_OUTPUT_FORMAT_PARQUET`
                :   ​

                `FILE_OUTPUT_FORMAT_CSV`
                :   ​

                `FILE_OUTPUT_FORMAT_PARQUET_TAR`
                :   ​

                `FILE_OUTPUT_FORMAT_AVRO_STREAM`
                :   ​

                `FILE_OUTPUT_FORMAT_JSON_L`
                :   ​

                `FILE_OUTPUT_FORMAT_MANIFEST`
                :   ​

            `defaultTimestampMetadata` [`registry.v2.TimestampMetadata`](https://dev.nominal.io/api/rest/native-extractor-service.md#registry-v2-timestampmetadata)
            :   Metadata about the intermediate parquet this extractor will produce. If not set, timestamp metadata must be provided at ingest time.

                Fields of `registry.v2.TimestampMetadata`

                `seriesName` string
                :   Name of the series within the output whose values are used as the row timestamp.

                `timestampType` [`TimestampType`](https://dev.nominal.io/api/rest/native-extractor-service.md#timestamptype)
                :   How the values in `series_name` should be interpreted as timestamps.

                    Fields of `TimestampType`

                    one of `relative`, `absolute`
                    :   ​

                        **relative**

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

                            Fields of `RelativeTimestamp`

                            `timeUnit` string
                            :   Unit in which relative offsets are expressed. Aliases the classic REST TimeUnit alias.

                            `offset` string (date-time)
                            :   Starting timestamp to use when indexing the file.

                        **absolute**

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

                            Fields of `AbsoluteTimestamp`

                            one of `iso8601`, `epochOfTimeUnit`, `customFormat`
                            :   ​

                                **iso8601**

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

                                **epochOfTimeUnit**

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

                                    Fields of `EpochTimestamp`

                                    `timeUnit` string

Request

**curl**

```shell
curl -X POST "https://api.gov.nominal.io/api/extractors/v2/native/<catalog id>/enable" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "workspaceRid": "<workspace rid>"
}'
```

**requests**

```python
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/extractors/v2/native/<catalog id>/enable",
    headers={"Authorization": "Bearer <api key>"},
    json={"workspaceRid": "<workspace rid>"},
)
response.raise_for_status()
print(response.json())
```

**httpx**

```python
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/extractors/v2/native/<catalog id>/enable",
    headers={"Authorization": "Bearer <api key>"},
    json={"workspaceRid": "<workspace 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/extractors/v2/native/<catalog id>/enable",
            headers={"Authorization": "Bearer <api key>"},
            json={"workspaceRid": "<workspace rid>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())

asyncio.run(main())
```

Response: `200`

```json
{
  "extractor": {
    "catalogId": "<catalog id>",
    "availableVersions": [
      "<available versions>"
    ],
    "installation": {
      "rid": "<rid>",
      "workspaceRid": "<workspace rid>",
      "name": "<name>",
      "description": "<description>",
      "createdAt": "2026-01-01T00:00:00Z",
      "isArchived": true,
      "activeContainerImage": {
        "rid": "<rid>",
        "tag": "<tag>",
        "sizeBytes": "1",
        "status": "CONTAINER_IMAGE_STATUS_PENDING",
        "createdAt": "2026-01-01T00:00:00Z",
        "extractorRid": "<extractor rid>",
        "inputs": [
          {
            "environmentVariable": "<environment variable>",
            "name": "<name>",
            "description": "<description>",
            "fileFilters": [
              {
                "suffix": {
                  "suffix": "<suffix>"
                }
              }
            ],
            "required": true
          }
        ],
        "parameters": [
          {
            "environmentVariable": "<environment variable>",
            "name": "<name>",
            "description": "<description>",
            "required": true
          }
        ],
        "fileOutputFormat": "FILE_OUTPUT_FORMAT_PARQUET",
        "defaultTimestampMetadata": {
          "seriesName": "<series name>",
          "timestampType": {
            "relative": {
              "timeUnit": "<time unit>",
              "offset": "2026-01-01T00:00:00Z"
            }
          }
        },
        "exitCodeMappings": [
          {
            "exitCode": 1,
            "code": "<code>",
            "message": "<message>",
            "retryable": true
          }
        ],
        "resources": {
          "cpuCores": 1,
          "memoryGib": 1,
          "diskGib": 1
        }
      },
      "origin": "EXTRACTOR_ORIGIN_CUSTOMER",
      "catalogId": "<catalog id>",
      "properties": {
        "<key>": "<value>"
      },
      "labels": [
        "<labels>"
      ]
    },
    "desiredVersion": "<desired version>",
    "displayName": "<display name>",
    "description": "<description>"
  }
}
```

## Types

### AbsoluteTimestamp

Absolute timestamp parser variants.

Set exactly one of the fields below.

one of `iso8601`, `epochOfTimeUnit`, `customFormat` required
:   ​

    **iso8601**

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

    **epochOfTimeUnit**

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

    **customFormat**

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

### ContainerImage

Container image registered through the V2 (extractor-linked) registry flow. V2 images carry no user-supplied `name` — extractor identity replaces it as the stable handle.

`rid` string required
:   ​

`tag` string
:   User-supplied tag, unique within (workspace, extractor).

`sizeBytes` string (int64)
:   Size of the stored image in bytes once the image reaches READY.

`status` [`ContainerImageStatus`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerimagestatus)
:   Current lifecycle status (PENDING while pushing, READY after a successful push, FAILED otherwise).

`createdAt` string (date-time)
:   When the image record was created.

`extractorRid` string
:   The containerized extractor this image is built for.

`inputs` array of [`FileExtractionInput`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileextractioninput)
:   The input files this extractor requires, mapped to environment variables that store the path to each file.

`parameters` array of [`FileExtractionParameter`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileextractionparameter)
:   Parameters the extractor accepts.

`fileOutputFormat` [`FileOutputFormat`](https://dev.nominal.io/api/rest/native-extractor-service.md#fileoutputformat)
:   Format of the output file produced by the extractor.

`defaultTimestampMetadata` [`registry.v2.TimestampMetadata`](https://dev.nominal.io/api/rest/native-extractor-service.md#registry-v2-timestampmetadata)
:   Metadata about the intermediate parquet this extractor will produce. If not set, timestamp metadata must be provided at ingest time.

`exitCodeMappings` array of [`ExitCodeMapping`](https://dev.nominal.io/api/rest/native-extractor-service.md#exitcodemapping)
:   Fallback exit-code-to-error mappings for extractors that cannot emit a structured /dev/termination-log document.

`resources` [`ContainerResources`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerresources)
:   Compute resources this image’s extractor container runs with. Unset fields fall back to the deployment-wide defaults.

### ContainerImageStatus

`CONTAINER_IMAGE_STATUS_UNSPECIFIED`
:   ​

`CONTAINER_IMAGE_STATUS_PENDING`
:   ​

`CONTAINER_IMAGE_STATUS_READY`
:   ​

`CONTAINER_IMAGE_STATUS_FAILED`
:   ​

### ContainerizedExtractor

A containerized extractor that processes input files using a self-hosted container image.

Schema fields (inputs, parameters, output format, timestamp metadata) live on the underlying ContainerImage rows; clients should read them off `active_container_image`. The extractor itself carries only identity, workspace ownership, user metadata (labels/properties), and lifecycle state.

`rid` string required
:   Unique resource identifier for this extractor.

`workspaceRid` string required
:   Workspace that owns this extractor.

`name` string
:   User-supplied name. Need not be unique within a workspace.

`description` string
:   Free-form description shown in the UI.

`createdAt` string (date-time)
:   Timestamp at which this extractor was first registered.

`isArchived` boolean
:   True once the extractor has been archived. Archived extractors are hidden from default search results and reject new ingests; flip back to false on UpdateContainerizedExtractor to restore.

`activeContainerImage` [`ContainerImage`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerimage)
:   The container image currently selected to run this extractor. Unset until the first image for this extractor reaches READY status; ingest requests that arrive before then will fail. The schema fields (inputs, parameters, output_file_format, default_timestamp_metadata) live on this nested image.

`origin` [`ExtractorOrigin`](https://dev.nominal.io/api/rest/native-extractor-service.md#extractororigin)
:   Provenance: CUSTOMER for workspace-authored extractors (the default), FIRST_PARTY for Nominal-published extractors installed from the catalog. Read-only: native-extractor rows are created and upgraded by catalog reconciliation, never through the public write APIs.

`catalogId` string
:   Stable catalog identifier (e.g. “ardupilot-dataflash”). Set only when origin is FIRST_PARTY. The version currently active is carried by the installation record and by the active container image’s tag, not duplicated here.

`properties` map of string to string
:   Free-form name/value pairs associated with this extractor. At most 64 pairs; names are 1-255 chars and values are up to 1024 chars. At most 64 entries.

`labels` array of string
:   Labels applied to this extractor, filterable through SearchContainerizedExtractors. At most 64 labels of 1-255 chars each. At most 64 items. Each item: 1 to 255 characters.

### ContainerResources

Compute resources granted to the container this image runs. Every field is optional; an unset field falls back to the deployment-wide default configured on combined-service. The upper bounds are a platform ceiling, not a guarantee the cluster can satisfy the request — an unschedulable pod fails the ingest with EXTRACTOR_UNSCHEDULABLE. RegistryService re-checks them server-side, because the first-party catalog flow calls CreateImage in-process and never reaches protovalidate.

`cpuCores` integer (int64)
:   CPU cores requested for the container. From 1 to 32.

`memoryGib` integer (int64)
:   Memory in GiB, applied as both the request and the limit. From 1 to 128.

`diskGib` integer (int64)
:   Size in GiB of each of the ephemeral input and output volumes. From 1 to 512.

### CustomTimestamp

Absolute timestamps parsed with a user-supplied format string.

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

`defaultYear` integer
:   Default year is accepted as an optional field for cases like IRIG time format. Will be overridden by year in time format.

`defaultDayOfYear` integer
:   Default day of year is accepted as an optional field for cases like IRIG time format. Will be overridden by day of year in time format. From 1 to 366.

### EpochTimestamp

Absolute timestamps expressed as an integer count of some time unit since the Unix epoch.

`timeUnit` string
:   Unit in which epoch values are expressed (e.g. SECONDS, MILLISECONDS).

### ExitCodeMapping

Maps a container exit code to a structured error, for extractors that cannot emit a structured /dev/termination-log document. Applied as a fallback error tier at ingest time.

`exitCode` integer
:   The container process exit code this mapping applies to.

`code` string required
:   Machine-readable error code. Extractor-defined codes must fall outside the reserved platform namespace.

`message` string required
:   Human-readable error message.

`retryable` boolean
:   Whether the platform may retry the ingest for this failure.

### ExtractorOrigin

Provenance of a containerized extractor: authored by a customer workspace, or published by Nominal through the native extractor catalog and materialized into the workspace by catalog reconciliation.

`EXTRACTOR_ORIGIN_UNSPECIFIED`
:   ​

`EXTRACTOR_ORIGIN_CUSTOMER`
:   ​

`EXTRACTOR_ORIGIN_FIRST_PARTY`
:   ​

### FileExtractionInput

Defines an input file to be provided to the extractor.

`environmentVariable` string required
:   The environment variable that stores the path to the input file.

`name` string required
:   Name of the input file which users will be prompted with.

`description` string
:   Description of the input file which users will be prompted with.

`fileFilters` array of [`FileFilter`](https://dev.nominal.io/api/rest/native-extractor-service.md#filefilter)
:   Optionally filter files for file selection.

`required` boolean
:   Whether the input file is required for the extractor to run.

### FileExtractionParameter

Defines an input parameter to be provided to the extractor.

`environmentVariable` string required
:   The environment variable that stores the argument.

`name` string required
:   Name of the parameter which users will be prompted with.

`description` string
:   Description of the parameter which users will be prompted with.

`required` boolean
:   Whether the parameter is required for the extractor to run.

### FileFilter

Optional filter applied during file selection for a file input.

`suffix` [`FileSuffix`](https://dev.nominal.io/api/rest/native-extractor-service.md#filesuffix)
:   ​

### FileOutputFormat

Output file format emitted by the extractor. Currently PARQUET, CSV, and PARQUET_TAR are the primary supported formats.

`FILE_OUTPUT_FORMAT_UNSPECIFIED`
:   ​

`FILE_OUTPUT_FORMAT_PARQUET`
:   ​

`FILE_OUTPUT_FORMAT_CSV`
:   ​

`FILE_OUTPUT_FORMAT_PARQUET_TAR`
:   ​

`FILE_OUTPUT_FORMAT_AVRO_STREAM`
:   ​

`FILE_OUTPUT_FORMAT_JSON_L`
:   ​

`FILE_OUTPUT_FORMAT_MANIFEST`
:   ​

### FileSuffix

The expected suffix of the file. For example, “parquet”, “json”, “csv”, etc.

`suffix` string required
:   ​

### Iso8601Timestamp

Absolute timestamps serialized in ISO-8601 form. No additional parser configuration is needed.

An empty JSON object, `{}`.

### NativeExtractor

One catalog entry as seen from a workspace: what the deployment carries, plus this workspace’s installation of it (if enabled).

`catalogId` string
:   Stable catalog identifier, e.g. “ardupilot-dataflash”.

`availableVersions` array of string
:   Versions the deployment’s catalog currently carries, ascending.

`installation` [`ContainerizedExtractor`](https://dev.nominal.io/api/rest/native-extractor-service.md#containerizedextractor)
:   The workspace-local extractor materialized for this entry, set when enabled. Ingest requests target it exactly like a customer-authored extractor, and the catalog version it is installed at is its active image’s tag.

`desiredVersion` string
:   The single version every workspace on this deployment converges to for this catalog entry. Enable always targets this version; there is no per-workspace pin. Unset only if the deployment has not yet synced this catalog entry.

`displayName` string
:   Human-readable name from the manifest of the desired version — or of the newest available version when none is desired yet — e.g. “ArduPilot DataFlash”. Enable gives the installation this same name, so an entry in the catalog and the extractor it installs read alike. Falls back to catalog_id when the mirrored manifest cannot be parsed.

`description` string
:   Free-form summary from that same manifest, when it declares one.

### registry.v2.TimestampMetadata

Describes how to derive a row timestamp from the extracted output.

`seriesName` string required
:   Name of the series within the output whose values are used as the row timestamp.

`timestampType` [`TimestampType`](https://dev.nominal.io/api/rest/native-extractor-service.md#timestamptype) required
:   How the values in `series_name` should be interpreted as timestamps.

### RelativeTimestamp

Relative timestamp parser: interprets each row’s timestamp as an offset from a fixed origin.

`timeUnit` string
:   Unit in which relative offsets are expressed. Aliases the classic REST TimeUnit alias.

`offset` string (date-time)
:   Starting timestamp to use when indexing the file.

### TimestampType

Selects between relative-offset and absolute-timestamp parsing strategies.

Set exactly one of the fields below.

one of `relative`, `absolute` required
:   ​

    **relative**

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

    **absolute**

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

Page design based on [Scalar](https://scalar.com), MIT License.
