---
title: "Update Client Notes (Public)"
method: PATCH
path: "/api/public/intake/items/{item_id}/notes"
tags: ["Public Intake Requests"]
---

# Update Client Notes (Public)

`PATCH /api/public/intake/items/{item_id}/notes`

## 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/api/public/intake/items/{item_id}/notes`
- Auth: none declared. Required headers: `X-Intake-Token`

Add or update notes for a specific document item. Uses X-Intake-Token header. No authentication required.

## Path parameters

- `item_id` string, uuid, required

## Headers

- `X-Intake-Token` string, required: Secure intake token for document upload request

## Request body

- UpdateClientNotesRequest: Schema for updating client notes on a document item
  - `notes` string, required: Notes to add or update for this document item

## Response `200`

Successful Response

- PublicDocumentUploadRequestItemResponse: Schema for document upload request item response (public/client use - no sensitive IDs). SECURITY: This schema excludes sensitive internal IDs: - intake_request_id: Not exposed (prevents enumeration of other requests) - uploaded_by: Not exposed in public responses (only for CPA dashboard) - tenant_id/client_id: Never exposed in public APIs Item IDs are scoped to the upload token and validated on each request.
  - `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'
  - `description` string, nullable: Additional instructions for this specific document type
  - `notes` string, nullable: Optional notes from CPA for this specific document type request
  - `tags` string[], nullable: Tags/instance names associated with this document item
  - `is_optional` boolean: Whether this document is optional or required
  - `is_additional_document` boolean: Whether this is an additional document added by the client
  - `is_voluntary_document` boolean: Whether this is a voluntary document (no document type, not counted in totals)
  - `extraction_enabled` boolean: Whether to automatically start document extraction after upload for this specific item
  - `max_files_per_item` integer: Maximum number of files allowed for this specific document type
  - `id` string, uuid, required: Unique identifier for the request item (scoped to this upload request only, validated via token on each request)
  - `display_order` integer, required: Display order in the UI
  - `status` 'DRAFT' | 'PENDING' | 'UPLOADED' | 'MAPPED' | 'ANSWERED' | 'SKIPPED' | 'REJECTED', required: Enum for intake request item status
  - `edit_count` integer, required: Number of times this item has been edited/reuploaded
  - `client_notes` string, nullable: Optional notes added by the client/user for this document item
  - `document_type_label` string, nullable: Human-readable label for the document type (None for voluntary documents)
  - `can_modify` boolean: Whether this item can still be modified (false if UPLOADED)
  - `rejection_reason` string, nullable: Reason provided when rejecting this document item (only set when status is REJECTED)
  - `created_at` string, date-time, required: When the item was created
  - `updated_at` string, date-time, required: When the item was last updated
  - `uploaded_documents` UploadedDocumentInfo[], nullable: List of uploaded documents for this item (only included when status is UPLOADED). Document IDs are scoped to this upload request and validated via token. Sensitive fields (storage_reference, file_hash, folder_id, download_url) are NOT exposed.
    - `id` string, required: Document ID (scoped to upload request)
    - `name` string, required: Document name
    - `original_filename` string, required: Original filename
    - `file_size` integer, required: File size in bytes
    - `mime_type` string, required: MIME type
    - `uploaded_at` string, date-time, required: When the document was uploaded
    - `extraction_status` string, nullable: Document extraction status
    - `document_matching` DocumentMatchingInfo: Schema for document type matching information
      - `is_document_classification_match` boolean, nullable: Whether document_classification matches requested document_type (strict match)
      - `is_instance_name_match` boolean, nullable: Whether instance_name matches requested instance_name (fuzzy match)
      - `instance_match_score` number, nullable: Instance-name match score (0-100) computed via rapidfuzz partial_ratio.
      - `document_classification` string, nullable: DEPRECATED human-readable display name of the matched type. Prefer document_type_identifier (stable routing key) + document_type_id. Phase 3 removal.
      - `document_type_id` string, uuid, nullable: Canonical document type id (FK to supported_document_types) of the matched document's CURRENT type. Source of truth after a reclassify; null until the document has a type.
      - `document_type_identifier` string, nullable: Canonical document_identifier of the matched document's CURRENT type (e.g. 'W2', 'FORM_1099_INT'), resolved from document_type_id. Stable routing/compare key — use THIS instead of the human-readable document_classification.
      - `document_type_display_name` string, nullable: Canonical human-readable display name of the matched document's CURRENT type, resolved from document_type_id. Read THIS for display (replaces the legacy document_classification, which held the display name).
      - `instance_name` string, nullable: Instance name from automatic classification functionality
      - `is_implicit_document_matching` boolean, nullable: True when SUGGESTION_APPLIED was done implicitly (by system); False when applied by user confirm-match; None when no suggestion was applied.
      - `document_classification_status` string, nullable: Latest document classification audit status for this document (ACCEPTED, IN_PROGRESS, COMPLETED, FAILED).

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