Udemy Instructor API Documentation (v1.0)

The Udemy Instructor API exposes several functionalities of Udemy to help instructors build client applications and integrations with Udemy.

It is organized around REST. Our API is designed to have predictable, resource-oriented URLs and to use HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP authentication and HTTP verbs, which can be understood by off-the-shelf HTTP clients. We only accept https calls to the API. All responses will be returned in JSON format, including errors.

Udemy Instructor API is currently at version 1 and the root endpoint is https://www.udemy.com/instructor-api/v1/ for all resources.

Creating an API Client

To make any calls to Udemy REST API, you will need to create an API client. API client consists of a bearer token, which is connected to a user account on Udemy.

If you want to create an API client, go to API Clients page in your user profile. Once you request an API client, your newly created API client will be active and immediately ready to use.

Sending an Authenticated Request

Udemy API requires basic authentication parameters to validate the client. The auth parameters have to be sent in every call or you will get a 400 BAD REQUEST error.

To send authenticated requests, provide the bearer token, a base64 encoded HTTP Authorization header.

curl -H "Authorization: bearer {secret_token}" https://www.udemy.com/instructor-api/v1/taught-courses/courses/
Udemy API supports an optional request parameter fields to customize which fields should be returned for a particular object type. Fields parameter is a hash map which is usually defined as GET parameters like fields[course], fields[user] etc... Each object type also has field lists @min, @default, and @all.

Examples

Return the taught courses objects with title and url fields

https://www.udemy.com/instructor-api/v1/taught-courses/courses?fields[course]=title,url

Return the course object with all fields in @default, plus the number of reviews, but exclude the published title. For the user objects (notably visible_instructors) only return the title field

https://www.udemy.com/instructor-api/v1/taught-courses/courses?fields[course]=@default,num_reviews,-published_title&fields[user]=title

Most of our apis return paginated responses. You can change the page size by specifying the page_size query parameter. The default page size is 12. The maximum page size is 100. You can change the page by specifying the page query parameter.

Examples

Get first page of message threads

https://www.udemy.com/instructor-api/v1/message-threads/?page_size=15
{
    "count":45,
    "next":"https:\/\/www.udemy.com\/instructor-api\/v1\/message-threads\/?page=2&page_size=15",
    "previous":null,
    "results":[/* 15 items*/],
    "aggregations":null
}
        

To get other pages, use page parameter, or use the next value from the paginated query results.

{
    "count":45,
    "next":"https://www.udemy.com/instructor-api/v1/message-threads/?page=3&page_size=15",
    "previous":https://www.udemy.com/instructor-api/v1/message-threads/?page_size=15,
    "results":[/* 15 items*/],
    "aggregations":null
}
        

We throttle the usage of these APIs as a whole to 100 requests per 10 seconds. Requests beyond this will return 429's until the rate falls below the throttle threshold.

Udemy API uses conventional HTTP response codes to indicate success or failure of an API request. In general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that resulted from the provided information (e.g. a required parameter was missing, a charge failed, etc.), and codes in the 5xx range indicate an error with our servers.

If your usage of the API triggers an excessive number of response codes, we may block your continued usage of the API. In particular, if your queries receive HTTP 429 codes in response, then you should reduce the pace of your requests to our maximum, which is 100 requests/10 seconds. If your queries receive 503 responses, then the site is undergoing maintenance. We would appreciate halting your queries for an hour before resuming queries again.

This API is not set in stone, but we will certainly do our best to ensure it stays backwardly compatible. We are aware of some requests for more features and will be adding to the API over time. We are also aware that there is currently a CORS restriction which prevents the API from being executed from browsers. We are just making sure our CORS change is secure and will be adding it shortly.