---
title: "Cancel a research job"
method: POST
path: "/research/jobs/{job_id}/cancel"
tags: ["Research Jobs"]
---

# Cancel a research job

`POST /research/jobs/{job_id}/cancel`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/research/jobs/{job_id}/cancel`
- Auth: API key in header `x-api-key`

Requests cancellation of the caller's own research job, given by `job_id`. Returns the job's current state (such as `cancelling`), `cancel_requested`, `partial`, progress counts, research progress and usage. Results already retained stay readable and are marked partial where appropriate.

## Path parameters

- `job_id` string, required

## Headers

- `x-api-key` string, required

## Response `200`

Updated research job status

- ResearchjobsResearchStatusResponseDoc
  - `code` integer
  - `data` RetrievaltypesJobStatus
    - `cancel_requested` boolean
    - `completion_reason` 'frontier_exhausted' | 'completed' | 'page_limit' | 'round_limit' | 'deadline' | 'budget' | 'cancelled' | 'upstream_failure' | 'internal_failure'
    - `created_at` string
    - `deadline_at` string
    - `error` RetrievaltypesFailure
      - `message` string
      - `reason` 'invalid_url' | 'unsupported_content_type' | 'blocked' | 'not_found' | 'rate_limited' | 'timeout' | 'upstream_error' | 'internal_error' | 'out_of_scope' | 'robots_disallowed' | 'duplicate' | 'limit_reached' | 'unsupported_filter' | 'unknown_source' | 'idempotency_conflict' | 'invalid_cursor' | 'result_expired' | 'full_text_unavailable' | 'budget_exhausted'
      - `retry_after_seconds` integer
      - `retryable` boolean
    - `expires_at` string
    - `job_id` string
    - `kind` 'crawl' | 'research' | 'ingestion'
    - `partial` boolean
    - `progress` RetrievaltypesJobProgress
      - `admitted` integer
      - `discovered` integer
      - `discovery_excluded` integer
      - `failed` integer
      - `in_flight` integer
      - `queued` integer
      - `skipped` integer
      - `succeeded` integer
    - `research` RetrievaltypesResearchProgress
      - `max_rounds` integer
      - `questions_answered` integer
      - `questions_total` integer
      - `round` integer
      - `searches_completed` integer
      - `sources_read` integer
    - `state` 'queued' | 'running' | 'cancelling' | 'succeeded' | 'failed' | 'cancelled'
    - `updated_at` string
    - `usage` RetrievaltypesUsage
      - `browser_renders` integer
      - `credits_charged` integer
      - `credits_released` integer
      - `credits_reserved` integer
      - `fetch_attempts` integer
      - `fetched_urls` integer
      - `input_tokens` integer
      - `output_tokens` integer
      - `search_requests` integer
      - `settlement_pending` boolean
    - `warnings` RetrievaltypesWarning[]
      - `code` 'source_failed' | 'source_not_indexed' | 'discovery_truncated' | 'ranking_window_limit' | 'imprecise_date_excluded' | 'content_unavailable' | 'cached_source_stale'
      - `message` string
      - `source_id` string
  - `msg` string

## Other responses

- `401`: Authentication required
- `404`: Research job not found

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/028417aa35bb?raw)
