Roger ATC Copilot API

Version 1.14.0 · reads everything, writes only what the RogerATC plugin sends · openapi.json

Authentication

Every route except /v1/health needs the personal API key from Settings → API in the app, sent as Authorization: Bearer rat_live_… or X-API-Key: rat_live_…. The key reads everything in the account, including the pilot profile: keep it on a server, never in a web page or a mobile app. Rotating it in Settings invalidates the old key immediately.

Responses

Every body is JSON with data and meta (requestId, generatedAt); collections add page (limit, total, nextCursor). Records are returned whole, with every field the app stores. Times are UTC ISO 8601, durations whole minutes. A value the app does not know is null or absent, never invented.

StatusCodeMeaning
400bad_requestA parameter is malformed. The message says which.
401unauthorizedNo key, a malformed key, a rotated key, or a paused account.
404not_foundNo such route, or no such record in this account.
405method_not_allowedGET everywhere; PUT only on /v1/plugin/sessions/{id} and /v1/plugin/live. Allow lists what is.
410goneThe pilot deleted this plugin session in the app. Stop sending it.
413payload_too_largeA write body over its limit: 512 KB for a session, 32 KB for a live report.
415unsupported_media_typeA write body that is not application/json.
429rate_limitedOver 120 requests a minute for this key. Retry after Retry-After seconds.
500internalOur fault. The requestId in meta identifies the request in our logs.

Service

GET /v1/health no key

Service health. Answers without a key, touches no data and is not counted. For uptime monitoring.

curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/health

GET /v1/me

The account this key belongs to. The account id, email and name, and the key’s own dates. The cheapest way for an integration to check its key works.

curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/me

Aerodromes

GET /v1/aerodromes

Aerodrome cards. Every aerodrome card in the account, with every field: frequencies, contacts, navaids, runways, taxiways, fuel, position, notes, the NOTAM and MADHEL notes the pilot copied. Sorted by identifier.

Fields: src/core/airfields/types.ts (Airfield)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/aerodromes

GET /v1/aerodromes/{id}

One aerodrome card. By card id, or by the aerodrome’s identifier (SADF, or a national code such as LEN), case-insensitive.

Fields: src/core/airfields/types.ts (Airfield)

ParameterInDescription
idpath, requiredThe card id, or the aerodrome identifier.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/aerodromes/{id}

GET /v1/aerodromes/{id}/attachments/{attachmentId}

Download link for an aerodrome attachment. A diagram, procedure or photo the pilot attached to the card (listed in the card’s attachments). Returns the attachment’s metadata and a presigned HTTPS URL to the file itself, valid for 15 minutes; fetch it without the API key. 404 when the card does not name that attachment, or its file has not been uploaded yet.

Fields: src/core/files/attachments.ts (Attachment)

ParameterInDescription
idpath, requiredThe card id, or the aerodrome identifier.
attachmentIdpath, requiredThe id of one entry in the card’s attachments.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/aerodromes/{id}/attachments/{attachmentId}

GET /v1/airways

ATS routes (airways). Argentina’s lower and upper ATS routes from AIP Argentina ENR 3.1/3.2, with significant points from ENR 4.4, as the app draws them: designator, lower/upper, conventional/RNAV, points in order with positions, and the published distance of each segment. source names the editions. Limits, minimum flight levels and direction of cruising levels are not included.

Fields: src/core/airways/index.ts (Airway)

ParameterInDescription
airspacequerylower or upper. Both when absent.
designatorqueryOne route, e.g. W5 or UL780.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/airways

Aircraft

GET /v1/aircraft

Aircraft. Every aircraft profile, with every field: registration, type, equipment, speeds, fuel, weight and balance, envelope. Sorted by registration.

Fields: src/core/aircraft/types.ts (AircraftProfile)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/aircraft

GET /v1/aircraft/{id}

One aircraft. By aircraft id.

Fields: src/core/aircraft/types.ts (AircraftProfile)

ParameterInDescription
idpath, requiredThe aircraft id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/aircraft/{id}

GET /v1/aircraft/{id}/attachments/{attachmentId}

