---
title: "Bulk upload status webhook"
method: POST
path: "bulk-upload"
tags: ["Webhooks"]
---

# Bulk upload status webhook

`POST bulk-upload` (webhook)

Webhook that is called when a bulk user upload job completes or fails.
This endpoint should be implemented by clients of the UMAaas API.

### Authentication
The webhook includes a signature in the `X-UMAaas-Signature` header that allows you to verify that the webhook was sent by UMAaas.
To verify the signature:
1. Get the UMAaas public key provided to you during integration
2. Decode the base64 signature from the header
3. Create a SHA-256 hash of the request body
4. Verify the signature using the public key and the hash

If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.

This webhook is sent when a bulk upload job completes or fails, providing detailed information about the results.

## Payload

- BulkUploadWebhookRequest
  - `timestamp` string, date-time, required — ISO8601 timestamp when the webhook was sent (can be used to prevent replay attacks)
  - `webhookId` string, required — Unique identifier for this webhook delivery (can be used for idempotency)
  - `type` 'INCOMING_PAYMENT' | 'OUTGOING_PAYMENT' | 'TEST' | 'BULK_UPLOAD' | 'INVITATION_CLAIMED', required — Type of webhook event, used by the receiver to identify which webhook is being received
  - `bulkUserImportJob` BulkUserImportJob, required
    - `jobId` string, required — Unique identifier for the bulk import job
    - `status` 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED', required — Current status of the job
    - `progress` object, required
      - `total` integer, required — Total number of users to process
      - `processed` integer, required — Number of users processed so far
      - `successful` integer, required — Number of users successfully created
      - `failed` integer, required — Number of users that failed to create
    - `errors` object[] — Detailed error information for failed entries
      - `correlationId` string, required — Platform user ID or row number for the failed entry
      - `error` Error, required
        - `code` string — Error code
        - `message` string — Error message
        - `details` object — Additional error details
    - `completedAt` string, date-time — Timestamp when the job completed (only present for COMPLETED or FAILED status)

## Acknowledgement `200`

Webhook received successfully

## Other responses

- `400` — Bad request
- `401` — Unauthorized - Signature validation failed
- `409` — Conflict - Webhook has already been processed (duplicate webhookId)

---

[API](https://skmtc.net/lightsparkdev/apis/uma-as-a-service-umaaas-api.md) · [All operations](https://skmtc.net/lightsparkdev/apis/uma-as-a-service-umaaas-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lightsparkdev/uma-as-a-service-umaaas-api/revisions/2e2b5ba6d69b/schema)
