Bulk Entry Content Operations
Bulk entry content operations provide an efficient way to create, update, delete, or export multiple entries simultaneously, reducing the number of API calls required for bulk content workflows. This feature is particularly useful when working with large datasets, as it significantly reduces the time and complexity required for handling a larger number of entries. The operation is asynchronous and returns immediately with a job ID that you can use to track progress.
For a full in-depth tutorial, see the Bulk entry content operations tutorial.
Limitations
- The maximum number of entries per request is subject to technical limits (currently 10,000 entries per bulk content operation)
- Create and update: entries must reference valid content types. Upload files follow standard upload size limits
- Export results are capped at 10,000 entries per job
- Export: signed download URLs in
result.files[].urlexpire after 1 hour - At most, there can only be one bulk operation in flight per space at a time. A new request returns
409 Conflictwhile another job is running
Upload file with entries to create/update/delete
https://upload.contentful.com or https://upload.eu.contentful.com for EU data residency customers.Uploads multiple entries for bulk creation, update, or deletion. The API returns an Upload resource that can be used to trigger a bulk operation.
Upload entries for bulk create
To create new entries, omit sys.id for an auto-generated ID, or include sys.id to use a specific entry ID. If an entry with that ID already exists, the item fails with EntryExistsError.
Upload entries for bulk update
To update existing entries, include the sys.id and sys.version fields with the existing entry ID and current version. sys.version is required and must match the current entry version.
Create bulk operation
Creates a bulk operation for entries using an upload ID from a previous bulk entry content upload. The operation processes entries asynchronously and returns immediately with a bulk operation ID.
Create bulk operation export
Creates a bulk operation to export entries matching an optional query.
See allowed export query parameters for the supported filters. Omit query or pass an empty object to export all entries in the environment, capped at 10,000 entries.
Poll GET .../bulk_operations/{bulk_operation_id} until the job completes. When sys.status is completed, result.files contains signed URLs for ZIP archives.
See archive contents for the ZIP layout and metadata.json format.
Get status of all bulk operations
Retrieves bulk operations for the specified space and environment (cursor-paginated). Each item in items includes sys only (no payload, result, or error).
Get status of a single bulk operation
Retrieves the status of a specific bulk operation by ID.
The sys.status field indicates the current state of the operation:
There is an important distinction between bulk operation errors and individual entry errors. When sys.status is "failed", the entire bulk operation failed due to a system error (e.g., the upload file was invalid, the operation timed out, or there was a server error). When sys.status is "completed", the bulk operation finished successfully.
For create, update, and delete jobs, check result.items to see the status of individual entries. Each item has a status of "succeeded" or "failed". Successful items include an entity object with the entry sys.type and sys.id. Failed items include an error object with sys.id and message. Individual entry failures typically occur due to validation errors (e.g., missing required fields, invalid field values, or content type mismatches).
For export jobs (bulkType EntriesExport), a completed job returns result.files: signed download URLs for ZIP archives of exported entry JSON. Each file has url.href and url.expiresAt (URLs expire after 1 hour). A new URL is signed on every GET.