---
title: "Cancel an ingest job and all its sub-jobs"
method: POST
path: "/v1/data/job/cancel"
tags: ["v1 data"]
---

# Cancel an ingest job and all its sub-jobs

`POST /v1/data/job/cancel`

Cancel a running or queued ingestion job and all of its descendant sub-jobs.

    Jobs that are already completed ('done') or failed ('error') will not be affected.
    Cancelled jobs will be skipped by the ingester when Cloud Tasks delivers them.

    **Request Parameters:**
    - job_id (str, required): The root job ID to cancel (returned from /ingest)

    **Response:**
    - job_id (str): The root job ID
    - cancelled_count (int): Number of jobs cancelled (parent + descendants)
    - status (str): 'cancelled' if any jobs were cancelled, 'already_terminal' if all were already done/error

    Requires JWT authentication.

## Request body

- JobCancelRequest — Request model for cancelling an ingest job
  - `job_id` string, required — Unique identifier for the job to cancel

## Response `200`

Successful Response

- JobCancelResponse — Response model for job cancellation
  - `job_id` string, required — The root job ID that was cancelled
  - `cancelled_count` integer, required — Number of jobs cancelled (including descendants)
  - `status` string, required — Result status: 'cancelled' or 'already_terminal'

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `404` — Job Not Found
- `422` — Validation Error
- `500` — Internal Server Error

---

[API](https://skmtc.net/elicitlabs/apis/elicit-labs-api.md) · [All operations](https://skmtc.net/elicitlabs/apis/elicit-labs-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/elicitlabs/elicit-labs-api/revisions/27701839a070/schema)
