My CPD Records (Continuous Professional Development) is a tool that enables managers to track and manage the professional development activities of their direct reports. It allows learners to view and log activities in CPD records, record hours, and monitor overall progress towards their goals.
Attributes¶
Records¶
- RECORDSTATE_T¶
We categorize the published state of CPD records into types, and use the term RECORDSTATE_T to stand in for an appropriate integer value.
Record State
Value
Published
1
Draft
2
- Cpd.Record¶
When you use actions that retrieve detailed CPD record information, the service provides a block like this:
{ "RecordId": <number:D2LID>, "Name": <string>, "UserId": <number:D2LID>, "Category": { <composite:Category> }, "Method": { <composite:Method> }, "IsStructured": <boolean>, "IssuedId": <number:D2LID>|null, "DateCompleted": <string:UtcDateTime>, "Grade": <number:decimal>|null, "GradeObjectId": <number:D2LID>|null, "CreditMinutes": <number>, "Attachments": null|{ "FileSetId": <number:D2LID>, "Files": [ { <composite:FileInfo> }, ... ] }, "Answers": [ // Array of Answer blocks { "QuestionId": <number:D2LID>, "Text": <string>, "AnswerId": <number:D2LID> }, { <composite:Answer> }, ... ], "RecordStateId": <number:RECORDSTATE_T> }
- Cpd.RecordSummary¶
When you use actions that retrieve brief CPD record information, the service returns a block like this:
{ "RecordId": <number:D2LID>, "RecordName": <string>, "CategoryName": <string>, "MethodName": <string>, "IsStructured": <boolean>, "RecordStateId": <number:RECORDSTATE_T>, "CreditMinutes": <number>, "DateCompleted": <string:UtcDateTime> }
- Cpd.FileInfo¶
When you use actions that retrieve attachment file information, the service provides a block like this:
{ "Id": <number:D2LID>, "Name": <string>, "Size": <number>, "Href": <string> }
- Cpd.RecordUpdate¶
When you use actions that update CPD record information, you should provide a block like this:
{ "Name": <string>, "CategoryId": <number:D2LID>, "IsStructured": <boolean>, "MethodId": <number:D2LID>, "CreditMinutes": <number>, "Answers": [ // Array of AnswerUpdate blocks { "QuestionId": <number:D2LID>, "Text": <string> }, { <composite:AnswerUpdate> }, ... ], "DateCompleted": <string:UtcDateTime>, "RecordStateId": <number:RECORDSTATE_T>|null }
Target Progress¶
- Cpd.TargetProgress¶
When you use actions that retrieve user target progress information, the service returns a block like this:
{ "StartDate": <string:UtcDateTime>|null, "EndDate": <string:UtcDateTime>|null, "Structured": { "Numerator": <number>, "Denominator": <number> }, "Unstructured": { "Numerator": <number>, "Denominator": <number> }, "CategoryProgress": [ // Array of CategoryProgress blocks { "Category": <composite:Category>, "Structured": { "Numerator": <number>, "Denominator": <number> }, "Unstructured": { "Numerator": <number>, "Denominator": <number> }, }, { <composite:CategoryProgress> }, ... ] }
Record Fields¶
- Cpd.Category¶
When you use actions that retrieve CPD record category information, the service returns a block like this:
{ "Id": <number:D2LID>, "Name": <string>, "SortOrder": <number>, "InUse": <boolean> }
- Cpd.Method¶
When you use actions that retrieve CPD record method information, the service returns a block like this:
{ "Id": <number:D2LID>, "Name": <string>, "SortOrder": <number>, "InUse": <boolean> }
- Cpd.Question¶
When you use actions that retrieve CPD record question information, the service returns a block like this:
{ "Id": <number:D2LID>, "QuestionText": <string>, "SortOrder": <number>, "InUse": <boolean> }
Actions¶
Records¶
- DELETE /d2l/api/le/(version)/cpd/record/(recordId)/attachments¶
Delete attachments from a CPD record.
- Parameters:
version (D2LVERSION) – API version.
recordId (D2LID) – Record ID.
- Query Parameters:
- Oauth2 Scopes:
cpd:records:manage
- Status Codes:
200 OK – Action succeeded.
400 Bad Request – Invalid input data provided.
403 Forbidden – Insufficient scope.
404 Not Found – Record not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.87+ – Route first appears in LMS v20.25.9.
- GET /d2l/api/le/(version)/cpd/record/(recordId)¶
Retrieve a CPD record.
- Parameters:
version (D2LVERSION) – API version.
recordId (D2LID) – Record ID.
- Oauth2 Scopes:
cpd:records:read
- Status Codes:
200 OK – Action succeeded.
403 Forbidden – Insufficient scope.
404 Not Found – Record not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.84+ – Route first appears in LMS v20.25.5.
Return. Returns a
Record
JSON data block.
- GET /d2l/api/le/(version)/cpd/record/(recordId)/attachment/(attachmentId)¶
Retrieve an attachment from a CPD record.
- Parameters:
version (D2LVERSION) – API version.
recordId (D2LID) – Record ID.
attachmentId (D2LID) – Attachment ID.
- Oauth2 Scopes:
cpd:records:read
- Status Codes:
200 OK – Action succeeded.
403 Forbidden – Insufficient scope.
404 Not Found – Record not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.84+ – Route first appears in LMS v20.25.5.
Return. Returns a file stream containing the attachment data.
- GET /d2l/api/le/(version)/cpd/record/user/(userId)¶
Retrieve a paged list of CPD records for a user.
- Parameters:
version (D2LVERSION) – API version.
userId (D2LID) – UserId ID.
- Query Parameters:
methodId (D2LID) – Optional. Filter by method ID.
categoryId (D2LID) – Optional. Filter by category ID.
recordName (string) – Optional. Filter by record name.
startDate (UTCDateTime) – Optional. Filter by records completed after, and including, start date.
endDate (UTCDateTime) – Optional. Filter by records completed before, and including, end date.
recordStateId (RECORDSTATE_T) – Optional. Filter by record state ID.
sortDateAscending (boolean) – Optional (false by default). Sort records by ascending completion date.
limit (number) – Optional (20 by default). The number of records returned per page.
recordIdBookmark (D2LID) – Optional (null by default). The record ID to use as a bookmark for pagination.
- Oauth2 Scopes:
cpd:records:read
- Status Codes:
200 OK – Action succeeded.
403 Forbidden – Insufficient scope.
404 Not Found – Record not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.84+ – Route first appears in LMS v20.25.5.
Return. Returns an
ObjectListPage
JSON data block containing a list ofRecordSummary
JSON data blocks.
- POST /d2l/api/le/(version)/cpd/record/(recordId)/attachment/upload¶
Initiate a resumable file upload request to upload attachments for a particular record.
- Parameters:
version (D2LVERSION) – API version.
recordId (D2LID) – Record ID.
- Oauth2 Scopes:
cpd:records:manage
- Status Codes:
308 Resume Incomplete – Request to start a resumable upload successfully received and initiated, with response indicating upload path and file key.
400 Bad Request – Invalid input data provided.
403 Forbidden – Insufficient scope.
404 Not Found – Record not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.87+ – Route first appears in LMS v20.25.9.
Input. Initiate a resumable upload process. Your POST request must contain three special headers:
X-Upload-Content-Type to indicate the file’s mime type.
X-Upload-Content-Length to indicate the file’s total size, in bytes.
X-Upload-File-Name to indicate the file name for the file.
Return. If successful, this action initiates a resumable upload process. As part of that process, the service provides you a file upload path you can use to make further requests to upload parts of your file, and a file key value that you can use to
save the uploaded file
to the record once you have uploaded the entire content length of your file. Each file can have a maximum size of 2 GB.
- POST /d2l/api/le/(version)/cpd/record/(recordId)/attachments¶
Add attachments to a CPD record.
- Parameters:
version (D2LVERSION) – API version.
recordId (D2LID) – Record ID.
- Oauth2 Scopes:
cpd:records:manage
- Status Codes:
200 OK – Action succeeded.
400 Bad Request – Invalid request body.
403 Forbidden – Insufficient scope.
404 Not Found – Record not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.87+ – Route first appears in LMS v20.25.9.
Input. Provide a POST form with file keys the service sent you from your
resumable file upload
action.When you use this action, if the back-end server cannot add all the attachments to the CPD record, it will add none. The accepted file types are inferred from file extensions and align with those supported in the Brightspace web UI. For more details, refer to the Brightspace product documentation.
Return. Returns a JSON array of
FileInfo
blocks, one for each file attachment successfully added to the CPD record.
- PUT /d2l/api/le/(version)/cpd/record/(recordId)¶
Update a CPD record.
- Parameters:
version (D2LVERSION) – API version.
recordId (D2LID) – Record ID.
- JSON Parameters:
RecordUpdate (
Cpd.RecordUpdate
) – CPD record update data.
- Oauth2 Scopes:
cpd:records:manage
- Status Codes:
200 OK – Action succeeded.
400 Bad Request – Invalid request body.
403 Forbidden – Insufficient scope.
404 Not Found – Record not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.84+ – Route first appears in LMS v20.25.5.
Return. Returns a
Record
JSON data block.
Target Progress¶
Tracks user progress towards their Continuous Professional Development (CPD) targets.
- GET /d2l/api/le/(version)/cpd/target/progress/user/(userId)¶
Retrieve a user’s overall progress and their current progress for each category.
- Parameters:
version (D2LVERSION) – API version.
userId (D2LID) – User ID.
- Query Parameters:
methodId (D2LID) – Optional. Filter by method ID.
categoryId (D2LID) – Optional. Filter by category ID.
recordName (string) – Optional. Filter by the record name.
startDate (UtcDateTime) – Optional. Filter by records completed after, and including, start date.
endDate (UtcDateTime) – Optional. Filter by records completed before, and including, end date.
- Oauth2 Scopes:
cpd:targets:read
- Status Codes:
200 OK – Action succeeded.
403 Forbidden – No permission to view this user’s progress or insufficient scope.
404 Not Found – User not found.
- API Versions:
1.84+ – Route first appears in LMS v20.25.5.
Return. Returns a
TargetProgress
JSON data block.
Record Fields¶
- GET /d2l/api/le/(version)/cpd/category/(categoryId)¶
Retrieve a category.
- Parameters:
version (D2LVERSION) – API version.
categoryId (D2LID) – Category ID.
- Oauth2 Scopes:
cpd:fields:read
- Status Codes:
200 OK – Action succeeded.
403 Forbidden – Insufficient scope.
404 Not Found – Category not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.84+ – Route first appears in LMS v20.25.5.
Return. Returns a
Category
JSON data block.
- GET /d2l/api/le/(version)/cpd/method/(methodId)¶
Retrieve a method.
- Parameters:
version (D2LVERSION) – API version.
methodId (D2LID) – Method ID.
- Oauth2 Scopes:
cpd:fields:read
- Status Codes:
200 OK – Action succeeded.
403 Forbidden – Insufficient scope.
404 Not Found – Method not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.84+ – Route first appears in LMS v20.25.5.
Return. Returns a
Method
JSON data block.
- GET /d2l/api/le/(version)/cpd/question/(questionId)¶
Retrieve a question.
- Parameters:
version (D2LVERSION) – API version.
questionId (D2LID) – Question ID.
- Oauth2 Scopes:
cpd:fields:read
- Status Codes:
200 OK – Action succeeded.
403 Forbidden – Insufficient scope.
404 Not Found – Question not found or insufficient permissions.
429 Too Many Requests – Api call-rate limit exceeded.
- API Versions:
1.84+ – Route first appears in LMS v20.25.5.
Return. Returns a
Question
JSON data block.