Download link for an aircraft document. A flight manual, an aircraft document or a photo the pilot attached to the aircraft (listed in its attachments). Returns the attachment’s metadata and a presigned HTTPS URL to the file itself, valid for 15 minutes; fetch it without the API key. 404 when the aircraft does not name that attachment, or its file has not been uploaded yet.

Fields: src/core/files/attachments.ts (Attachment)

ParameterInDescription
idpath, requiredThe aircraft id.
attachmentIdpath, requiredThe id of one entry in the aircraft’s attachments.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/aircraft/{id}/attachments/{attachmentId}

Weather

GET /v1/weather

Weather at the pilot’s aerodromes. Latest METAR and TAF, raw and decoded, for every aerodrome on a card or on the weather briefing. Each entry has a status — ok, no_report, no_icao_indicator or unavailable — and nothing is filled in when a report is absent. Source: NOAA Aviation Weather Center, cached for up to five minutes.

curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/weather

GET /v1/weather/{ident}

Weather at one aerodrome. Any four-letter ICAO location indicator, whether or not it is on a card. A three-letter national code answers no_icao_indicator.

ParameterInDescription
identpath, requiredICAO location indicator, e.g. SAEZ.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/weather/{ident}

Notes

GET /v1/notes

Flight notes. Every note — the kneeboard — with every field, including a handwritten note’s image as a data URL. Newest first by last change.

Fields: src/core/notes/types.ts (FlightNote)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/notes

GET /v1/notes/{id}

One note. By note id.

Fields: src/core/notes/types.ts (FlightNote)

ParameterInDescription
idpath, requiredThe note id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/notes/{id}

Flight plans

GET /v1/flight-plans

Flight plans. Every ICAO flight plan with every field (items 7 to 19, the route, supplementary information). Newest departure date first.

Fields: src/core/flightplan/types.ts (FlightPlan)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/flight-plans

GET /v1/flight-plans/{id}

One flight plan. By flight plan id.

Fields: src/core/flightplan/types.ts (FlightPlan)

ParameterInDescription
idpath, requiredThe flight plan id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/flight-plans/{id}

GET /v1/plannings

Plannings. Every route the pilot planned on the map — the working before a flight plan: the points in order with their positions, the aircraft, the planned departure, altitude, fuel on board, reserve and wind choice, and the flight plan it became (flightPlanId). Stored as the route entity; departure, destination and waypoints mirror points. Newest change first.

Fields: src/core/planning/types.ts (RoutePlanning)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/plannings

GET /v1/plannings/{id}

One planning. By planning id.

Fields: src/core/planning/types.ts (RoutePlanning)

ParameterInDescription
idpath, requiredThe planning id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/plannings/{id}

GET /v1/shared-plannings

Shared plannings. Plannings this pilot plans together with a copilot — as the owner, or as a guest who accepted. One document both edit (doc: the route, alternates, time, level, rules, wind), each pilot’s own half under participants[].personal (aircraft, speed, burn, fuel) with a summary of the aircraft each chose. Never the owner’s provider keys. Newest change first.

Fields: src/core/planning/shared.ts (SharedPlanning)

curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/shared-plannings

GET /v1/shared-plannings/{id}

One shared planning. By id. Not found unless this pilot is its owner or its accepted guest.

Fields: src/core/planning/shared.ts (SharedPlanning)

ParameterInDescription
idpath, requiredThe shared planning id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/shared-plannings/{id}

Logbook

GET /v1/logbook

Logbook entries. Every flight in the logbook, with every field; the ANAC logbook line is under log. Newest first by flight date. Durations are whole minutes.

Fields: src/services/storage/db.ts (FlightLog) and src/core/logbook/entry.ts (LogbookEntry)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/logbook

GET /v1/logbook/totals

Logbook totals. Sums over every entry, in whole minutes, computed by the same function the app uses. The breakdown cells are never added to the flight total. Optional from / to dates bound the flights counted.

ParameterInDescription
fromqueryFirst flight date counted, YYYY-MM-DD, inclusive.
toqueryLast flight date counted, YYYY-MM-DD, inclusive.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/logbook/totals

GET /v1/logbook/{id}

One logbook entry. By entry id.

Fields: src/services/storage/db.ts (FlightLog)

