Throttling

To ensure the best possible performance and reliability of Cornerstone's APIs, we have implemented throttle limits. The throttling limits vary per API and are listed in the specific documentation for the API within the Developer Portal. Please note the following:

  • Throttle limits apply to all authenticated APIs calls.
  • Throttle limits are for each environment. For example, if an API has a limit of 1000 requests per hour, that means you can make 1000 requests each in Pilot, Stage, and Production environments.

If a request is made after the throttle limit is reached, Cornerstone will respond with the following HTTP 429 error, which is to be handled elegantly. We recommend that your applications queue such requests until the throttle limit duration has passed after which the request can be re-sent.

// Throttle Limit Error
{
    "status": "429",
    "timeStamp": "2018-05-15T18:06:55+0000",
    "error": {
        "errorId": "77ed61e0-7052-4fad-b265-c52679ab2cac",
        "message": "CSOD Too many requests.",
        "code": "429",
        "description": null,
        "details": null
    }
}

Throttling Status

There are two API response HEADERS that can be inspected to see the throttling status per hour. The former indicates the throttling limit (per hour), while the latter indicates how many requests are left in the current hour.

  • x-csod-throttling-rate-limit-urilevel
  • x-csod-requests-remaining-urilevel

Throttling limits are also maintained at the minute level (x-csod-throttling-rate-limit-urilevel / 60). If you hit that limit, you will get throttled for the remainder of that minute.

Best Practices

  • Customers are encouraged to maintain a timer on their end, to pause their calls as soon as they hit their minute limit (HTTP 429), then start once the minute elapses.
  • If it's been a while since customers synched their data from Cornerstone, they should control the requests they issue to us instead of trying to rush through as quickly as possible and hitting their throttling limits.
  • HTTP 429 calls also count against customer’s aggregate limits, which means they may end up hitting their 1-hour limit sooner and must wait a longer time for their window to open again, even though their minute limit is available.

Throttling Limits

APIThrottling Limit
Employee APIsThrottling Limitopen in new window
OU APIsThrottling Limitopen in new window
Learning Assignment APIsThrottling Limitopen in new window
Express Class APIThrottling Limitopen in new window
Transcript APIsThrottling Limitopen in new window
Reporting APIsThrottling Limitopen in new window
Bulk APIsThrottling Limitopen in new window
Job Application APIThrottling Limitopen in new window
Candidate APIThrottling Limitopen in new window
Foundational APIsSee below

Foundational APIs

The generic throttling limit across all Foundational APIs is 417 requests per minute, 25,000 requests per hour and 600,000 requests per day.

The following APIs are part of the generic Foundational APIs throttling limits:

APIMethodUrlDescription
Global SearchGET/services/api/Core/GlobalSearchRetrieve training data based on your specific search criteria.
OU (Legacy)GET/services/api/OrgUnits/OUGet OU data (legacy)
ApprovalsGET/services/api/Employee/{userName}/approvalsFetch all pending approval items for the supported approval types for a given user.
ApprovalsPOST/services/api/Employee/{userName}/approvalsApprove or deny a pending approval item.
Custom FieldGET/services/api/CustomField/Learning Object (LO) level or the Transcript level.
Training UnitPOST/services/api/TrainingUnit/Create Training Unit Assignment used in Extended Enterprise module
Session RosterPOST/services/api/SessionRoster/Update the session attendance roster as well as complete the session.
Get DetailsGET/services/api/SessionRoster/GetSessionRosterRetrieve the roster details of an ILT Session.
Get LOGET/services/api/LO/GetDetailsRetrieve details of a learning object (LO)
Create LOPOST/services/api/LO/CreateCreate new Learning Objects (Event, Session, Online Course, and Material)
Update LOPUT/services/api/LO/UpdateUpdate existing ILT Sessions.
Transcript SearchGET/services/api/LOTranscript/TranscriptSearchRetrieve users’ transcript information
Transcript and Task - Inbox ItemsGET/services/api/TranscriptAndTask/InboxRetrieves all items in the user’s inbox as shown on the Welcome Page widget in the Cornerstone UI.
Transcript and Task - Suggested TrainingGET/services/api/TranscriptAndTask/SuggestedTrainingRetrieve training with availability type: Suggested.
Transcript and Task - TasksGET/services/api/TranscriptAndTask/TaskRetrieve all incomplete tasks assigned to the user.
Transcript and Task - ApprovalsGET/services/api/TranscriptAndTask/ApprovalRetrieve the pending approvals for a manager or approver.
Transcript and Task - Assigned TrainingsGET/services/api/TranscriptAndTask/AssignedRetrieve all training assigned to a user, along with their statuses and due dates as applicable
Transcript and Task - SessionsGET/services/api/TranscriptAndTask/SessionRetrieve the upcoming sessions in a user's transcript.
Transcript and Task - TranscriptsGET/services/api/TranscriptAndTask/TranscriptRetrieve transcript records for a user.
Certification - DeletePOST/services/api/Certification/RemoveRemove certifications that are assigned to users.
Certification - DetalsGET/services/api/CertificationDetails/GetCertificationDetailsRetrieve a certification's details, including section-level details.
Certification - TranscriptGET/services/api/CertificationTranscript/CertificationTranscriptDetailsRetrieve certification details from a user's transcript.
Performance Review - Get DetailsGET/services/api/Review/PerformanceReviewExtract performance review data that is associated with a performance review task
Goals - CreatePOST/services/api/Goals/CreateCreate new user goals.
Goals - UpdatePUT/services/api/Goals/UpdateUpdate existing user goals
Goals - Update ProgressPUT/services/api/Goals/UpdateProgressOpdate a user's progress on a goal.
Goals - DetailsGET/services/api/Goals/GetDetailsRetrieve details of user goals
Goals - CancelPUT/services/api/Goals/UpdateStatusUpdate goal statuses to cancelled
Goals - LockPUT/services/api/Goals/LockResultsLock or unlock goals
Requisition - DetailsGET/services/api/Recruiting/JobRequisitionDetailsRetrieve job requisition details
Requisition - Ad DetailsGET/services/api/Recruiting/JobRequisitionDetails/AdRetrieve internal, external, and mobile job ads for a given job requisition
Requisition - Custom FieldsGET/services/api/Recruiting/JobRequisitionDetails/CustomFieldRetrieve custom fields for a given job requisition
Applicants - DetailsGET/services/api/Recruiting/JobApplicantRetrieve job applicants in a given status.
Applicants - Custom FieldsGET/services/api/Recruiting/JobApplicant/CustomFieldsRetrieve job applicant details including applicant custom fields
Applicants - Update StatusPUT/services/api/Recruiting/JobApplicantUpdateStatusupdate an applicant's status