Developer API
An open read-only API: JSON, no keys, CORS allowed. Online data refreshes every 5 seconds — do not request it more often.
| Request | Returns |
|---|---|
| GET /api/v1/status | Network name, FSD server address, data status |
| GET /api/v1/online | Pilots (position, altitude, speed, heading, flight plan) and controllers (frequency, rating, position) |
| GET /api/v1/stats | Members, online, number of connections |
| GET /api/v1/members/{cid} | Member profile: name, controller, pilot and military ratings, pilot and controller hours |
| GET /api/v1/members/{cid}/sessions | Last 50 connections |
| GET /api/v1/events[?lang=en] | Upcoming events |
| GET /api/v1/events/{id}[?lang=en] | An event |
| GET /api/v1/bookings | Position bookings |
| GET /api/v1/news[?lang=en] | News |
| GET /api/v1/pilots/{callsign}/route | An online pilot's route as points (from SimBrief or worked out from the flight plan), the flown track and, for SimBrief plans, registration and step climbs |
| GET /api/v1/routes/decode?departure=UUEE&destination=EDDF&route=… | A route text as points: waypoints, airways expanded, coordinates; the tokens not found |
| GET /api/v1/airports/{icao}/layout | Airport diagram: runways, taxiways, aprons, stands (OpenStreetMap) |
| GET /api/v1/metar/{icao} | Current METAR |
| POST /api/v1/auth/pilot | Checks a member's CID and password for SkyPilot and returns the name and rating; 401 if wrong, 403 if suspended |
| GET /api/flightplans/latest?cid={cid} | The member's latest flight plan (SkyPilot format); 404 if there is none |
Example
curl https://sky-network.online/api/v1/online
All times are UTC in ISO 8601. The raw FSD server feed is available directly too: /data.json on the server's HTTP port.
SkyNetwork Connect
Sign-in with SkyNetwork for division sites and other sites of the network (OAuth 2.0, authorization code flow, PKCE supported). The member signs in on the network site and agrees once; the site never sees the password. A network administrator registers the site and gives it a client ID and secret.
- Send the member to GET https://sky-network.online/oauth/authorize?response_type=code&client_id=…&redirect_uri=…&scope=profile&state=… (optionally code_challenge and code_challenge_method=S256).
- The member comes back to redirect_uri with code and state (or error=access_denied).
- Exchange the code within 5 minutes: POST https://sky-network.online/oauth/token (form: grant_type=authorization_code, code, redirect_uri, client_id, client_secret, code_verifier) → access_token for 1 hour.
- GET https://sky-network.online/oauth/userinfo with Authorization: Bearer access_token → cid, name, rating, staffRank, pilotRating, militaryRating, country; email with the email scope.
Division API
For division websites. Every request carries the division's key, issued by a network administrator: the Authorization: Bearer header (or X-Api-Key). Answers are JSON; errors come as { "error": code, "message": text }.
| Request | Returns |
|---|---|
| GET /api/division/v1/members/{cid} | A member and their ratings: check a CID before the exam |
| POST /api/division/v1/rating-requests | The student passed the exam: ask for the rating. A supervisor approves it |
| GET /api/division/v1/rating-requests[?status=&cid=] | Your rating requests and their status: pending, approved, declined, withdrawn |
| GET /api/division/v1/rating-requests/{id} | A rating request |
| DELETE /api/division/v1/rating-requests/{id} | Withdraw a request that is still pending |
Rating request
curl -X POST https://sky-network.online/api/division/v1/rating-requests \
-H "Authorization: Bearer skd_..." -H "Content-Type: application/json" \
-d '{
"cid": 25,
"track": "atc",
"rating": "S2",
"examinerCid": 7,
"examinerName": "Ivan Petrov",
"examDate": "2026-09-20",
"score": "92%",
"reportUrl": "https://academy.example/exams/1841",
"comment": "Practical exam at UUEE_TWR",
"externalId": "exam-1841"
}'
- track: atc, pilot or military; rating: its short name (S1…I3, PPL…FE, M1…M4).
- The member must not hold this rating already. One pending request per member and track.
- externalId makes retries safe: the same value returns the request already created instead of a new one.
- Answers: 201 created, 200 already sent, 401 wrong key, 404 no such member, 409 a request is already pending, 422 not allowed, 429 too many requests.
- Supervisors approve controller ratings up to C3 and all pilot and military ratings; instructor ratings (I1–I3) are approved by administrators.