Bulk Update Certificate Templates
Bulk-updates one or more certificate templates in a single request
Bulk-updates one or more certificate templates in a single request.
POST
https://example.thoughtindustries.com/incoming/v2/content/certificate-templates/bulk/updateExample request — rename a template
curl -X POST "https://example.thoughtindustries.com/incoming/v2/content/certificate-templates/bulk/update" \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"templates": [
{
"id": "ce2700aa-1111-2222-3333-444455556666",
"title": "Workplace Safety — Certificate (2026)"
}
]
}'Example request — change expiration and recertification
curl -X POST "https://example.thoughtindustries.com/incoming/v2/content/certificate-templates/bulk/update" \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"templates": [
{
"id": "ce2700aa-1111-2222-3333-444455556666",
"expirationDays": 730,
"recertificationAction": "resetProgress",
"recertificationAutoReset": true
}
]
}'Example request — update multiple templates (reposition labels, detach CAM asset)
curl -X POST "https://example.thoughtindustries.com/incoming/v2/content/certificate-templates/bulk/update" \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"templates": [
{
"id": "ce2700aa-1111-2222-3333-444455556666",
"labels": [
{ "certificateFieldId": "fie1d000-aaaa-bbbb-cccc-ddddeeeeffff", "x": 100, "y": 200, "textAlign": "left", "fontSize": 18, "fontColor": "#333333" }
]
},
{
"id": "ce2700bb-1111-2222-3333-444455556666",
"assetLibraryId": null
}
]
}'Parameters
Requires the courses.edit.settings permission.
| Name | Type | Required | Location | Description |
|---|---|---|---|---|
templates | UpdateCertificateTemplateInput[] | Yes | body | Array of certificate template objects to update (see below). |
Each object in templates (UpdateCertificateTemplateInput):
| Field | Type | Required | Description |
|---|---|---|---|
id | uuid | Yes | UUID of the certificate template to update. |
title | string | No | New template title (non-empty, max 500 characters). |
expirationDate | date | No | ISO 8601 fixed expiration date. Mutually exclusive with expirationDays. |
expirationDays | integer | No | Days after issuance until expiration (must be > 0). Mutually exclusive with expirationDate. |
recertificationAction | CertificateTemplateRecertificationActionType | No | One of resetProgress, recertifyInSession, actionUrl. Requires an expiration to be set. recertifyInSession is course-only. |
recertificationInstructions | string | No | Instructions shown to the learner. Requires recertificationAction. |
recertificationActionText | string | No | Button text. Required when recertificationAction is actionUrl; not allowed otherwise. |
recertificationActionUrl | url | No | Target URL. Required when recertificationAction is actionUrl; not allowed otherwise. |
recertificationAfterDays | integer | No | Days before recertification. Required (> 0) when recertificationAction is recertifyInSession; not allowed otherwise. |
recertificationAutoReset | boolean | No | Only valid when recertificationAction is resetProgress. |
userCustomFieldSlug | slug | No | User custom field slug. Must be provided together with userCustomFieldValue. |
userCustomFieldValue | string | No | User custom field value. Must be provided together with userCustomFieldSlug. |
customCss | string | No | Custom CSS for the certificate (must be valid CSS). |
labels | CertificateTemplateLabelInput[] | No | Positioned certificate fields (see below). |
assetLibraryId | uuid | No | Central Asset Manager certificate template asset ID. Set to null to detach. Mutually exclusive with assetUploadUrl. |
assetUploadUrl | url | No | External image URL for the certificate background, processed in a background job. Mutually exclusive with assetLibraryId. |
Each object in labels (CertificateTemplateLabelInput):
| Field | Type | Required | Description |
|---|---|---|---|
certificateFieldId | uuid | Yes | ID of the certificate field to place. |
x | integer | Yes | Horizontal position of the field. |
y | integer | Yes | Vertical position of the field. |
textAlign | TextAlignment | Yes | left or center. |
fontSize | integer | Yes | Font size for the field. |
fontColor | HexColor | Yes | Hex color (e.g., #333333). |
Note: The
assetfield is not supported — useassetUploadUrl(external URL) orassetLibraryId(Central Asset Manager). Supplyingassetreturns a 400.
Example response
{
"createdCount": 0,
"updatedCount": 0,
"errors": [
{
"resourceId": "00000000-0000-0000-0000-000000000000",
"title": "string",
"error": "string",
"record": "string"
}
],
"warnings": [
"string"
],
"backgroundJob": {
"id": "00000000-0000-0000-0000-000000000000",
"type": "string",
"description": "string",
"status": "complete"
}
}Response fields
| Field | Type | Description |
|---|---|---|
createdCount | integer | Number of certificate templates created during the bulk operation. |
updatedCount | integer | Number of certificate templates successfully updated during the bulk operation. |
errors | BulkCertificateTemplateError[] | List of errors encountered for individual templates during the bulk operation. |
errors.resourceId | uuid | UUID of the certificate template that caused the error. |
errors.title | string | Human-readable title identifying the failed certificate template. |
errors.error | string | Description of the error that occurred for this template. |
errors.record | string | Serialized representation of the record that failed to process. |
warnings | string[] | Non-fatal warning messages generated during the bulk operation. |
backgroundJob | BackgroundJob | Background job created to process the bulk update asynchronously, if applicable. |
backgroundJob.id | uuid | Unique identifier of the background job. |
backgroundJob.type | string | Classification of the background job task. |
backgroundJob.description | string | Human-readable description of what the background job is processing. |
backgroundJob.status | BackgroundJobStatus | Current status of the background job (e.g., complete). |