Private API v1
Base URL: https://your-tenant.airspace.example/api/v1
Authentication: API key via X-API-Key header (see API Keys)
Overview
The Private API v1 provides full CRUD access to your airline's operational data. All endpoints return JSON and follow REST conventions. Responses use Laravel's standard pagination envelope with data, links, and meta keys.
Authentication
Include your API key in every request using the X-API-Key header:
GET /api/v1/flights HTTP/1.1
Host: your-tenant.airspace.example
X-API-Key: ask_your_key_here
Requests without a valid key receive a 401 Unauthorized response.
Pagination
All list endpoints return paginated results. Control pagination with query parameters:
| Parameter | Default | Max | Description |
|---|---|---|---|
per_page | 25 | 100 | Number of items per page |
page | 1 | -- | Page number |
Filtering
Filter list results by passing filter[field]=value query parameters. Only fields listed as filterable for each endpoint are accepted; others are silently ignored.
GET /api/v1/flights?filter[status]=acceptedSystem&filter[user_id]=42
Sorting
Sort results with the sort and sort_dir query parameters. Only fields listed as sortable for each endpoint are accepted.
GET /api/v1/flights?sort=created_at&sort_dir=desc
| Parameter | Values | Default |
|---|---|---|
sort | Field name | -- |
sort_dir | asc, desc | asc |
Core Endpoints
Airlines
Manage airline definitions (name, ICAO/IATA codes, callsign, branding assets).
| Method | Path | Description |
|---|---|---|
| GET | /airlines | List all airlines |
| GET | /airlines/{id} | Get a single airline |
| POST | /airlines | Create an airline |
| PUT | /airlines/{id} | Update an airline |
| DELETE | /airlines/{id} | Delete an airline |
Filterable fields: name, icao, iata, active
Sortable fields: name, icao, created_at
Airports
Manage airport definitions including geographic coordinates, navigation data, and operational flags.
| Method | Path | Description |
|---|---|---|
| GET | /airports | List all airports |
| GET | /airports/{id} | Get a single airport |
| POST | /airports | Create an airport |
| PUT | /airports/{id} | Update an airport |
| DELETE | /airports/{id} | Delete an airport |
Filterable fields: icao, iata, name, country_id, active
Sortable fields: icao, name, country_id, created_at
Airport Runways (nested)
| Method | Path | Description |
|---|---|---|
| GET | /airports/{airportId}/runways | List runways |
| GET | /airports/{airportId}/runways/{id} | Get a runway |
| POST | /airports/{airportId}/runways | Create a runway |
| PUT | /airports/{airportId}/runways/{id} | Update a runway |
| DELETE | /airports/{airportId}/runways/{id} | Delete a runway |
Filterable fields: designator, active, preferred, ils
Sortable fields: designator, created_at
Airport Stands (nested)
| Method | Path | Description |
|---|---|---|
| GET | /airports/{airportId}/stands | List stands |
| GET | /airports/{airportId}/stands/{id} | Get a stand |
| POST | /airports/{airportId}/stands | Create a stand |
| PUT | /airports/{airportId}/stands/{id} | Update a stand |
| DELETE | /airports/{airportId}/stands/{id} | Delete a stand |
Filterable fields: apron_name, stand
JSON array fields (multi-select): fleet_ids, subfleet_ids, airline_ids, origin_country_ids, origin_airport_ids, destination_country_ids, destination_airport_ids
Sortable fields: apron_name, stand, created_at
Airport Services (nested)
| Method | Path | Description |
|---|---|---|
| GET | /airports/{airportId}/services | List services |
| GET | /airports/{airportId}/services/{id} | Get a service |
| POST | /airports/{airportId}/services | Create a service |
| PUT | /airports/{airportId}/services/{id} | Update a service |
| DELETE | /airports/{airportId}/services/{id} | Delete a service |
The type field accepts: fuel_gas, fuel_jet, ground_handling, technician, ground_power, air_starter, catering, cleaning, wheelchair_assistance.
Airport Threats (nested)
| Method | Path | Description |
|---|---|---|
| GET | /airports/{airportId}/threats | List threats |
| GET | /airports/{airportId}/threats/{id} | Get a threat |
| POST | /airports/{airportId}/threats | Create a threat |
| PUT | /airports/{airportId}/threats/{id} | Update a threat |
| DELETE | /airports/{airportId}/threats/{id} | Delete a threat |
The type field accepts: obstacles, general_aviation, terrain, slope_irregular, wildlife, runway_incursion, window.
Airport Operational Notes (nested)
| Method | Path | Description |
|---|---|---|
| GET | /airports/{airportId}/operational-notes | List operational notes |
| GET | /airports/{airportId}/operational-notes/{id} | Get an operational note |
| POST | /airports/{airportId}/operational-notes | Create an operational note |
| PUT | /airports/{airportId}/operational-notes/{id} | Update an operational note |
| DELETE | /airports/{airportId}/operational-notes/{id} | Delete an operational note |
The category field accepts: caution, attention, operation. The context field accepts: general, arrival, departure.
Airport Alternates (nested)
| Method | Path | Description |
|---|---|---|
| GET | /airports/{airportId}/alternates | List alternates |
| GET | /airports/{airportId}/alternates/{id} | Get an alternate |
| POST | /airports/{airportId}/alternates | Create an alternate |
| PUT | /airports/{airportId}/alternates/{id} | Update an alternate |
| DELETE | /airports/{airportId}/alternates/{id} | Delete an alternate |
Filterable fields: alternate_airport_id, fleet_id, subfleet_id
Aircraft
Manage individual aircraft registrations, performance profiles, and operational state.
| Method | Path | Description |
|---|---|---|
| GET | /aircraft | List all aircraft |
| GET | /aircraft/{id} | Get a single aircraft |
| POST | /aircraft | Create an aircraft |
| PUT | /aircraft/{id} | Update an aircraft |
| DELETE | /aircraft/{id} | Soft-delete an aircraft |
Filterable fields: registration, aircraft_sub_fleet_id, status, airport_id
Sortable fields: registration, created_at
Notable response fields: airport_stand_id -- the aircraft's current parking stand (nullable, set automatically when flights complete).
Aircraft use soft deletion. Deleted aircraft are no longer returned by the API but remain in the database.
Aircraft Maintenance Checks (nested)
| Method | Path | Description |
|---|---|---|
| GET | /aircraft/{aircraftId}/maintenance-checks | List maintenance checks |
| GET | /aircraft/{aircraftId}/maintenance-checks/{id} | Get a maintenance check |
| POST | /aircraft/{aircraftId}/maintenance-checks | Create a maintenance check |
| PUT | /aircraft/{aircraftId}/maintenance-checks/{id} | Update a maintenance check |
| DELETE | /aircraft/{aircraftId}/maintenance-checks/{id} | Delete a maintenance check |
The status field accepts: ok, repositioning, pending_at_base, in_maintenance, overdue.
Aircraft MEL Items (nested)
| Method | Path | Description |
|---|---|---|
| GET | /aircraft/{aircraftId}/mel-items | List MEL items |
| GET | /aircraft/{aircraftId}/mel-items/{id} | Get a MEL item |
| POST | /aircraft/{aircraftId}/mel-items | Create a MEL item |
| PUT | /aircraft/{aircraftId}/mel-items/{id} | Update a MEL item |
| DELETE | /aircraft/{aircraftId}/mel-items/{id} | Delete a MEL item |
The repair_category field accepts: A, B, C, D.
Aircraft Hour Adjustments (nested)
| Method | Path | Description |
|---|---|---|
| GET | /aircraft/{aircraftId}/hour-adjustments | List hour adjustments |
| GET | /aircraft/{aircraftId}/hour-adjustments/{id} | Get an hour adjustment |
| POST | /aircraft/{aircraftId}/hour-adjustments | Create an hour adjustment |
| PUT | /aircraft/{aircraftId}/hour-adjustments/{id} | Update an hour adjustment |
| DELETE | /aircraft/{aircraftId}/hour-adjustments/{id} | Delete an hour adjustment |
Aircraft Fleets
Manage aircraft fleet groupings (e.g., "Boeing 737 Family").
| Method | Path | Description |
|---|---|---|
| GET | /aircraft-fleets | List all fleets |
| GET | /aircraft-fleets/{id} | Get a single fleet |
| POST | /aircraft-fleets | Create a fleet |
| PUT | /aircraft-fleets/{id} | Update a fleet |
| DELETE | /aircraft-fleets/{id} | Soft-delete a fleet |
Filterable fields: name, icao_code
Sortable fields: name, icao_code, created_at
Aircraft Sub-Fleets
Manage aircraft sub-fleet variants within a fleet (e.g., "B737-800" within Boeing 737 Family).
| Method | Path | Description |
|---|---|---|
| GET | /aircraft-sub-fleets | List all sub-fleets |
| GET | /aircraft-sub-fleets/{id} | Get a single sub-fleet |
| POST | /aircraft-sub-fleets | Create a sub-fleet |
| PUT | /aircraft-sub-fleets/{id} | Update a sub-fleet |
| DELETE | /aircraft-sub-fleets/{id} | Soft-delete a sub-fleet |
Filterable fields: name, aircraft_fleet_id
Sortable fields: name, created_at
Liveries
Manage aircraft livery files available for download by pilots.
| Method | Path | Description |
|---|---|---|
| GET | /liveries | List all liveries |
| GET | /liveries/{id} | Get a single livery |
| POST | /liveries | Create a livery |
| PUT | /liveries/{id} | Update a livery |
| DELETE | /liveries/{id} | Delete a livery |
Filterable fields: name, airline_id
Sortable fields: name, created_at
The simulator field accepts: msfs_2020, msfs_2024, xplane_11, xplane_12, p3d, fsx.
Operations Endpoints
Flights
Full lifecycle management for pilot flight records (PIREPs).
| Method | Path | Description |
|---|---|---|
| GET | /flights | List all flights |
| GET | /flights/{id} | Get a single flight |
| POST | /flights | Create a flight |
| PUT | /flights/{id} | Update a flight |
| DELETE | /flights/{id} | Delete a flight |
Filterable fields: user_id, booking_id, status, aircraft_id, departure_airport_id, arrival_airport_id
Sortable fields: created_at, departure_time, arrival_time, status
Notable response fields: departure_stand_id, arrival_stand_id -- parking stands copied from the associated booking at flight creation (nullable).
Flight Events (nested)
| Method | Path | Description |
|---|---|---|
| GET | /flights/{flightId}/events | List flight events |
| GET | /flights/{flightId}/events/{id} | Get a flight event |
| POST | /flights/{flightId}/events | Create a flight event |
| PUT | /flights/{flightId}/events/{id} | Update a flight event |
| DELETE | /flights/{flightId}/events/{id} | Delete a flight event |
Telemetry Points (nested)
| Method | Path | Description |
|---|---|---|
| GET | /flights/{flightId}/telemetry-points | List telemetry points |
| GET | /flights/{flightId}/telemetry-points/{id} | Get a telemetry point |
| POST | /flights/{flightId}/telemetry-points | Create a telemetry point |
| PUT | /flights/{flightId}/telemetry-points/{id} | Update a telemetry point |
| DELETE | /flights/{flightId}/telemetry-points/{id} | Delete a telemetry point |
Schedules
Manage airline schedules (route definitions available for booking).
| Method | Path | Description |
|---|---|---|
| GET | /schedules | List all schedules |
| GET | /schedules/{id} | Get a single schedule |
| POST | /schedules | Create a schedule |
| PUT | /schedules/{id} | Update a schedule |
| DELETE | /schedules/{id} | Delete a schedule |
Filterable fields: airline_id, departure_airport_id, arrival_airport_id, aircraft_fleet_id, active
Sortable fields: flight_number, created_at
Bookings
Manage pilot flight bookings (reservations for schedules or charter flights).
| Method | Path | Description |
|---|---|---|
| GET | /bookings | List all bookings |
| GET | /bookings/{id} | Get a single booking |
| POST | /bookings | Create a booking |
| PUT | /bookings/{id} | Update a booking |
| DELETE | /bookings/{id} | Soft-delete a booking |
Filterable fields: user_id, schedule_id, aircraft_id, status
Sortable fields: created_at, booked_at
Notable response fields: departure_stand_id, arrival_stand_id -- the pre-assigned departure and arrival parking stands (nullable, set automatically at booking creation).
Bookings use soft deletion. Deleted bookings are no longer returned by the API but remain in the database.
Ferry Flights
Manage aircraft repositioning ferry flights.
| Method | Path | Description |
|---|---|---|
| GET | /ferry-flights | List all ferry flights |
| GET | /ferry-flights/{id} | Get a single ferry flight |
| POST | /ferry-flights | Create a ferry flight |
| PUT | /ferry-flights/{id} | Update a ferry flight |
| DELETE | /ferry-flights/{id} | Delete a ferry flight |
Filterable fields: status, aircraft_id
Sortable fields: created_at
Ferry Legs (nested)
| Method | Path | Description |
|---|---|---|
| GET | /ferry-flights/{ferryFlightId}/legs | List ferry legs |
| GET | /ferry-flights/{ferryFlightId}/legs/{id} | Get a ferry leg |
| POST | /ferry-flights/{ferryFlightId}/legs | Create a ferry leg |
| PUT | /ferry-flights/{ferryFlightId}/legs/{id} | Update a ferry leg |
| DELETE | /ferry-flights/{ferryFlightId}/legs/{id} | Delete a ferry leg |
Repositioning Bounties
Manage bounties offered for repositioning aircraft to desired locations.
| Method | Path | Description |
|---|---|---|
| GET | /repositioning-bounties | List all bounties |
| GET | /repositioning-bounties/{id} | Get a single bounty |
| POST | /repositioning-bounties | Create a bounty |
| PUT | /repositioning-bounties/{id} | Update a bounty |
| DELETE | /repositioning-bounties/{id} | Delete a bounty |
Filterable fields: airport_id, aircraft_id, status
Sortable fields: created_at, expires_at
Crew Endpoints
Users
Manage airline crew members (pilots). Sensitive fields such as passwords and tokens are never returned in API responses.
| Method | Path | Description |
|---|---|---|
| GET | /users | List all users |
| GET | /users/{id} | Get a single user |
| POST | /users | Create a user |
| PUT | /users/{id} | Update a user |
| DELETE | /users/{id} | Soft-delete a user |
Filterable fields: name, email, rank_id, status, callsign
Sortable fields: name, email, created_at, callsign
User responses include a licenses array containing the pilot's current license assignments:
{
"id": 42,
"name": "Jane Smith",
"email": "[email protected]",
"callsign": "JS001",
"status": "active",
"licenses": [
{
"id": 1,
"name": "A320 Type Rating",
"slug": "a320-type-rating",
"status": "active",
"issued_at": "2025-01-15T00:00:00.000000Z",
"expires_at": "2026-01-15T00:00:00.000000Z",
"last_renewed_at": "2025-01-15T00:00:00.000000Z",
"renewal_opted_out": false
}
]
}
The renewal_opted_out field is true when the pilot has disabled automatic renewal for that license — the license will expire naturally at the end of its current term without being eligible for the daily renewal job.
Ranks
Manage pilot ranks and their progression requirements.
| Method | Path | Description |
|---|---|---|
| GET | /ranks | List all ranks |
| GET | /ranks/{id} | Get a single rank |
| POST | /ranks | Create a rank |
| PUT | /ranks/{id} | Update a rank |
| DELETE | /ranks/{id} | Delete a rank |
Filterable fields: name, level
Sortable fields: name, level, created_at
Rank Applications (nested)
Manage rank promotion applications submitted by users.
| Method | Path | Description |
|---|---|---|
| GET | /ranks/{rankId}/applications | List applications for a rank |
| GET | /ranks/{rankId}/applications/{id} | Get a single application |
| POST | /ranks/{rankId}/applications | Create an application |
| PUT | /ranks/{rankId}/applications/{id} | Update an application |
| DELETE | /ranks/{rankId}/applications/{id} | Delete an application |
Filterable fields: user_id, status
Sortable fields: created_at, status
Licenses
Manage pilot licenses and type ratings.
| Method | Path | Description |
|---|---|---|
| GET | /licenses | List all licenses |
| GET | /licenses/{id} | Get a single license |
| POST | /licenses | Create a license |
| PUT | /licenses/{id} | Update a license |
| DELETE | /licenses/{id} | Delete a license |
Filterable fields: name, active
Sortable fields: name, created_at
Renewal Conditions (nested)
Manage the conditions required for license renewals.
| Method | Path | Description |
|---|---|---|
| GET | /licenses/{licenseId}/renewal-conditions | List renewal conditions |
| GET | /licenses/{licenseId}/renewal-conditions/{id} | Get a renewal condition |
| POST | /licenses/{licenseId}/renewal-conditions | Create a renewal condition |
| PUT | /licenses/{licenseId}/renewal-conditions/{id} | Update a renewal condition |
| DELETE | /licenses/{licenseId}/renewal-conditions/{id} | Delete a renewal condition |
Filterable fields: type, active
Sortable fields: sort_order, created_at
Positions
Manage flight position reports (telemetry snapshots during active flights).
| Method | Path | Description |
|---|---|---|
| GET | /positions | List all positions |
| GET | /positions/{id} | Get a single position |
| POST | /positions | Create a position |
| PUT | /positions/{id} | Update a position |
| DELETE | /positions/{id} | Delete a position |
Filterable fields: name, active
Sortable fields: name, sort_order, created_at
Exam Endpoints
Question Pools
Manage exam question pools — collections of reusable questions grouped by topic.
| Method | Path | Description |
|---|---|---|
| GET | /exam-question-pools | List all question pools |
| GET | /exam-question-pools/{id} | Get a single pool (includes question count) |
| POST | /exam-question-pools | Create a question pool |
| PUT | /exam-question-pools/{id} | Update a question pool |
| DELETE | /exam-question-pools/{id} | Delete a question pool |
Filterable fields: name, active
Sortable fields: name, created_at
Pool Questions (nested, shallow)
Manage questions within a question pool. Uses shallow routing — list and create are nested under the pool, while show, update, and delete use the question ID directly.
| Method | Path | Description |
|---|---|---|
| GET | /exam-question-pools/{poolId}/questions | List questions in a pool |
| POST | /exam-question-pools/{poolId}/questions | Create a question |
| GET | /questions/{id} | Get a single question |
| PUT | /questions/{id} | Update a question |
| DELETE | /questions/{id} | Delete a question |
Filterable fields: type, active
The type field accepts: multiple_choice, true_false, free_text.
Store and update accept a nested choices array. Each choice has text (string) and is_correct (boolean). On update, include id to update an existing choice; omit id to create a new one. Choices not included in the array are deleted.
Exam Templates
Manage exam templates — blueprints defining which pools to draw from, time limits, pass thresholds, and attempt limits.
| Method | Path | Description |
|---|---|---|
| GET | /exam-templates | List all templates |
| GET | /exam-templates/{id} | Get a single template (includes pool configuration) |
| POST | /exam-templates | Create a template |
| PUT | /exam-templates/{id} | Update a template |
| DELETE | /exam-templates/{id} | Delete a template |
Filterable fields: name, active
Sortable fields: name, created_at
Store and update accept a pools array with exam_question_pool_id (integer) and question_count (integer). When provided on update, the existing pool configuration is replaced entirely.
Exam Assignments
Manage exam assignments linking pilots to exam templates. Store uses ExamService for idempotent creation — duplicate assignments for the same user, template, and entity are returned rather than re-created.
| Method | Path | Description |
|---|---|---|
| GET | /exam-assignments | List all assignments |
| GET | /exam-assignments/{id} | Get a single assignment (includes user, template, exams) |
| POST | /exam-assignments | Create an assignment |
| DELETE | /exam-assignments/{id} | Delete an assignment |
Filterable fields: user_id, exam_template_id, status
Sortable fields: created_at, status
The status field accepts: pending, in_progress, passed, failed.
Exam assignments do not support updates via the API. Status transitions are managed automatically by the exam lifecycle (starting, submitting, grading).
Exams (read-only)
Access exam instances (individual attempts). Exams are created automatically when a pilot starts an assignment and cannot be created or modified via the API.
| Method | Path | Description |
|---|---|---|
| GET | /exams | List all exams |
| GET | /exams/{id} | Get a single exam |
Filterable fields: user_id, exam_assignment_id, status, passed
Sortable fields: created_at, started_at, score
The status field accepts: in_progress, submitted, pending_review, graded, expired.
Maintenance Endpoints
Maintenance Check Definitions
Manage scheduled maintenance check definitions (A/B/C/D checks) that apply to aircraft based on airline, fleet, or subfleet scope.
| Method | Path | Description |
|---|---|---|
| GET | /maintenance-check-definitions | List all check definitions |
| GET | /maintenance-check-definitions/{id} | Get a single check definition |
| POST | /maintenance-check-definitions | Create a check definition |
| PUT | /maintenance-check-definitions/{id} | Update a check definition |
| DELETE | /maintenance-check-definitions/{id} | Delete a check definition |
Filterable fields: name, check_type, fleet_id, active
Sortable fields: name, created_at
The check_type field accepts: A, B, C, D. Check definitions can include interval thresholds for flight hours, cycles, and calendar days that trigger the maintenance lifecycle.
MEL Definitions
Manage Minimum Equipment List definitions that simulate equipment defects and their operational impact on dispatch.
| Method | Path | Description |
|---|---|---|
| GET | /mel-definitions | List all MEL definitions |
| GET | /mel-definitions/{id} | Get a single MEL definition |
| POST | /mel-definitions | Create a MEL definition |
| PUT | /mel-definitions/{id} | Update a MEL definition |
| DELETE | /mel-definitions/{id} | Delete a MEL definition |
Filterable fields: title, repair_category, fleet_id, active
Sortable fields: title, repair_category, created_at
The repair_category field accepts: A, B, C, D. MEL definitions include ATA chapter codes (ata_chapter, ata_section, ata_subsection), equipment quantities, procedures, and a generation chance (0-100%) for probabilistic defect creation on booking. ata_subsection is alphanumeric (max 4 chars) and supports the TTL MEL letter-suffix format such as 01B, producing computed codes like 30-21-01B. The subsection is only included in ata_code when ata_section is also set. The response includes computed ata_code and ata_chapter_name fields, and penalties when the relationship is loaded.
MEL Definition Penalties (nested)
Manage dispatch parameter penalties attached to a MEL definition. These penalties affect SimBrief flight planning when an MEL item is active.
| Method | Path | Description |
|---|---|---|
| GET | /mel-definitions/{melDefinitionId}/penalties | List penalties |
| GET | /mel-definitions/{melDefinitionId}/penalties/{id} | Get a single penalty |
| POST | /mel-definitions/{melDefinitionId}/penalties | Create a penalty |
| PUT | /mel-definitions/{melDefinitionId}/penalties/{id} | Update a penalty |
| DELETE | /mel-definitions/{melDefinitionId}/penalties/{id} | Delete a penalty |
The dispatch_param field accepts: ceiling, fuel_factor, etops_rule, max_fuel, mtow_penalty, mlw_penalty, mel_fuel.
Technical Logbook Entries
Access the unified audit log for all maintenance and MEL events on aircraft.
| Method | Path | Description |
|---|---|---|
| GET | /technical-logbook-entries | List all entries |
| GET | /technical-logbook-entries/{id} | Get a single entry |
| POST | /technical-logbook-entries | Create an entry |
| PUT | /technical-logbook-entries/{id} | Update an entry |
| DELETE | /technical-logbook-entries/{id} | Delete an entry |
Filterable fields: aircraft_id, entry_type
Sortable fields: created_at
The entry_type field accepts: mel_activated, mel_rectified, manual, maintenance_completed, aircraft_grounded, aircraft_returned, hours_adjusted.
Communications & Documents Endpoints
Company NOTAMs
Manage company-wide notices and announcements (NOTAMs). Supports soft deletion.
| Method | Path | Description |
|---|---|---|
| GET | /company-notams | List all company NOTAMs |
| GET | /company-notams/{id} | Get a single NOTAM |
| POST | /company-notams | Create a NOTAM |
| PUT | /company-notams/{id} | Update a NOTAM |
| DELETE | /company-notams/{id} | Soft-delete a NOTAM |
Filterable fields: title, is_active
Sortable fields: title, created_at
Documents
Manage the hierarchical document library (manuals, SOPs, company policies).
| Method | Path | Description |
|---|---|---|
| GET | /documents | List all documents |
| GET | /documents/{id} | Get a single document |
| POST | /documents | Create a document |
| PUT | /documents/{id} | Update a document |
| DELETE | /documents/{id} | Delete a document |
Filterable fields: title, visibility, is_auto_generated
Sortable fields: title, sort_order, created_at
The visibility field accepts one of: public, staff, rank, license. When visibility is set to rank or license, provide the corresponding rank_id or license_id to control access.
Messages
Manage in-app messages between staff, dispatchers, and pilots.
| Method | Path | Description |
|---|---|---|
| GET | /messages | List all messages |
| GET | /messages/{id} | Get a single message |
| POST | /messages | Create a message |
| PUT | /messages/{id} | Update a message |
| DELETE | /messages/{id} | Delete a message |
Filterable fields: user_id, type, sender_role
Sortable fields: created_at, sent_at
The type field accepts: chat, acars. The sender_role field accepts: system, occ, dispatcher, crew_scheduling, airline_staff, user.
Discord Integrations
Manage Discord server integrations for automated notifications.
| Method | Path | Description |
|---|---|---|
| GET | /discord-integrations | List all integrations |
| GET | /discord-integrations/{id} | Get a single integration |
| POST | /discord-integrations | Create an integration |
| PUT | /discord-integrations/{id} | Update an integration |
| DELETE | /discord-integrations/{id} | Delete an integration |
Filterable fields: guild_id, is_active
Sortable fields: created_at
The access_token and refresh_token fields are never included in API responses for security reasons.
Networks
Manage flight simulation network definitions (VATSIM, IVAO, etc.).
| Method | Path | Description |
|---|---|---|
| GET | /networks | List all networks |
| GET | /networks/{id} | Get a single network |
| POST | /networks | Create a network |
| PUT | /networks/{id} | Update a network |
| DELETE | /networks/{id} | Delete a network |
Filterable fields: name
Sortable fields: name, created_at
System & Config Endpoints
System Settings
Manage system configuration key-value pairs that control airline behavior (landing rate targets, booking costs, repositioning settings, etc.).
| Method | Path | Description |
|---|---|---|
| GET | /system-settings | List all settings |
| GET | /system-settings/{id} | Get a single setting |
| POST | /system-settings | Create a setting |
| PUT | /system-settings/{id} | Update a setting |
| DELETE | /system-settings/{id} | Delete a setting |
Filterable fields: key, module
Sortable fields: key, module, created_at
The key field must be a valid system setting key enum value. The module field is auto-populated from the key when not provided.
Fleet Performance Configs
Manage fleet-level performance configurations defining flap settings, autobrake, and reverse thrust parameters.
| Method | Path | Description |
|---|---|---|
| GET | /fleet-performance-configs | List all configs |
| GET | /fleet-performance-configs/{id} | Get a single config |
| POST | /fleet-performance-configs | Create a config |
| PUT | /fleet-performance-configs/{id} | Update a config |
| DELETE | /fleet-performance-configs/{id} | Delete a config |
Filterable fields: fleet_id
Sortable fields: created_at
Restrictions
Manage dispatch and booking restrictions. The rules relationship is automatically included in all responses.
| Method | Path | Description |
|---|---|---|
| GET | /restrictions | List all restrictions (with rules) |
| GET | /restrictions/{id} | Get a single restriction (with rules) |
| POST | /restrictions | Create a restriction |
| PUT | /restrictions/{id} | Update a restriction |
| DELETE | /restrictions/{id} | Delete a restriction |
Filterable fields: name, type, active
Sortable fields: name, created_at
The type field accepts: dispatch, booking.
Restriction Rules (nested)
Manage rules within a specific restriction.
| Method | Path | Description |
|---|---|---|
| GET | /restrictions/{id}/rules | List rules for a restriction |
| GET | /restrictions/{id}/rules/{ruleId} | Get a single rule |
| POST | /restrictions/{id}/rules | Create a rule |
| PUT | /restrictions/{id}/rules/{ruleId} | Update a rule |
| DELETE | /restrictions/{id}/rules/{ruleId} | Delete a rule |
The rule_type field accepts: dispatch_param, require_license, require_rank. The dispatch_param field accepts: ceiling, fuel_factor, etops_rule, max_fuel, mtow_penalty, mlw_penalty, mel_fuel.
Spotter Photos
Manage spotter photo submissions and their approval workflow.
| Method | Path | Description |
|---|---|---|
| GET | /spotter-photos | List all photos |
| GET | /spotter-photos/{id} | Get a single photo |
| POST | /spotter-photos | Create a photo |
| PUT | /spotter-photos/{id} | Update a photo |
| DELETE | /spotter-photos/{id} | Delete a photo |
Filterable fields: user_id, spottable_type, spottable_id, status
Sortable fields: created_at
The status field accepts: pending, approved, rejected.
Countries (read-only)
Reference data for countries. Only GET operations are available; POST, PUT, and DELETE return 405 Method Not Allowed.
| Method | Path | Description |
|---|---|---|
| GET | /countries | List all countries |
| GET | /countries/{id} | Get a single country |
Filterable fields: name, a2
Sortable fields: name, a2
Airspaces (read-only)
Reference data for airspaces. Only GET operations are available; POST, PUT, and DELETE return 405 Method Not Allowed.
| Method | Path | Description |
|---|---|---|
| GET | /airspaces | List all airspaces |
| GET | /airspaces/{id} | Get a single airspace |
Filterable fields: name, icao_code
Sortable fields: name
FDM & Speech/VOCC Endpoints
FDM Profiles
Manage Flight Data Monitoring profiles and their trigger rules. Each profile contains a set of triggers that define monitoring conditions applied during flights.
| Method | Path | Description |
|---|---|---|
| GET | /fdm-profiles | List all FDM profiles |
| GET | /fdm-profiles/{id} | Get a single FDM profile |
| POST | /fdm-profiles | Create an FDM profile |
| PUT | /fdm-profiles/{id} | Update an FDM profile |
| DELETE | /fdm-profiles/{id} | Delete an FDM profile |
Filterable fields: name, active
Sortable fields: name, created_at
FDM profile responses include the nested triggers array when fetched via index or show.
FDM Triggers (nested)
| Method | Path | Description |
|---|---|---|
| GET | /fdm-profiles/{profileId}/triggers | List triggers for a profile |
| GET | /fdm-profiles/{profileId}/triggers/{id} | Get a single trigger |
| POST | /fdm-profiles/{profileId}/triggers | Create a trigger |
| PUT | /fdm-profiles/{profileId}/triggers/{id} | Update a trigger |
| DELETE | /fdm-profiles/{profileId}/triggers/{id} | Delete a trigger |
Key fields:
| Field | Type | Description |
|---|---|---|
template | enum | FDM template type (e.g. landing_rate, overspeed_warning, stall_warning) |
operator | enum | Comparison operator (>, <, =, !=, between, change_to, duration_of) |
event_type | enum | Event severity (information, warning, violation) |
value | JSON | Threshold value(s) for the trigger |
conditions | JSON | Additional conditions for trigger activation |
points | integer | Points awarded or deducted when triggered |
Speech Packs
Manage speech announcement packs containing templates for in-flight audio announcements.
| Method | Path | Description |
|---|---|---|
| GET | /speech-packs | List all speech packs |
| GET | /speech-packs/{id} | Get a single speech pack |
| POST | /speech-packs | Create a speech pack |
| PUT | /speech-packs/{id} | Update a speech pack |
| DELETE | /speech-packs/{id} | Delete a speech pack |
Filterable fields: name, active
Sortable fields: name, created_at
Speech pack responses include the nested templates array when fetched via index or show.
Speech Templates (nested)
| Method | Path | Description |
|---|---|---|
| GET | /speech-packs/{packId}/templates | List templates for a pack |
| GET | /speech-packs/{packId}/templates/{id} | Get a single template |
| POST | /speech-packs/{packId}/templates | Create a template |
| PUT | /speech-packs/{packId}/templates/{id} | Update a template |
| DELETE | /speech-packs/{packId}/templates/{id} | Delete a template |
Key fields:
| Field | Type | Description |
|---|---|---|
trigger_phase | enum | Flight phase that activates the template (e.g. gate_departure, cruise, final_approach) |
voice_role | enum | Voice actor role (captain, flight_attendant) |
type | enum | Template type (text for TTS, audio for uploaded files) |
template | string | Text template with placeholders (e.g. {{callsign}}) |
apply_pa_effect | boolean | Whether to apply PA system audio effect |
Speech Fragments (nested, read-only)
Speech fragments are cached TTS audio segments generated from templates. They are linked to a speech pack through the voice profiles used in its templates.
| Method | Path | Description |
|---|---|---|
| GET | /speech-packs/{packId}/fragments | List fragments for a pack |
| GET | /speech-packs/{packId}/fragments/{id} | Get a single fragment |
Key fields:
| Field | Type | Description |
|---|---|---|
voice_profile_id | integer | Associated voice profile |
text | string | The text that was synthesized |
status | enum | Fragment status (pending, generating, ready, failed) |
duration_ms | integer | Audio duration in milliseconds |
s3_path | string | Storage path to the generated audio file |
Voice Profiles
Manage ElevenLabs voice profiles used for text-to-speech generation.
| Method | Path | Description |
|---|---|---|
| GET | /voice-profiles | List all voice profiles |
| GET | /voice-profiles/{id} | Get a single voice profile |
| POST | /voice-profiles | Create a voice profile |
| PUT | /voice-profiles/{id} | Update a voice profile |
| DELETE | /voice-profiles/{id} | Delete a voice profile |
Filterable fields: name, speech_language_id, active
Sortable fields: name, created_at
Key fields:
| Field | Type | Description |
|---|---|---|
elevenlabs_voice_id | string | ElevenLabs voice identifier |
elevenlabs_model_id | string | ElevenLabs model (default: eleven_turbo_v2_5) |
stability | decimal | Voice stability (0.00--1.00) |
similarity_boost | decimal | Voice clarity/similarity (0.00--1.00) |
style | decimal | Style exaggeration (0.00--1.00) |
speed | decimal | Speech speed multiplier (0.50--2.00) |
use_speaker_boost | boolean | Enable speaker clarity boost |
VOCC Triggers
Manage vOCC (Virtual Operations Control Centre) trigger log entries that record when dispatch interactions are activated during flights.
| Method | Path | Description |
|---|---|---|
| GET | /vocc-triggers | List all VOCC triggers |
| GET | /vocc-triggers/{id} | Get a single VOCC trigger |
| POST | /vocc-triggers | Create a VOCC trigger |
| PUT | /vocc-triggers/{id} | Update a VOCC trigger |
| DELETE | /vocc-triggers/{id} | Delete a VOCC trigger |
Filterable fields: trigger_type, booking_id
Sortable fields: trigger_type, triggered_at, created_at
Key fields:
| Field | Type | Description |
|---|---|---|
booking_id | integer | Associated booking |
trigger_type | string | Type of dispatch interaction triggered |
triggered_at | datetime | When the trigger was activated |
pilot_name | string | Name of the pilot at the time |
callsign | string | Flight callsign |
departure_icao | string | Departure airport ICAO code |
arrival_icao | string | Arrival airport ICAO code |
interaction_log | JSON | Detailed log of the dispatch interaction |
Asset / Image Fields
All image and file fields in API responses (e.g., logo, badge, tailfin, picture, profile_picture, provider_logo, file_path) return fully-qualified public URLs pointing to the S3-backed storage. If a field has no file uploaded, it returns null.
{
"id": 1,
"name": "Airspace Airlines",
"logo": "https://s3.region.amazonaws.com/bucket/airlines/logo.png",
"badge": null
}
Previously these fields returned raw storage paths (e.g., airlines/logo.png). As of March 2026, they return full URLs that can be used directly in <img> tags or downloaded by API consumers without any URL construction.
Error Responses
| Status | Meaning |
|---|---|
| 401 | Missing or invalid API key |
| 404 | Resource not found |
| 405 | Method not allowed (e.g., POST on a read-only resource) |
| 422 | Validation error (details in errors key) |
| 429 | Rate limit exceeded (120 requests/minute) |
Validation errors return a JSON body with field-level messages:
{
"message": "The airline id field is required.",
"errors": {
"airline_id": ["The airline id field is required."]
}
}