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
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number, starting at 1. |
pageSize | integer | 1000 | Certificates 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
}
}
| Field | Type | Description |
|---|---|---|
certificateId | UUID | Identifier used to download the PDF. |
certificateNumber | string | Number printed on the certificate. |
email | string or null | Learner's email address; can be matched with the Users API when present. |
learnerName | string | Name printed on the certificate at issue time. |
courseId | UUID | Course identifier; matches courseId in training records and packages. |
courseName | string | Course name printed on the certificate. |
groupId | UUID or null | Associated group identifier; matches groupId in the Groups API. |
completedUtc | date-time | Course completion date and time, in UTC. |
issuedUtc | date-time | Certificate issue date and time, in UTC. |
expiresUtc | date-time or null | Expiration date and time, in UTC; null when no expiration is set. |
status | string | valid, expired, or revoked. Revocation takes precedence over expiration; expiration applies at and after expiresUtc. |
verificationUrl | URL | Public 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