Ingest job service#

Public API for querying ingest jobs.

OpenAPI file: IngestJobService.json

Endpoints#

Get ingest job#

GET /ingest/v1/ingest-job/{ingestJobRid}

Returns a single ingest job by RID. Does not include the full ingest request details.

Path parameters

ingestJobRid string (RID) required

​

Response

ingestJobRid string (RID)

​

status IngestJobStatus

​

Values of IngestJobStatus
SUBMITTED

​

QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

CANCELLED

​

DELETION_IN_PROGRESS

​

DELETED

​

originFiles array of string

​

createdBy string (UUID) deprecated

Deprecated: use createdByRid instead

createdByRid string (RID)

​

orgUuid string (UUID)

​

ingestType IngestType

​

Values of IngestType
TABULAR

​

MCAP

​

DATAFLASH

​

JOURNAL_JSON

​

CONTAINERIZED

​

VIDEO

​

AVRO_STREAM

​

POINT_CLOUD

​

MULTI

​

datasetRid string (RID)

​

createdAt string (date-time)

​

startTime string (date-time)

The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).

endTime string (date-time)

​

producedFileCount integer

Count of dataset files produced by this ingest job.

Request

curl "https://api.gov.nominal.io/api/ingest/v1/ingest-job/<ingest job rid>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-job/<ingest job rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-job/<ingest job rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/ingest/v1/ingest-job/<ingest job rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "ingestJobRid": "<ingest job rid>",
  "status": "SUBMITTED",
  "originFiles": [
    "<origin files>"
  ],
  "createdBy": "<created by>",
  "createdByRid": "<user rid>",
  "orgUuid": "<org uuid>",
  "ingestType": "TABULAR",
  "datasetRid": "<dataset rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "startTime": "2026-01-01T00:00:00Z",
  "endTime": "2026-01-01T00:00:00Z",
  "producedFileCount": 1
}

Get ingest transform#

GET /ingest/v1/ingest-transform/{ingestTransformRid}

Returns a single ingest transform by RID. The caller must be authorized to read the dataset produced by the transform’s parent ingest job; a transform whose parent job is not visible to the caller is reported as IngestTransformNotFound rather than leaking its existence.

Path parameters

ingestTransformRid string (RID) required

​

Response

ingestTransformRid string (RID)

​

ingestJobRid string (RID)

The ingest job this transform belongs to.

transformType IngestTransformType

​

Values of IngestTransformType
CONTAINERIZED

​

MCAP

​

DATAFLASH

​

PARQUET_ARCHIVE

​

FILE_COPY

​

status IngestTransformStatus

​

Values of IngestTransformStatus
QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

createdAt string (date-time)

​

updatedAt string (date-time)

​

errorMessage string

The failure detail recorded when the transform terminated. Present only for FAILED transforms. May contain customer-derived content and is therefore not safe to log.

finishedAt string (date-time)

The time the transform reached a terminal status (COMPLETED or FAILED). Absent while the transform is still QUEUED or IN_PROGRESS.

extractorRid string (RID)

The containerized extractor running this transform. Present only for CONTAINERIZED transforms.

sourcePaths array of string

Locators of the transform’s input file(s): S3/GCS paths, presigned URLs (query string stripped so no signing credentials are carried), or File Store file-revision rids. CONTAINERIZED transforms may have several inputs, ordered by the container environment variable they bind to; other types have exactly one. Empty when this server version cannot interpret the stored payload. May contain customer-derived content and is therefore not safe to log.

Request

curl "https://api.gov.nominal.io/api/ingest/v1/ingest-transform/<ingest transform rid>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-transform/<ingest transform rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-transform/<ingest transform rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/ingest/v1/ingest-transform/<ingest transform rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "ingestTransformRid": "<ingest transform rid>",
  "ingestJobRid": "<ingest job rid>",
  "transformType": "CONTAINERIZED",
  "status": "QUEUED",
  "createdAt": "2026-01-01T00:00:00Z",
  "updatedAt": "2026-01-01T00:00:00Z",
  "errorMessage": "<error message>",
  "finishedAt": "2026-01-01T00:00:00Z",
  "extractorRid": "<containerized extractor rid>",
  "sourcePaths": [
    "<source paths>"
  ]
}

