---
title: "Upload Document(s)"
method: POST
path: "/customers/{customer_id}/documents"
tags: ["Documents"]
---

# Upload Document(s)

`POST /customers/{customer_id}/documents`

Uploads document(s) to a customer. Once the document(s) are uploaded, they will be queued for processing by Inscribe's fraud detection, parsing, and optionally verification algorithms. The file size limit is 50 MB and the page limit for PDFs is 350.

## Path parameters

- `customer_id` string, uuid, required

## Response `202`

Successfully uploaded.

- UploadDocuments
  - `data` DocumentCompact[] — A map with a data property that contains an array of documents that have been uploaded. Each entry in the array is a separate document object.
    - `uuid` string, uuid — Unique uuid identifier for the object.
    - `id` string — Unique integer identifier for the object.
    - `name` string — The filename of the document.
    - `created_at` string, date-time — Time at which the object was created. In the format: yyyy-MM-dd'T'HH:mm:ssZ
    - `customer_id` string, uuid — The UUID of the associated Customer object
    - `customer_name` string — The name of the associated Customer object
    - `state` 'PROCESSING' | 'PROCESSED' | 'ERROR_PROCESSING' | 'VIRUS_DETECTED' | 'CORRUPT_DATA_DETECTED' | 'PASSWORD_PROTECTED' | 'EXCEEDS_MAX_PAGE_COUNT' — The current state of the document, it has the following options: PROCESSING - This document is still being processed. PROCESSED - This document has finished processing and results are available. ERROR_PROCESSING - An error occurred while processing this document. VIRUS_DETECTED - This document was found to contain a virus and will not be processed. CORRUPT_DATA_DETECTED - This document was found to contain corrupted data and could not be processed. PASSWORD_PROTECTED - This document is password protected. EXCEEDS_MAX_PAGE_COUNT - This document exceeds the maximum page count of 350.
    - `total_pages` integer — The number of pages in the document. This value will be null until the document is in the PROCESSED state.
    - `document_type` 'UNKNOWN' | 'BANK_STATEMENT' | 'BANK_LETTER' | 'BENEFITS_STATEMENT' | 'BUSINESS_FILING' | 'CHECK' | 'CREDIT_CARD_STATEMENT' | 'DRIVING_LICENSE' | 'EMPLOYMENT_LETTER' | 'FINANCIAL_STATEMENT' | 'INSURANCE_STATEMENT' | 'INVESTMENT_STATEMENT' | 'INVOICE' | 'LEASE' | 'LOAN_DOCUMENT' | 'PAYSLIP' | 'SOCIAL_SECURITY_CARD' | 'TAX_FORM' | 'UTILITY_BILL' — The document type identified by Inscribe's classifier. This value will be null until the document is in the PROCESSED state.
    - `subtypes` string[] — A list of the document subtypes identified by Inscribe's classifier. Currently, subtypes are identified for "TAX_FORM", "BANK_STATEMENT", "UTILITY_BILL", "PAYSLIP", "BUSINESS_FILING", and "FINANCIAL_STATEMENT" document types. Tax documents can have the subtypes: "CP_575", "LTR_147C", "SS4", "W2", "W3", "W9", "FORM_1040", "FORM_1040_SCHEDULE_C", "FORM_1065", "FORM_1099_MISC", "FORM_1099_NEC", "FORM_1120", "FORM_1120_S", "T1", "T183", "T2", "T2_CORP", "T4", "T451". Financial statement documents can have the subtypes: "PROFIT_AND_LOSS". Business filing documents can have the subtypes: "CERTIFICATE_OF_INCORPORATION", "CERTIFICATE_OF_FORMATION", "CERTIFICATE_OF_ORGANIZATION", "ARTICLES_OF_ORGANIZATION", "ARTICLES_OF_INCORPORATION", "PARTNERSHIP_AGREEMENT", "CERTIFICATE_OF_GOOD_STANDING". French language business filings can also have the subtypes: "VAT_REGISTRATION", "COMMERCIAL_REGISTER_EXTRACT", "ARTISAN_REGISTER_EXTRACT", "SIREN_REGISTER_EXTRACT", "SIREN_NUMBER_CONFIRMATION", "ARTICLES_OF_ASSOCIATION", "CERTIFICATE_OF_REGISTRATION", "EXTRACT_FROM_THE_OFFICIAL_GAZETTE", "RECEIPT_OF_DECLARATION_OF_CREATION". Utility bill documents can have the subtypes: "ENGIE", "ELECTRICITE_DE_FRANCE". Payslip documents can have the subtypes: "AUTOMATIC_DATA_PROCESSING". The full list of subtypes for bank statements can be found at https://docs.inscribe.ai/docs/documents-classified-by-bank-names.
    - `file_type` 'IMAGE_PDF' | 'SCAN_OCR' | 'TRUE_PDF' | 'IMAGE' | 'MIXED_PAGE_PDF' | 'EMPTY_PDF' | 'FLATTENED_PDF' — The file type identified by Inscribe. This value will be null until the document is in the PROCESSED state.
    - `language` string — The document language. More information on the available options can be found at https://docs.inscribe.ai/docs/language-field
    - `is_fraudulent` boolean, nullable — Deprecated: This field is deprecated. Please use the risk_level parameter in the risk_assessment object instead. This field returns true if Inscribe's fraud detection algorithms have identified the document as being fraudulent, or false if sufficient evidence of fraud is not found in the document. This value is only available when the document is in the PROCESSED state.
    - `trust_score` integer, nullable — The trust score of a document, between 0 and 100. More information can be found at https://help.inscribe.ai/en/articles/5557654-trust-score. Note: We recommend using the risk_level parameter in the risk_assessment object instead.
    - `quality_score` integer, nullable — The quality score of a document, between 0 and 100. More information can be found at https://help.inscribe.ai/en/articles/5567690-quality-score.
    - `review_status` 'ACCEPTED' | 'REJECTED' | 'REQUIRES_REVIEW' — The current status of document level feedback. More information can be found at https://help.inscribe.ai/en/articles/8523290-document-level-feedback.
    - `review` Review — Represents a manual review decision.
      - `status` 'ACCEPTED' | 'REJECTED' | 'REQUIRES_REVIEW' — The new status of the review decision.
      - `reason` 'FRAUD' | 'CREDIT_RISK' | 'OTHER', nullable — The reason for rejection. This field is only supported when `status` is `REJECTED`. `null` when no reason has been set.
      - `comment` string, nullable — A free-text comment providing additional context for the review decision.
    - `urls` object
      - `web_app` string — A URL to the location of this document on our web app.
      - `api` string — A URL to the location of this document on our API.
      - `original_file` string — A URL to the location of the original document uploaded to us.
    - `risk_assessment` object — Risk assessment information for the document, including risk level, summary analysis, and detailed insights. This will only be available when the document has finished processing and the AI Fraud Analyst has subsequently finished its review.
      - `risk_level` 'LOW' | 'MEDIUM' | 'HIGH' | 'NOT_APPLICABLE' — The risk level assigned to the document.
      - `summary` string — A summary of the document analysis.
      - `insights` object[] — List of fraud signals and verifications about the document.
        - `type` string — The type of insight. More information on the available options can be found at https://docs.inscribe.ai/docs/document-insights
        - `result` 'PASS' | 'INCONCLUSIVE' | 'FAIL' — The result of the fraud signal or verification.
        - `title` string, nullable — A title describing the insight.
        - `rationale` string, nullable — Detailed explanation supporting the insight result.
        - `urls` string[], nullable — URLs with the sources that support the insight result.

## Other responses

- `400` — You have provided incorrect data.
- `403` — You do not have permission to access this resource.
- `429` — Too many requests. The request has been rate limited. For more information, visit our [documentation on rate limiting](https://docs.inscribe.ai/docs/are-the-endpoints-rate-limited).

---

[API](https://skmtc.dev/inscribe/apis/core-resources.md) · [All operations](https://skmtc.dev/inscribe/apis/core-resources/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/inscribe/core-resources/revisions/6489b36eb60f/schema)
