---
title: "Partially update document"
method: PATCH
path: "/internal/api/clients/{client_id}/dms/documents/{document_id}"
tags: ["CLIENT", "Client Document Management", "DMS Documents"]
---

# Partially update document

`PATCH /internal/api/clients/{client_id}/dms/documents/{document_id}`

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

Partially update document information (only provided fields)

## Path parameters

- `document_id` string, uuid, required
- `client_id` string, uuid, required: Client ID

## Request body

- DocumentUpdateRequest
  - `name` string, nullable: Document name
  - `description` string, nullable: Document description
  - `document_type` 'W2' | 'W2_AS' | 'W2_CM' | 'W2_GU' | 'W2_VI' | 'FORM_W2G' | 'FORM_W3' | 'FORM_1040' | 'FORM_1040_SCHEDULE_A' | 'FORM_1040_SCHEDULE_B' | 'FORM_1040_SCHEDULE_E' | 'FORM_1040_SCHEDULE_F' | 'FORM_1040_SENIOR' | 'FORM_1098' | 'FORM_1098_C' | 'FORM_1098_E' | 'FORM_1098_T' | 'FORM_1099_INT' | 'FORM_1099_A' | 'FORM_1099_B' | 'FORM_1099_CAP' | 'FORM_1099_CONSOLIDATED_STATEMENT' | 'FORM_1099_DIV' | 'FORM_1099_R' | 'FORM_1099_G' | 'FORM_1099_MISC' | 'FORM_1099_NEC' | 'FORM_1099_C' | 'FORM_1099_K' | 'FORM_1099_LTC' | 'FORM_1099_OID' | 'FORM_1099_PATR' | 'FORM_1099_QA' | 'FORM_1099_SA' | 'FORM_1099_Q' | 'FORM_1099_DA' | 'FORM_RRB_1099' | 'FORM_RRB_1099R' | 'FORM_1099_S' | 'FORM_1042_S' | 'FORM_8805' | 'FORM_8288_A' | 'FORM_1095_A' | 'FORM_1095_C' | 'FORM_SSA_1099' | 'FORM_2439' | 'FORM_3921' | 'FORM_3922' | 'FORM_5498' | 'FORM_5498_SA' | 'SCHEDULE_K1_GENERIC' | 'SCH_K1_1041' | 'SCH_K1_1065' | 'SCH_K1_1120S' | 'FORM_1041_SCHEDULE_K1' | 'FORM_1065_SCHEDULE_K1' | 'FORM_1120S_SCHEDULE_K1' | 'INVOICE' | 'RECEIPT' | 'TAX_FORM' | 'PROFIT_AND_LOSS_STATEMENT' | 'PROFIT_AND_LOSS_STATEMENT_BUSINESS' | 'PROFIT_AND_LOSS_STATEMENT_FARM' | 'PROFIT_AND_LOSS_STATEMENT_RENTAL' | 'INCOME_STATEMENT' | 'GENERAL_LEDGER' | 'TRIAL_BALANCE' | 'BALANCE_SHEET' | 'SCHEDULE_C_INPUT' | 'PREVIOUS_YEAR_RETURN' | 'BROKERAGE_STATEMENT' | 'ASSETS_PURCHASED_BUSINESS' | 'ASSETS_SOLD_BUSINESS' | 'ASSETS_PURCHASED_RENTAL' | 'ASSETS_SOLD_RENTAL' | 'ASSETS_PURCHASED_FARM' | 'ASSETS_SOLD_FARM' | 'MEDICAL_EXPENSES' | 'CHARITABLE_CONTRIBUTIONS_CASH' | 'CHARITABLE_CONTRIBUTIONS_NON_CASH' | 'PERSONAL_PROPERTY_TAXES' | 'SALES_AND_USE_TAXES' | 'VEHICLE_EXPENSES' | 'DAY_CARE_EXPENSES' | 'MAJOR_PURCHASES' | 'PROPERTY_TAX_STATEMENT' | 'ESTIMATED_TAX_PAYMENT_RECEIPTS' | 'CLOSING_STATEMENT_REAL_ESTATE' | 'PREVIOUS_YEAR_TAX_RETURNS' | 'TAX_RETURN' | 'TAX_ORGANIZER' | 'TAX_PLANNING' | 'REPAIRS_AND_IMPROVEMENTS_RENTAL' | 'PAYROLL_TAX_REPORT' | 'CLIENT_INTAKE_FORM' | 'GOVERNMENT_ISSUED_IDENTIFICATION' | 'IRS_NOTICE_OR_LETTER' | 'DEPENDENT_DOCUMENTATION' | 'FOREIGN_FINANCIAL_ACCOUNTS' | 'FOREIGN_INCOME_DOCUMENTATION' | '529_PLAN_STATEMENT' | '83B_ELECTION_STATEMENT' | 'SALES_BY_STATE_REPORT' | 'STATES_FILING_SALES_TAX_RETURNS' | 'VEHICLE_SELLER_REPORT' | 'HEALTH_INSURANCE_PREMIUM_STATEMENT' | 'BIRTH_CERTIFICATE' | 'DRIVERS_LICENSE' | 'DIRECT_DEPOSIT' | 'REGISTRATION_RENEWAL_NOTICE' | 'ENGAGEMENT_LETTER' | 'SERVICE_AGREEMENT' | 'CLIENT_NOTE' | 'BUNDLED_DOCUMENT' | 'OTHER_DOCUMENTS' | 'UNCATEGORIZED' | 'VESTING_STATEMENT' | 'EXERCISE_CONFIRMATION' | 'CLERGY_INFORMATION' | 'OTHER'
  - `folder_id` string, uuid, nullable: Target folder ID
  - `tags` TagSchema[], nullable: Document tags
    - `id` string, uuid, nullable
    - `key` string, required
    - `display_name` string, required
    - `value` string, required
    - `display_value` string, nullable
    - `color` string
    - `is_system` boolean
    - `data_type` string
    - `allowed_values` string, nullable