ParameterInDescription
idpath, requiredThe logbook entry id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/logbook/{id}

Checklists

GET /v1/checklists

Checklists. Every checklist the pilot built, with its sections and items, for every aircraft. Sorted by aircraft, then by the pilot’s own order. Filter with aircraftId.

Fields: src/core/checklists/types.ts (Checklist)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
aircraftIdqueryOnly the checklists of this aircraft.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/checklists

GET /v1/checklists/{id}

One checklist. By checklist id.

Fields: src/core/checklists/types.ts (Checklist)

ParameterInDescription
idpath, requiredThe checklist id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/checklists/{id}

GET /v1/check-flights

Flight checks. One record per flight the pilot ran an aircraft’s checklists on: when it started and finished, the lists in that day’s order, and a summary — items total, items done, and every item left unchecked. Newest first. Filter with aircraftId.

Fields: src/core/checklists/checkFlight.ts (CheckFlight)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
aircraftIdqueryOnly the flights of this aircraft.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/check-flights

GET /v1/check-flights/{id}

One flight’s checks. By flight id.

Fields: src/core/checklists/checkFlight.ts (CheckFlight)

ParameterInDescription
idpath, requiredThe flight id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/check-flights/{id}

RogerATC plugin

PUT /v1/plugin/sessions/{id}

Store a plugin session. An idempotent upsert of one whole RogerATC session: send it at the start, at checkpoints, and at the end, under the same id. Answers 201 the first time and 200 after. 410 gone when the pilot deleted the session in the app — stop sending it. Oldest events are dropped to fit the limits, and eventsDropped says how many.

Fields: src/core/plugin/session.ts (PluginSession)

ParameterInDescription
idpath, requiredThe plugin’s session id, stable for the flight: 3–128 of A–Z a–z 0–9 . _ -.
curl -X PUT -H "Content-Type: application/json" -d @session.json -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/plugin/sessions/{id}

PUT /v1/plugin/live

Report live state, collect commands. The live link, polled by the plugin while the simulator runs. The body is the plugin’s current state — position, phase, radios, weather as the simulator has it, the controller’s last procedure — and the outcome (acks) of every command it dealt with since the last call. The answer carries the commands the pilot sent from the app and the plugin has not collected yet, oldest first, each handed over exactly once, and pollMs: 2000 while somebody has the RogerATC screen open, 10000 while nobody does. Always 200. The report replaces the previous one and expires after ten minutes; it is never a track and never a synced record. No navigation data: the plugin sends where the aeroplane is, never what is near it. Body at most 32 KB.

Fields: src/core/plugin/live.ts (LiveReport, CommandRequest)

curl -X PUT -H "Content-Type: application/json" -d @session.json -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/plugin/live

GET /v1/plugin/sessions

Plugin sessions. Every RogerATC session stored for the account, newest first, with its statistics and events. updatedSince follows sessions still in progress.

Fields: src/core/plugin/session.ts (PluginSession)

ParameterInDescription
limitqueryRecords per page, 1–200. Default 50. A page may hold fewer when records are large.
cursorqueryOpaque. Pass page.nextCursor from the previous response to get the next page.
updatedSincequeryISO 8601 date-time. Only records changed after it — the way to follow changes.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/plugin/sessions

GET /v1/plugin/sessions/{id}

One plugin session. By session id.

Fields: src/core/plugin/session.ts (PluginSession)

ParameterInDescription
idpath, requiredThe plugin’s session id.
curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/plugin/sessions/{id}

GET /v1/plugin/stats

Plugin totals. Totals over every stored session — the same function the app’s RogerATC screen uses: sessions by status, minutes, transmissions, readbacks, response time, stations, aerodromes and aircraft.

Fields: src/core/plugin/session.ts (PluginTotals)

curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/plugin/stats

Pilot

GET /v1/pilot

Pilot profile. The pilot profile with every field: name, telephone, licences, ratings with their expiry, the medical certificate. data is null when the pilot has not created one. The key grants this; treat it accordingly.

Fields: src/core/flightplan/types.ts (PilotProfile) and src/core/pilot/credentials.ts

curl -H "Authorization: Bearer $ROGER_API_KEY" https://api.rogeratc.app/v1/pilot