theodinproject.com APItheodinproject.com ↗
Access The Odin Project's full curriculum: learning paths, courses, lessons, projects, resources, and changelogs via a structured JSON API with 10 endpoints.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/77533f4c-6adf-417b-baef-20019e5d3422/get_all_paths' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns all learning paths available on The Odin Project. Each path contains metadata including title, slug, description, course count, and URL.
No input parameters required.
{
"type": "object",
"fields": {
"paths": "array of path objects with title, slug, description, course_count, and url"
},
"sample": {
"data": {
"paths": [
{
"url": "https://www.theodinproject.com/paths/foundations",
"slug": "foundations",
"title": "Foundations",
"description": "",
"course_count": 0
},
{
"url": "https://www.theodinproject.com/paths/full-stack-javascript",
"slug": "full-stack-javascript",
"title": "Full Stack JavaScript",
"description": "PATH",
"course_count": 7
}
]
},
"status": "success"
}
}About the theodinproject.com API
This API exposes The Odin Project's complete curriculum structure across 10 endpoints, covering learning paths, courses, lessons, and projects. The get_lesson endpoint returns full HTML content sections, assignment links, knowledge check questions, and a GitHub edit URL for any lesson by slug. Companion endpoints like get_path_curriculum_outline and search_lessons let you traverse or query the entire curriculum tree without manually navigating the site.
Curriculum Structure
The API maps The Odin Project's three main learning paths — foundations, full-stack-javascript, and full-stack-ruby-on-rails — into a consistent hierarchy. get_all_paths returns every path with its title, slug, description, course_count, and url. Drilling down with get_path gives you the courses inside a path along with per-course lesson_count and project_count. get_course goes one level deeper, returning the course's sections array, each containing a nested lessons array, plus the course description.
Lesson-Level Data
get_lesson is the most granular endpoint. Supply a lesson slug (e.g. foundations-how-this-course-will-work) and it returns the lesson title, parent course name, an array of content sections with HTML, an assignment array of titled links, a knowledge_check list of question strings, and a github_edit_url pointing to the source file. get_lesson_resources extracts the same lesson's links into two separate arrays: assignment_links and all_links, each annotated with the source section. get_lesson_changelog derives a GitHub commits URL from the same source reference, letting you track revision history for any lesson.
Filtering and Search
get_all_lessons_for_course takes both path_slug and course_slug and returns lessons in curriculum order, each tagged with its type (lesson or project) and parent section. get_projects accepts optional path_slug and course_slug filters; omitting both returns projects across all paths but is noted as slower. search_lessons performs a case-insensitive title match against a query string and returns matching lessons with path and course context alongside standard slug and URL fields.
Full Outline
get_path_curriculum_outline returns a single nested object containing a path's full course list, each with title, description, and the complete sections-with-lessons tree. This is useful for generating a static curriculum index or seeding a database without multiple sequential calls.
- Build a curriculum browser that displays The Odin Project's full course hierarchy using
get_path_curriculum_outline. - Index all lesson content for a searchable learning portal using
get_lessonHTML sections andknowledge_checkfields. - Aggregate all external resources across a course by iterating lessons with
get_lesson_resourcesand collectingall_links. - Track lesson revision history by fetching
changelog_urlvalues fromget_lesson_changelogfor a set of slugs. - Generate a project list filtered to a specific path using
get_projectswithpath_slugandcourse_slugparameters. - Compare course scope across paths by querying
get_pathfor each slug and comparinglesson_countandproject_countper course. - Power an offline or exported copy of the curriculum by walking
get_all_paths,get_course, andget_lessonin sequence.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does The Odin Project have an official public developer API?+
What does `get_lesson` return beyond the lesson text?+
get_lesson returns the lesson title, parent course name, an array of sections each containing HTML content, an assignment array of titled external links, a knowledge_check array of question strings, and a github_edit_url (or null if absent). It covers the full readable content of a lesson page.Can I search lessons by content keywords rather than title?+
search_lessons matches only against lesson titles using a case-insensitive query string; it does not search lesson body content or knowledge check text. You can fork this API on Parse and revise it to add a full-text search endpoint that queries against the sections HTML returned by get_lesson.Does the API expose user progress, completion status, or account data?+
How are projects distinguished from regular lessons in the responses?+
type field on lesson objects. get_all_lessons_for_course and search_lessons both return a type value that is either lesson or project. get_projects filters to project-type items only and accepts optional path_slug and course_slug parameters to narrow scope.