Pular para o conteúdo principal

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:

ParameterDefaultMaxDescription
per_page25100Number of items per page
page1--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
ParameterValuesDefault
sortField name--
sort_dirasc, descasc

Core Endpoints

Airlines

Manage airline definitions (name, ICAO/IATA codes, callsign, branding assets).

MethodPathDescription
GET/airlinesList all airlines
GET/airlines/{id}Get a single airline
POST/airlinesCreate 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.

MethodPathDescription
GET/airportsList all airports
GET/airports/{id}Get a single airport
POST/airportsCreate 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)

MethodPathDescription
GET/airports/{airportId}/runwaysList runways
GET/airports/{airportId}/runways/{id}Get a runway
POST/airports/{airportId}/runwaysCreate 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)

MethodPathDescription
GET/airports/{airportId}/standsList stands
GET/airports/{airportId}/stands/{id}Get a stand
POST/airports/{airportId}/standsCreate 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)

MethodPathDescription
GET/airports/{airportId}/servicesList services
GET/airports/{airportId}/services/{id}Get a service
POST/airports/{airportId}/servicesCreate 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)

MethodPathDescription
GET/airports/{airportId}/threatsList threats
GET/airports/{airportId}/threats/{id}Get a threat
POST/airports/{airportId}/threatsCreate 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)

MethodPathDescription
GET/airports/{airportId}/operational-notesList operational notes
GET/airports/{airportId}/operational-notes/{id}Get an operational note
POST/airports/{airportId}/operational-notesCreate 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)

MethodPathDescription
GET/airports/{airportId}/alternatesList alternates
GET/airports/{airportId}/alternates/{id}Get an alternate
POST/airports/{airportId}/alternatesCreate 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.

MethodPathDescription
GET/aircraftList all aircraft
GET/aircraft/{id}Get a single aircraft
POST/aircraftCreate 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).

observação

Aircraft use soft deletion. Deleted aircraft are no longer returned by the API but remain in the database.

Aircraft Maintenance Checks (nested)

MethodPathDescription
GET/aircraft/{aircraftId}/maintenance-checksList maintenance checks
GET/aircraft/{aircraftId}/maintenance-checks/{id}Get a maintenance check
POST/aircraft/{aircraftId}/maintenance-checksCreate 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)

MethodPathDescription
GET/aircraft/{aircraftId}/mel-itemsList MEL items
GET/aircraft/{aircraftId}/mel-items/{id}Get a MEL item
POST/aircraft/{aircraftId}/mel-itemsCreate 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)

MethodPathDescription
GET/aircraft/{aircraftId}/hour-adjustmentsList hour adjustments
GET/aircraft/{aircraftId}/hour-adjustments/{id}Get an hour adjustment
POST/aircraft/{aircraftId}/hour-adjustmentsCreate 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").

MethodPathDescription
GET/aircraft-fleetsList all fleets
GET/aircraft-fleets/{id}Get a single fleet
POST/aircraft-fleetsCreate 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).

MethodPathDescription
GET/aircraft-sub-fleetsList all sub-fleets
GET/aircraft-sub-fleets/{id}Get a single sub-fleet
POST/aircraft-sub-fleetsCreate 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.

MethodPathDescription
GET/liveriesList all liveries
GET/liveries/{id}Get a single livery
POST/liveriesCreate 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).

MethodPathDescription
GET/flightsList all flights
GET/flights/{id}Get a single flight
POST/flightsCreate 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)

MethodPathDescription
GET/flights/{flightId}/eventsList flight events
GET/flights/{flightId}/events/{id}Get a flight event
POST/flights/{flightId}/eventsCreate a flight event
PUT/flights/{flightId}/events/{id}Update a flight event
DELETE/flights/{flightId}/events/{id}Delete a flight event

Telemetry Points (nested)

MethodPathDescription
GET/flights/{flightId}/telemetry-pointsList telemetry points
GET/flights/{flightId}/telemetry-points/{id}Get a telemetry point
POST/flights/{flightId}/telemetry-pointsCreate 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).

MethodPathDescription
GET/schedulesList all schedules
GET/schedules/{id}Get a single schedule
POST/schedulesCreate 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).

MethodPathDescription
GET/bookingsList all bookings
GET/bookings/{id}Get a single booking
POST/bookingsCreate 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).

observação

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.

MethodPathDescription
GET/ferry-flightsList all ferry flights
GET/ferry-flights/{id}Get a single ferry flight
POST/ferry-flightsCreate 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)

