โ† All guides

๐Ÿ“ก 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 API alternative โ€” the autocomplete dataset from your tutorial, but over HTTPS

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:

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.

1. Migrate the real records in two curls

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"}

2. hipolabs โ†’ Mockbird translation

universities.hipolabs.comMockbird
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 responseBare JSON array response (same โ€” setResults(data) unchanged)
No single-record endpointGET /universities/1
Read-onlyPOST/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"

3. The part the original can't do: writes

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.

4. Rehearse the outage that brought you here

# 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.

Where the original still wins

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.

Start now

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 โ†’

โšก Skip the terminal: this link opens the dashboard's import panel โ€” paste the db.json from section 1 and you're done. No signup.