Get ingest transform origin file uris#

GET /ingest/v1/ingest-transform/{ingestTransformRid}/origin-uris

Returns pre-signed download URIs for a transform’s input file(s), keyed on the transform rather than on a produced dataset file, so the inputs of a transform that produced no file — one that is still running, or that failed — remain downloadable. Counterpart to the catalog’s getOriginFileUris, which requires a dataset file to key on.

The caller must be authorized to read data on the parent ingest job’s dataset; a transform whose parent job is not visible to the caller is reported as IngestTransformNotFound.

Only inputs residing in object storage this deployment can sign for are returned, so the result may be shorter than sourcePaths on the same transform: an input still awaiting its copy into the uploads bucket (a GCS object, a caller-supplied presigned URL, or a File Store revision) has no signable location yet and is omitted. An unrecognized stored payload yields an empty list.

Path parameters

ingestTransformRid string (RID) required

​

Response

The body is an array of OriginFileUri.

Fields of OriginFileUri
uri string

​

path string

​

Request

curl "https://api.gov.nominal.io/api/ingest/v1/ingest-transform/<ingest transform rid>/origin-uris" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-transform/<ingest transform rid>/origin-uris",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-transform/<ingest transform rid>/origin-uris",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/ingest/v1/ingest-transform/<ingest transform rid>/origin-uris",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

[
  {
    "uri": "<uri>",
    "path": "<path>"
  }
]

Search ingest transforms#

POST /ingest/v1/ingest-transforms/search

Returns a paginated list of the transforms belonging to a single ingest job, oldest-first and optionally filtered by status. The caller must be authorized to read the parent job’s dataset; a job that is not visible to the caller is reported as IngestJobNotFound.

Body

ingestJobRid string (RID) required

The ingest job whose transforms to list.

statuses array of IngestTransformStatus

When present and non-empty, only transforms in one of these statuses are returned. Omit, or pass an empty list, to return transforms in any status.

Values of IngestTransformStatus
QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

pageSize integer

Defaults to 100. Clamped to 1_000 if larger, and to 1 if non-positive.

nextPageToken string

​

Response

ingestTransforms array of IngestTransform

​

Fields of IngestTransform
ingestTransformRid string (RID)

​

ingestJobRid string (RID)

The ingest job this transform belongs to.

transformType IngestTransformType

​

Values of IngestTransformType
CONTAINERIZED

​

MCAP

​

DATAFLASH

​

PARQUET_ARCHIVE

​

FILE_COPY

​

status IngestTransformStatus

​

Values of IngestTransformStatus
QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

createdAt string (date-time)

​

updatedAt string (date-time)

​

errorMessage string

The failure detail recorded when the transform terminated. Present only for FAILED transforms. May contain customer-derived content and is therefore not safe to log.

finishedAt string (date-time)

The time the transform reached a terminal status (COMPLETED or FAILED). Absent while the transform is still QUEUED or IN_PROGRESS.

extractorRid string (RID)

The containerized extractor running this transform. Present only for CONTAINERIZED transforms.

sourcePaths array of string

Locators of the transform’s input file(s): S3/GCS paths, presigned URLs (query string stripped so no signing credentials are carried), or File Store file-revision rids. CONTAINERIZED transforms may have several inputs, ordered by the container environment variable they bind to; other types have exactly one. Empty when this server version cannot interpret the stored payload. May contain customer-derived content and is therefore not safe to log.

nextPageToken string

​

Request

