Times Higher Education API: List THE World University Rankings
Lists THE World University Rankings for a year, optionally filtered by country, with displayed ranks, scores, student figures and university links. Subject rankings are supported by name.
Unofficial. Not affiliated with or endorsed by Times Higher Education.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Year optional
year Ranking year, such as 2025. Defaults to the latest available year.
Not set
Whole number 2011 or more.
- Country optional
country Country name as shown by THE, such as United Kingdom. Defaults to all countries.
United States
Default
.- Subject optional
subject Subject ranking name, such as Engineering. Defaults to the overall World University Rankings.
(default)
- Max Results optional
max_results Maximum universities to return, such as 50; at most 200.
200
Whole number from 1 to 200. Default
50.
Input as JSON
{ "country": "United States", "max_results": 200}Output
{ "year": 2027, "rankings": [ { "rank": "2", "country": "United States", "university": "Massachusetts Institute of Technology", "overall_score": "97.8", "industry_score": "100.0", "research_score": null, "teaching_score": "99.1", "citations_score": null, "university_link": "https://www.timeshighereducation.com/world-university-rankings/massachusetts-institute-technology" , "number_of_students": null, "students_per_staff": null, "industry_income_score": null, "research_quality_score": "99.4", "research_environment_score": "96.5", "international_outlook_score": "90.9", "international_students_percent": null }, { "rank": "=3", "country": "United States", "university": "Princeton University", "overall_score": "97.0", "industry_score": "97.2", "research_score": null, "teaching_score": "97.4", "citations_score": null, "university_link": "https://www.timeshighereducation.com/world-university-rankings/princeton-university" , "number_of_students": null, "students_per_staff": null, "industry_income_score": null, "research_quality_score": "98.4", "research_environment_score": "98.1", "international_outlook_score": "85.3", "international_students_percent": null }, { "rank": "=3", "country": "United States", "university": "Stanford University", "overall_score": "97.0", "industry_score": "100.0", "research_score": null, "teaching_score": "96.4", "citations_score": null, "university_link": "https://www.timeshighereducation.com/world-university-rankings/stanford-university" , "number_of_students": null, "students_per_staff": null, "industry_income_score": null, "research_quality_score": "99.3", "research_environment_score": "98.3", "international_outlook_score": "83.4", "international_students_percent": null } ], "ranking_name": "World University Rankings 2027"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"timeshighereducation.com/list_university_rankings","input":{"country":"United States","max_results":200}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "timeshighereducation.com/list_university_rankings" , "input": { "country": "United States", "max_results": 200 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "timeshighereducation.com/list_university_rankings" , "input": { "country": "United States", "max_results": 200 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run timeshighereducation.com/list_university_rankings# with {"country":"United States","max_results":200}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [], "properties": { "year": { "type": "integer", "minimum": 2011, "description": "Ranking year, such as 2025. Defaults to the latest available year." }, "country": { "type": "string", "default": "", "description": "Country name as shown by THE, such as United Kingdom. Defaults to all countries." }, "subject": { "type": "string", "default": "", "description": "Subject ranking name, such as Engineering. Defaults to the overall World University Rankings." }, "max_results": { "type": "integer", "default": 50, "maximum": 200, "minimum": 1, "description": "Maximum universities to return, such as 50; at most 200." } }}Output schema
{ "type": "object", "required": [ "ranking_name", "year", "rankings" ], "properties": { "year": { "type": "integer", "description": "Year of the ranking." }, "rankings": { "type": "array", "items": { "type": "object", "required": [ "rank", "university", "country", "overall_score", "teaching_score", "research_environment_score", "research_quality_score", "industry_score", "international_outlook_score", "research_score", "citations_score", "industry_income_score", "number_of_students", "students_per_staff", "international_students_percent", "university_link" ], "properties": { "rank": { "type": [ "string", "null" ], "description": "Rank as displayed, including ties and ranges." }, "country": { "type": [ "string", "null" ], "description": "Country or territory shown by THE." }, "university": { "type": [ "string", "null" ], "description": "University name." }, "overall_score": { "type": [ "string", "null" ], "description": "Overall score as displayed, including ranges or n/a." }, "industry_score": { "type": [ "string", "null" ], "description": "Industry score, if this pillar appears." }, "research_score": { "type": [ "string", "null" ], "description": "Research score, for editions using that name." }, "teaching_score": { "type": [ "string", "null" ], "description": "Teaching score, if this pillar appears in the chosen year." }, "citations_score": { "type": [ "string", "null" ], "description": "Citations score, for editions using that name." }, "university_link": { "type": [ "string", "null" ], "description": "University page on THE." }, "number_of_students": { "type": [ "integer", "null" ], "description": "Number of students when shown." }, "students_per_staff": { "type": [ "number", "null" ], "description": "Students per staff member when shown." }, "industry_income_score": { "type": [ "string", "null" ], "description": "Industry Income score, for editions using that name." }, "research_quality_score": { "type": [ "string", "null" ], "description": "Research Quality score, if this pillar appears." }, "research_environment_score": { "type": [ "string", "null" ], "description": "Research Environment score, if this pillar appears." }, "international_outlook_score": { "type": [ "string", "null" ], "description": "International Outlook score, if this pillar appears." }, "international_students_percent": { "type": [ "number", "null" ], "description": "Percent of international students, on a 0 to 100 scale." } } }, "description": "Universities in the order shown by THE after filtering." }, "ranking_name": { "type": [ "string", "null" ], "description": "Name of this THE ranking edition." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
timeshighereducation.com/list_university_rankings- Returns
- rank, university, country, scores, student figures, university link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method timeshighereducation.com/list_university_rankings with the inputs above.
Ask your agent
- Show me the top 20 universities in the 2024 World University Rankings
- Which universities in the United Kingdom made the Times Higher Education list for 2025?
- I need the Engineering subject ranking from THE for the latest year, top 50 only
- List the world university rankings from timeshighereducation.com for 2023 filtered to Germany
- What are the scores and student numbers for the top 100 universities in the 2022 THE rankings?
Looks up a university on Times Higher Education and returns its latest displayed world ranking, overall and pillar scores, student statistics and subject rankings.
timeshighereducation.com/get_universityLists the QS World University Rankings, or a QS subject ranking, for an edition and optionally one country, with each university's displayed rank, location, overall score and the indicator scores published for that table.
topuniversities.com/list_university_rankingsFinds a university's QS profile by name and returns its latest QS World University Ranking and overall score, location, student figures, faculty ratio, public tuition ranges and up to five listed subject ranks.
topuniversities.com/get_universityRanks countries by a World Economic Outlook indicator for a chosen year, excluding regional and group totals and countries without a value.
imf.org/list_country_rankingsLists companies in the Forbes Global 2000 in rank order, optionally for a given year, country of headquarters and industry. Financial figures are in billions of US dollars; up to 500 results.
forbes.com/list_global_2000Lists popular or trending WEBTOON series in ranking order, with authors and displayed subscriber and view counts. Genre filtering keeps matching series from the public top 30.
webtoons.com/list_rankingsLists MyAnimeList's top anime in rank order for a selected ranking (all, airing, upcoming, TV, movies or most popular), with English title, score, type, episodes, airing dates and members.
myanimelist.net/list_top_animeRanks countries by a World Development Indicators statistic for a given year, or for the latest year with broad country coverage. Regional aggregates and countries without data for that year are left out.
worldbank.org/compare_countries