---
title: "Confirm a multi-document bundle's page-range breakup and extract each form"
method: POST
path: "/internal/api/document/{document_id}/confirm-split"
tags: ["DOCUMENT"]
---

# Confirm a multi-document bundle's page-range breakup and extract each form

`POST /internal/api/document/{document_id}/confirm-split`

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

Slices a MULTI_DOCUMENT bundle into one child document per CPA-confirmed form (page range), then triggers extraction for each child. Validates full page coverage / no overlaps / fan-out cap, rejects K-1 bundles (409), and is idempotent on double-confirm.

## Path parameters

- `document_id` string, uuid, required: Bundle (parent) document ID to split

## Request body

- ConfirmSplitRequest: The validated breakup the CPA confirmed. Server re-validates coverage/caps/K-1 before slicing.
  - `client_id` string, uuid, required: Client the bundle belongs to (tenant comes from the JWT).
  - `forms` DetectedFormInput[], required: The confirmed form segments.
    - `chunk_id` string, uuid, nullable: Stable per-form identity, echoed from the detected proposal. Server mints one if absent. Carried onto the child + the slice key so re-split is incremental.
    - `form_type` string, required: Classifier label, e.g. '1099-INT', 'W-2'.
    - `issuer` string, nullable: Issuer/payer of this form (e.g. the brokerage on a 1099 Consolidated, the employer on a W-2). Lets the CPA tell same-type forms apart; stored on the child document.
    - `page_start` integer, required: First page of this form in the bundle (1-indexed).
    - `page_end` integer, required: Last page of this form in the bundle (1-indexed, inclusive).
    - `document_type_id` string, uuid, nullable: Optional FE-resolved canonical type. When absent the server canonicalizes from form_type; unresolved -> the child is materialized UNSUPPORTED.

## Response `201`

Successful Response

- ConfirmSplitResponse
  - `parent_document_id` string, uuid, required
  - `child_documents` ChildDocumentSummary[], required
    - `document_id` string, uuid, required
    - `chunk_id` string, uuid, required
    - `form_type` string, required
    - `issuer` string, nullable: Issuer/payer of this form, if known.
    - `document_type_identifier` string, nullable: Canonical identifier (e.g. FORM_1099_INT); None for an UNSUPPORTED child.
    - `display_name` string, nullable
    - `page_start` integer, required
    - `page_end` integer, required
    - `extraction_status` string, nullable: Initial extraction status (PENDING on materialization); uses the BulkStatus vocabulary.

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