Skip to content

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:

EndpointStatusCode
Bulk create, bulk update422VALIDATION_ERROR (on resources / updates)
Bulk delete, publish, unpublish400BULK_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:

ShapeWhen
{ "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 ​

EndpointStatus
Bulk create201 Created if every item succeeded, 207 Multi-Status if at least one failed
Bulk update, delete, publish, unpublish200 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}/bulk

Requires 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}/bulk

Requires 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}/bulk

Requires the delete ability, checked for each resource.

Request body ​

json
{
  "ids": ["gKqv6dx6pBk9", "xR4mN2vBwQy7"]
}

Bulk publish ​

POST /v2/resources/{blueprint}/bulk-publish

Requires 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-unpublish

Requires the publish ability on the blueprint (403 otherwise). Sets published_at to null.

Request body ​

json
{
  "ids": ["gKqv6dx6pBk9", "xR4mN2vBwQy7"]
}

Diggama Documentation