Developers
Read endpoints for partners building on top of UniMate. JSON-only, versioned at /api/v1/*, authenticated by a single header.
One header
X-UniMate-API-Key
Read-only
GET endpoints. Write coming.
Rate-limited
Default 60/min · 10k/day per key
Versioned
/api/v1/* — locked surface
Every request requires an API key issued by us. Send it as theX-UniMate-API-Keyheader (or Authorization: Bearer um_live_...). Keys look likeum_live_xxxxx…and are shown once at creation.
Want a key?
Email partnerships@getunimate.com with your use case. We typically reply same business day.
curl https://getunimate.com/api/v1/health \ -H "X-UniMate-API-Key: um_live_..."
import httpx
KEY = "um_live_..."
r = httpx.get(
"https://getunimate.com/api/v1/health",
headers={"X-UniMate-API-Key": KEY},
)
print(r.json())const KEY = "um_live_...";
const r = await fetch("https://getunimate.com/api/v1/health", {
headers: { "X-UniMate-API-Key": KEY },
});
console.log(await r.json());/api/v1/health key requiredEchoes your key prefix + rate limits. Use to verify integration.
{
"status": "ok",
"version": "1.0.0",
"your_key": "um_live_aB3F",
"rate_limit_per_min": 60,
"rate_limit_per_day": 10000
}/api/v1/stats key requiredAggregate counts: users, active 30d, universities, decks, AI messages, study rooms.
{
"total_users": 12453,
"active_users_30d": 4321,
"universities_count": 38,
"flashcard_decks": 28940,
"ai_messages_total": 1843200,
"study_rooms_total": 8120,
"generated_at": "2026-05-09T13:42:00Z"
}/api/v1/universities?country_code=kz&limit=50 key requiredList universities. Filter by ISO alpha-2 country code. Sorted by student count.
[
{
"id": "0c4e2fb4-…",
"name": "Kazakh-British Technical University",
"short_name": "KBTU",
"city": "Almaty",
"country": "KZ",
"country_code": "kz",
"student_count": 5420,
"is_verified": true,
"default_academic_system": "semester_2",
"default_gpa_scale": "100"
},
…
]/api/v1/universities/{uni_id} key requiredFull record for one university.
/api/v1/users/{nickname}/public key requiredPublic profile — nickname, first_name, avatar, bio, xp, tier, joined_at. No PII.
{
"nickname": "alex_uni",
"first_name": "Alex",
"avatar_url": null,
"bio": "CS @ KBTU · year 3 · grinder",
"xp": 14820,
"premium_tier": "plus",
"joined_at": "2026-02-12"
}/api/v1/leaderboards/global?limit=50 key requiredGlobal top-N by XP. rank/nickname/first_name/xp/streak. Anonymous to non-active users.
/api/v1/leaderboards/university/{uni_id}?limit=50 key requiredTop-N inside a single university. Same shape as global.
/api/v1/holidays/{country_code} key requiredPublic holidays + multi-day study breaks for KZ + RU (others on request).
[
{
"on_date": "2026-03-21",
"name": "Наурыз мейрамы / Nauryz",
"is_break": true,
"description": "Spring equinox · multi-day"
}
]Default per-key: 60 requests / minute and 10 000 requests / day. Exceeding either returns 429 Too Many Requestswith a Retry-After header. Need higher limits — email us, we'll bump per-key.
401 — missing / invalid / revoked key404 — resource not found (or not public)429 — rate-limit hit, see Retry-After5xx — our problem; retry with backoffPublic API surface is intentionally narrow. Write endpoints (tasks/notes for partner-side tools) coming Q3. Subscribe at /changelog for changes.