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).
/content-blocks/bulkAuthorizationBasic auth · headerrequiredBasic Auth with clientId as username and clientSecret as password
application/jsonupdatesBulkUpdateContentBlockItem[]requiredPer-block patches. Correlates with index in the batch response.
Show propertiesHide properties
BulkUpdateContentBlockItemidstringrequiredContent block ID to update.
namestringdescriptionstringstatusstringChanging status on blocks with published grades fails with forbidden for that item.
PUBLISHEDCOMING_SOONDRAFTDISABLEDpositionintegerNew position. Invalid moves that break block conditions fail with validation_failed or conflict for that item.
dueDatestring<date-time> | nullstartDatestring<date-time> | nullexpectedLearnTimeMinutesinteger | nullidsstring[]requiredBlock IDs to update with the same update payload.
updateobjectrequiredShow propertiesHide properties
namestringdescriptionstringstatusstringPUBLISHEDCOMING_SOONDRAFTDISABLEDdueDatestring<date-time> | nullstartDatestring<date-time> | nullexpectedLearnTimeMinutesinteger | nullBatch processed. Each updates entry (or each ids entry for uniform updates) maps to results[index].
dataBatchResultrequiredShared v4 batch shape: per-item results with partial-success reporting.
Show propertiesHide properties
resultsBatchItemResult[]requiredOne entry per input item, in request order.
Show propertiesHide properties
BatchItemResultindexintegerrequiredZero-based index of this item in the request array (contentBlocks, updates, or ids).
idstringResource ID when known (block id for update/delete, or created id on success).
statusstringrequiredWhether this individual item was processed successfully.
succeededfaileddataobjectResource-specific payload when status is succeeded.
errorBatchItemErrorFailure details when status is failed.
Show propertiesHide properties
codestringrequiredMachine-readable error code (same vocabulary as RFC 7807 responses).
bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errordetailstringrequiredHuman-readable explanation for this item failure.
fieldstringOptional field path when the failure maps to a specific input field.
activeSessionobjectPresent when a time-tracking start item conflicts with a running session.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredsummaryBatchSummaryrequiredAggregate counts for the batch operation.
Show propertiesHide properties
totalintegerrequiredTotal items in the request.
succeededintegerrequiredItems processed successfully.
failedintegerrequiredItems that failed validation or business rules.
metaResponseMetarequiredShow propertiesHide properties
requestIdstringrequiredtimestampstring<date-time>requiredversionstringrequiredv4watermarkstring<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.
Bad Request
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredUnauthorized
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredForbidden
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredUnprocessable Entity — validation or business rule error
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredToo Many Requests — 1000 requests per minute per institution. Includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (ISO-8601), and Retry-After (seconds).
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredInternal Server Error
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequired