Discover/CUCAS API
live

CUCAS APIcucas.cn

Access CUCAS scholarship listings, university data, and program searches across Chinese universities via 6 structured API endpoints.

Endpoints
6
Updated
2mo ago

What is the CUCAS API?

The CUCAS API provides structured access to China's university admission data across 6 endpoints, covering scholarship listings, program searches, and university directories. The get_scholarship_detail endpoint returns per-program fields including deadlines, eligibility criteria, tuition, scholarship coverage details, and required documents. Whether you're building a study-abroad tool or aggregating funding opportunities, the API gives you machine-readable access to CUCAS data without manual browsing.

Try it
City name or slug (e.g. beijing)
Page number
Academic degree (Bachelor, Master, Doctoral, etc.)
Program keyword or slug
Scholarship category (all_scholarship, full, partial, etc.)
Teaching language (English, Chinese, etc.)
University slug
api.parse.bot/scraper/f246e67c-986c-48cd-9524-a116b5423b43/<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/f246e67c-986c-48cd-9524-a116b5423b43/search_scholarships?page=1&category=all_scholarship' \
  -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 cucas-cn-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.

"""
CUCAS (Study in China) API Client
Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Optional, Any, Dict, List


class ParseClient:
    """Client for CUCAS scholarship and university search API."""

    def __init__(self, api_key: Optional[str] = None):
        """Initialize the Parse API client.
        
        Args:
            api_key: API key for authentication. If not provided, reads from PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "e76e626f-a956-47c4-9e35-8d0aa59ded21"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")
        
        if not self.api_key:
            raise ValueError("API key not provided and PARSE_API_KEY environment variable not set")

    def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
        """Make a request to the Parse API.
        
        Args:
            endpoint: The endpoint name (e.g., 'search_scholarships')
            method: HTTP method ('GET' or 'POST')
            **params: Query/body parameters
            
        Returns:
            Response JSON as dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }
        
        if method.upper() == "GET":
            response = requests.get(url, headers=headers, params=params)
        else:  # POST
            response = requests.post(url, headers=headers, json=params)
        
        response.raise_for_status()
        return response.json()

    def search_scholarships(
        self,
        category: str = "all_scholarship",
        language: str = "all_languages",
        program: str = "all_programs",
        page: int = 1,
        degree: str = "all_degrees",
        city: str = "all_cities",
        university: str = "all_universities"
    ) -> Dict[str, Any]:
        """Search and filter available scholarships in China.
        
        Args:
            category: Scholarship category (all_scholarship, full, partial, etc.)
            language: Teaching language (English, Chinese, etc.)
            program: Program keyword or slug
            page: Page number
            degree: Academic degree (Bachelor, Master, Doctoral, etc.)
            city: City name or slug (e.g. beijing)
            university: University slug
            
        Returns:
            Dictionary with page, items, and total_results
        """
        params = {
            "category": category,
            "language": language,
            "program": program,
            "page": page,
            "degree": degree,
            "city": city,
            "university": university
        }
        return self._call("search_scholarships", method="GET", **params)

    def get_scholarship_detail(self, url: str) -> Dict[str, Any]:
        """Get detailed information about a specific scholarship.
        
        Args:
            url: Full URL of the scholarship detail page
            
        Returns:
            Dictionary with scholarship details including eligibility, deadlines, etc.
        """
        params = {"url": url}
        return self._call("get_scholarship_detail", method="GET", **params)

    def list_popular_scholarships(self) -> Dict[str, Any]:
        """List popular scholarships as featured on CUCAS.
        
        Returns:
            Dictionary with items array of scholarship objects
        """
        return self._call("list_popular_scholarships", method="GET")

    def list_latest_scholarships(self) -> Dict[str, Any]:
        """List latest scholarships added to CUCAS.
        
        Returns:
            Dictionary with items array of scholarship objects
        """
        return self._call("list_latest_scholarships", method="GET")

    def list_universities(self, letter: str = "A", page: int = 1) -> Dict[str, Any]:
        """List Chinese universities with filtering by alphabetical letter.
        
        Args:
            letter: Alphabetical letter (A-Z)
            page: Page number
            
        Returns:
            Dictionary with items array of university objects
        """
        params = {"letter": letter, "page": page}
        return self._call("list_universities", method="GET", **params)

    def search_programs(self, query: str) -> Dict[str, Any]:
        """Search for academic programs across universities.
        
        Args:
            query: Search keyword (e.g. Computer Science)
            
        Returns:
            Dictionary with results array containing universities and their matching programs
        """
        params = {"query": query}
        return self._call("search_programs", method="GET", **params)


def main():
    """Demonstrate practical usage of the CUCAS API."""
    
    # Initialize the client
    client = ParseClient()
    
    print("=" * 80)
    print("CUCAS Scholarship Search - Practical Workflow")
    print("=" * 80)
    
    # Step 1: Search for scholarships in Beijing for Master's degree
    print("\n1. Searching for Master's scholarships in Beijing...")
    search_results = client.search_scholarships(
        city="beijing",
        degree="Master",
        category="full",
        page=1
    )
    
    total_results = search_results.get("total_results", 0)
    items = search_results.get("items", [])
    
    print(f"   Found {total_results} total scholarships")
    print(f"   Displaying {len(items)} results on this page")
    
    if items:
        # Step 2: Show summary of first few scholarships
        print("\n2. Available scholarships summary:")
        for i, scholarship in enumerate(items[:3], 1):
            print(f"\n   Scholarship {i}:")
            print(f"   - University: {scholarship.get('university', 'N/A')}")
            print(f"   - Program: {scholarship.get('program_name', 'N/A')}")
            print(f"   - Location: {scholarship.get('location', 'N/A')}")
            print(f"   - Language: {scholarship.get('teaching_language', 'N/A')}")
            print(f"   - Coverage: {scholarship.get('scholarship_coverage', 'N/A')[:50]}...")
            print(f"   - Rating: {scholarship.get('university_rating', 'N/A')}")
            print(f"   - Detail URL: {scholarship.get('detail_url', 'N/A')[:60]}...")
        
        # Step 3: Get detailed information for the first scholarship
        if items[0].get('detail_url'):
            print("\n3. Fetching detailed information for first scholarship...")
            detail_url = items[0]['detail_url']
            
            detail_info = client.get_scholarship_detail(detail_url)
            
            print(f"\n   University: {detail_info.get('university', 'N/A')}")
            print(f"   Program: {detail_info.get('program_title', 'N/A')}")
            print(f"   Status: {'Available' if detail_info.get('is_still_available') else 'Not Available'}")
            
            if detail_info.get('program_info'):
                print(f"   Program Info:")
                for key, value in detail_info['program_info'].items():
                    print(f"     - {key}: {value}")
            
            if detail_info.get('deadlines'):
                print(f"   Important Deadlines:")
                for key, value in detail_info['deadlines'].items():
                    print(f"     - {key}: {value}")
            
            if detail_info.get('eligibility'):
                print(f"   Eligibility: {detail_info['eligibility'][:100]}...")
            
            if detail_info.get('scholarship_coverage_details'):
                print(f"   Coverage: {detail_info['scholarship_coverage_details'][:100]}...")
            
            if detail_info.get('documents_required'):
                print(f"   Required Documents: {detail_info['documents_required'][:100]}...")
    
    # Step 4: Search for programs
    print("\n4. Searching for Computer Science programs...")
    program_search = client.search_programs("Computer Science")
    
    results = program_search.get("results", [])
    print(f"   Found {len(results)} universities with Computer Science programs")
    
    for university_result in results[:3]:
        uni_name = university_result.get('university', 'N/A')
        programs = university_result.get('programs', [])
        print(f"   - {uni_name}: {len(programs)} program(s)")
        for program in programs[:2]:
            print(f"     * {program.get('name', 'N/A')}")
    
    # Step 5: List popular scholarships
    print("\n5. Fetching popular scholarships...")
    popular = client.list_popular_scholarships()
    popular_items = popular.get("items", [])
    print(f"   Found {len(popular_items)} popular scholarships")
    
    for scholarship in popular_items[:3]:
        print(f"   - {scholarship.get('university', 'N/A')}")
    
    # Step 6: List universities by letter
    print("\n6. Listing universities starting with 'T'...")
    universities = client.list_universities(letter="T", page=1)
    uni_items = universities.get("items", [])
    print(f"   Found {len(uni_items)} universities starting with 'T'")
    
    for university in uni_items[:3]:
        print(f"   - {university.get('name', 'N/A')}")
        print(f"     Location: {university.get('location', 'N/A')}")
        print(f"     Rating: {university.get('rating', 'N/A')}")
        print(f"     Living Expenses: {university.get('living_expenses', 'N/A')}")
    
    print("\n" + "=" * 80)
    print("Workflow completed successfully!")
    print("=" * 80)


if __name__ == "__main__":
    main()
All endpoints · 6 totalmissing one? ·

Search and filter available scholarships in China. Grouped by university.

Input
ParamTypeDescription
citystringCity name or slug (e.g. beijing)
pageintegerPage number
degreestringAcademic degree (Bachelor, Master, Doctoral, etc.)
programstringProgram keyword or slug
categorystringScholarship category (all_scholarship, full, partial, etc.)
languagestringTeaching language (English, Chinese, etc.)
universitystringUniversity slug
Response
{
  "type": "object",
  "fields": {
    "page": "integer",
    "items": "array of scholarship objects",
    "total_results": "integer"
  },
  "sample": {
    "data": {
      "page": 1,
      "items": [
        {
          "location": "Shenzhen",
          "detail_url": "https://cucas.cn/china_scholarship/Harbin-Institute-of-Technology--Shenzhen_Physics_scholarship_1954_85358&lang=en",
          "university": "Harbin Institute of Technology, Shenzhen",
          "program_name": "Physics",
          "starting_date": "Sep,2026",
          "you_need_to_pay": "Tuition:420000Accommodation: 0-1000/monthLiving Expense: 0-1500",
          "teaching_language": "English",
          "university_rating": "4.6",
          "scholarship_coverage": "Tuition: 42000Accommodation: YesLiving Expenses: Yes"
        },
        {
          "location": "Shenzhen",
          "detail_url": "https://cucas.cn/china_scholarship/Harbin-Institute-of-Technology--Shenzhen_Urban-Rural-Planning_scholarship_1954_85359&lang=en",
          "university": "Harbin Institute of Technology, Shenzhen",
          "program_name": "Urban-Rural Planning",
          "starting_date": "Sep,2026",
          "you_need_to_pay": "Tuition:420000Accommodation: 0-1000/monthLiving Expense: 0-1500",
          "teaching_language": "English",
          "university_rating": "4.6",
          "scholarship_coverage": "Tuition: 42000Accommodation: YesLiving Expenses: Yes"
        },
        {
          "location": "Shenzhen",
          "detail_url": "https://cucas.cn/china_scholarship/Harbin-Institute-of-Technology--Shenzhen_Architecture_scholarship_1954_85353&lang=en",
          "university": "Harbin Institute of Technology, Shenzhen",
          "program_name": "Architecture",
          "starting_date": "Sep,2026",
          "you_need_to_pay": "Tuition:420000Accommodation: 0-1000/monthLiving Expense: 0-1500",
          "teaching_language": "English",
          "university_rating": "4.6",
          "scholarship_coverage": "Tuition: 42000Accommodation: YesLiving Expenses: Yes"
        }
      ],
      "total_results": 0
    },
    "status": "success"
  }
}

About the CUCAS API

Scholarship Search and Discovery

The search_scholarships endpoint accepts up to seven optional filters — city, degree, program, category, language, university, and page — and returns paginated scholarship objects grouped by university alongside a total_results count. The category parameter accepts values like full, partial, and all_scholarship, letting you narrow results to fully funded opportunities. list_popular_scholarships and list_latest_scholarships require no inputs and return curated arrays of scholarship objects, useful for surfacing featured or recently added programs on a landing page.

Scholarship Detail

For any scholarship URL from CUCAS, get_scholarship_detail returns a structured object covering deadlines (with separate self-funded and scholarship deadline keys), eligibility, documents_required, scholarship_coverage_details, and a program_info object containing degree, duration, and tuition. The is_still_available boolean flag lets you filter out expired opportunities without parsing text.

Universities and Programs

list_universities supports alphabetical browsing via the letter parameter (A–Z) and pagination via page, returning an array of university objects. search_programs takes a free-text query (e.g. "Computer Science") and returns an array of university objects each containing their matching programs — useful for finding which institutions offer a specific field of study across China.

Reliability & maintenance

The CUCAS API is a managed, monitored endpoint for cucas.cn — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cucas.cn 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 cucas.cn 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.

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 scholarship discovery tool filtered by degree level and teaching language using search_scholarships
  • Display a deadline-aware scholarship tracker using the deadlines and is_still_available fields from get_scholarship_detail
  • Aggregate full-scholarship listings for a study-abroad comparison site using the category filter
  • Power an alphabetical university directory using list_universities with the letter parameter
  • Find all Chinese universities offering a specific program by querying search_programs with a subject keyword
  • Surface recently added funding opportunities in a feed using list_latest_scholarships
  • Show required documents and eligibility criteria for individual programs using get_scholarship_detail
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does CUCAS have an official developer API?+
CUCAS does not publish a documented public developer API. This Parse API provides the structured access to CUCAS data that no official endpoint currently offers.
What does `get_scholarship_detail` return beyond basic program info?+
It returns a deadlines object with separate self-funded and scholarship deadline values, an eligibility string, a documents_required string, scholarship_coverage_details, and a program_info object containing degree level, duration, and tuition. The is_still_available boolean field indicates whether the scholarship is currently open.
How does `search_scholarships` handle pagination and large result sets?+
The endpoint accepts a page integer parameter and returns the current page, an items array of scholarship objects, and a total_results integer. You can iterate pages until the accumulated item count reaches total_results.
Does the API return application submission or enrollment endpoints?+
No. The API covers scholarship listings, program details, university data, and search. Application submission and enrollment management are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting application-related pages if that data is accessible on CUCAS.
Can I retrieve individual university profile pages with details like rankings or contact info?+
Not currently. list_universities returns an array of university objects suitable for directory browsing, but a dedicated university detail endpoint with rankings, contact information, or campus data is not included. You can fork this API on Parse and revise it to add a university detail endpoint.
Page content last updated . Spec covers 6 endpoints from cucas.cn.
Related APIs in EducationSee all →
yz.chsi.com.cn API
Search and explore graduate and doctoral programs across Chinese institutions on yz.chsi.com.cn. Browse institutions by name, province, or major; retrieve program details and school information; and access admission brochures to compare programs and enrollment requirements in one place.
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.
scholarshipportal.com API
Search and discover scholarships, degree programmes, and universities across StudyPortals' global education database, with the ability to filter by countries, disciplines, and other criteria. Get detailed information about specific scholarships and programmes to compare educational opportunities that match your academic interests.
scholarships.com API
Search and browse the Scholarships.com directory by category — including academic major, residence state, ethnicity, gender, school year, and deadline. Retrieve scholarship listings within any category and subcategory, and fetch full details for individual scholarships including award amounts, eligibility criteria, application deadlines, and application links.
shanghairanking.com API
Access comprehensive rankings data for Chinese universities including ARWU, GRAS subject rankings, and BCUR assessments, with the ability to search institutions and view detailed university profiles. Compare academic performance metrics and subject-specific standings across China's higher education institutions.
fastweb.com API
Search and browse thousands of scholarships from Fastweb by category, state, or major, while accessing detailed scholarship information, financial aid articles, and student discounts to help fund your education. Find featured opportunities and compare aid options all in one place.
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.
gradschools.com API
Search graduate programs across multiple categories and discover articles about funding, financial aid, and admissions to help guide your grad school journey. Find specific program information and detailed resources all in one place to support your application and enrollment decisions.