MethodPathDescription
GET/ferry-flights/{ferryFlightId}/legsList ferry legs
GET/ferry-flights/{ferryFlightId}/legs/{id}Get a ferry leg
POST/ferry-flights/{ferryFlightId}/legsCreate 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.

MethodPathDescription
GET/repositioning-bountiesList all bounties
GET/repositioning-bounties/{id}Get a single bounty
POST/repositioning-bountiesCreate 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.

MethodPathDescription
GET/usersList all users
GET/users/{id}Get a single user
POST/usersCreate 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.

MethodPathDescription
GET/ranksList all ranks
GET/ranks/{id}Get a single rank
POST/ranksCreate 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.

MethodPathDescription
GET/ranks/{rankId}/applicationsList applications for a rank
GET/ranks/{rankId}/applications/{id}Get a single application
POST/ranks/{rankId}/applicationsCreate 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.

MethodPathDescription
GET/licensesList all licenses
GET/licenses/{id}Get a single license
POST/licensesCreate 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.

MethodPathDescription
GET/licenses/{licenseId}/renewal-conditionsList renewal conditions
GET/licenses/{licenseId}/renewal-conditions/{id}Get a renewal condition
POST/licenses/{licenseId}/renewal-conditionsCreate 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).

MethodPathDescription
GET/positionsList all positions
GET/positions/{id}Get a single position
POST/positionsCreate 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.

MethodPathDescription
GET/exam-question-poolsList all question pools
GET/exam-question-pools/{id}Get a single pool (includes question count)
POST/exam-question-poolsCreate 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.

MethodPathDescription
GET/exam-question-pools/{poolId}/questionsList questions in a pool
POST/exam-question-pools/{poolId}/questionsCreate 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.

MethodPathDescription
GET/exam-templatesList all templates
GET/exam-templates/{id}Get a single template (includes pool configuration)
POST/exam-templatesCreate 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.

MethodPathDescription
GET/exam-assignmentsList all assignments
GET/exam-assignments/{id}Get a single assignment (includes user, template, exams)
POST/exam-assignmentsCreate 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.

observação

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.

MethodPathDescription
GET/examsList 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.

MethodPathDescription
GET/maintenance-check-definitionsList all check definitions
GET/maintenance-check-definitions/{id}Get a single check definition
POST/maintenance-check-definitionsCreate 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.

MethodPathDescription
GET/mel-definitionsList all MEL definitions
GET/mel-definitions/{id}Get a single MEL definition
POST/mel-definitionsCreate 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.

MethodPathDescription
GET/mel-definitions/{melDefinitionId}/penaltiesList penalties
GET/mel-definitions/{melDefinitionId}/penalties/{id}Get a single penalty
POST/mel-definitions/{melDefinitionId}/penaltiesCreate 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.

MethodPathDescription
GET/technical-logbook-entriesList all entries
GET/technical-logbook-entries/{id}Get a single entry
POST/technical-logbook-entriesCreate 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.

MethodPathDescription
GET/company-notamsList all company NOTAMs
GET/company-notams/{id}Get a single NOTAM
POST/company-notamsCreate 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).

MethodPathDescription
GET/documentsList all documents
GET/documents/{id}Get a single document
POST/documentsCreate 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.

MethodPathDescription
GET/messagesList all messages
GET/messages/{id}Get a single message
POST/messagesCreate 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.

MethodPathDescription
GET/discord-integrationsList all integrations
GET/discord-integrations/{id}Get a single integration
POST/discord-integrationsCreate 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

observação

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.).

MethodPathDescription
GET/networksList all networks
GET/networks/{id}Get a single network
POST/networksCreate 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.).

MethodPathDescription
GET/system-settingsList all settings
GET/system-settings/{id}Get a single setting
POST/system-settingsCreate 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.

MethodPathDescription
GET/fleet-performance-configsList all configs
GET/fleet-performance-configs/{id}Get a single config
POST/fleet-performance-configsCreate 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.

MethodPathDescription
GET/restrictionsList all restrictions (with rules)
GET/restrictions/{id}Get a single restriction (with rules)
POST/restrictionsCreate 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.

MethodPathDescription
GET/restrictions/{id}/rulesList rules for a restriction
GET/restrictions/{id}/rules/{ruleId}Get a single rule
POST/restrictions/{id}/rulesCreate 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.

