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

# POST /verification/multiupload — Upload Documents

> Upload one or more document URLs for asynchronous verification processing. Returns file UUIDs and batch ID for tracking.

This API allows you to upload multiple document URLs for processing in a single request. Atlas begins extraction and classification asynchronously after upload.

Each document must be accessible via a public or pre-signed URL.

## Endpoint

POST /verification/multiupload

## Request headers

<ParamField header="Token" type="string" required>
  JWT access token used for authentication.
</ParamField>

## Request body

<ParamField body="flow_id" type="string" required>
  Unique identifier for the verification flow. Obtained from the flow initialization API.
</ParamField>

<ParamField body="file_urls" type="array" required>
  List of documents to be processed.
</ParamField>

<ParamField body="file_urls[].file_url" type="string" required>
  Pre-signed or publicly accessible URL of the document.
</ParamField>

<ParamField body="file_urls[].document_id" type="string" required>
  Your internal identifier for the document. This is echoed back in responses.
</ParamField>

<ParamField body="file_urls[].submission_mode" type="string">
  Indicates how the document was submitted (for example: `upload`, `camera`, `whatsapp`). Optional but useful for analytics and audit.
</ParamField>

## Response

<ResponseField name="file_uuid" type="string">
  Unique identifier generated by Atlas for each uploaded document.
</ResponseField>

<ResponseField name="batch_id" type="string">
  Batch identifier grouping all documents uploaded in this request. Use this to poll extraction results.
</ResponseField>

<ResponseField name="document_id" type="string">
  Echo of your provided document identifier.
</ResponseField>

<ResponseField name="file_url" type="string">
  URL of the uploaded file.
</ResponseField>

## Example

<CodeGroup>
  ```bash Request theme={null}
  curl --request POST \
    --url https://api.helloatlas.in/v2/verification/multiupload \
    --header "Token: <TOKEN>" \
    --header "Content-Type: application/json" \
    --data '{
      "flow_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "file_urls": [
        {
          "file_url": "https://your-bucket.s3.ap-south-1.amazonaws.com/pan.jpg",
          "document_id": "doc_1",
          "submission_mode": "upload"
        },
        {
          "file_url": "https://your-bucket.s3.ap-south-1.amazonaws.com/aadhaar.jpg",
          "document_id": "doc_2",
          "submission_mode": "camera"
        }
      ]
    }'
  ```

  ```json Response theme={null}
  [
    {
      "file_url": "https://altas-integration-docs.s3.ap-south-1.amazonaws.com/Image_20250623_181139_394.jpeg",
      "file_uuid": "03f0341d-c933-46fc-a30c-ffb3ea8afd1d",
      "batch_id": "BATCH-55193-DRTYJ-20250811084615",
      "document_id": "1234"
    }
  ]
  ```
</CodeGroup>

## Error responses

| Status | Meaning                                                                                |
| ------ | -------------------------------------------------------------------------------------- |
| `400`  | `batch_id is required` — the batch identifier was not provided in the request.         |
| `401`  | `Invalid or expired token` — the authentication token is missing, invalid, or expired. |

<Note>
  Ensure all `file_url` values are accessible from Atlas servers. Expired or private URLs will result in processing failures.
</Note>
