Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Udemy API page →
Media, Film & Knowledge

Udemy API & Scraper

The Udemy API returns online-course data as clean JSON.

7 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 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.

Reference

The same Udemy course, three actions, three answers

search, detail and the pricing and curriculum actions each read a different Udemy surface, so one field name can hold three values for one course. Every number below is course 567828, The Complete Python Bootcamp, pulled on 2026-08-27 within a few minutes of itself. Pick the column that matches the question you are answering rather than assuming the actions agree.

Fieldsearchdetailpricing / curriculum
course_idString "567828"Integer 567828String "567828" in pricing
priceNot returned; only is_free falseprice.amount 104.99, is_paid trueprice.amount 12.99, list_price.amount 104.99, discount_price.amount 13.0
rating4.564.57Not returned
num_lectures170270curriculum meta.item_count 220, chapters and lectures combined
Durationvideo_length "22h 23m"video_length 79800 seconds, plus content_info "22.5 total hours"Not returned
instructional_levelALL_LEVELS, BEGINNER, INTERMEDIATE"All Levels", "Beginner Level"Not returned
locale"en-US""English (US)"Not returned
Review countnum_reviews 565638num_reviews 565638reviews meta.review_count 10000, a ceiling rather than a count
Result totalmeta.total_count 10000 for "python", 3932 for "kubernetes"Not applicableby_instructor meta.course_count 87 for instructor 9685726

Prices came back in EUR on every detail, pricing and by_instructor call and there is no currency parameter, so do not assume USD. discount_price is the rounded display figure (13.0 against a real price of 12.99); price.amount is the number to bill against.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/udemy/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "python"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "udemy",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1738,
    "record_count": 12,
    "bytes": 8481,
    "cache_hit": false,
    "stop_reason": "limit_reached",
    "page": 1,
    "total_count": 10000,
    "has_more": true,
    "next_page": 2,
    "charged_credits": 2,
    "version": "1.0.0"
  },
  "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": 436671,
        "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": "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.59,
        "num_reviews": 18252,
        "num_lectures": 110,
        "instructional_level": "BEGINNER",
        "video_length": "17h 43m",
        "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.58,
        "num_reviews": 566763,
        "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]"
          }
        ]
      }
    ]
  }
}
Actions

What the Udemy API does

ActionDescriptionConcrete use caseKey params
searchSearch 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
detailFull 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
pricingLive 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
reviewsPaginated 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
curriculumThe 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_instructorBrowse 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
categoriesThe 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
Code samples

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"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.udemy.search with {"query":"python"}.
Use cases

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.
FAQ

Questions developers ask before integrating

Is course.price from the detail action what a student actually pays?

No, it is the list price. Course 567828 returned price.amount 104.99 from detail and price.amount 12.99 from the pricing action at the same moment, with pricing also reporting list_price.amount 104.99. The same pattern held for course 6873227: detail said 19.99, pricing said 9.99. If you are tracking real prices, call pricing, which accepts up to 50 comma-separated course ids in one request.

Why do search, detail and curriculum disagree on the number of lectures?

They count different things from different endpoints. For course 567828, search returned num_lectures 170, detail returned 270, and curriculum reported meta.item_count 220 because it counts chapters and lectures together in one flat list. None of them is corrupt; they are three of Udemy's own numbers. If you need a defensible figure, page the curriculum and count the rows where type equals "lecture".

What unit is video_length in?

It depends on the action. detail returns video_length as an integer count of seconds, 79800 for course 567828 and 23948 for course 6873227, and puts a human string in content_info ("22.5 total hours", "6.5 total hours"). search returns video_length already formatted as "22h 23m". They do not agree exactly, since 79800 seconds is 22h 10m. Use the seconds figure for arithmetic and the strings for display.

What are the valid instructional_level values?

Two vocabularies for the same idea. search returns screaming-snake constants, and a 24-result kubernetes page returned ALL_LEVELS, BEGINNER and INTERMEDIATE. detail and by_instructor return the display label instead: "All Levels", "Beginner Level". Normalize before you filter, or you will silently drop matches when you join a search row to a detail record.

Why is the review content empty?

Most Udemy students leave a star rating without writing anything, and the API returns those rows with content set to an empty string rather than skipping them. The first page of reviews for course 567828 returned three rows with real authors, ratings of 4.5 and 5.0, and empty content. Ratings can be half-stars. Each row also carries created and modified as ISO timestamps with a -07:00 offset, and instructor_reply, which was null on all three.

Is meta.total_count the real number of matching courses?

Only when it is under 10000. Searching "python" returned total_count 10000, which is Udemy's ceiling rather than a count, while "kubernetes" returned 3932, which is a real figure. Page size is capped at 24. Page until meta.has_more is false rather than computing a page count from total_count when the value is exactly 10000. The reviews action has the same 10000 ceiling on meta.review_count for a course with 565,638 reviews.

How do I get every course by one instructor?

Take instructors[].id from any detail or search result and pass it to by_instructor. Course 567828 lists Jose Portilla as id 9685726 and Pierian Training as 265589972; by_instructor on 9685726 returned meta.course_count 87. Those rows carry price (again the list price), rating, num_subscribers and content_info, but not locale or video_length, so follow up with detail when you need those.

What is in the categories action?

Thirteen top-level categories with numeric ids, and subcategories when you drill in. The top level is Development 288, Business 268, Finance & Accounting 328, IT & Software 294, Office Productivity 292, Personal Development 296, Design 269, Marketing 290, Lifestyle 274, Photography & Video 273, Health & Fitness 276, Music 278 and Teaching & Academics 300. Passing category_id 288 returns its subcategories, including Web Development 8, Data Science 558, Mobile Development 10 and Programming Languages 12, which is the value detail reports as subcategory.

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 an 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. 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.

docs / udemy

Udemy

Udemy

base /udemy/v17 endpoints
post/udemy/v1/detail1 credit

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.

ParameterAllowed / rangeDescription
course_idoptional—The Udemy course to look up — its numeric id (the number in /course/<slug>/ → api id), its slug, or a full Udemy course URL (https://www.udemy.com/course/the-complete-python-bootcamp/). A URL/slug is resolved to the course automatically.
Try in playground →
post/udemy/v1/pricing1 credit

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.

ParameterAllowed / rangeDescription
course_idsrequired—One or more numeric Udemy course ids, comma-separated (up to 50). Get ids from the detail action.
Try in playground →
post/udemy/v1/reviews1 credit

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.

ParameterAllowed / rangeDescription
course_idrequired—Numeric Udemy course id to pull reviews for (from the detail action).
page = 1optional1–1000Page number (results are paginated). Page until meta.has_more is false.
page_size = 10optional1–100Reviews per page (1-100, default 10).
Try in playground →
post/udemy/v1/curriculum1 credit

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.

ParameterAllowed / rangeDescription
course_idrequired—Numeric Udemy course id (from the detail action).
page = 1optional1–1000Page number (results are paginated). Page until meta.has_more is false.
page_size = 20optional1–100Items per page (1-100, default 20).
Try in playground →
post/udemy/v1/by_instructor1 credit

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).

ParameterAllowed / rangeDescription
instructor_idrequired—Numeric Udemy instructor id (the id in a course's instructors[].id, available from the detail action).
page = 1optional1–1000Page number (results are paginated). Page until meta.has_more is false.
page_size = 20optional1–100Items per page (1-100, default 20).
Try in playground →
post/udemy/v1/categories1 credit

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.

ParameterAllowed / rangeDescription
category_idoptional—Optional. A category id (from this action) to list its subcategories instead of the top-level categories.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.