Appearance
Bulk operations
Bulk endpoints allow you to create, update, delete, publish, or unpublish multiple resources in a single request. Each request runs in a database transaction and accepts up to 100 resources.
Limits
Sending more than 100 items is rejected before anything is written:
| Endpoint | Status | Code |
|---|---|---|
| Bulk create, bulk update | 422 | VALIDATION_ERROR (on resources / updates) |
| Bulk delete, publish, unpublish | 400 | BULK_LIMIT_EXCEEDED |
Response format
All bulk endpoints return per-item results. The success key depends on the endpoint (created, updated, deleted, published or unpublished), and index is the item's position in your request:
json
{
"data": {
"created": [ { "id": "xR4mN2vBwQy7", "index": 0 }, { "id": "pL8wZ3kTnHc5", "index": 1 } ],
"failed": [ { "index": 2, "errors": { "email": ["The email field must be a valid email address."] } } ]
},
"meta": {
"total": 3,
"created": 2,
"failed": 1
}
}Failed items take one of two shapes:
| Shape | When |
|---|---|
{ "index": 2, "errors": { "<field>": ["..."] } } | The item's values failed validation (bulk create) |
{ "index": 2, "id": "gKqv6dx6pBk9", "error": "forbidden" } | The token may not update or delete this resource (bulk update, bulk delete) |
Failed items are skipped; the other items are still written.
Status codes
| Endpoint | Status |
|---|---|
| Bulk create | 201 Created if every item succeeded, 207 Multi-Status if at least one failed |
| Bulk update, delete, publish, unpublish | 200 OK, even when failed is not empty (check meta.failed) |
Unknown IDs
If an ID does not match a resource of this blueprint, the whole request is aborted with 404 RESOURCE_NOT_FOUND and rolled back: nothing is written, including the items before it.
Bulk create
POST /v2/resources/{blueprint}/bulkRequires the create or publish ability.
Request body
json
{
"resources": [
{
"attributes": {
"title": "Post 1",
"slug": "post-1"
}
},
{
"title": "Post 2",
"slug": "post-2"
}
],
"published_at": "2026-02-01T12:00:00Z"
}Each item is either { "attributes": { … } } or the fields directly (flat format). Items are validated like a single create, and reference fields accept the IDs the API returns.
published_at is set once, at the top level, and applies to every created resource. Omit it to create drafts.
Bulk update
PATCH /v2/resources/{blueprint}/bulkRequires the update ability, checked for each resource.
Request body
json
{
"updates": [
{
"id": "gKqv6dx6pBk9",
"attributes": {
"title": "Updated title"
}
},
{
"id": "xR4mN2vBwQy7",
"title": "Another update",
"published_at": "2026-03-01T09:00:00Z"
}
]
}Each item needs an id, plus either attributes or the fields directly (flat format). Updates are partial, like PATCH. An item's published_at sets that resource's publication date (null unpublishes it).
Bulk delete
DELETE /v2/resources/{blueprint}/bulkRequires the delete ability, checked for each resource.
Request body
json
{
"ids": ["gKqv6dx6pBk9", "xR4mN2vBwQy7"]
}Bulk publish
POST /v2/resources/{blueprint}/bulk-publishRequires the publish ability on the blueprint (403 otherwise).
Request body
json
{
"ids": ["gKqv6dx6pBk9", "xR4mN2vBwQy7"],
"published_at": "2026-02-01T12:00:00Z"
}If published_at is omitted, the current date and time is used. A future date schedules the resources. See Publishing.
Bulk unpublish
POST /v2/resources/{blueprint}/bulk-unpublishRequires the publish ability on the blueprint (403 otherwise). Sets published_at to null.
Request body
json
{
"ids": ["gKqv6dx6pBk9", "xR4mN2vBwQy7"]
}