curl -X POST "https://api.gov.nominal.io/api/ingest/v1/ingest-transforms/search" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "ingestJobRid": "<ingest job rid>"
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-transforms/search",
    headers={"Authorization": "Bearer <api key>"},
    json={"ingestJobRid": "<ingest job rid>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-transforms/search",
    headers={"Authorization": "Bearer <api key>"},
    json={"ingestJobRid": "<ingest job rid>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/ingest/v1/ingest-transforms/search",
            headers={"Authorization": "Bearer <api key>"},
            json={"ingestJobRid": "<ingest job rid>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "ingestTransforms": [
    {
      "ingestTransformRid": "<ingest transform rid>",
      "ingestJobRid": "<ingest job rid>",
      "transformType": "CONTAINERIZED",
      "status": "QUEUED",
      "createdAt": "2026-01-01T00:00:00Z",
      "updatedAt": "2026-01-01T00:00:00Z",
      "errorMessage": "<error message>",
      "finishedAt": "2026-01-01T00:00:00Z",
      "extractorRid": "<containerized extractor rid>",
      "sourcePaths": [
        "<source paths>"
      ]
    }
  ],
  "nextPageToken": "<token>"
}

Search ingest jobs#

POST /ingest/v1/ingest-jobs/search

Returns a paginated list of ingest jobs, optionally filtered by dataset.

Body

pageSize integer

Defaults to 100. Clamped to 1_000 if larger, and to 1 if non-positive.

nextPageToken string

​

filter IngestJobSearchFilter

​

Set type to "datasetRids".

datasetRids array of string (RID)

​

Set type to "createdByRids".

createdByRids array of string (RID)

​

Set type to "statuses".

statuses array of IngestJobStatus

​

Values of IngestJobStatus
SUBMITTED

​

QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

CANCELLED

​

DELETION_IN_PROGRESS

​

DELETED

​

Set type to "searchText".

searchText string

Case-insensitive substring match against any origin file path.

Set type to "startTimeRange".

startTimeRange IngestJobStartTimeRange

​

Fields of IngestJobStartTimeRange
startTimeAfter string (date-time)

​

startTimeBefore string (date-time)

​

Set type to "and".

and array of IngestJobSearchFilter

​

Set type to "or".

or array of IngestJobSearchFilter

​

Set type to "not".

not IngestJobSearchFilter

​

Set type to "workspace".

workspace string (RID)

​

Set type to "triggeringIngestRuleRids".

triggeringIngestRuleRids array of string (RID)

Matches jobs any of these File Store ingest rules triggered. At most 100 rids.

sort IngestJobSortOptions

Defaults to most recent created_at first when omitted.

Fields of IngestJobSortOptions
isDescending boolean required

​

sortKey IngestJobSortKey required

​

Values of IngestJobSortKey
CREATED_AT

​

STATUS

​

Response

ingestJobs array of IngestJob

​

Fields of IngestJob
ingestJobRid string (RID)

​

status IngestJobStatus

​

Values of IngestJobStatus
SUBMITTED

​

QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

CANCELLED

​

DELETION_IN_PROGRESS

​

DELETED

​

originFiles array of string

​

createdBy string (UUID) deprecated

Deprecated: use createdByRid instead

createdByRid string (RID)

​

orgUuid string (UUID)

​

ingestType IngestType

​

Values of IngestType
TABULAR

​

MCAP

​

DATAFLASH

​

JOURNAL_JSON

​

CONTAINERIZED

​

VIDEO

​

AVRO_STREAM

​

POINT_CLOUD

​

MULTI

​

datasetRid string (RID)

​

createdAt string (date-time)

​

startTime string (date-time)

The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).

endTime string (date-time)

​

producedFileCount integer

Count of dataset files produced by this ingest job.

nextPageToken string

​

Request

curl -X POST "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/search" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "pageSize": 1,
  "nextPageToken": "<token>",
  "filter": {
    "type": "datasetRids",
    "datasetRids": [
      "<dataset rid>"
    ]
  },
  "sort": {
    "isDescending": true,
    "sortKey": "CREATED_AT"
  }
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/search",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "pageSize": 1,
        "nextPageToken": "<token>",
        "filter": {"type": "datasetRids", "datasetRids": ["<dataset rid>"]},
        "sort": {"isDescending": True, "sortKey": "CREATED_AT"},
    },
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/search",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "pageSize": 1,
        "nextPageToken": "<token>",
        "filter": {"type": "datasetRids", "datasetRids": ["<dataset rid>"]},
        "sort": {"isDescending": True, "sortKey": "CREATED_AT"},
    },
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/search",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "pageSize": 1,
                "nextPageToken": "<token>",
                "filter": {"type": "datasetRids", "datasetRids": ["<dataset rid>"]},
                "sort": {"isDescending": True, "sortKey": "CREATED_AT"},
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "ingestJobs": [
    {
      "ingestJobRid": "<ingest job rid>",
      "status": "SUBMITTED",
      "originFiles": [
        "<origin files>"
      ],
      "createdBy": "<created by>",
      "createdByRid": "<user rid>",
      "orgUuid": "<org uuid>",
      "ingestType": "TABULAR",
      "datasetRid": "<dataset rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "startTime": "2026-01-01T00:00:00Z",
      "endTime": "2026-01-01T00:00:00Z",
      "producedFileCount": 1
    }
  ],
  "nextPageToken": "<token>"
}

