Discover/CourseHero API
live

CourseHero APIcoursehero.com ↗

Fetch CourseHero document metadata and list course documents via two endpoints. Get title, school, course, page count, view count, and preview thumbnail URLs.

Endpoint health
verified 1h ago
get_document
list_course_documents
2/2 passing latest checkself-healing
Endpoints
2
Updated
1h ago

What is the CourseHero API?

The CourseHero API gives developers two endpoints for accessing publicly visible document and course data on CourseHero. get_document returns 10 metadata fields for a single file — including school name, course label, page count, and view count — identified by its numeric file ID. list_course_documents returns every document on a course landing page in one call, with thumbnail URLs, doc types, and per-document view counts.

This call costs1 credit / call— charged only on success
Try it
Numeric document id from the CourseHero file URL (the digits after /file/).
→ api.parse.bot/scraper/1b2ce5eb-2f5d-46d8-b58c-0c1b204878e5/<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/1b2ce5eb-2f5d-46d8-b58c-0c1b204878e5/get_document?file_id=146931016' \
  -H 'X-API-Key: $PARSE_API_KEY'
All endpoints · 2 totalmissing one? ·

Returns the public landing-page metadata for one CourseHero document (one round trip): file title/filename, school, department and course, uploader, upload date (the site's own date for the document, in the site's 'YYYY-MM-DD HH:MM:SS' form — CourseHero publishes no separate exam date), view/rating counts, total page_count, and the pages shown in the free preview. Each preview page carries the direct absolute URLs of the page background images the site serves for that page (WebP, rendered at 640px page width); a page split into several slices repeats the same page image with different top/bottom pixel offsets. Pages beyond the free preview (preview_end_page < page_count) have no image. Nonexistent ids currently come back from the site as an HTML error page and are passed through as upstream_error.

Input
ParamTypeDescription
file_idrequiredstringNumeric document id from the CourseHero file URL (the digits after /file/).
Response
{
  "type": "object",
  "fields": {
    "title": "document title as stored by the site (usually the uploaded filename)",
    "file_id": "numeric document id as a string",
    "filename": "original uploaded filename",
    "course_id": "integer site id of the course",
    "school_id": "integer site id of the institution",
    "seo_title": "full HTML/og title of the page",
    "page_count": "total pages in the document",
    "view_count": "integer total views",
    "course_name": "course label (department code plus number)",
    "school_name": "institution name",
    "upload_date": "site upload timestamp, 'YYYY-MM-DD HH:MM:SS'",
    "page_heading": "headline shown on the page (title plus first text snippet, truncated)",
    "rating_count": "integer number of ratings",
    "canonical_url": "canonical CourseHero page URL for the document",
    "course_number": "course number as a string",
    "department_id": "integer site id of the department",
    "preview_pages": "array of {page_number, slice_count, images:[{slice_index, image_url, top_px, bottom_px, height_px}]} ordered by page number",
    "professor_name": "professor name or null when not set",
    "rating_average": "number, average rating (0 when unrated)",
    "department_code": "department code, e.g. STAT",
    "department_name": "department display name or null when the site has none",
    "created_at_epoch": "upload time as Unix seconds",
    "preview_end_page": "last page number included in the free preview",
    "uploader_username": "username of the uploading member",
    "preview_page_count": "number of preview pages for which images were found",
    "preview_start_page": "first page number included in the free preview"
  },
  "sample": {
    "data": {
      "title": "Exam_2022.pdf",
      "file_id": "146931016",
      "filename": "Exam_2022.pdf",
      "course_id": 4269439,
      "school_id": 79633,
      "seo_title": "Exam 2022.pdf - Instructions to Candidates:  a  Attempt all four questions which carry a total of 100 marks.  b  The answer script should be submitted | Course Hero",
      "page_count": 4,
      "view_count": 36,
      "course_name": "STAT 2006",
      "school_name": "The Chinese University of Hong Kong",
      "upload_date": "2022-05-07 07:21:30",
      "page_heading": "Exam 2022.pdf - Instructions to Candidates: a Attempt all...",
      "rating_count": 0,
      "canonical_url": "https://www.coursehero.com/file/146931016/Exam/",
      "course_number": "2006",
      "department_id": 377830,
      "preview_pages": [
        {
          "images": [
            {
              "top_px": 0,
              "bottom_px": 906,
              "height_px": 906,
              "image_url": "https://www.coursehero.com/asset/bg/blur/c9a815466a5a9ec65deb45c776eded3fdbfbd730/splits/page-1-html-bg-bbb061af9990690ea905b2301cae08488d8cebe4.webp",
              "slice_index": 0
            }
          ],
          "page_number": 1,
          "slice_count": 1
        },
        {
          "images": [
            {
              "top_px": 0,
              "bottom_px": 231.5,
              "height_px": 231.5,
              "image_url": "https://www.coursehero.com/asset/bg/blur/c9a815466a5a9ec65deb45c776eded3fdbfbd730/splits/page-2-html-bg-276c491c5e3bc0083c28d0f7e8236649a4b38b8d.webp",
              "slice_index": 0
            },
            {
              "top_px": 231.5,
              "bottom_px": 814.5,
              "height_px": 583,
              "image_url": "https://www.coursehero.com/asset/bg/blur/c9a815466a5a9ec65deb45c776eded3fdbfbd730/splits/page-2-html-bg-276c491c5e3bc0083c28d0f7e8236649a4b38b8d.webp",
              "slice_index": 1
            }
          ],
          "page_number": 2,
          "slice_count": 2
        },
        {
          "images": [
            {
              "top_px": 0,
              "bottom_px": 600.5,
              "height_px": 600.5,
              "image_url": "https://www.coursehero.com/asset/bg/blur/c9a815466a5a9ec65deb45c776eded3fdbfbd730/splits/page-3-html-bg-1271d7c39d1da6738e649431ca01d494a0f1a047.webp",
              "slice_index": 0
            }
          ],
          "page_number": 3,
          "slice_count": 1
        }
      ],
      "professor_name": null,
      "rating_average": 0,
      "department_code": "STAT",
      "department_name": null,
      "created_at_epoch": 1651926090,
      "preview_end_page": 3,
      "uploader_username": "John Doe",
      "preview_page_count": 3,
      "preview_start_page": 1
    },
    "status": "success"
  }
}

