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

Bulk Certify Users

Grants certifications to multiple users in a single request. Returns a count of successful grants and a list of any per-user errors

Grants certifications to multiple users in a single request. Returns a count of successful grants and a list of any per-user errors.

POSThttps://example.thoughtindustries.com/incoming/v2/users/certify/bulk

Example request — certify by user ID

curl -X POST "https://example.thoughtindustries.com/incoming/v2/users/certify/bulk" \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "users": [
    {
      "userId": "3f9a2b18-7c4d-4e2a-9b1f-0c5d6e7f8a90",
      "resourceType": "course",
      "resourceId": "8f2a1c34-5b6d-4e7f-9a01-2b3c4d5e6f70"
    }
  ]
}'

Example request — certify by email with options

curl -X POST "https://example.thoughtindustries.com/incoming/v2/users/certify/bulk" \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "users": [
    {
      "email": "[email protected]",
      "resourceType": "course",
      "resourceId": "8f2a1c34-5b6d-4e7f-9a01-2b3c4d5e6f70",
      "issuedAt": "2025-01-15",
      "expirationDate": "2026-01-15",
      "recertificationDate": "2025-12-15",
      "sendEmail": true
    }
  ]
}'

Example request — bulk certify multiple users

curl -X POST "https://example.thoughtindustries.com/incoming/v2/users/certify/bulk" \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "users": [
    {
      "userId": "3f9a2b18-7c4d-4e2a-9b1f-0c5d6e7f8a90",
      "resourceType": "course",
      "resourceId": "8f2a1c34-5b6d-4e7f-9a01-2b3c4d5e6f70"
    },
    {
      "externalCustomerId": "CRM-88213",
      "resourceType": "learningPath",
      "resourceId": "1d9e8f70-4a3b-4c2d-8e1f-0a9b8c7d6e5f",
      "expirationDate": "2026-06-30"
    }
  ]
}'

Parameters

Requires the users.edit permission. A maximum of 1000 entries may be certified per request.

NameTypeRequiredLocationDescription
usersBulkCertifyUserInput[]YesbodyArray of user–certification objects (see below). Max 1000.

Each object in users (BulkCertifyUserInput):

FieldTypeRequiredDescription
userIduuidOne of userId / email / externalCustomerIdID of the user to certify.
emailstringOne of userId / email / externalCustomerIdEmail of the user to certify.
externalCustomerIdstringOne of userId / email / externalCustomerIdExternal customer ID of the user to certify.
resourceTypeCertificateResourceTypeYescourse or learningPath.
resourceIduuidYesUUID of the course or learning path to certify the user against.
expirationDatedateNoISO 8601 date the certificate expires.
issuedAtdateNoISO 8601 date to record as the certificate's issue date.
recertificationDatedateNoISO 8601 date for recertification. Not allowed when resourceType is learningPath.
sendEmailbooleanNoWhen true, emails the learner about the certificate. No email is sent when omitted or false.

Example response

{
  "grantedCount": 0,
  "errors": [
    {
      "userId": "00000000-0000-0000-0000-000000000000",
      "email": "string",
      "externalCustomerId": "string",
      "resourceId": "00000000-0000-0000-0000-000000000000",
      "error": "string",
      "record": "string"
    }
  ]
}

Response fields

FieldTypeDescription
grantedCountintegerNumber of certifications successfully granted.
errorsBulkCertifyUserError[]List of errors for individual users whose certifications could not be granted.
errors.userIduuidUnique identifier of the user whose certification grant failed.
errors.emailstringEmail address of the user whose certification grant failed.
errors.externalCustomerIdstringExternal customer identifier associated with the user whose certification grant failed.
errors.resourceIduuidUnique identifier of the certification resource that could not be granted.
errors.errorstringHuman-readable message describing why the certification grant failed.
errors.recordstringRaw record string associated with the failed entry, useful for debugging bulk input.