Discover/Duolingo API
live

Duolingo APIduolingo.com

Access Duolingo's full language course catalog via API. Retrieve course listings with learner counts, source languages, and target language pairs.

This API takes change requests — .
Endpoint health
verified 6h ago
list_courses
1/1 passing latest checkself-healing
Endpoints
1
Updated
7d ago

What is the Duolingo API?

The Duolingo API exposes 1 endpoint — list_courses — that returns the complete catalog of language learning courses available on Duolingo, including learner enrollment counts and source/target language pairings. Each course object identifies the language being taught and the language instruction is delivered in, making it straightforward to map out which learning paths exist across Duolingo's full offering.

This call costs1 credit / call— charged only on success
Try it
ISO 639-1 language code for the source language (instruction language). Filters courses to only those taught from this language. Example: 'en' for English, 'es' for Spanish.
api.parse.bot/scraper/3ea1693d-acff-4d24-a6fb-2564d076ae55/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/3ea1693d-acff-4d24-a6fb-2564d076ae55/list_courses?from_language=en' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace duolingo-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.


"""Walkthrough: Duolingo SDK — bounded, re-runnable; every call capped."""
from parse_apis.duolingo_com_api import Duolingo, ParseError

client = Duolingo()

# List courses available for English speakers, capped at 3
for course in client.courses.list(from_language="en", limit=3):
    print(course.learning_language_name, course.num_learners)

# Get the first course from the full catalog
top = client.courses.list(limit=1).first()
if top:
    print(top.learning_language_name, "from", top.from_language_name, "-", top.num_learners, "learners")

# Typed error handling around a call
try:
    for course in client.courses.list(from_language="es", limit=2):
        print(course.learning_language_name, course.from_language_name, course.phase)
except ParseError as e:
    print(f"error: {e.code}")

print("exercised: courses.list")
All endpoints · 1 totalmissing one? ·

Returns all available Duolingo courses. Each course represents a learning path from one language to another. Results are returned in a single page. Optionally filter by the source language (the language instruction is given in) using from_language.

Input
ParamTypeDescription
from_languagestringISO 639-1 language code for the source language (instruction language). Filters courses to only those taught from this language. Example: 'en' for English, 'es' for Spanish.
Response
{
  "type": "object",
  "fields": {
    "total": "integer total number of courses returned",
    "courses": "array of course objects with learning/from language details and learner counts"
  },
  "sample": {
    "data": {
      "total": 40,
      "courses": [
        {
          "phase": 3,
          "num_learners": 41959815,
          "from_language": "en",
          "learning_language": "es",
          "from_language_name": "English",
          "learning_language_name": "Spanish"
        },
        {
          "phase": 3,
          "num_learners": 22816034,
          "from_language": "en",
          "learning_language": "fr",
          "from_language_name": "English",
          "learning_language_name": "French"
        }
      ]
    },
    "status": "success"
  }
}

About the Duolingo API

What the API Returns

The list_courses endpoint returns an array of course objects alongside a total integer indicating how many courses matched. Each course object includes details about the target language (the language being learned), the source language (the language instruction is given in), and the number of learners currently enrolled. This gives a clear, structured view of Duolingo's complete course matrix.

Filtering by Source Language

The from_language parameter accepts an ISO 639-1 language code and narrows results to only those courses taught in that instruction language. For example, passing from_language=es returns all courses where instruction is delivered in Spanish. Omitting the parameter returns the full catalog across all instruction languages.

Response Shape and Coverage

Results are returned in a single, unpaginated response — there is no cursor or page offset to manage. The courses array and total field give a snapshot of currently available course offerings. Learner counts per course reflect enrollment figures as exposed in Duolingo's public course data, useful for understanding relative course popularity across language pairs.

Reliability & maintenanceVerified

The Duolingo API is a managed, monitored endpoint for duolingo.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when duolingo.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official duolingo.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
6h ago
Latest check
1/1 endpoint passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a language course discovery tool that lists all available Duolingo learning paths by target language.
  • Analyze course popularity by comparing learner counts across different source/target language pairs.
  • Filter courses available to Spanish-speaking learners using the from_language parameter to surface relevant options.
  • Map out which source languages Duolingo supports for instruction to evaluate coverage for a specific user audience.
  • Generate a structured dataset of language pair availability for research into global language learning trends.
  • Integrate Duolingo course metadata into an education platform to recommend language paths based on a user's native language.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Duolingo have an official public developer API?+
Duolingo does not currently publish an official, documented public API for developers. There is no developer portal or API key program listed on duolingo.com.
What does the `list_courses` endpoint actually return for each course?+
Each course object includes the target language (the language being learned), the source language (the instruction language identified by ISO 639-1 code), and a learner count. The total field at the top level tells you how many courses were returned in that response.
Does the API return pagination tokens or support offset-based filtering for large result sets?+
No. The list_courses endpoint returns all matching courses in a single response with no pagination. The only available filter is from_language, which scopes results to a specific instruction language.
Does the API return individual user progress, XP, streaks, or leaderboard data?+
No. The API covers the course catalog only — available language pairs and learner counts. User profile data, XP, streaks, and leaderboard information are not exposed. You can fork this API on Parse and revise it to add endpoints targeting those data types.
Can I filter courses by the target language rather than the source language?+
Currently, the only filter parameter is from_language, which filters by the instruction language. Filtering by target language is not a built-in parameter. You can fork this API on Parse and revise it to add target-language filtering logic.
Page content last updated . Spec covers 1 endpoint from duolingo.com.
Related APIs in EducationSee all →
coloso.global API
Discover and browse Coloso's entire course catalog by searching products, filtering by categories, and viewing details on new releases, best sellers, and free classes. Get insights into promotional events, trending keywords, and personalized recommendations to find the perfect creative courses.
theodinproject.com API
Access The Odin Project's complete curriculum structure including paths, courses, lessons, resources, and projects, plus search lessons and view detailed changelogs. Browse course outlines, find specific lessons and their learning materials all in one place.
su.se API
Search and explore Stockholm University's complete course catalog to find specific courses, browse academic programs, check class schedules, and discover available subjects. Get detailed information about any course offering to plan your studies and manage your academic schedule.
studocu.com API
Access study documents, browse course materials, and retrieve institution details from Studocu. Look up public user profiles, explore documents available for a given course, and fetch related document recommendations.
hyperskill.org API
Explore Hyperskill.org's learning content by browsing tracks, projects, stages, and topics, or retrieve detailed information about any specific course component and educational provider. Search and filter through the platform's complete curriculum to find exactly what you need for your learning journey.
voanews.com API
Access VOA Learning English lessons, programs, and vocabulary across all proficiency levels, search for specific content, and retrieve detailed lesson information with transcripts. Browse featured homepage content and explore lessons by category to find the perfect English learning materials for your level.
ucas.com API
Search and explore UK university courses, apprenticeships, and scholarships all in one place, while discovering detailed information about education providers and their offerings. Find the perfect educational path by filtering courses and apprenticeships by your preferences and accessing comprehensive provider details to inform your decisions.
mit.edu API
Access comprehensive MIT course and program information including tuition costs, financial aid options, degree programs with their requirements, and detailed course listings. Plan your education by exploring program details and understanding the full cost structure to make informed decisions about your studies at MIT.