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

# Poll upload status

> Check the status of an asynchronous face enrollment upload until it reaches a terminal state.

Poll this endpoint with the `uploadId` returned from [Upload faces](/api-reference/internal-blacklist/face-enrollment/upload-faces) until `status` is a terminal value (`2`, `3`, or `4`).

Returns `404` if the upload does not exist or is not owned by your company.

## Status values

| Value | Meaning                                          | Terminal? |
| ----- | ------------------------------------------------ | --------- |
| `0`   | Pending — queued, not yet started                | No        |
| `1`   | Processing — enrollment in progress              | No        |
| `2`   | Completed — all images enrolled                  | Yes       |
| `3`   | Failed — no images enrolled                      | Yes       |
| `4`   | Partially completed — some enrolled, some failed | Yes       |


## OpenAPI

````yaml api-reference/internal-blacklist/biometric-blacklist.openapi.json GET /api/v3/biometric-blacklists/uploads/{uploadId}
openapi: 3.0.3
info:
  title: Internal Blacklist — Biometric Blacklist API
  description: >-
    Enroll face images into biometric blacklists (watchlists). Enrollment is
    asynchronous.
  version: 1.0.0
servers:
  - url: https://{environment-subdomain}.idmetagroup.com
    description: Your environment (replace `{environment-subdomain}`)
    variables:
      environment-subdomain:
        default: integrate
        description: IDmeta environment subdomain
security:
  - bearerAuth: []
tags:
  - name: Internal Blacklist
    description: Biometric blacklist enrollment endpoints
paths:
  /api/v3/biometric-blacklists/uploads/{uploadId}:
    get:
      tags:
        - Internal Blacklist
      summary: Poll upload status
      description: >-
        Poll with the uploadId returned from the upload endpoint until status is
        a terminal value (2, 3, or 4).
      operationId: getBiometricBlacklistUploadStatus
      parameters:
        - name: uploadId
          in: path
          required: true
          description: The upload UUID returned from the upload faces endpoint.
          schema:
            type: string
            format: uuid
            example: a1b2c3d4-0000-0000-0000-000000000000
        - name: Accept
          in: header
          required: false
          schema:
            type: string
            default: application/json
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
            example: Bearer {your_api_token}
      responses:
        '200':
          description: Upload status retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadStatusResponse'
              example:
                success: true
                data:
                  uploadId: a1b2c3d4-0000-0000-0000-000000000000
                  blacklistId: 95038081-0000-0000-0000-000000000000
                  status: 2
                  statusLabel: Completed
                  numberOfImages: 3
                  numberOfSucceededImages: 3
                  numberOfFailedImages: 0
                  createdAt: 2026-07-28 03:08:15+0000
                  updatedAt: 2026-07-28 03:09:02+0000
                createdAt: 2026-07-28 03:09:02+0000
        '404':
          description: Upload not found or not owned by your company
components:
  schemas:
    UploadStatusResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          $ref: '#/components/schemas/UploadStatusData'
        createdAt:
          type: string
          description: Response timestamp.
    UploadStatusData:
      type: object
      properties:
        uploadId:
          type: string
          format: uuid
        blacklistId:
          type: string
          format: uuid
        status:
          type: integer
          description: 'Upload status. Terminal values: `2`, `3`, `4`.'
        statusLabel:
          type: string
          description: Human-readable status label.
          example: Completed
        numberOfImages:
          type: integer
        numberOfSucceededImages:
          type: integer
        numberOfFailedImages:
          type: integer
        createdAt:
          type: string
        updatedAt:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Use `Bearer {your_api_token}` in the Authorization header, plus HMAC
        signature headers. Same authentication as other v3 endpoints.

````