---
search:
  tags:
    - Content blocks
    - PATCH
seo:
  description: >-
    Updates multiple content blocks in one request. Scoped to your
    integration's… Reference for the PATCH /content-blocks/bulk endpoint in the
    Fuxam API v4.
sidebar:
  label: Bulk update content blocks
  badge: PATCH
title: Bulk update content blocks
type: openapi-operation
---
Updates multiple content blocks in one request. Scoped to your integration's institution via Basic Auth credentials.

**Batch semantics:** Each update is processed independently. Successful updates are committed even when siblings fail. Always **HTTP 200** with `data.results` and `data.summary`.

**Request shape (one of):**
- `{ updates: [{ id, ...fields }] }` — individual patches per block.
- `{ ids: [...], update: { ...fields } }` — same patch applied to every id.

**Common per-item failure codes:** `resource_not_found` (unknown or cross-tenant id), `forbidden` (status change on blocks with published grades), `validation_failed` / `conflict` (position breaks block conditions).

`PATCH /content-blocks/bulk`

**Request body** (`application/json`, required)

Request body example:

```json
{
  "updates": [
    {
      "id": "block_intro",
      "status": "PUBLISHED"
    },
    {
      "id": "block_missing",
      "status": "DRAFT"
    },
    {
      "id": "block_graded",
      "status": "DISABLED"
    }
  ]
}
```

**Responses**

- `200` — Batch processed. Each \`updates\` entry (or each \`ids\` entry for uniform updates) maps to \`results\[index\]\`.
- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `422` — Unprocessable Entity — validation or business rule error
- `429` — Too Many Requests — 1000 requests per minute per institution. Includes \`X-RateLimit-Limit\`, \`X-RateLimit-Remaining\`, \`X-RateLimit-Reset\` (ISO-8601), and \`Retry-After\` (seconds).
- `500` — Internal Server Error

Response example, 200:

```json
{
  "data": {
    "results": [
      {
        "index": 0,
        "id": "block_intro",
        "status": "succeeded",
        "data": {
          "id": "block_intro",
          "name": "Introduction",
          "status": "PUBLISHED"
        }
      },
      {
        "index": 1,
        "id": "block_missing",
        "status": "failed",
        "error": {
          "code": "resource_not_found",
          "detail": "Content block not found or not accessible: block_missing"
        }
      },
      {
        "index": 2,
        "id": "block_graded",
        "status": "failed",
        "error": {
          "code": "forbidden",
          "detail": "Blocks with published grades cannot change status: block_graded"
        }
      }
    ],
    "summary": {
      "total": 3,
      "succeeded": 1,
      "failed": 2
    }
  },
  "meta": {
    "requestId": "req_batch_example",
    "timestamp": "2026-07-07T12:00:00.000Z",
    "version": "v4"
  }
}
```
