> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.hopnow.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload Account Document

> Attach an entity (business) document to the account as a base64 data URI

Documents carry the entity (business) file evidence behind KYB — e.g. certificate of incorporation, proof of address, board resolution. They attach to an account. Files are submitted as base64 data URIs. The complete JSON request body is limited to 21 MiB, including base64 expansion and JSON/data-URI overhead; an oversized request returns `413`. In practice, the largest raw file is approximately 15.75 MiB and may be slightly smaller depending on metadata.

Uploading a document accepts the file with status `staged` and recomputes the account's onboarding requirements. Once all requirements are complete, Hop automatically submits the account — including its staged documents — for verification review, moving the account to `under_review` and each document to `submitted`. Uploads are blocked once the account's `kyc_status` is terminal (`approved` / `rejected`).

<Note>
  These endpoints cover entity documents only; an associated person's identity documents are captured inside their Verification Session, not uploaded here.
</Note>

| Enum     | Values                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`   | `certificate_of_incorporation`, `articles_of_association`, `memorandum_of_association`, `constitution`, `by_laws`, `operating_agreement`, `regulatory_license`, `certificate_of_good_standing`, `register_of_directors`, `register_of_shareholders`, `organization_chart`, `proof_of_address`, `bank_statement`, `board_resolution`, `source_of_funds`, `source_of_wealth`, `aml_policy`, `proof_of_directorship`, `corporate_structure`, `other` |
| `status` | `staged`, `submitted`                                                                                                                                                                                                                                                                                                                                                                                                                             |

This endpoint attaches an entity (business) document to the account and recomputes onboarding requirements. Fails with `422` when `kyc_status` is terminal.

## Path Parameters

<ParamField path="customer_id" type="string" required>
  Id of the Platform customer (e.g. `cus_…`).
</ParamField>

<ParamField path="account_id" type="string" required>
  Id of the account (e.g. `acct_…`).
</ParamField>

## Request Body

<ParamField body="requirement_key" type="string" required>
  Requirement key returned by GET Account (`requirements.missing[].key` / `requirements.issues[].key`) that this document satisfies. Every upload must claim a key the account can satisfy — an unknown key, or a `type` the claimed requirement does not accept, is rejected with `422` listing the allowed values.
</ParamField>

<ParamField body="type" type="enum" required>
  Account document type — see the enum table above.
</ParamField>

<ParamField body="file" type="string" required>
  Document file as a base64 data URI (e.g. `data:application/pdf;base64,...`). The complete request body is limited to 21 MiB, including base64 and JSON overhead; the practical raw-file maximum is approximately 15.75 MiB.
</ParamField>

<ParamField body="file_name" type="string | null">
  Original file name, for your own reference. Max 255 characters.
</ParamField>

## Response

Returns `200` with the new resource's `id`. Use [Get Document](/va/documents/get-document) to retrieve the full object.

<ResponseField name="id" type="string">
  Id of the newly created document (e.g. `doc_…`).
</ResponseField>

<RequestExample>
  ```json Request theme={null}
  {
    "requirement_key": "company.certificate_of_incorporation",
    "type": "certificate_of_incorporation",
    "file": "data:application/pdf;base64,JVBERi0xLjcK...",
    "file_name": "acme-coi.pdf"
  }
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "doc_5kqw8n2v4x7c1m9p3r6t0y2u"
  }
  ```
</ResponseExample>