Count ingest jobs#

POST /ingest/v1/ingest-jobs/count

Returns the number of ingest jobs matching the filter, applying the same visibility rules as searchIngestJobs: jobs without a persisted dataset are excluded, and only jobs whose dataset the caller is authorized to read are counted. Intended for cheap polling (e.g. an active-job indicator) instead of paginating searchIngestJobs just to count results. Throws INVALID_ARGUMENT when the filter matches jobs across more distinct datasets than can be authorized in one request; narrow the filter in that case.

Body

filter IngestJobSearchFilter

Matches all jobs when omitted. Prefer a filter that bounds the result, such as non-terminal statuses.

Set type to "datasetRids".

datasetRids array of string (RID)

​

Set type to "createdByRids".

createdByRids array of string (RID)

​

Set type to "statuses".

statuses array of IngestJobStatus

​

Values of IngestJobStatus
SUBMITTED

​

QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

CANCELLED

​

DELETION_IN_PROGRESS

​

DELETED

​

Set type to "searchText".

searchText string

Case-insensitive substring match against any origin file path.

Set type to "startTimeRange".

startTimeRange IngestJobStartTimeRange

​

Fields of IngestJobStartTimeRange
startTimeAfter string (date-time)

​

startTimeBefore string (date-time)

​

Set type to "and".

and array of IngestJobSearchFilter

​

Set type to "or".

or array of IngestJobSearchFilter

​

Set type to "not".

not IngestJobSearchFilter

​

Set type to "workspace".

workspace string (RID)

​

Set type to "triggeringIngestRuleRids".

triggeringIngestRuleRids array of string (RID)

Matches jobs any of these File Store ingest rules triggered. At most 100 rids.

Response

count integer (int64)

The exact number of matching ingest jobs visible to the caller.

Request

curl -X POST "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/count" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "filter": {
    "type": "datasetRids",
    "datasetRids": [
      "<dataset rid>"
    ]
  }
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/count",
    headers={"Authorization": "Bearer <api key>"},
    json={"filter": {"type": "datasetRids", "datasetRids": ["<dataset rid>"]}},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/count",
    headers={"Authorization": "Bearer <api key>"},
    json={"filter": {"type": "datasetRids", "datasetRids": ["<dataset rid>"]}},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/count",
            headers={"Authorization": "Bearer <api key>"},
            json={"filter": {"type": "datasetRids", "datasetRids": ["<dataset rid>"]}},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "count": 1
}

Cancel ingest job#

POST /ingest/v1/ingest-job/{ingestJobRid}/cancel

Cancels an ingest job. Jobs that have not yet started running (SUBMITTED, QUEUED) are transitioned directly to CANCELLED. Jobs that are IN_PROGRESS have their underlying workflow cancelled; the workflow is responsible for transitioning the job to CANCELLED and tearing down in-flight work. Cancelling a job that is already in a terminal state (COMPLETED, FAILED, CANCELLED) throws IngestJobNotCancellable.

Path parameters

ingestJobRid string (RID) required

​

Response

ingestJobRid string (RID)

​

status IngestJobStatus

​

Values of IngestJobStatus
SUBMITTED

​

QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

CANCELLED

​

DELETION_IN_PROGRESS

​

DELETED

​

originFiles array of string

​

createdBy string (UUID) deprecated

Deprecated: use createdByRid instead

createdByRid string (RID)

​

orgUuid string (UUID)

​

ingestType IngestType

​

Values of IngestType
TABULAR

​

MCAP

​

DATAFLASH

​

JOURNAL_JSON

​

CONTAINERIZED

​

VIDEO

​

AVRO_STREAM

​

POINT_CLOUD

​

MULTI

​

datasetRid string (RID)

​

createdAt string (date-time)

​

