Skip to main content

Certificates API

Lists issued course certificates within the API client's organization or group. The list includes valid, expired, and revoked certificates so an integration can evaluate each certificate's current status.

List certificates​

GET /api/v1/certificates

Required scope: training.read. See Authentication to obtain an access token.

curl --request GET \
--url "https://courses.e-learningcourses.com/api/v1/certificates?page=1&pageSize=1000" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json"

Query parameters​

ParameterTypeDefaultDescription
pageinteger1Page number, starting at 1.
pageSizeinteger1000Certificates per page, from 1 through 5000.

Response​

{
"data": [
{
"certificateId": "89254050-dfc4-467a-a7ea-745f81a77b63",
"certificateNumber": "CERT-2026-001042",
"email": "alex.morgan@example.com",
"learnerName": "Alex Morgan",
"courseId": "38f595b7-2ff4-4da6-bf24-91316399ec9a",
"courseName": "Supplier Code of Conduct",
"groupId": "fbc74870-3995-4f2c-b129-c2812b3e56c7",
"completedUtc": "2026-09-05T14:12:08Z",
"issuedUtc": "2026-09-05T14:13:00Z",
"expiresUtc": "2027-09-05T14:13:00Z",
"status": "valid",
"verificationUrl": "https://courses.e-learningcourses.com/certificates/verify/11be8ddd-b51c-4dbf-b48d-727159cf215b"
}
],
"pagination": {
"page": 1,
"pageSize": 1000,
"totalRecords": 1,
"totalPages": 1
}
}
FieldTypeDescription
certificateIdUUIDIdentifier used to download the PDF.
certificateNumberstringNumber printed on the certificate.
emailstring or nullLearner's email address; can be matched with the Users API when present.
learnerNamestringName printed on the certificate at issue time.
courseIdUUIDCourse identifier; matches courseId in training records and packages.
courseNamestringCourse name printed on the certificate.
groupIdUUID or nullAssociated group identifier; matches groupId in the Groups API.
completedUtcdate-timeCourse completion date and time, in UTC.
issuedUtcdate-timeCertificate issue date and time, in UTC.
expiresUtcdate-time or nullExpiration date and time, in UTC; null when no expiration is set.
statusstringvalid, expired, or revoked. Revocation takes precedence over expiration; expiration applies at and after expiresUtc.
verificationUrlURLPublic page for checking whether the certificate is genuine and current. The returned site address may differ from the example above.

Certificates are ordered by issuedUtc, oldest first, then certificateId. An empty result has data: [] and totalPages: 0.

Download a certificate PDF​

GET /api/v1/certificates/{certificateId}/pdf

Use a certificateId from the list response and send the same bearer token. The response is application/pdf for an issued certificate, including one that has since expired or been revoked.

curl --request GET \
--url "https://courses.e-learningcourses.com/api/v1/certificates/$CERTIFICATE_ID/pdf" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/pdf" \
--output certificate.pdf

The endpoint returns 404 if the certificate does not exist, is outside the client's scope, or its stored PDF is unavailable. The verificationUrl is a public verification page, not the PDF download URL.

Errors​

Invalid paging on the list endpoint returns 400 in Problem Details format. A missing or expired token returns 401; insufficient scope or a client that has lost access returns 403. The shared API limit can return 429. See Authentication for rate limits and retry guidance.

OpenAPI​

https://courses.e-learningcourses.com/api/v1/openapi.json