MethodPathDescription
GET/spotter-photosList all photos
GET/spotter-photos/{id}Get a single photo
POST/spotter-photosCreate 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.

MethodPathDescription
GET/countriesList 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.

MethodPathDescription
GET/airspacesList 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.

MethodPathDescription
GET/fdm-profilesList all FDM profiles
GET/fdm-profiles/{id}Get a single FDM profile
POST/fdm-profilesCreate 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

observação

FDM profile responses include the nested triggers array when fetched via index or show.

FDM Triggers (nested)

MethodPathDescription
GET/fdm-profiles/{profileId}/triggersList triggers for a profile
GET/fdm-profiles/{profileId}/triggers/{id}Get a single trigger
POST/fdm-profiles/{profileId}/triggersCreate a trigger
PUT/fdm-profiles/{profileId}/triggers/{id}Update a trigger
DELETE/fdm-profiles/{profileId}/triggers/{id}Delete a trigger

Key fields:

FieldTypeDescription
templateenumFDM template type (e.g. landing_rate, overspeed_warning, stall_warning)
operatorenumComparison operator (>, <, =, !=, between, change_to, duration_of)
event_typeenumEvent severity (information, warning, violation)
valueJSONThreshold value(s) for the trigger
conditionsJSONAdditional conditions for trigger activation
pointsintegerPoints awarded or deducted when triggered

Speech Packs

Manage speech announcement packs containing templates for in-flight audio announcements.

MethodPathDescription
GET/speech-packsList all speech packs
GET/speech-packs/{id}Get a single speech pack
POST/speech-packsCreate 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

observação

Speech pack responses include the nested templates array when fetched via index or show.

Speech Templates (nested)

MethodPathDescription
GET/speech-packs/{packId}/templatesList templates for a pack
GET/speech-packs/{packId}/templates/{id}Get a single template
POST/speech-packs/{packId}/templatesCreate a template
PUT/speech-packs/{packId}/templates/{id}Update a template
DELETE/speech-packs/{packId}/templates/{id}Delete a template

Key fields:

FieldTypeDescription
trigger_phaseenumFlight phase that activates the template (e.g. gate_departure, cruise, final_approach)
voice_roleenumVoice actor role (captain, flight_attendant)
typeenumTemplate type (text for TTS, audio for uploaded files)
templatestringText template with placeholders (e.g. {{callsign}})
apply_pa_effectbooleanWhether 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.

MethodPathDescription
GET/speech-packs/{packId}/fragmentsList fragments for a pack
GET/speech-packs/{packId}/fragments/{id}Get a single fragment

Key fields:

FieldTypeDescription
voice_profile_idintegerAssociated voice profile
textstringThe text that was synthesized
statusenumFragment status (pending, generating, ready, failed)
duration_msintegerAudio duration in milliseconds
s3_pathstringStorage path to the generated audio file

Voice Profiles

Manage ElevenLabs voice profiles used for text-to-speech generation.

MethodPathDescription
GET/voice-profilesList all voice profiles
GET/voice-profiles/{id}Get a single voice profile
POST/voice-profilesCreate 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:

FieldTypeDescription
elevenlabs_voice_idstringElevenLabs voice identifier
elevenlabs_model_idstringElevenLabs model (default: eleven_turbo_v2_5)
stabilitydecimalVoice stability (0.00--1.00)
similarity_boostdecimalVoice clarity/similarity (0.00--1.00)
styledecimalStyle exaggeration (0.00--1.00)
speeddecimalSpeech speed multiplier (0.50--2.00)
use_speaker_boostbooleanEnable speaker clarity boost

VOCC Triggers

Manage vOCC (Virtual Operations Control Centre) trigger log entries that record when dispatch interactions are activated during flights.

MethodPathDescription
GET/vocc-triggersList all VOCC triggers
GET/vocc-triggers/{id}Get a single VOCC trigger
POST/vocc-triggersCreate 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:

FieldTypeDescription
booking_idintegerAssociated booking
trigger_typestringType of dispatch interaction triggered
triggered_atdatetimeWhen the trigger was activated
pilot_namestringName of the pilot at the time
callsignstringFlight callsign
departure_icaostringDeparture airport ICAO code
arrival_icaostringArrival airport ICAO code
interaction_logJSONDetailed 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
}
observação

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

StatusMeaning
401Missing or invalid API key
404Resource not found
405Method not allowed (e.g., POST on a read-only resource)
422Validation error (details in errors key)
429Rate 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."]
}
}