startTime string (date-time)

The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).

endTime string (date-time)

​

producedFileCount integer

Count of dataset files produced by this ingest job.

Request

curl -X POST "https://api.gov.nominal.io/api/ingest/v1/ingest-job/<ingest job rid>/cancel" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-job/<ingest job rid>/cancel",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-job/<ingest job rid>/cancel",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/ingest/v1/ingest-job/<ingest job rid>/cancel",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "ingestJobRid": "<ingest job rid>",
  "status": "SUBMITTED",
  "originFiles": [
    "<origin files>"
  ],
  "createdBy": "<created by>",
  "createdByRid": "<user rid>",
  "orgUuid": "<org uuid>",
  "ingestType": "TABULAR",
  "datasetRid": "<dataset rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "startTime": "2026-01-01T00:00:00Z",
  "endTime": "2026-01-01T00:00:00Z",
  "producedFileCount": 1
}

Batch cancel ingest jobs#

POST /ingest/v1/ingest-jobs/cancel

Cancels multiple ingest jobs in a single call. Each job is processed independently and best-effort: a job that cannot be cancelled (already terminal, missing, or not authorized for the caller) yields a failed result rather than aborting the batch. Per-job cancellation semantics match cancelIngestJob. At most 100 jobs may be requested per call.

Body

ingestJobRids array of string (RID)

The ingest jobs to cancel. At most 100 jobs may be requested; a larger list is rejected with INVALID_ARGUMENT.

Response

results array of CancelIngestJobResult

​

Fields of CancelIngestJobResult
ingestJobRid string (RID)

​

outcome CancelIngestJobOutcome

​

Set type to "cancelled".

cancelled IngestJob

​

Fields of IngestJob
ingestJobRid string (RID)

​

status IngestJobStatus

​

Values of IngestJobStatus
SUBMITTED

​

QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

CANCELLED

​

DELETION_IN_PROGRESS

​

DELETED

​

originFiles array of string

​

createdBy string (UUID) deprecated

Deprecated: use createdByRid instead

createdByRid string (RID)

​

orgUuid string (UUID)

​

ingestType IngestType

​

Values of IngestType
TABULAR

​

MCAP

​

DATAFLASH

​

JOURNAL_JSON

​

CONTAINERIZED

​

VIDEO

​

AVRO_STREAM

​

POINT_CLOUD

​

MULTI

​

datasetRid string (RID)

​

createdAt string (date-time)

​

startTime string (date-time)

The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).

endTime string (date-time)

​

producedFileCount integer

Count of dataset files produced by this ingest job.

Set type to "failed".

failed CancelIngestJobFailure

​

Fields of CancelIngestJobFailure
reason CancelIngestJobFailureReason

​

Values of CancelIngestJobFailureReason
NOT_FOUND

​

NOT_CANCELLABLE

​

message string

Human-readable description of why the job could not be cancelled.

Request

curl -X POST "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/cancel" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "ingestJobRids": [
    "<ingest job rid>"
  ]
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/cancel",
    headers={"Authorization": "Bearer <api key>"},
    json={"ingestJobRids": ["<ingest job rid>"]},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/cancel",
    headers={"Authorization": "Bearer <api key>"},
    json={"ingestJobRids": ["<ingest job rid>"]},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/ingest/v1/ingest-jobs/cancel",
            headers={"Authorization": "Bearer <api key>"},
            json={"ingestJobRids": ["<ingest job rid>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "results": [
    {
      "ingestJobRid": "<ingest job rid>",
      "outcome": {
        "type": "cancelled",
        "cancelled": {
          "ingestJobRid": "<ingest job rid>",
          "status": "SUBMITTED",
          "originFiles": [
            "<origin files>"
          ],
          "createdBy": "<created by>",
          "createdByRid": "<user rid>",
          "orgUuid": "<org uuid>",
          "ingestType": "TABULAR",
          "datasetRid": "<dataset rid>",
          "createdAt": "2026-01-01T00:00:00Z",
          "startTime": "2026-01-01T00:00:00Z",
          "endTime": "2026-01-01T00:00:00Z",
          "producedFileCount": 1
        }
      }
    }
  ]
}

Types#

CancelIngestJobFailure#

reason CancelIngestJobFailureReason required

