๐ก We check universities.hipolabs.com (and 70+ other public dev APIs) with a plain GET every 30 minutes โ see the live status page. The probe uses http://, because the API's https:// doesn't answer at all โ which is exactly the problem this page is about.
universities.hipolabs.com is the university-search API in a thousand autocomplete, search-filter, and country-dropdown tutorials: ten thousand real universities, no key, CORS open, with ?name= and ?country= filters. Great teaching material โ when it works from where you're coding.
Checked live on September 16, 2026, it breaks in two ways that cost beginners hours:
https://universities.hipolabs.com fails during the TLS handshake โ no certificate error to click through, no response, nothing. And since CodeSandbox, StackBlitz, Netlify, Vercel, and GitHub Pages all serve your app over https, the browser silently blocks the http:// fallback as mixed content. The tutorial works on http://localhost, then fails the moment you deploy or open it in an online editor โ the classic "works on my machine, red CORS-looking error in the console everywhere else"./search?name=middle&country=Turkey, answers [] โ the dataset renamed the country to Turkiye, so the exact string every tutorial copies now matches zero records. (?country=Turkiye finds Middle East Technical University just fine.)Also worth knowing: a filterless /search returns the entire dataset โ 10,259 records, ~1.9 MB โ which is a lot of JSON to hand an autocomplete on every keystroke.
Here's the fix that keeps your code and your data: two curls that copy the real roster for the country you're building against into a free hosted API โ served over HTTPS with CORS, so it works from every online editor and deployed site. No signup.
Pull the roster for your country from the original (over plain http, from a terminal โ curl doesn't care about mixed content), wrap it as a db.json, and import:
curl -s "http://universities.hipolabs.com/search?country=Turkiye" \
| python3 -c 'import json,sys; json.dump({"universities": json.load(sys.stdin)}, sys.stdout)' \
> db.json
curl -s -X POST https://mockbird.mockbird.workers.dev/api/projects/import \
-H 'content-type: application/json' --data-binary @db.json
# โ 201 {"id":"โฆ","baseUrl":"https://โฆ/m/PROJECT_ID",
# "resources":[{"name":"universities","records":188,โฆ}], โฆ}
(Swap Turkiye for any country โ United+Kingdom, Germany, India. Prefer jq? jq '{universities:.}' does the same wrap. If their API is down when you try, that's what this page is for โ grab the same data from the source dataset on GitHub, Hipo/university-domains-list, which serves raw JSON over working HTTPS.)
Every record survives verbatim โ including the parts a schema-based mock would mangle: the web_pages and domains arrays, and even the hyphenated state-province key:
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/universities/1"
# โ {"id":1,"state-province":null,"name":"Adnan Menderes University",
# "web_pages":["http://www.adu.edu.tr/"],"domains":["adu.edu.tr"],
# "alpha_two_code":"TR","country":"Turkiye"}
| universities.hipolabs.com | Mockbird |
|---|---|
http://โฆ/search (https broken) | https://โฆ/m/PROJECT_ID/universities โ real HTTPS, CORS * |
?name=middle (substring) | ?name_like=middle (case-insensitive substring) |
?country=Turkiye (exact) | ?country=Turkiye (same โ exact match) |
?limit=10&offset=20, no total | ?limit=10&page=3 + an X-Total-Count header |
| Bare JSON array response | Bare JSON array response (same โ setResults(data) unchanged) |
| No single-record endpoint | GET /universities/1 |
| Read-only | POST/PUT/PATCH/DELETE persist for real |
Verified examples, run live before publishing:
# the README query that now fails upstream โ working again
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/universities?name_like=middle"
# โ [{"name":"Middle East Technical University",โฆ}]
# search any field (matches Boฤaziรงi with plain ascii input)
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/universities?q=bogazici"
# autocomplete diet: page 2, sorted, names only
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/universities?limit=10&page=2&sortBy=name&select=name,country"
# the whole roster as CSV for a spreadsheet
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/universities?mock_format=csv&select=name,country"
curl -X POST https://mockbird.mockbird.workers.dev/m/PROJECT_ID/universities \
-H 'content-type: application/json' \
-d '{"name":"Mockbird Institute of Technology","country":"Turkiye",
"alpha_two_code":"TR","web_pages":["https://mit.example.edu"],
"domains":["mit.example.edu"],"state-province":null}'
# โ 201 {"id":189,โฆ} โ and GET /universities/189 returns it. It persists.
That turns the standard "search a university" tutorial into full CRUD: an admin page that adds records, an edit form, a delete button โ a portfolio piece instead of a fetch demo.
# fail, fail, recover โ exercise your retry / error-state UI
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/universities?mock_seq=503,503,200"
# slow response for your autocomplete's loading state
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/universities?name_like=tech&mock_delay=2000"
More recipes in testing loading & error states.
Credit where due: hipolabs' dataset is real, worldwide, and community-maintained โ 10,259 universities across every country, free, CORS open, and (over http) it answered our checks in ~300 ms. If you need all countries and you're calling from a terminal, a server, or plain-http localhost, it still does the job; your import here is a snapshot, not a live mirror. And if you want the full worldwide list under your own control, the underlying JSON lives in Hipo/university-domains-list on GitHub โ fetchable over real HTTPS, importable here the same two-curl way (trim it to the countries you need first; imports keep the first 1,000 records per collection). The honest split: live worldwide data on http โ hipolabs. The same records over HTTPS, from online editors and deployed apps, with search, pagination, writes, and failure drills โ your import.
The two-curl block in section 1, or zero setup at all:
curl https://mockbird.mockbird.workers.dev/m/demo/products?limit=3
Facts checked live on September 16, 2026: https://universities.hipolabs.com fails the TLS handshake outright (curl: SSL_ERROR_SYSCALL, no HTTP response); the same URL over http answers 200 in ~300 ms with Access-Control-Allow-Origin: *; /search?name=middle&country=Turkey returns [] while ?country=Turkiye returns 188 records including Middle East Technical University; a filterless /search returned 10,259 records (1,949,331 bytes). Every Mockbird command on this page was run against a live project before publishing.
Full API reference in the docs. More guides: REST Countries alternative ยท JSONPlaceholder alternative ยท CSV โ REST API ยท Host a JSON file as an API ยท GitHub Jobs alternative. Create your API โ