> ## Documentation Index
> Fetch the complete documentation index at: https://rain-sandbox-trial.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# KYC/KYB Documents

> Documents you must submit for compliance checks. They differ depending on whether the customer is a person (KYC) or a business (KYB).

Rain accepts a short list of documents for compliance, and it is shorter than
what the upload endpoints will let you send.

**Endpoint options are not the accepted list:** the document upload endpoints
offer multiple document types, but only the ones on this page are currently
accepted for compliance. Other documents may be submittable and will not be
approved. Those extra options exist in case compliance requirements change.

## KYC documents

For individuals, you'll need to submit:

* **Identification** (Passport, ID card, Driver's license, or Residence permit)
* **Selfie**

### Upload a passport

When uploading a passport, leave the `Front side` and `Back side` dropdown empty. That selection only applies to `ID card`, `Driver's license`, or `Residence permit` options.

## KYB documents

For businesses, you'll need to submit:

* **Certificate of incorporation**
* **Shareholder registry**

<Warning>
  **`taxId` and `registrationNumber` are separate fields:**

  When submitting a company application, both fields are required:

  * **`taxId`**: The company's national tax identification number. For US companies, this is the Employer Identification Number (EIN).
  * **`registrationNumber`**: The company's state registration number, typically found on the Articles of Incorporation or Certificate of Formation.

  Do not use the EIN for the `registrationNumber` field or vice versa.
</Warning>

<Info>
  **Corporate Structure** is the hierarchy of legal entities, including parent companies and subsidiaries. An **Organizational Chart** shows employee roles and reporting lines within a company. When a review asks for one of these, submit the matching document.
</Info>

## Fastfail checks

Automated checks run on uploaded documents to verify quality and completeness. They run synchronously at upload time: a document that fails is rejected on the spot with a `400` response, so fix the document and upload it again before submitting the application.

Fastfail checks verify the following:

* All pages and sides of the document are uploaded
* Document number and name fields are present and readable
* Document image is not a screenshot or cropped
* Document is not expired or issued in a forbidden territory
* Document image was not previously rejected
* Photo in the document contains a visible human face

<Warning>
  **Document validation errors:**

  The upload endpoint validates document quality and completeness before accepting it. If validation fails, the endpoint returns a `400` response with a message describing the issue:

  ```json theme={null}
  {
    "statusCode": 400,
    "error": "Bad Request",
    "message": "Document rejected by Sumsub: forbiddenDocument, missingImportantInfo"
  }
  ```
</Warning>

The `message` field contains a comma-separated list of one or more rejection tags, and the same tags are also returned as an `errorMessageCodes` array on the error body. Common causes include blurry or cropped images, expired documents, screenshots instead of photos, and missing required pages. Make sure your integration handles this `400` response and prompts users to resubmit with a corrected document.

<Info>
  Two other upload rules to build around: files can be up to **20 MB**, and a
  `400` with the message `Document type not required for user` (or `for
      company`) means the applicant's verification level doesn't call for that
  document type — upload only the types the application asks for.
</Info>

### Error tags

Errors block the applicant from proceeding. A different document must be uploaded.

| Tag                         | Description                                                               |
| --------------------------- | ------------------------------------------------------------------------- |
| `forbiddenDocument`         | Unsupported or unacceptable document type or country.                     |
| `differentDocTypeOrCountry` | Document type or country does not match what was specified or recognized. |
| `missingImportantInfo`      | Required document data is missing or unreadable.                          |
| `dataNotReadable`           | Data on the image is missing or unreadable.                               |
| `expiredDoc`                | Document is expired.                                                      |
| `documentWayTooMuchOutside` | Parts of the document are cropped.                                        |
| `noIdDocFacePhoto`          | Face is not clearly visible on the document.                              |
| `selfieFaceBadQuality`      | Face is not clearly visible on the selfie.                                |
| `screenRecapture`           | Image may be a photo of a screen or a screenshot.                         |
| `screenshot`                | Image is a screenshot.                                                    |
| `sameSides`                 | Same side of document uploaded as both front and back.                    |
| `shouldBeMrzDocument`       | Document should have an MRZ but none is readable.                         |
| `shouldBeDoubleSided`       | Both sides of the document must be provided.                              |
| `shouldBeDoublePaged`       | Full double-page photo of the document is required.                       |
| `documentDeclinedBefore`    | Same image was previously uploaded and declined.                          |
| `mrzNotReadable`            | MRZ code cannot be extracted due to poor quality or missing corners.      |
| `docExpiresSoon`            | Document expires within the minimum residual validity period.             |
| `missingDob`                | Document does not contain date of birth.                                  |
| `incompleteDob`             | Document does not contain the full date of birth (day, month, and year).  |

### Warning tags

Warnings let applicants proceed after retaking the document photo or providing missing information.

| Tag                      | Description                                           |
| ------------------------ | ----------------------------------------------------- |
| `badSelfie`              | Face or photo in the document is not clearly visible. |
| `dataReadability`        | Information in the document cannot be read.           |
| `inconsistentDocument`   | Uploaded photos do not belong to the same document.   |
| `maybeExpiredDoc`        | Document may be expired.                              |
| `documentTooMuchOutside` | Document is not fully in the frame.                   |

### Document tags are not webhook rejection labels

These tags and the rejection labels in the [rejection reasons](/docs/rejection-reasons) reference are two different layers, not two spellings of the same list. The tags on this page arrive synchronously, in the `message` field of a `400` response, at the moment you upload a document. Rejection labels arrive later, in the `applicationReason` field of a webhook, when the application itself is decided. A document can clear these tags and the application can still be rejected.

## What's next

<Columns cols={3}>
  <Card title="Submit pre-collected documents" icon="file-arrow-up" href="/docs/submit-pre-collected-documents">
    Upload documents you already collected.
  </Card>

  <Card title="Verification requirements" icon="shield-check" href="/docs/verification-requirements">
    What Rain requires and screens for.
  </Card>

  <Card title="Application states" icon="list-check" href="/docs/application-states">
    Track the outcome after you submit.
  </Card>
</Columns>
