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.
POST
https://example.thoughtindustries.com/incoming/v2/users/certify/bulkExample 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.
| Name | Type | Required | Location | Description |
|---|---|---|---|---|
users | BulkCertifyUserInput[] | Yes | body | Array of user–certification objects (see below). Max 1000. |
Each object in users (BulkCertifyUserInput):
| Field | Type | Required | Description |
|---|---|---|---|
userId | uuid | One of userId / email / externalCustomerId | ID of the user to certify. |
email | string | One of userId / email / externalCustomerId | Email of the user to certify. |
externalCustomerId | string | One of userId / email / externalCustomerId | External customer ID of the user to certify. |
resourceType | CertificateResourceType | Yes | course or learningPath. |
resourceId | uuid | Yes | UUID of the course or learning path to certify the user against. |
expirationDate | date | No | ISO 8601 date the certificate expires. |
issuedAt | date | No | ISO 8601 date to record as the certificate's issue date. |
recertificationDate | date | No | ISO 8601 date for recertification. Not allowed when resourceType is learningPath. |
sendEmail | boolean | No | When 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
| Field | Type | Description |
|---|---|---|
grantedCount | integer | Number of certifications successfully granted. |
errors | BulkCertifyUserError[] | List of errors for individual users whose certifications could not be granted. |
errors.userId | uuid | Unique identifier of the user whose certification grant failed. |
errors.email | string | Email address of the user whose certification grant failed. |
errors.externalCustomerId | string | External customer identifier associated with the user whose certification grant failed. |
errors.resourceId | uuid | Unique identifier of the certification resource that could not be granted. |
errors.error | string | Human-readable message describing why the certification grant failed. |
errors.record | string | Raw record string associated with the failed entry, useful for debugging bulk input. |