---
title: "Reclassify a document's type and re-extract"
method: POST
path: "/internal/api/document/{document_id}/reclassify"
tags: ["DOCUMENT"]
---

# Reclassify a document's type and re-extract

`POST /internal/api/document/{document_id}/reclassify`

## 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/{document_id}/reclassify`
- Auth: OAuth 2
  - Password
  - Token URL: `/auth/login`

Manually override a document's type when classification failed or mis-classified, and trigger re-extraction with the corrected type. Validates the target type, blocks multi-form documents, records provenance, and re-extracts. Ops-only in Phase 1. Pass force=true to re-run extraction on the type the document ALREADY has — the way to move a document off the older extraction system once its doctype is on the new flow.

## Path parameters

- `document_id` string, uuid, required: Document ID to reclassify

## Request body

- ReclassifyDocumentRequest: Request to reclassify a document's type (manual override) + re-extract if eligible.
  - `client_id` string, uuid, required: Client ID for the document
  - `new_type_id` string, uuid, required: Target supported document type ID (from GET /types).
  - `reason_code` 'MISCLASSIFIED' | 'WAS_UNCLASSIFIED' | 'WRONG_VARIANT' | 'CONVERT_TO_NEW_EXTRACTION' | 'OTHER', required: User-supplied reason for a RECLASSIFY (tenant_client_document_type_change_audit.reason_code).
  - `reason_note` string, nullable: Optional free-text note.
  - `force` boolean: Re-apply the type and re-extract even when new_type_id is the type the document ALREADY has. Without this a same-type reclassify is a no-op, which is what blocks converting a document that was extracted by the older system but is already on the correct identifier: the conversion needs the extraction re-run, not a type change. Destructive by design — it supersedes the current review and its extracted attributes, then re-extracts on whichever flow the type is configured for. Rejected when extraction is disabled for the type (nothing to re-run) or the document is a split container.

## Response `202`

Successful Response

- ReclassifyDocumentResponse: Reclassify result (HTTP 202). reextraction_triggered is True when the new type has extraction enabled (is_active) — a re-extraction job is enqueued; False when the type is extraction-disabled — the document is reclassified (type set) but NOT re-extracted (extraction_job_id is null).
  - `document_id` string, uuid, required: Document ID
  - `new_type_id` string, uuid, required: The newly assigned document type ID
  - `reextraction_triggered` boolean, required: Whether a re-extraction job was enqueued.
  - `extraction_job_id` string, uuid, nullable: Re-extraction job ID for polling (if triggered).
  - `message` string, required: Human-readable outcome.

## 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)