## Response `200`

Successful Response

- DocumentResponse: Complete document response with version information. Version fields indicate which version of the document this is and whether it's the currently active (latest) version.
  - `id` string, uuid, required
  - `name` string, required
  - `original_filename` string, required
  - `description` string, nullable, required
  - `document_type` 'W2' | 'W2_AS' | 'W2_CM' | 'W2_GU' | 'W2_VI' | 'FORM_W2G' | 'FORM_W3' | 'FORM_1040' | 'FORM_1040_SCHEDULE_A' | 'FORM_1040_SCHEDULE_B' | 'FORM_1040_SCHEDULE_E' | 'FORM_1040_SCHEDULE_F' | 'FORM_1040_SENIOR' | 'FORM_1098' | 'FORM_1098_C' | 'FORM_1098_E' | 'FORM_1098_T' | 'FORM_1099_INT' | 'FORM_1099_A' | 'FORM_1099_B' | 'FORM_1099_CAP' | 'FORM_1099_CONSOLIDATED_STATEMENT' | 'FORM_1099_DIV' | 'FORM_1099_R' | 'FORM_1099_G' | 'FORM_1099_MISC' | 'FORM_1099_NEC' | 'FORM_1099_C' | 'FORM_1099_K' | 'FORM_1099_LTC' | 'FORM_1099_OID' | 'FORM_1099_PATR' | 'FORM_1099_QA' | 'FORM_1099_SA' | 'FORM_1099_Q' | 'FORM_1099_DA' | 'FORM_RRB_1099' | 'FORM_RRB_1099R' | 'FORM_1099_S' | 'FORM_1042_S' | 'FORM_8805' | 'FORM_8288_A' | 'FORM_1095_A' | 'FORM_1095_C' | 'FORM_SSA_1099' | 'FORM_2439' | 'FORM_3921' | 'FORM_3922' | 'FORM_5498' | 'FORM_5498_SA' | 'SCHEDULE_K1_GENERIC' | 'SCH_K1_1041' | 'SCH_K1_1065' | 'SCH_K1_1120S' | 'FORM_1041_SCHEDULE_K1' | 'FORM_1065_SCHEDULE_K1' | 'FORM_1120S_SCHEDULE_K1' | 'INVOICE' | 'RECEIPT' | 'TAX_FORM' | 'PROFIT_AND_LOSS_STATEMENT' | 'PROFIT_AND_LOSS_STATEMENT_BUSINESS' | 'PROFIT_AND_LOSS_STATEMENT_FARM' | 'PROFIT_AND_LOSS_STATEMENT_RENTAL' | 'INCOME_STATEMENT' | 'GENERAL_LEDGER' | 'TRIAL_BALANCE' | 'BALANCE_SHEET' | 'SCHEDULE_C_INPUT' | 'PREVIOUS_YEAR_RETURN' | 'BROKERAGE_STATEMENT' | 'ASSETS_PURCHASED_BUSINESS' | 'ASSETS_SOLD_BUSINESS' | 'ASSETS_PURCHASED_RENTAL' | 'ASSETS_SOLD_RENTAL' | 'ASSETS_PURCHASED_FARM' | 'ASSETS_SOLD_FARM' | 'MEDICAL_EXPENSES' | 'CHARITABLE_CONTRIBUTIONS_CASH' | 'CHARITABLE_CONTRIBUTIONS_NON_CASH' | 'PERSONAL_PROPERTY_TAXES' | 'SALES_AND_USE_TAXES' | 'VEHICLE_EXPENSES' | 'DAY_CARE_EXPENSES' | 'MAJOR_PURCHASES' | 'PROPERTY_TAX_STATEMENT' | 'ESTIMATED_TAX_PAYMENT_RECEIPTS' | 'CLOSING_STATEMENT_REAL_ESTATE' | 'PREVIOUS_YEAR_TAX_RETURNS' | 'TAX_RETURN' | 'TAX_ORGANIZER' | 'TAX_PLANNING' | 'REPAIRS_AND_IMPROVEMENTS_RENTAL' | 'PAYROLL_TAX_REPORT' | 'CLIENT_INTAKE_FORM' | 'GOVERNMENT_ISSUED_IDENTIFICATION' | 'IRS_NOTICE_OR_LETTER' | 'DEPENDENT_DOCUMENTATION' | 'FOREIGN_FINANCIAL_ACCOUNTS' | 'FOREIGN_INCOME_DOCUMENTATION' | '529_PLAN_STATEMENT' | '83B_ELECTION_STATEMENT' | 'SALES_BY_STATE_REPORT' | 'STATES_FILING_SALES_TAX_RETURNS' | 'VEHICLE_SELLER_REPORT' | 'HEALTH_INSURANCE_PREMIUM_STATEMENT' | 'BIRTH_CERTIFICATE' | 'DRIVERS_LICENSE' | 'DIRECT_DEPOSIT' | 'REGISTRATION_RENEWAL_NOTICE' | 'ENGAGEMENT_LETTER' | 'SERVICE_AGREEMENT' | 'CLIENT_NOTE' | 'BUNDLED_DOCUMENT' | 'OTHER_DOCUMENTS' | 'UNCATEGORIZED' | 'VESTING_STATEMENT' | 'EXERCISE_CONFIRMATION' | 'CLERGY_INFORMATION' | 'OTHER'
  - `file_size` integer, required
  - `file_hash` string, required
  - `mime_type` string, required
  - `storage_reference` string, required
  - `version` integer, required: Version number of this document (1, 2, 3, etc.)
  - `is_latest` boolean, required: Whether this is the latest/current version of the document
  - `is_deleted` boolean, required
  - `download_count` integer, required
  - `folder_id` string, uuid, nullable, required
  - `folder_path` string, nullable
  - `download_url` string, nullable
  - `tax_year` string, nullable
  - `doc_year` string, nullable
  - `derived_document_type` string, nullable: DEPRECATED legacy display name — superseded by document_type_display_name. Dropped with the legacy columns in Phase 3.
  - `document_type_id` string, uuid, nullable: Canonical document type id (FK to supported_document_types). Stable identifier for logic (e.g. pre-selecting the current type); pair with document_type_display_name.
  - `document_type_identifier` string, nullable: Canonical document_identifier of the document's CURRENT type (e.g. 'SCH_K1_1065'), resolved from document_type_id. Source of truth after a reclassify — route on THIS, not on the legacy document_type enum / derived_document_type.
  - `document_type_display_name` string, nullable: Single canonical 'what type is this document' display name, resolved BE-side with precedence document_type_id > derived_document_type > document_classification. Read THIS for display — no column-picking on the client.
  - `split_state` string, nullable: NONE | AWAITING_SPLIT | BUNDLE | CHILD. AWAITING_SPLIT drives the FE 'review the split' entry CTA.
  - `tax_forms_detected` unknown[], nullable: Classifier's per-form proposal for a bundle: [{form_type, issuer, page_start, page_end}]. The FE seeds the split-validation screen from this.
    - unknown
  - `page_number_start` integer, nullable: For a SPLIT_CHILD, its origin start page in the parent bundle.
  - `page_number_end` integer, nullable: For a SPLIT_CHILD, its origin end page in the parent bundle.
  - `parent_document_id` string, uuid, nullable: For a SPLIT_CHILD, the bundle parent it was sliced from.
  - `extraction_status` string, nullable: Current status of document extraction (COMPLETED, FAILED, IN_PROGRESS, etc.)
  - `workflow_status` string, nullable: Current status of document workflow (CREATED, IN_PROGRESS, APPROVED, REJECTED, etc.)
  - `extraction_version` 'v1' | 'v2': Which extraction generation a specific document is on. Per-DOCUMENT (vs the per-doctype ``new_extraction_flow_enabled`` flag): the doctype flag says which generation a type uses going forward, but a document already extracted under the old generation stays on it until re-extracted. The frontend uses this to pick the v1/v2 review UI for each document. * ``V2`` — extracted via the v2 flow (data in the new typed store). * ``V1`` — extracted via the legacy flow (data in the legacy store).
  - `conversion` DocumentConversionHint: How to move ONE document onto the new extraction system. Present only when a conversion is actually available; ``null`` means the document is already current and the frontend shows nothing. Backend-owned so the client never carries its own copy of the retired-type map or re-derives "is this the old system" from other fields. Feed ``target_type_id`` and ``requires_force`` straight into POST ``/document/{document_id}/reclassify``. ``target_type_id`` is null only for an ambiguous retirement the backend could not settle (a K-1 whose original form was never recorded); the frontend must then open the picker and let the user choose.
    - `reason` 'RETIRED_TYPE' | 'LEGACY_EXTRACTION', required: Why a document is being offered a conversion to the new extraction system. * ``RETIRED_TYPE`` — the document sits on a type that has been superseded (the legacy P&L, the Schedule C worksheet, the K-1 envelope, an older Schedule K-1 spelling). Moving it is a genuine type change. * ``LEGACY_EXTRACTION`` — the type is already correct and already on the new flow, but THIS document's values came from the old extractor because it was processed before the doctype was flipped. Nothing to change but the extraction, which is why it needs ``force``.
    - `requires_force` boolean, required: Pass force=true on the reclassify call. True when the target type is the one the document already has, which a plain reclassify would treat as a no-op.
    - `target_type_id` string, uuid, nullable: supported_document_types id to reclassify to; pre-select it in the picker. Null when the successor is ambiguous and the user must choose.
    - `target_identifier` string, nullable: document_identifier of the target type (e.g. 'SCH_K1_1065').
    - `target_display_name` string, nullable: Display name of the target type, for the confirmation copy.
    - `message` string, required: Display-ready explanation of what the conversion will do.
  - `open_flag_count` integer: Number of OPEN cross-document flags (duplicate/superseded) on this document.
  - `top_flag_type` string, nullable: Highest-priority OPEN flag_type — kept for routing/logic. None when no flags.
  - `top_flag_severity` string, nullable: Severity of the top flag (ERROR | WARNING | INFO) — drives the badge colour.
  - `top_flag_label` string, nullable: Display-ready badge label for the top flag (backend-owned presentation), so the FE renders it without a per-type map.
  - `created_at` string, date-time, nullable: When the document was created
  - `updated_at` string, date-time, nullable: When the document was last updated
  - `warnings` string[]: Non-fatal advisory messages. Populated on upload when the target folder is already shared with the client — the uploaded document is immediately accessible to them via the folder share.

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