About the CourseHero API

Endpoints

The API has two endpoints. get_document accepts a file_id (the digits from a /file/ URL) and returns the document's title, filename, seo_title, page_count, view_count, course_name, school_name, and integer course_id and school_id values. This covers the public landing-page metadata for a single document without needing to know its course or school in advance.

Listing Course Documents

list_course_documents accepts a numeric course_id and school_id (both found in CourseHero sitemap URLs) and returns the full document list for that course page in a single response — no pagination. Each item in the documents array includes file_id, file_url, title, description (first-page text snippet), doc_type (for example notes), thumbnail_url, thumbnail_hash, view_count, and has_answers. The response also carries course-level fields: course_title, course_number, department_id, canonical_url, and the is_complete flag that indicates whether document_count equals total_document_count.

Response Coverage

Both endpoints work with numeric IDs that appear in CourseHero's public URLs, so no prior authentication or session is needed to call them. get_document and list_course_documents share the course_id and school_id fields, making it straightforward to use a course listing to seed individual document lookups. The has_answers boolean in the document list distinguishes answered from unanswered uploads without fetching each file individually.

Reliability & maintenanceVerified

The CourseHero API is a managed, monitored endpoint for coursehero.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when coursehero.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 coursehero.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
1h ago
Latest check
2/2 endpoints 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 course-material index by iterating list_course_documents across multiple course IDs to collect file titles, types, and thumbnail URLs.
  • Track view_count changes on specific documents over time using repeated get_document calls with the same file_id.
  • Identify which documents in a course have answers using the has_answers field from list_course_documents.
  • Aggregate school and department coverage by collecting school_id, school_name, and department_id across course listings.
  • Generate a course syllabus reference by pulling course_name, course_number, and document titles for a given course_id.
  • Build a document discovery tool that maps file_url and thumbnail_url values for course materials across institutions.
  • Cross-reference course content by matching course_id values returned from get_document against list_course_documents results.
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 CourseHero have an official developer API?+
CourseHero does not publish a public developer API or API documentation for third-party use. There is no official endpoint reference or developer portal available.
What does list_course_documents return for a course with many documents?+
It returns all documents CourseHero shows on that course's public landing page in a single response. The is_complete field tells you whether document_count equals the site's total_document_count. If is_complete is false, the response covers what the page exposes but may not reflect the full catalogue on the site.
Does get_document return the actual document content or page images?+
get_document returns metadata fields only: title, filename, seo_title, page_count, view_count, course_name, school_name, course_id, school_id, and file_id. It does not return page images or document text content. list_course_documents provides thumbnail_url per document, but full page image access beyond thumbnails is not currently covered. You can fork the API on Parse and revise it to add an endpoint targeting full preview image URLs if the source exposes them publicly.
Is there an endpoint to search CourseHero documents by keyword or filter by doc_type?+
Not currently. The API covers fetching metadata for a known file_id and listing documents for a known course_id plus school_id. Keyword search or filtered queries across the site are not included. You can fork the API on Parse and revise it to add a search endpoint.
How do I find the course_id and school_id values to use with list_course_documents?+
Both values appear in CourseHero's public sitemap URLs: school_id follows /sitemap/schools/ and course_id follows /courses/. You can also obtain them from the course_id and school_id fields returned by get_document if you already have a file_id from that course.
Page content last updated . Spec covers 2 endpoints from coursehero.com.
Related APIs in EducationSee all →
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.
shiksha.com API
Search and browse Shiksha colleges by stream/course, then fetch detailed institute profiles and course offerings, plus upcoming exam schedules by stream.
hotcoursesabroad.com API
Access data from hotcoursesabroad.com.
udemy.com API
Search Udemy's course catalog by keywords to instantly discover courses with their titles, URLs, pricing information, and detailed metadata. Find the perfect learning resources tailored to your interests and compare options before enrolling.
faradars.org API
Search and explore thousands of Persian video courses on Faradars, discovering detailed information about each course including its category, description, and curriculum. Browse through available course categories to find educational content that matches your learning interests.
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.
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.
testbook.com API
Search and discover exams, courses, test series, and articles across India's top government exam preparation platform, while browsing exam categories and checking upcoming live class schedules to plan your study journey. Get instant access to relevant study materials and learning opportunities tailored for competitive exams like UPSC, SSC, banking, and more.