Neptun API & App
Reverse Engineering · APIMy university has no public API — so I built one, then put a phone app on top of it.
Neptun is the system every Hungarian university runs on — grades, schedule, tuition, messages — and it's notoriously clunky, with no API for students. So I reverse-engineered one out of its mobile endpoints and built the client I actually wanted.
The idea
I wanted my own data — schedule, grades, payments, messages — in a form I could actually build on, instead of fighting the official web UI. There was no public API, so the only way through was to figure out how the official mobile app talks to the server and speak the same language.
Reverse-engineering
The Neptun mobile app talks to a set of MobileCloudService endpoints. I traced those calls, worked out the session-based authentication, and reimplemented the whole conversation — login, then typed requests for each kind of data — as clean async Python.
API + app
The result is two pieces: a FastAPI REST wrapper — fully documented with Swagger/ReDoc, type-safe Pydantic models, async throughout — covering schedule/calendar, academic info (terms, grades), finances (payments, tuition) and messages; and a Flutter Android app on top of it. (The API was ported from an earlier Dart implementation that grew out of the app itself.)
Status
Sunset, honestly. It worked great while it lasted — but the university moved off the old Neptun endpoints, so the reverse-engineered API no longer has a server to talk to. It stays here as a clean example of the work: trace a private protocol, model it, and rebuild it as something usable.
Built with
Python, FastAPI + uvicorn, Pydantic models, async httpx against the reverse-engineered MobileCloudService endpoints, with Swagger/ReDoc docs — plus a Flutter / Dart Android client on top.