---
title: "Bulk extract (or reextract with type) documents"
method: POST
path: "/internal/api/document/extract"
tags: ["DOCUMENT"]
---

# Bulk extract (or reextract with type) documents

`POST /internal/api/document/extract`

## Request

- Base URL: `https://api.signalshq.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.signalshq.io/internal/api/document/extract`
- Auth: OAuth 2
  - Password
  - Token URL: `/auth/login`

Creates a Celery group of tasks for each document ID to extract tax documents. Returns immediately with task creation status. Use the /bulk-status endpoint to poll for extraction progress. Optional document_type_id: when provided, extraction runs with that document type and reruns are allowed (skips 'already extracted' check).

## Request body

- BulkDocumentExtractionRequest: Request schema for bulk document extraction
  - `client_id` string, uuid, required: Client ID for the documents
  - `document_ids` string[], required: List of document IDs to extract
  - `document_type_id` string, uuid, nullable: Optional. When set, extraction runs with this document type (reextraction). Skips the 'already extracted' check so reruns are allowed. Use IDs from GET /types.

## Response `202`

Successful Response

- BulkDocumentExtractionResponse: Response schema for bulk document extraction
  - `data` DocumentExtractionTaskItem[], required: List of document extraction tasks with their status
    - `document_id` string, uuid, required: Document ID
    - `status` 'REQUESTED' | 'ACCEPTED' | 'IN_PROGRESS' | 'COMPLETED' | 'UNSUPPORTED' | 'FAILED' | 'SKIPPED', required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/signalshq/apis/signals-api.md) - [All operations](https://skmtc.dev/signalshq/apis/signals-api/llms.txt) - [OpenAPI document](https://skmtc.dev/signalshq/apis/signals-api/revisions/2c22af3b5576?raw)
