---
title: "Start an asynchronous bulk upload of entries via CSV."
method: POST
path: "/application-lists/{listId}/entries/bulk-import"
tags: ["application-list-entries"]
---

# Start an asynchronous bulk upload of entries via CSV.

`POST /application-lists/{listId}/entries/bulk-import`

## Request

- Base URL: `/` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/application-lists/{listId}/entries/bulk-import`
- Auth: none declared

Validates the target application list and CSV structure up front, then enqueues a background job that validates the uploaded rows and, if valid, automatically inserts all rows in a single transaction. If row validation or commit fails, the entire transaction is rolled back and the job ends in `FAILED`. Row-validation failures provide actionable input feedback; unexpected processing failures return only a generic message and the job reference to quote to support. Files must not exceed 5MB or contain more than 1,050 application entries (excluding the header). Either limit is rejected with HTTP 413 before a background job is created. Split larger uploads into smaller files.

## Path parameters

- `listId` string, uuid, required

## Request body `multipart/form-data`

- BulkUploadApplicationListEntriesRequest
  - `file` string, binary

## Response `202`

Job accepted. Poll the URL in the Location header for status.

- JobAcknowledgement: Acknowledgement returned when a background job is created.
  - `id` string, uuid, required: Unique identifier for the job, in UUID v4 format.
  - `type` 'ACTIVITY_AUDIT_REPORT' | 'FEES_REPORT' | 'LIST_MAINTENANCE_REPORT' | 'SEARCH_WARRANTS_REPORT' | 'WORKLOAD_REPORT' | 'DURATION_REPORT' | 'PRIVATE_PROSECUTORS_INDEX_REPORT' | 'BULK_UPLOAD_ENTRIES', required: The type of the job being polled by the user.
  - `status` 'RECEIVED' | 'VALIDATING' | 'PROCESSING' | 'FAILED' | 'COMPLETED', required: The status of the job being polled by the user.
  - `createdCount` integer: Number of applications imported by this job, excluding the CSV header and including subsequently soft-deleted applications. Available only when polling a completed BULK_UPLOAD_ENTRIES job; omitted from all other responses. Counted from retained job-to-application mappings, not the current list size.
  - `mainFeeTotal` number: Current main fees in GBP for non-deleted applications created by this upload, regardless of payment or remission status. Available only when polling a completed BULK_UPLOAD_ENTRIES job; zero when no applicable fees remain. Calculated on read, so later changes to applications or associated fees can change this value. Omitted from all other responses.
  - `offsiteFeeTotal` number: Current applicable offsite fees in GBP for non-deleted applications created by this upload, regardless of payment or remission status. Available only when polling a completed BULK_UPLOAD_ENTRIES job; zero when no applicable fees remain. Calculated on read, not an upload-time snapshot. Omitted from all other responses.
  - `totalFeeValue` number: Sum of mainFeeTotal and offsiteFeeTotal in GBP. Available only when polling a completed BULK_UPLOAD_ENTRIES job. Zero when no applicable fees remain; calculated on read. Omitted from all other responses.
  - `error_description` string: Details of a failed job. Bulk-upload validation failures may include actionable input errors; unexpected bulk-upload processing failures use a generic message and identify the job reference to quote to support.

## Other responses

- `400`: Invalid request parameters.
- `401`: Authentication required or token invalid.
- `403`: Authenticated but not permitted to perform this action.
- `404`: The requested resource was not found.
- `409`: Conflict with the current state of the resource.
- `413`: Request entity is too large to be processed.
- `415`: The server does not support the media type of the request.
- `500`: Unexpected server error.

## Changes

- **2026-10-08** `d4587b3d88ec`: 1 info
  - added the optional property `createdCount` to the response with the `202` status
- **2026-09-17** `22203fd337b7`: 3 info
  - added the optional property `mainFeeTotal` to the response with the `202` status
  - added the optional property `offsiteFeeTotal` to the response with the `202` status
  - added the optional property `totalFeeValue` to the response with the `202` status
- **2026-06-25** `0b46c5a78107`: 2 info
  - added the non-success response with the status `404`
  - added the non-success response with the status `409`

[Operation history](https://skmtc.dev/hm-courts-and-tribunals-service/apis/applications-register-api/changes/application-lists/:listId/entries/bulk-import/post.md)

---

[API](https://skmtc.dev/hm-courts-and-tribunals-service/apis/applications-register-api.md) - [All operations](https://skmtc.dev/hm-courts-and-tribunals-service/apis/applications-register-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hm-courts-and-tribunals-service/apis/applications-register-api/revisions/36521cfe1ab7?raw)
