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

# Upload Activation Documents

> Upload documents required for provider activation.

Uploads one or more documents against the provider's `upload` activation step. Only applies to providers whose step sequence includes an `upload` step (currently `ftn`, `spid-ig`, `idin`).

## Request

<ParamField header="Authorization" type="string" required>
  `Bearer <API_KEY>` from Console > Developers > Workspace API Keys.
</ParamField>

<ParamField header="Content-Type" type="string" required>
  `multipart/form-data`
</ParamField>

### Path parameters

<ParamField path="client_id" type="string" required>
  Client identifier of the app.
</ParamField>

<ParamField path="provider_id" type="string" required>
  Provider identifier (e.g., `ftn`, `spid-ig`, `idin`).
</ParamField>

### Request body

<ParamField body="files" type="file[]" required>
  One or more files to upload, sent as the `files` field of a `multipart/form-data` request. Up to **10 files per request**, **10 MB per file**.
</ParamField>

## Response

<ResponseField name="documents" type="object[]">
  Array of document records created by this upload.

  <Expandable title="Document object">
    <ResponseField name="documentId" type="string">
      Unique identifier for the uploaded document.
    </ResponseField>

    <ResponseField name="fileName" type="string">
      Original file name as submitted.
    </ResponseField>

    <ResponseField name="fileSize" type="number">
      Size of the file in bytes.
    </ResponseField>

    <ResponseField name="contentType" type="string">
      MIME type of the uploaded file (e.g., `application/pdf`).
    </ResponseField>

    <ResponseField name="uploadedAt" type="string">
      ISO 8601 timestamp of when the document was uploaded.
    </ResponseField>

    <ResponseField name="state" type="string">
      Initial review state. Freshly uploaded documents start at `pending`; the Hopae team later transitions each one to `processed` or `rejected`. This response only reports state at the moment of upload — use [Get Activation Steps](/api-reference/workspace/activation/get-activation-steps) (`upload.uploaded[]`) to poll for later state changes.
    </ResponseField>
  </Expandable>
</ResponseField>

The `upload` step advances once the count of non-`rejected` uploads reaches the number of required entries in the step's `documents` catalog. Rejected uploads are retained in `upload.uploaded[]` so you can surface the reviewer's `note`, but they do not count toward step progression — re-upload a replacement to supersede them, or remove them with [Delete Activation Document](/api-reference/workspace/activation/delete-document) once they are no longer needed.

## Errors

| Code                             | HTTP | When you see it                                                                                                                                                                                              |
| -------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `VALIDATION_MISSING_PARAMETER`   | 400  | The `files` part of the multipart body was empty or absent.                                                                                                                                                  |
| `VALIDATION_STEP_NOT_APPLICABLE` | 400  | The provider's activation sequence does not include an `upload` step (e.g., a provider whose sequence is `enable → activation-form → api-key → activated`). `details.expectedSteps` lists the real sequence. |
| `RESOURCE_CONFLICT`              | 409  | The activation form has not been submitted yet. Call [Submit Activation Form](/api-reference/workspace/activation/submit-activation-form) first, then retry the upload.                                      |

<RequestExample>
  ```bash theme={null}
  curl -X POST \
    -H "Authorization: Bearer sk_workspace_test_..." \
    -F "files=@/path/to/spid_aggregation_agreement.docx" \
    "https://sandbox.api.hopae.com/connect/v1/apps/abc123/providers/spid-ig/activation/documents"
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "documents": [
      {
        "documentId": "0567eeb3-eda7-489a-9ba8-84f0ae3f301e",
        "fileName": "spid_aggregation_agreement.docx",
        "fileSize": 784044,
        "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        "uploadedAt": "2026-04-20T02:20:27.521Z",
        "state": "pending"
      }
    ]
  }
  ```
</ResponseExample>