​

message string required

Human-readable description of why the job could not be cancelled.

CancelIngestJobFailureReason#

NOT_FOUND: the job does not exist, or the caller is not authorized to cancel it. NOT_CANCELLABLE: the job is already in a terminal state (COMPLETED or FAILED).

NOT_FOUND

​

NOT_CANCELLABLE

​

CancelIngestJobOutcome#

cancelled carries the resulting job (including the idempotent already-cancelled case); failed describes why the job could not be cancelled.

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

cancelled IngestJob

​

failed CancelIngestJobFailure

​

CancelIngestJobResult#

The outcome of attempting to cancel a single ingest job within a batch.

ingestJobRid string (RID) required

​

outcome CancelIngestJobOutcome required

​

IngestJob#

Ingest job information

ingestJobRid string (RID) required

​

status IngestJobStatus required

​

originFiles array of string

​

createdBy string (UUID) required deprecated

Deprecated: use createdByRid instead

createdByRid string (RID)

​

orgUuid string (UUID) required

​

ingestType IngestType required

​

datasetRid string (RID)

​

createdAt string (date-time)

​

startTime string (date-time)

The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).

endTime string (date-time)

​

producedFileCount integer

Count of dataset files produced by this ingest job.

IngestJobSearchFilter#

Filter for ingest-job search. A filter type that is not provided defaults to matching all jobs. Jobs without a persisted dataset UUID are not returned.

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

datasetRids array of string (RID)

​

createdByRids array of string (RID)

​

statuses array of IngestJobStatus

​

searchText string

Case-insensitive substring match against any origin file path.

startTimeRange IngestJobStartTimeRange

​

and array of IngestJobSearchFilter

​

or array of IngestJobSearchFilter

​

not IngestJobSearchFilter

​

workspace string (RID)

​

triggeringIngestRuleRids array of string (RID)

Matches jobs any of these File Store ingest rules triggered. At most 100 rids.

IngestJobSortKey#

CREATED_AT

​

STATUS

​

IngestJobSortOptions#

isDescending boolean required

​

sortKey IngestJobSortKey required

​

IngestJobStartTimeRange#

Filters ingest jobs by start time. The lower bound is inclusive; the upper bound is exclusive.

startTimeAfter string (date-time)

​

startTimeBefore string (date-time)

​

IngestJobStatus#

SUBMITTED

​

QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

CANCELLED

​

DELETION_IN_PROGRESS

​

DELETED

​

IngestTransform#

A single transform within an ingest job: one unit of extraction/processing work. Surfaces status, type, and error details so callers can monitor and alert on ingest pipelines.

ingestTransformRid string (RID) required

​

ingestJobRid string (RID) required

The ingest job this transform belongs to.

transformType IngestTransformType required

​

status IngestTransformStatus required

​

createdAt string (date-time) required

​

updatedAt string (date-time) required

​

errorMessage string

The failure detail recorded when the transform terminated. Present only for FAILED transforms. May contain customer-derived content and is therefore not safe to log.

finishedAt string (date-time)

The time the transform reached a terminal status (COMPLETED or FAILED). Absent while the transform is still QUEUED or IN_PROGRESS.

extractorRid string (RID)

The containerized extractor running this transform. Present only for CONTAINERIZED transforms.

sourcePaths array of string

Locators of the transform’s input file(s): S3/GCS paths, presigned URLs (query string stripped so no signing credentials are carried), or File Store file-revision rids. CONTAINERIZED transforms may have several inputs, ordered by the container environment variable they bind to; other types have exactly one. Empty when this server version cannot interpret the stored payload. May contain customer-derived content and is therefore not safe to log.

IngestTransformStatus#

QUEUED

​

IN_PROGRESS

​

COMPLETED

​

FAILED

​

IngestTransformType#

CONTAINERIZED

​

MCAP

​

DATAFLASH

​

PARQUET_ARCHIVE

​

FILE_COPY

​

IngestType#

TABULAR

​

MCAP

​

DATAFLASH

​

JOURNAL_JSON

​

CONTAINERIZED

​

VIDEO

​

AVRO_STREAM

​

POINT_CLOUD

​

MULTI

​

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

​

Page design based on Scalar, MIT License.