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
ingestJobRidstring (RID) required
Response
ingestJobRidstring (RID)
statusIngestJobStatus
Values of
IngestJobStatusSUBMITTED
QUEUED
IN_PROGRESS
COMPLETED
FAILED
CANCELLED
DELETION_IN_PROGRESS
DELETED
originFilesarray of string
createdBystring (UUID) deprecatedDeprecated: use createdByRid instead
createdByRidstring (RID)
orgUuidstring (UUID)
ingestTypeIngestType
Values of
IngestTypeTABULAR
MCAP
DATAFLASH
JOURNAL_JSON
CONTAINERIZED
VIDEO
AVRO_STREAM
POINT_CLOUD
MULTI
datasetRidstring (RID)
createdAtstring (date-time)
startTimestring (date-time)The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).
endTimestring (date-time)
producedFileCountintegerCount 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
ingestTransformRidstring (RID) required
Response
ingestTransformRidstring (RID)
ingestJobRidstring (RID)The ingest job this transform belongs to.
transformTypeIngestTransformType
Values of
IngestTransformTypeCONTAINERIZED
MCAP
DATAFLASH
PARQUET_ARCHIVE
FILE_COPY
statusIngestTransformStatus
Values of
IngestTransformStatusQUEUED
IN_PROGRESS
COMPLETED
FAILED
createdAtstring (date-time)
updatedAtstring (date-time)
errorMessagestringThe failure detail recorded when the transform terminated. Present only for FAILED transforms. May contain customer-derived content and is therefore not safe to log.
finishedAtstring (date-time)The time the transform reached a terminal status (COMPLETED or FAILED). Absent while the transform is still QUEUED or IN_PROGRESS.
extractorRidstring (RID)The containerized extractor running this transform. Present only for CONTAINERIZED transforms.
sourcePathsarray of stringLocators 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
ingestTransformRidstring (RID) required
Response
The body is an array of OriginFileUri.
Fields of OriginFileUri
uristring
pathstring
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
ingestJobRidstring (RID) requiredThe ingest job whose transforms to list.
statusesarray ofIngestTransformStatusWhen 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
IngestTransformStatusQUEUED
IN_PROGRESS
COMPLETED
FAILED
pageSizeintegerDefaults to 100. Clamped to 1_000 if larger, and to 1 if non-positive.
nextPageTokenstring
Response
ingestTransformsarray ofIngestTransform
Fields of
IngestTransformingestTransformRidstring (RID)
ingestJobRidstring (RID)The ingest job this transform belongs to.
transformTypeIngestTransformType
Values of
IngestTransformTypeCONTAINERIZED
MCAP
DATAFLASH
PARQUET_ARCHIVE
FILE_COPY
statusIngestTransformStatus
Values of
IngestTransformStatusQUEUED
IN_PROGRESS
COMPLETED
FAILED
createdAtstring (date-time)
updatedAtstring (date-time)
errorMessagestringThe failure detail recorded when the transform terminated. Present only for FAILED transforms. May contain customer-derived content and is therefore not safe to log.
finishedAtstring (date-time)The time the transform reached a terminal status (COMPLETED or FAILED). Absent while the transform is still QUEUED or IN_PROGRESS.
extractorRidstring (RID)The containerized extractor running this transform. Present only for CONTAINERIZED transforms.
sourcePathsarray of stringLocators 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.
nextPageTokenstring
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
pageSizeintegerDefaults to 100. Clamped to 1_000 if larger, and to 1 if non-positive.
nextPageTokenstring
filterIngestJobSearchFilter
Set
typeto"datasetRids".datasetRidsarray of string (RID)
Set
typeto"createdByRids".createdByRidsarray of string (RID)
Set
typeto"statuses".statusesarray ofIngestJobStatus
Values of
IngestJobStatusSUBMITTED
QUEUED
IN_PROGRESS
COMPLETED
FAILED
CANCELLED
DELETION_IN_PROGRESS
DELETED
Set
typeto"searchText".searchTextstringCase-insensitive substring match against any origin file path.
Set
typeto"startTimeRange".startTimeRangeIngestJobStartTimeRange
Fields of
IngestJobStartTimeRangestartTimeAfterstring (date-time)
startTimeBeforestring (date-time)
Set
typeto"and".andarray ofIngestJobSearchFilter
Set
typeto"or".orarray ofIngestJobSearchFilter
Set
typeto"not".Set
typeto"workspace".workspacestring (RID)
Set
typeto"triggeringIngestRuleRids".triggeringIngestRuleRidsarray of string (RID)Matches jobs any of these File Store ingest rules triggered. At most 100 rids.
sortIngestJobSortOptionsDefaults to most recent created_at first when omitted.
Fields of
IngestJobSortOptionsisDescendingboolean required
sortKeyIngestJobSortKeyrequired
Values of
IngestJobSortKeyCREATED_AT
STATUS
Response
ingestJobsarray ofIngestJob
Fields of
IngestJobingestJobRidstring (RID)
statusIngestJobStatus
Values of
IngestJobStatusSUBMITTED
QUEUED
IN_PROGRESS
COMPLETED
FAILED
CANCELLED
DELETION_IN_PROGRESS
DELETED
originFilesarray of string
createdBystring (UUID) deprecatedDeprecated: use createdByRid instead
createdByRidstring (RID)
orgUuidstring (UUID)
ingestTypeIngestType
Values of
IngestTypeTABULAR
MCAP
DATAFLASH
JOURNAL_JSON
CONTAINERIZED
VIDEO
AVRO_STREAM
POINT_CLOUD
MULTI
datasetRidstring (RID)
createdAtstring (date-time)
startTimestring (date-time)The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).
endTimestring (date-time)
producedFileCountintegerCount of dataset files produced by this ingest job.
nextPageTokenstring
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
filterIngestJobSearchFilterMatches all jobs when omitted. Prefer a filter that bounds the result, such as non-terminal statuses.
Set
typeto"datasetRids".datasetRidsarray of string (RID)
Set
typeto"createdByRids".createdByRidsarray of string (RID)
Set
typeto"statuses".statusesarray ofIngestJobStatus
Values of
IngestJobStatusSUBMITTED
QUEUED
IN_PROGRESS
COMPLETED
FAILED
CANCELLED
DELETION_IN_PROGRESS
DELETED
Set
typeto"searchText".searchTextstringCase-insensitive substring match against any origin file path.
Set
typeto"startTimeRange".startTimeRangeIngestJobStartTimeRange
Fields of
IngestJobStartTimeRangestartTimeAfterstring (date-time)
startTimeBeforestring (date-time)
Set
typeto"and".andarray ofIngestJobSearchFilter
Set
typeto"or".orarray ofIngestJobSearchFilter
Set
typeto"not".Set
typeto"workspace".workspacestring (RID)
Set
typeto"triggeringIngestRuleRids".triggeringIngestRuleRidsarray of string (RID)Matches jobs any of these File Store ingest rules triggered. At most 100 rids.
Response
countinteger (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
ingestJobRidstring (RID) required
Response
ingestJobRidstring (RID)
statusIngestJobStatus
Values of
IngestJobStatusSUBMITTED
QUEUED
IN_PROGRESS
COMPLETED
FAILED
CANCELLED
DELETION_IN_PROGRESS
DELETED
originFilesarray of string
createdBystring (UUID) deprecatedDeprecated: use createdByRid instead
createdByRidstring (RID)
orgUuidstring (UUID)
ingestTypeIngestType
Values of
IngestTypeTABULAR
MCAP
DATAFLASH
JOURNAL_JSON
CONTAINERIZED
VIDEO
AVRO_STREAM
POINT_CLOUD
MULTI
datasetRidstring (RID)
createdAtstring (date-time)
startTimestring (date-time)The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).
endTimestring (date-time)
producedFileCountintegerCount 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
ingestJobRidsarray of string (RID)The ingest jobs to cancel. At most 100 jobs may be requested; a larger list is rejected with INVALID_ARGUMENT.
Response
resultsarray ofCancelIngestJobResult
Fields of
CancelIngestJobResultingestJobRidstring (RID)
outcomeCancelIngestJobOutcome
Set
typeto"cancelled".cancelledIngestJob
Fields of
IngestJobingestJobRidstring (RID)
statusIngestJobStatus
Values of
IngestJobStatusSUBMITTED
QUEUED
IN_PROGRESS
COMPLETED
FAILED
CANCELLED
DELETION_IN_PROGRESS
DELETED
originFilesarray of string
createdBystring (UUID) deprecatedDeprecated: use createdByRid instead
createdByRidstring (RID)
orgUuidstring (UUID)
ingestTypeIngestType
Values of
IngestTypeTABULAR
MCAP
DATAFLASH
JOURNAL_JSON
CONTAINERIZED
VIDEO
AVRO_STREAM
POINT_CLOUD
MULTI
datasetRidstring (RID)
createdAtstring (date-time)
startTimestring (date-time)The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).
endTimestring (date-time)
producedFileCountintegerCount of dataset files produced by this ingest job.
Set
typeto"failed".failedCancelIngestJobFailure
Fields of
CancelIngestJobFailurereasonCancelIngestJobFailureReason
Values of
CancelIngestJobFailureReasonNOT_FOUND
NOT_CANCELLABLE
messagestringHuman-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#
reasonCancelIngestJobFailureReasonrequired
messagestring requiredHuman-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.
cancelledIngestJob
failedCancelIngestJobFailure
CancelIngestJobResult#
The outcome of attempting to cancel a single ingest job within a batch.
ingestJobRidstring (RID) required
outcomeCancelIngestJobOutcomerequired
IngestJob#
Ingest job information
ingestJobRidstring (RID) required
statusIngestJobStatusrequired
originFilesarray of string
createdBystring (UUID) required deprecatedDeprecated: use createdByRid instead
createdByRidstring (RID)
orgUuidstring (UUID) required
ingestTypeIngestTyperequired
datasetRidstring (RID)
createdAtstring (date-time)
startTimestring (date-time)The time the job transitioned to IN_PROGRESS. Absent for jobs that have not started running yet (SUBMITTED, QUEUED).
endTimestring (date-time)
producedFileCountintegerCount 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.
datasetRidsarray of string (RID)
createdByRidsarray of string (RID)
statusesarray ofIngestJobStatus
searchTextstringCase-insensitive substring match against any origin file path.
startTimeRangeIngestJobStartTimeRange
andarray ofIngestJobSearchFilter
orarray ofIngestJobSearchFilter
notIngestJobSearchFilter
workspacestring (RID)
triggeringIngestRuleRidsarray of string (RID)Matches jobs any of these File Store ingest rules triggered. At most 100 rids.
IngestJobSortKey#
CREATED_AT
STATUS
IngestJobSortOptions#
isDescendingboolean required
sortKeyIngestJobSortKeyrequired
IngestJobStartTimeRange#
Filters ingest jobs by start time. The lower bound is inclusive; the upper bound is exclusive.
startTimeAfterstring (date-time)
startTimeBeforestring (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.
ingestTransformRidstring (RID) required
ingestJobRidstring (RID) requiredThe ingest job this transform belongs to.
transformTypeIngestTransformTyperequired
statusIngestTransformStatusrequired
createdAtstring (date-time) required
updatedAtstring (date-time) required
errorMessagestringThe failure detail recorded when the transform terminated. Present only for FAILED transforms. May contain customer-derived content and is therefore not safe to log.
finishedAtstring (date-time)The time the transform reached a terminal status (COMPLETED or FAILED). Absent while the transform is still QUEUED or IN_PROGRESS.
extractorRidstring (RID)The containerized extractor running this transform. Present only for CONTAINERIZED transforms.
sourcePathsarray of stringLocators 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.
uristring required
pathstring required
Page design based on Scalar, MIT License.