Zum Inhalt springen
Esc
↑↓navigieren↵öffnen⌘Jvorschau

Bulk update content blocks

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
Authorization
AuthorizationBasic auth · headerrequired

Basic Auth with clientId as username and clientSecret as password

Request body
requiredapplication/json
One of:
object
updatesBulkUpdateContentBlockItem[]required

Per-block patches. Correlates with index in the batch response.

min items 1 · max items 100
Show properties
Array of BulkUpdateContentBlockItem
idstringrequired

Content block ID to update.

namestring
min length 1 · max length 100
descriptionstring
max length 100000
statusstring

Changing status on blocks with published grades fails with forbidden for that item.

Allowed:PUBLISHEDCOMING_SOONDRAFTDISABLED
positioninteger

New position. Invalid moves that break block conditions fail with validation_failed or conflict for that item.

min 0
dueDatestring<date-time> | null
startDatestring<date-time> | null
expectedLearnTimeMinutesinteger | null
min 1
object
idsstring[]required

Block IDs to update with the same update payload.

min items 1 · max items 100
updateobjectrequired
Show properties
namestring
min length 1 · max length 100
descriptionstring
max length 100000
statusstring
Allowed:PUBLISHEDCOMING_SOONDRAFTDISABLED
dueDatestring<date-time> | null
startDatestring<date-time> | null
expectedLearnTimeMinutesinteger | null
min 1
Responses
200

Batch processed. Each updates entry (or each ids entry for uniform updates) maps to results[index].

dataBatchResultrequired

Shared v4 batch shape: per-item results with partial-success reporting.

Show properties
resultsBatchItemResult[]required

One entry per input item, in request order.

Show properties
Array of BatchItemResult
indexintegerrequired

Zero-based index of this item in the request array (contentBlocks, updates, or ids).

min 0
idstring

Resource ID when known (block id for update/delete, or created id on success).

statusstringrequired

Whether this individual item was processed successfully.

Allowed:succeededfailed
dataobject

Resource-specific payload when status is succeeded.

errorBatchItemError

Failure details when status is failed.

Show properties
codestringrequired

Machine-readable error code (same vocabulary as RFC 7807 responses).

Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
detailstringrequired

Human-readable explanation for this item failure.

fieldstring

Optional field path when the failure maps to a specific input field.

activeSessionobject

Present when a time-tracking start item conflicts with a running session.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present when a time-tracking interval overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
summaryBatchSummaryrequired

Aggregate counts for the batch operation.

Show properties
totalintegerrequired

Total items in the request.

min 0
succeededintegerrequired

Items processed successfully.

min 0
failedintegerrequired

Items that failed validation or business rules.

min 0
metaResponseMetarequired
Show properties
requestIdstringrequired
timestampstring<date-time>required
versionstringrequired
Allowed:v4
watermarkstring<date-time>

Present on GET /users?updatedSince= pages. Taken at the first page minus a 60s overlap. Bound into pagination.next_cursor. Use it as the next updatedSince after deduping by user id. Delivery is inclusive >= and at-least-once.

400

Bad Request

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
401

Unauthorized

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
403

Forbidden

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
422

Unprocessable Entity — validation or business rule error

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
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).

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
500

Internal Server Error

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
Try it
Server
Authorization
Bodyapplication/json
Request
curl -X PATCH 'https://fuxam.app/api/v4/content-blocks/bulk' \
  -H 'Authorization: Basic YOUR_CREDENTIALS' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "updates": [
    {
      "id": "block_intro",
      "status": "PUBLISHED"
    },
    {
      "id": "block_missing",
      "status": "DRAFT"
    },
    {
      "id": "block_graded",
      "status": "DISABLED"
    }
  ]
}'
Response
{
  "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"
  }
}

War diese Seite hilfreich?