Udemy API
The Udemy API returns online-course data as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary search endpoint returns courses with id, title, headline, URL, image, rating, review count, lectures and instructor, and you can pull a detail, pricing, reviews, curriculum, courses by instructor and categories. It is built for education apps and course-aggregators that need Udemy catalog data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/udemy/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "python"
}
}{
"ok": true,
"meta": {
"api": "udemy",
"endpoint": "search",
"mode": "live",
"latency_ms": 1317.9,
"record_count": 12,
"bytes": 8484,
"cache_hit": false,
"stop_reason": "limit_reached",
"method": "browser_mint_graphql",
"page": 1,
"total_count": 10000,
"has_more": true,
"next_page": 2
},
"data": {
"results": [
{
"course_id": "2776760",
"title": "100 Days of Code™: The Complete Python Pro Bootcamp",
"headline": "Master Python by building 100 projects in 100 days. Learn data science, automation, build websites, games and apps!",
"url": "https://www.udemy.com/course/100-days-of-code",
"image": "https://img-c.udemycdn.com/course/480x270/2776760_f176_10.jpg",
"rating": 4.67,
"num_reviews": 430388,
"num_lectures": 604,
"instructional_level": "ALL_LEVELS",
"video_length": "56h 48m",
"locale": "en-US",
"is_free": false,
"instructors": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
]
},
{
"course_id": "567828",
"title": "The Complete Python Bootcamp From Zero to Hero in Python",
"headline": "Learn Python like a Professional Start from the basics and go all the way to creating your own applications and games",
"url": "https://www.udemy.com/course/complete-python-bootcamp",
"image": "https://img-c.udemycdn.com/course/480x270/567828_67d0.jpg",
"rating": 4.56,
"num_reviews": 563814,
"num_lectures": 170,
"instructional_level": "ALL_LEVELS",
"video_length": "22h 23m",
"locale": "en-US",
"is_free": false,
"instructors": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
]
},
{
"course_id": "6413585",
"title": "Complete 2026 Python Bootcamp: Learn Python from Scratch",
"headline": "Master Python Programming from Scratch: Build Real-World Projects and Become Job-Ready in 2026",
"url": "https://www.udemy.com/course/codewithharry-python",
"image": "https://img-c.udemycdn.com/course/480x270/6413585_ec1f_2.jpg",
"rating": 4.56,
"num_reviews": 16218,
"num_lectures": 110,
"instructional_level": "BEGINNER",
"video_length": "17h 43m",
"locale": "en-US",
"is_free": false,
"instructors": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
]
}
]
}
}What the Udemy API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Udemy courses by keyword (any topic, e.g. 'python', 'excel', 'machine learning'). Returns a paginated list of course cards — id, title, headline, instructors, rating, review count, level, duration, language — most-relevant first. Feed a result's course_id into detail / pricing / reviews / curriculum. Page with `page`; meta.has_more / meta.total_count tell you how many. | Content platforms call search to search Udemy courses by keyword (any topic, e.g. | query, page, page_size |
| detail | Full course card for a Udemy course by URL, slug or id: title, headline, instructors, rating, review count, subscriber count, level, language, duration, price, category, description, what-you'll-learn, requirements and target audience. | Research tools call detail to get full course card for a Udemy course by URL, slug or id. | course_id, slug, url |
| pricing | Live price, list price and discount price for one or many Udemy courses by id (comma-separated). Fast, lightweight — use it to track current/sale pricing. | Community analysts call pricing to get live price, list price and discount price for one or many Udemy courses by id (comma-separated). | course_ids |
| reviews | Paginated public student reviews for a course by id: star rating, review text, date and the instructor's reply. Page with `page` — meta.has_more / meta.review_count tell you how many. | Media monitors call reviews to get paginated public student reviews for a course by id. | course_id, page, page_size |
| curriculum | The course outline by id: chapters and lectures in order, with title, position, lecture asset type and whether the lecture is a free preview. Paginated. | Content platforms call curriculum to get the course outline by id. | course_id, page, page_size |
| by_instructor | Browse every course published by a Udemy instructor, by their numeric instructor id. Returns a paginated list of course cards (id, title, rating, price, level, instructors) — use it to discover courses to feed into detail/pricing/reviews/curriculum. Get the instructor id from any course's instructors[] (detail action). | Research tools call by_instructor to get browse every course published by a Udemy instructor, by their numeric instructor id. | instructor_id, page, page_size |
| categories | The live Udemy category taxonomy (Development, Business, IT & Software, Design, …) with ids, titles and slugs. Pass a category_id to drill into its subcategories. Use this to map the Udemy catalogue structure. | Community analysts call categories to get the live Udemy category taxonomy (Development, Business, IT & Software, Design, …) with ids,…. | category_id |
Call search from your stack
curl -X POST https://api.reefapi.com/udemy/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"python"}'import requests
r = requests.post(
"https://api.reefapi.com/udemy/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "python"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/udemy/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "python"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.udemy.search with {"query":"python"}.Who uses this API and why
- Course-aggregators call search to list Udemy courses by subject and rating.
- Learning apps use detail and curriculum to show what a course covers.
- Price tools use pricing to track course discounts over time.
Questions developers ask before integrating
What is the Udemy API?
Udemy API is a ReefAPI endpoint group for udemy It returns live JSON through POST requests under /udemy/v1.
Is the Udemy API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Udemy calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Udemy login or account?
No login to Udemy is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Udemy data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Udemy API use?
Udemy actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Udemy from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call udemy actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Udemy API a Udemy scraper?
It is the managed alternative to a DIY Udemy scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same udemy back as clean JSON.
Why does my Udemy scraper keep getting blocked?
Most Udemy scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.