# Transcript API
# Introduction
The Transcript API is a bundle of new and improved APIs providing access to a user's transcript. These APIs will support the most common operations while following the same business logic, security, rules, and events from the portal’s configuration.
# Release Plan
The various components of the Transcript API will be released in phases (milestones). The latest schedule can be found in the Client Success Center. Please note that the standard SLAs do not apply for APIs Early Adopter. Cornerstone reserves the right to change the Transcript APIs as needed before releasing the APIs as generally available (GA). All forward-looking statements are subject to change.
# User Centric
The Transcript API’s are 'user centric' web services, providing access to a single user's transcript. If you need bulk support, please review the APIs supporting bulk operations (for example: Learning Assignment API, Express Class API, Bulk API's, Reporting API's, Data Exporter API's)
# Transactional
The Transcript APIs are providing real-time read access (GET) to Cornerstone data and real-time write operations (POST/PATCH). A Throttling limit is required to prevent overuse of resources, which is needed to maintain optimal performance and reliability.
# Security
# Permissions and Constraints
Transcript API’s respect the permissions and constraints configured in the portal.
# Additional Claims
All Transcript (PATCH/POST) API’s are respecting additional claims. Requesting additional claims typically involves including the desired claims when making an authorization request to the authorization server.
Example 1 (return single scope - e.g. Complete API only):
curl -X POST \
https://[corpname].csod.com/services/api/oauth2/token \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"clientId": "dbq2kjiql2c4",
"clientSecret": "l4nqwza+7RbK0rrzs16VMeH+5dWEsFjsRSXtQ0MwL+TSSWvZGliUkgUfIenAk0+1Yx0yPtTs+bSmlotR2KCVGA==",
"grantType": "client_credentials",
"scope": "transcript:update transcript:update:complete"
}'
Example 2 (return all available scopes):
curl -X POST \
https://[corpname].csod.com/services/api/oauth2/token \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"clientId": "dbq2kjiql2c4",
"clientSecret": "l4nqwza+7RbK0rrzs16VMeH+5dWEsFjsRSXtQ0MwL+TSSWvZGliUkgUfIenAk0+1Yx0yPtTs+bSmlotR2KCVGA==",
"grantType": "client_credentials",
"scope": "all"
}'
# Throttling
Transcript APIs are available with the following throttling limits:
API | per Minute | per Hour | per Day | Comment |
---|---|---|---|---|
All (GET) Transcript APIs | 50 | 3.000 | 72.000 | Individual limit for each Transcript GET - API |
All (POST) Transcript APIs | 30 | 1.800 | 43.200 | Combined (shared) limit for all Transcript POST - APIs |
All (PATCH) Transcript APIs | 50 | 3.000 | 72.000 | Combined (shared) limit for all Transcript PATCH - APIs |
# Paging
The (GET) endpoints segment large results of data into pages, the default page size is 20.
# Learning Objects
The following Learning objects are supported by the Transcript API:
- Curriculum
- Event
- Session
- Material (excluding OJT)
- Online Class
- Online Content
- Video
- Test
# Inactive Learning Objects and Users
The following operations are supported for inactive records:
- User Active: Support for all HTTP operations (GET/POST/PATCH).
- User Inactive: Support for GET operations only.
- LO Active: Support for all HTTP operations (GET/POST/PATCH).
- LO Inactive: Support for GET operations only.
# Email Events
Certain POST/PATCH operations do support email as configured in the portal.
# Localization
The Transcript API supports multi-language requests for GET operations. If the value included in the query parameter does not match a localized value defined in your Cornerstone portal, the API will fall back on the default language of the portal.
# Identifier
# User
The Transcript APIs supports flexible user identifier:
- externalId: String, Externally provided user identifier. This is the 'User Id' visible on the user record.
- userId: Integer, Cornerstone-generated internal Id.
- userName: String, Employee username, used primarily for system login. This is the 'User Name' visible on the user record.
- userGuid: Unique identifier, Cornerstone-generated global unique global identifier (GUID).
# Transcript
Transcript records consist of a history of records, e.g. after each transcript status change, a history is kept, and multiple records are created in the backend. Technically, the following combination of records makes a transcript record uniquely identifiable:
- User Identifier
- Learning Object Id (GUID)
- Registration Number
Some GET-endpoints support querying a specific registration number. If the registration number is not provided (as an input parameter), the API will deliver the latest transcript record automatically.
# Online Content (OLCO)
Online content completion can only be done via the Progress API, which is available to Cornerstone content partners.
# Transcript Lockdown (21 CFR Part 11)
The Transcript API will respect the Transcript Lockdown features (21 CFR Part 11 compliance).
# Examples
# Data (GET)
Description | Url |
---|---|
Return the transcript overview | /services/api/v1/transcripts/overview?externalId=paul.abbot |
Return all completed trainings | /services/api/v1/transcripts/overview?externalId=paul.abbot&statusGroups=Completed |
Return all trainings which are "not started" or "in progress" | /services/api/v1/transcripts/overview?externalId=paul.abbot&statusGroups=NotStarted,InProgress |
Return the transcript overview including archived trainings | /services/api/v1/transcripts/overview?externalId=paul.abbot&includeArchived=true |
Return the transcript overview for "Online Class" | /services/api/v1/transcripts/overview?externalId=paul.abbot&trainingType=OnlineClass |
Return the transcript overview for "Materials" and "Videos" | /services/api/v1/transcripts/overview?externalId=paul.abbot&trainingType=Material,Video |
Return all completed "Sessions" | /services/api/v1/transcripts/overview?externalId=paul.abbot&statusGroups=Completed&trainingType=Session |
Return all completed "Curricula" | /services/api/v1/transcripts/overview?externalId=paul.abbot&statusGroups=Completed&trainingType=Curriculum |
Return all transcript records with "Pending Approval" | /services/api/v1/transcripts/overview?externalId=paul.abbot&status=PendingApproval |
Return transcript custom fields | /services/api/v1/transcripts/custom-fields?externalId=paul.abbot&learningObjectId=b42d13a5-f7dc-40d1-8a52-5e6b572604df |
Return child related details for a curricula transcript record | /services/api/v1/transcripts/curriculum-child-lo-data?externalId=paul.abbot&learningObjectId=72be8841-0b7c-4e7a-baed-da906ce99c2b |
# Assign a Training (POST)
Assign, approve and register a training.
/services/api/v1/transcripts/assign
{
"externalId": "paul.abbot",
"learningObjectId": "7ad38cb9-04e1-47be-8334-09a4484f82ad",
"assignment": "registered",
}
# In Progress (PATCH)
Change a registered transcript record from "Registered" to "In Progress".
/services/api/v1/transcripts/progress
{
"externalId": "paul.abbot",
"learningObjectId": "7ad38cb9-04e1-47be-8334-09a4484f82ad"
}
# Update Due Date (PATCH)
Update Due Date.
/services/api/v1/transcripts/update
{
"externalId": "paul.abbot",
"learningObjectId": "b1a4185e-26b5-4b60-8ea7-ce5bc050804a",
"dueDate": "2023-12-31",
"comment": "Changed by API"
}
# Update a Custom Field (PATCH)
Update a (textbox) custom field with the Email Tag name "Transcript Comment".
/services/api/v1/transcripts/update
{
"externalId": "paul.abbot",
"learningObjectId": "285a8af7-b7d0-475d-b199-dc88e6966bbf",
"comment": "Changed by API",
"customFields": [
{
"name": "Transcript Comment",
"values" : ["My Comment"]
}
]
}
# Training Completion (PATCH)
Mark a learning object in an active users transcript complete. Ignore any (potential) post pending workflow configuration and right set the transcript record to "Completed".
/services/api/v1/transcripts/complete
{
"externalId": "paul.abbot",
"learningObjectId": "285a8af7-b7d0-475d-b199-dc88e6966bbf",
"ignoreWorkflow": true
}
# Remove Training (PATCH)
Remove a Learning Object (LO) from a users transcript and place it in the 'Removed' tab of the transcript. The 'reason' needs to be a value from pre-defined list of reasons as configured in the portal.
/services/api/v1/transcripts/remove
{
"externalId": "paul.abbot",
"learningObjectId": "10e65284-3cdb-4f9f-9329-03823f56647c",
"action": "remove",
"reason": "Other",
"comment": "Removed By API"
}