Catalog API Integration

About the integration

DataCamp provides a read-only API to retrieve our catalog and your group’s learner events (such as course completions). Organizations typically use our API to integrate with a custom LMS, or an LMS that we do not have a direct integration with at the moment. Using this type of integration, your system will be pulling content from DataCamp rather than having DataCamp push content to your system.

Our API technical documentation contains detailed information on the available endpoints, request and response schemas, authentication, rate limits, and errors. The technical documentation can be found here: 

Content types

Our API currently serves our entire catalog:

  • Courses
  • Projects
  • Assessments
  • Practices
  • Tracks
  • Custom Tracks

Content types are served via their respective endpoints, as specified in our technical API documentation. 

There are two endpoints per content type: live and archived endpoints. To keep your LMS in sync with our catalog, you can use the archived endpoint to determine which of our content is no longer available and should, in turn, be archived in your system as well. As an example, live and archived courses can be retrieved using these two endpoints:

  • /v1/catalog/live-courses
  • /v1/catalog/archived-courses

To determine whether any content has changed, use the contentUpdatedAt field nested in the content item. This field indicates when the content was last updated.


Tracks differ from the other content types in that they are a collection of courses, assessments, practices, and projects, in a specific order. 

The track endpoint serves both career and skill tracks.

Custom Tracks

Custom Tracks are a special content type, in that they are only visible to a specific group. The custom tracks we serve are determined by the API key used in requests, that is tied to your group.


The API also exposes events related to learner actions and achievements. At the moment, the events we expose are:

  • completions, for courses, projects, practices and assessments. 
  • started events, for courses

The events retrieved via this endpoint are specific to your group and only viewable by using the API key that is tied to your organization’s DataCamp group.

To correlate between learners on DataCamp and your LMS, we expose the following user identifiers:

  • Email
  • SSO NameId (if SSO has been set up and a name ID is present for the user)


Most content items served by the API contain metadata such as topics or technologies. Although these metadata are already nested as text within the content items, we still serve them separately via their own endpoints, in case you want to retrieve them as a complete list. 

SSO and deeplinking

DataCamp provides SSO support to allow for a seamless sign-in experience so that learners can go directly from external LMS to DataCamp in one simple click. 

The content served via our API contains URLs that send learners directly to your SSO identity provider to authenticate, and then redirect them back to the originally requested content on DataCamp.

A prerequisite for this feature is to have SSO configured and enabled on DataCamp.


There are two simple steps to getting started with using our API.

First, you’ll need to obtain an API key. You can request one from DataCamp Support or your company’s designated DataCamp CSM, and it’ll be sent to you through a safe communication channel. Include this key as part of the Authorization header in subsequent HTTP requests, with “Bearer: “ as a prefix.

Second, you can send your first HTTP request to confirm that the key is working. You can use any tool (Postman, Insomnia, etc.), but here’s an example using curl to retrieve our list of courses:

curl -X GET \
  -H "Authorization: Bearer <access_token>"

If working correctly, the response will have a HTTP 200 status code and a JSON response body with a list of courses.


Where can I find the endpoints and schemas?

You can find them in our API technical documentation here:

Does the API enforce a rate limit? 

Yes, there is a rate limit in place and it is specified in the technical API documentation.