Skip to main content
https://.thoughtindustries.com

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.

POSThttps://example.thoughtindustries.com/incoming/v2/content/certificate-templates/bulk/update

Example 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.

NameTypeRequiredLocationDescription
templatesUpdateCertificateTemplateInput[]YesbodyArray of certificate template objects to update (see below).

Each object in templates (UpdateCertificateTemplateInput):

FieldTypeRequiredDescription
iduuidYesUUID of the certificate template to update.
titlestringNoNew template title (non-empty, max 500 characters).
expirationDatedateNoISO 8601 fixed expiration date. Mutually exclusive with expirationDays.
expirationDaysintegerNoDays after issuance until expiration (must be > 0). Mutually exclusive with expirationDate.
recertificationActionCertificateTemplateRecertificationActionTypeNoOne of resetProgress, recertifyInSession, actionUrl. Requires an expiration to be set. recertifyInSession is course-only.
recertificationInstructionsstringNoInstructions shown to the learner. Requires recertificationAction.
recertificationActionTextstringNoButton text. Required when recertificationAction is actionUrl; not allowed otherwise.
recertificationActionUrlurlNoTarget URL. Required when recertificationAction is actionUrl; not allowed otherwise.
recertificationAfterDaysintegerNoDays before recertification. Required (> 0) when recertificationAction is recertifyInSession; not allowed otherwise.
recertificationAutoResetbooleanNoOnly valid when recertificationAction is resetProgress.
userCustomFieldSlugslugNoUser custom field slug. Must be provided together with userCustomFieldValue.
userCustomFieldValuestringNoUser custom field value. Must be provided together with userCustomFieldSlug.
customCssstringNoCustom CSS for the certificate (must be valid CSS).
labelsCertificateTemplateLabelInput[]NoPositioned certificate fields (see below).
assetLibraryIduuidNoCentral Asset Manager certificate template asset ID. Set to null to detach. Mutually exclusive with assetUploadUrl.
assetUploadUrlurlNoExternal image URL for the certificate background, processed in a background job. Mutually exclusive with assetLibraryId.

Each object in labels (CertificateTemplateLabelInput):

FieldTypeRequiredDescription
certificateFieldIduuidYesID of the certificate field to place.
xintegerYesHorizontal position of the field.
yintegerYesVertical position of the field.
textAlignTextAlignmentYesleft or center.
fontSizeintegerYesFont size for the field.
fontColorHexColorYesHex color (e.g., #333333).

Note: The asset field is not supported — use assetUploadUrl (external URL) or assetLibraryId (Central Asset Manager). Supplying asset returns 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

FieldTypeDescription
createdCountintegerNumber of certificate templates created during the bulk operation.
updatedCountintegerNumber of certificate templates successfully updated during the bulk operation.
errorsBulkCertificateTemplateError[]List of errors encountered for individual templates during the bulk operation.
errors.resourceIduuidUUID of the certificate template that caused the error.
errors.titlestringHuman-readable title identifying the failed certificate template.
errors.errorstringDescription of the error that occurred for this template.
errors.recordstringSerialized representation of the record that failed to process.
warningsstring[]Non-fatal warning messages generated during the bulk operation.
backgroundJobBackgroundJobBackground job created to process the bulk update asynchronously, if applicable.
backgroundJob.iduuidUnique identifier of the background job.
backgroundJob.typestringClassification of the background job task.
backgroundJob.descriptionstringHuman-readable description of what the background job is processing.
backgroundJob.statusBackgroundJobStatusCurrent status of the background job (e.g., complete).