{
  "openapi": "3.0.1",
  "info": {
    "title": "FL3XX API",
    "version": "2.6.0",
    "description": "<div class=\"api-wrapper\">\n\n  <!-- Beta Banner -->\n  <div class=\"api-beta-banner\">\n    <div class=\"api-beta-content\">\n      <div class=\"api-beta-icon\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M12 2L2 7l10 5 10-5-10-5z\"></path>\n          <path d=\"M2 17l10 5 10-5\"></path>\n          <path d=\"M2 12l10 5 10-5\"></path>\n        </svg>\n      </div>\n      <div class=\"api-beta-text\">\n        <h3 class=\"api-beta-title\">FL3XX API v2.0 — Beta Release</h3>\n        <p class=\"api-beta-subtitle\">The V2 API is being developed and released incrementally. Rather than a single release, new V2 functionality is delivered on an endpoint-by-endpoint basis and deployed gradually. Operators and partners can use V1 and V2 simultaneously without any limitations. This enables a smooth transition, allowing integrations to be migrated to V2 progressively while continuing to use V1 where needed. V2 features are designed to coexist with V1. For example, V2 webhooks are not tied to V2 endpoints and can be used together with existing V1 integrations.</p>\n      </div>\n      <div class=\"api-beta-badge\">BETA</div>\n    </div>\n  </div>\n</div>\n\n<style>\n  /* Beta Banner */\n  .api-beta-banner {\n    background: linear-gradient(135deg, rgba(241, 90, 42, 0.05), rgba(241, 90, 42, 0.02));\n    border: 2px solid rgba(241, 90, 42, 0.2);\n    border-radius: 12px;\n    padding: 20px;\n    margin-bottom: 40px;\n  }\n\n  .api-beta-content {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n  }\n\n  .api-beta-icon {\n    width: 48px;\n    height: 48px;\n    background: rgba(241, 90, 42, 0.1);\n    border-radius: 12px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: #f15a2a;\n    flex-shrink: 0;\n  }\n\n  .api-beta-text {\n    flex: 1;\n  }\n\n  .api-beta-title {\n    font-size: 18px;\n    font-weight: 700;\n    color: var(--text-color-primary);\n    margin: 0 0 6px 0;\n  }\n\n  .api-beta-subtitle {\n    font-size: 14px;\n    color: #6B7280;\n    margin: 0;\n    line-height: 1.4;\n  }\n\n  .api-beta-badge {\n    background: #f15a2a;\n    color: white;\n    font-size: 12px;\n    font-weight: 700;\n    padding: 6px 12px;\n    border-radius: 16px;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    flex-shrink: 0;\n  }\n</style>\n",
    "contact": {
      "name": "FL3XX Integration Support",
      "email": "integrations@fl3xx.com",
      "url": "https://www.fl3xx.com"
    },
    "x-audience": "external-partner",
    "license": {
      "name": "MIT",
      "url": "https://opensource.org/licenses/MIT"
    }
  },
  "servers": [
    {
      "url": "https://test.fl3xx.com",
      "description": "Test Server"
    }
  ],
  "security": [
    {
      "X-Api-Client-Id": [],
      "X-Auth-Token": []
    }
  ],
  "tags": [
    {
      "name": "Airports",
      "description": "Access comprehensive airport information.\n\n**Business Value**\n- Filter airports by various criteria, including ICAO, IATA, FAA codes, and local identifiers\n- Support high‑performance applications with optimized data retrieval\n\n<br/>\n\n**Use Cases**\n- Filter airports by specific codes for targeted data retrieval\n- Integrate airport data into flight‑planning and scheduling systems\n- Build airport‑selection interfaces with efficient pagination\n\n<br/>\n"
    },
    {
      "name": "Airport Fuel Prices",
      "description": "Manage and optimize airport‑fuel pricing data for your organization. These endpoints enable operators to efficiently update, remove, and bulk‑manage fuel prices, supporting streamlined fuel‑order workflows and provider management.\n\n**Business Value**\n- Ensure accurate, up‑to‑date fuel pricing for all airport operations.\n- Reduce manual effort and errors by enabling bulk updates and deletions.\n- Support cost control and negotiation with providers through transparent pricing data.\n- Enhance operational planning and financial forecasting with reliable fuel‑cost data.\n\n<br/>\n\n**Use Cases**\n- Update fuel prices for a specific airport to reflect new agreements or market changes.\n- Remove outdated or incorrect fuel prices for compliance and data integrity.\n- Perform bulk deletions to quickly adapt to network‑wide pricing changes.\n- Integrate with internal systems to automate fuel‑price management and reporting.\n\n  <br/>\n\n**Note:**  \n> Data managed by the Airport Fuel Prices endpoints is strictly bound to the operator associated with the authentication token. All operations — creating, updating, or deleting airport fuel prices — apply only to the operator for which the provided token is valid.\n"
    },
    {
      "name": "Webhooks",
      "description": "Manage webhook subscriptions for near‑real‑time event notifications. These endpoints enable partners to create, manage, and monitor webhook subscriptions for receiving flight‑related events and updates.\n\n**Business Value**\n- Receive near‑real‑time notifications for flight events and updates.\n- Automate integration workflows with external systems.\n- Monitor flight operations and passenger changes in near‑real‑time.\n- Reduce polling overhead by using event-driven architecture.\n\n<br/>\n\n**Use Cases**\n- Subscribe to flight updates to sync data with external booking systems.\n- Monitor passenger‑count changes for catering and ground‑service coordination.\n- Track aircraft changes for maintenance and operational planning.\n- Receive notifications for flight cancellations and time updates.\n\n<br/>      \n\n**Group Event Types** (not subscribable; appear in webhook deliveries when multiple events occur in a short period):\n\n*General Events* — core flight operations and crew:\n- `FLIGHT_UPDATE`: Group event that combines multiple flight update events. Includes: `FLIGHT_CREATE`, `FLIGHT_CANCEL`, `FLIGHT_TIME_UPDATE`, `FLIGHT_AIRCRAFT_UPDATE`, `FLIGHT_AIRPORT_UPDATE`, `FLIGHT_POST_FLIGHT_STATUS`, `FLIGHT_MOVEMENT_UPDATE`, `FLIGHT_PERMIT_UPDATE`.\n- `FLIGHT_PASSENGER_UPDATE`: Group event that combines passenger-related events. Includes: `FLIGHT_PAX_COUNT_UPDATE`, `FLIGHT_PAX_LIST_UPDATE`.\n- `FLIGHT_CREW_UPDATE`: Group event that combines flight crew-related events. Includes: `FLIGHT_CREW_LIST_UPDATE`, `FLIGHT_CREW_ASSIGNMENT`, `FLIGHT_CREW_DOCUMENT_UPDATE`, `FLIGHT_CREW_ADDRESS_UPDATE`.\n\n*Trip Support Provider Events* — ground and operational services:\n- `FLIGHT_PERMIT_UPDATE`: Group event that combines permit-related events. Includes: `FLIGHT_PERMIT_ASSIGNMENT`, `FLIGHT_PERMIT_UNASSIGNMENT`.\n- `FLIGHT_SLOT_PPR_UPDATE`: Group event that combines slot/PPR-related events. Includes: `FLIGHT_SLOT_PPR_ASSIGNMENT`, `FLIGHT_SLOT_PPR_UNASSIGNMENT`.\n- `FLIGHT_FBO_UPDATE`: Group event that combines FBO-related events. Includes: `FLIGHT_FBO_ASSIGNMENT`, `FLIGHT_FBO_UNASSIGNMENT`.\n- `FLIGHT_TRANSPORT_UPDATE`: Group event that combines transport-related events. Includes: `FLIGHT_TRANSPORT_ASSIGNMENT`, `FLIGHT_TRANSPORT_UNASSIGNMENT`.\n- `FLIGHT_HOTEL_UPDATE`: Group event that combines hotel-related events. Includes: `FLIGHT_HOTEL_ASSIGNMENT`, `FLIGHT_HOTEL_UNASSIGNMENT`.\n- `FLIGHT_CATERING_UPDATE`: Group event that combines catering-related events. Includes: `FLIGHT_CATERING_ASSIGNMENT`, `FLIGHT_CATERING_UNASSIGNMENT`.\n\n<br/>\n\nFor more information on setting up and managing webhooks, see the [Event Notifications (Webhook) Guide](/guides/guides/event-notifications).\n\n**Important:**  \n> Webhook endpoints must respond within 1 second with a `200` status code. To avoid timeouts, we strongly recommend handling webhook processing on a different task/thread and immediately returning the response to FL3XX.\n"
    },
    {
      "name": "Qualification Types",
      "description": "Retrieve qualification types that define the available certifications and licenses assignable to crew members. These endpoints provide access to the operator's qualification catalogue, enabling dynamic forms and validation when assigning or updating crew qualifications.\n\n**Business Value**\n- Ensure accurate qualification assignments by identifying the correct type and its configuration.\n- Align integration behavior with the operator's specific qualification catalogue.\n- Support dynamic qualification interfaces that only display relevant fields for the selected type.\n\n<br/>\n\n**Use Cases**\n- Retrieve the full list of available qualification types before assigning a qualification to a crew member.\n- Inspect a specific qualification type to understand its requirements and metadata.\n- Build dynamic forms that adapt based on the chosen qualification type.\n\n<br/>\n"
    },
    {
      "name": "Crew Qualifications",
      "description": "Manage crew qualifications and certifications. These endpoints enable partners to assign, update, and manage crew‑member qualifications, including licenses, certifications, and associated documents.\n\n**Business Value**\n- Maintain accurate crew qualification records for compliance and safety.\n- Streamline qualification assignment and management processes.\n- Support document management for qualification certificates and licenses.\n- Ensure crew members meet operational requirements and regulations.\n\n<br/>\n\n**Use Cases**\n- Assign new qualifications to crew members with license details and expiration dates.\n- Update existing qualification information, including license numbers and issuing authorities.\n- Upload and manage qualification documents, such as certificates and licenses.\n- Retrieve qualification information for crew members and compliance reporting.\n- Delete obsolete qualifications and associated documents.\n\n<br/>\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n\n**Note:**\n> All crew‑qualification operations are bound to the operator context associated with the authentication token. Partners can manage qualifications only for crew members within their own organization.\n"
    },
    {
      "name": "Roster Types",
      "description": "Retrieve roster (duty) types that define which fields and behaviors are available when creating or updating a roster assignment. These endpoints provide access to the operator's roster configuration, enabling dynamic UI and validation.\n\n**Business Value**\n- Ensure accurate roster data by identifying relevant fields for each duty type.\n- Align integration behavior with the operator's specific roster configuration.\n- Support dynamic roster interfaces that only display fields enabled for the selected type.\n- Streamline the roster management process by reducing validation errors.\n\n<br/>\n\n**Use Cases**\n- Retrieve the full list of available roster types and their hierarchical structure.\n- Inspect a specific roster type to determine which features (e.g., aircraft, airports, FTL) are enabled.\n- Build dynamic forms that adapt based on the chosen roster duty type.\n\n<br/>\n"
    },
    {
      "name": "Crew Position",
      "description": "Search crew positions configured for specific aircraft. Crew positions define the roles and slots available on an aircraft (e.g., Captain, First Officer, Flight Attendant) and are used when creating or updating roster assignments with aircraft details.\n\n**Business Value**\n- Discover valid crew positions for a given aircraft before creating roster assignments.\n- Ensure correct crew-position assignments by querying only positions linked to the target aircraft.\n- Support dynamic crew-assignment interfaces that display only applicable positions.\n\n<br/>\n\n**Use Cases**\n- Retrieve available crew positions for an aircraft by tail number or aircraft id.\n- Filter positions by assignability to show only positions that can be used in roster assignments.\n- Validate crew-position selection before submitting a roster assignment create or update request.\n\n<br/>\n"
    },
    {
      "name": "Roster Assignment",
      "description": "Manage crew roster assignments, including creating, retrieving, updating, and deleting duties. These endpoints enable partners to synchronize crew schedules and manage operational duties with the same semantics as the FL3XX web interface.\n\n**Business Value**\n- Automate crew schedule management and updates in real‑time.\n- Keep crew schedules perfectly synchronized with external systems.\n- Support crew self‑service and scheduler workflows via API.\n- Reduce manual data entry and errors in crew roster management.\n\n<br/>\n\n**Use Cases**\n- Create a new roster assignment (e.g., Off, Flight, Standby) for a crew member.\n- Retrieve detailed information about a specific roster duty, including associated aircraft and airports.\n- Update existing roster assignments to reflect changes in schedules or duty types.\n- Search and filter roster assignments by crew member, type, or date range.\n\n<br/>\n"
    },
    {
      "name": "Flight Permits",
      "description": "Retrieve flight permit information for takeoff, landing, and overflight permissions. These endpoints enable operators to access flight permit data within the context of the operator data.\n\n**Business Value**\n- Retrieve accurate flight permit records for compliance and regulatory requirements.\n- Access permit information for operational planning and verification.\n- Monitor permit statuses and details for flights.\n\n<br/>\n\n**Use Cases**\n- Retrieve permit information for flights to verify compliance status.\n- Review permit details including status, dates, and associated documents.\n- Access permit information for operational planning and audits.\n\n<br/>\n"
    },
    {
      "name": "Flight Slots & PPRs",
      "description": "Retrieve flight slot and PPR (Prior Permission Required) information. These endpoints enable operators to access flight slot and PPR data within the context of the operator data.\n\n**Business Value**\n- Retrieve accurate flight slot and PPR records for compliance and operational requirements.\n- Access slot and PPR information for operational planning and verification.\n- Monitor slot and PPR statuses and details for flights.\n\n<br/>\n\n**Use Cases**\n- Retrieve slot and PPR information for flights to verify compliance status.\n- Review slot and PPR details including status, approval dates, and associated documents.\n- Access slot and PPR information for operational planning and audits.\n\n<br/>\n"
    },
    {
      "name": "Flight Slots & PPRs (Provider)",
      "description": "Manage flight slots and PPRs (Prior Permission Required). These endpoints enable Trip Support Providers to update, retrieve, and manage flight slots and PPRs, as well as manage associated documents.\n\n**Business Value**\n- Maintain accurate flight slot and PPR records for compliance and operational requirements.\n- Streamline slot and PPR management processes with automated workflows.\n- Support document management for slot and PPR certificates and approvals.\n- Ensure flights have the necessary slots and PPRs before operations.\n\n<br/>\n\n**Use Cases**\n- Update existing slot and PPR information, including permit numbers, status, and approval dates.\n- Retrieve slot and PPR information for flights to verify compliance status.\n- Upload and manage slot and PPR documents, such as certificates and approvals.\n- Delete obsolete slot and PPR documents that are no longer valid or relevant.\n\n<br/>\n\n**Note:**  \n> All flight slot and PPR operations are bound to the operator context associated with the authentication token. Trip Support Providers can manage slots and PPRs only for flights within their own organization.\n"
    },
    {
      "name": "Flight Permits (Provider)",
      "description": "Manage flight permits for takeoff, landing, and overflight permissions. These endpoints enable Trip Support Providers to create, update, retrieve, and delete flight permits, as well as manage associated documents.\n\n**Business Value**\n- Maintain accurate flight permit records for compliance and regulatory requirements.\n- Streamline permit management processes with automated workflows.\n- Support document management for permit certificates and approvals.\n- Ensure flights have the necessary permissions before operations.\n\n<br/>\n\n**Use Cases**\n- Create new flight permits for upcoming flights with permit details and expiration dates.\n- Update existing permit information, including permit numbers, status, and dates.\n- Retrieve permit information for flights to verify compliance status.\n- Upload and manage permit documents, such as certificates and approvals.\n- Delete obsolete permits that are no longer valid or relevant.\n\n<br/>\n\n**Note:**  \n> All flight‑permit operations are bound to the operator context associated with the authentication token. Trip Support Providers can manage permits only for flights within their own organization.\n"
    },
    {
      "name": "FBO (Provider)",
      "description": "Manage FBO (Fixed Base Operator) services. These endpoints enable Trip Support Providers to update and retrieve FBO service entries, as well as manage associated documents.\n\n**Note:**  \n> FBO services are read-only for properties - only status and remarks can be updated. Creation and deletion are not allowed.\n"
    },
    {
      "name": "Transport (Provider)",
      "description": "Manage transport services. These endpoints enable Trip Support Providers to create, update, retrieve, and delete transport service entries, as well as manage associated documents.\n\n**Note:**  \n> Transport services can be created if the partner is assigned to the flight. Deletion is only allowed if the transport service was created by the partner.\n"
    },
    {
      "name": "Hotel (Provider)",
      "description": "Manage hotel services. These endpoints enable Trip Support Providers to create, update, retrieve, and delete hotel service entries, as well as manage associated documents.\n\n**Note:**  \n> Hotel services can be created if the partner is assigned to the flight. Deletion is only allowed if the hotel service was created by the partner.\n"
    },
    {
      "name": "Catering (Provider)",
      "description": "Manage catering services. These endpoints enable Trip Support Providers to create, update, retrieve, and delete catering service entries, as well as manage associated documents.\n\n**Note:**  \n> Catering services can be created if the partner is assigned to the flight. Deletion is only allowed if the catering service was created by the partner.\n"
    },
    {
      "name": "Flights",
      "description": "Access comprehensive flight information and data. These endpoints enable partners to retrieve flight details with advanced filtering and pagination.\n\n**Business Value**\n- Retrieve flight data with flexible date‑range filtering.\n- Support high‑performance applications with optimized data retrieval and pagination.\n- Access essential flight information, including schedules, aircraft assignments, and passenger counts.\n\n<br/>\n\n**Use Cases**\n- Retrieve flights within a specific date range for operational planning.\n- Integrate flight data into external systems for scheduling and logistics.\n- Monitor flight schedules and aircraft assignments in near‑real‑time.\n- Build flight‑tracking and reporting dashboards with paginated results.\n"
    },
    {
      "name": "Aircraft",
      "description": "Access comprehensive aircraft and fleet information. These endpoints enable partners to retrieve aircraft data, including status, specifications, and operational details.\n\n**Business Value**\n- Retrieve complete fleet information, including active and inactive aircraft.\n- Support fleet management and operational planning with detailed aircraft data.\n- Access aircraft specifications, including capacity, category, and home‑base information.\n\n<br/>\n\n**Use Cases**\n- Retrieve fleet data for operational planning and scheduling.\n- Integrate aircraft information into external systems for maintenance and logistics.\n- Monitor aircraft status and availability across the fleet.\n- Build fleet‑management dashboards with paginated results.\n"
    }
  ],
  "x-tagGroups": [
    {
      "name": "Airports",
      "tags": [
        "Airports"
      ]
    },
    {
      "name": "Fuel Providers",
      "tags": [
        "Airport Fuel Prices"
      ]
    },
    {
      "name": "Webhooks",
      "tags": [
        "Webhooks"
      ]
    },
    {
      "name": "Crew Management",
      "tags": [
        "Qualification Types",
        "Crew Qualifications",
        "Crew Position",
        "Roster Types",
        "Roster Assignment"
      ]
    },
    {
      "name": "Operations",
      "tags": [
        "Flights",
        "Aircraft",
        "Flight Permits",
        "Flight Slots & PPRs"
      ]
    },
    {
      "name": "Trip Support Providers",
      "tags": [
        "Flight Permits (Provider)",
        "Flight Slots & PPRs (Provider)",
        "FBO (Provider)",
        "Transport (Provider)",
        "Hotel (Provider)",
        "Catering (Provider)"
      ]
    }
  ],
  "paths": {
    "/api/v2/airports/{airportCode}": {
      "get": {
        "operationId": "v2AirportsGet",
        "summary": "Get airport",
        "description": "This endpoint provides efficient access to airport data.\n\n**Features:**\n- Filter by multiple codes (ICAO, IATA, FAA, local identifier)\n- Automatically exclude deleted or inactive airports\n",
        "tags": [
          "Airports"
        ],
        "parameters": [
          {
            "name": "airportCode",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Airport reference code (FL3XX ID, IATA, ICAO, FAA, or local identifier).\n",
            "example": "LMML"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved airport",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AirportV2Dto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid parameters"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          }
        }
      }
    },
    "/api/v2/partners/airports/{airportCode}/fuel-prices": {
      "get": {
        "operationId": "v2AirportsFuelPricesGet",
        "summary": "Get fuel prices for an airport",
        "description": "Retrieves all fuel prices for a specific airport that were submitted by the partner associated with the authentication token.\n\n**Features:**\n- Returns all fuel prices submitted by the authenticated partner for the given airport\n\n**Note:** This endpoint is for Partner Fuel Providers. Only fuel prices associated with the operator linked to the authentication token will be returned.\n",
        "tags": [
          "Airport Fuel Prices"
        ],
        "parameters": [
          {
            "name": "airportCode",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The airport code for which fuel prices are being retrieved. This can be an IATA, ICAO, or FAA code, or an airport ID.\n<br/>\nValid demo examples include: AGAT, AGGR, EBCR, EGSK, EHPC, EPJA, DAOS\n",
            "example": "AGAT"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved fuel prices",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AirportFuelPriceDto"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid airport code"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "put": {
        "operationId": "v2AirportsFuelPricesPut",
        "summary": "Update fuel prices for an airport",
        "description": "Update or set fuel prices for a specific airport. This endpoint allows partners to submit fuel pricing information that will be used for operational and financial processes.\n\n**Features:**\n- Replaces all partner-submitted fuel prices for the given airport\n- Accepts 1 to 10 fuel price entries per request\n\n**Note:** This endpoint is for Partner Fuel Providers. Only fuel prices associated with the operator linked to the authentication token can be updated.\n",
        "tags": [
          "Airport Fuel Prices"
        ],
        "parameters": [
          {
            "name": "airportCode",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The airport code for which fuel prices are being updated. This can be an IATA, ICAO, or FAA code, or an airport ID.\n<br/>\nValid demo examples include: AGAT, AGGR, EBCR, EGSK, EHPC, EPJA, DAOS\n",
            "example": "AGGR"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "minItems": 1,
                "maxItems": 10,
                "items": {
                  "$ref": "#/components/schemas/AirportFuelPriceCreateDto"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated fuel prices",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AirportFuelPriceDto"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "delete": {
        "operationId": "v2AirportsFuelPricesDelete",
        "summary": "Delete all fuel prices for an airport",
        "description": "Delete all fuel prices for a specific airport that were submitted by the partner associated with the authentication token.\n\n**Features:**\n- Removes all partner-submitted fuel prices for the given airport in a single operation\n\n**Note:** This endpoint is for Partner Fuel Providers. Only fuel prices associated with the operator linked to the authentication token can be deleted.\n",
        "tags": [
          "Airport Fuel Prices"
        ],
        "parameters": [
          {
            "name": "airportCode",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The airport code for which fuel prices are being deleted. This can be an IATA, ICAO, or FAA code, or an airport ID.\n<br/>\nValid demo examples include: AGAT, AGGR, EBCR, EGSK, EHPC, EPJA, DAOS\n",
            "example": "AGGR"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted fuel prices"
          },
          "400": {
            "description": "Bad request - invalid airport code"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/partners/airport-fuel-prices": {
      "delete": {
        "operationId": "v2AirportsFuelPricesAllDelete",
        "summary": "Delete all fuel prices",
        "description": "Delete all fuel prices submitted by the partner associated with the authentication token across all airports.\n\n**Features:**\n- Removes all partner-submitted fuel prices across all airports in a single operation\n\n**Note:** This endpoint is for Partner Fuel Providers. Only fuel prices associated with the operator linked to the authentication token can be deleted in bulk.\n",
        "tags": [
          "Airport Fuel Prices"
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted all fuel prices"
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/partners/airport-fuel-prices/{fuelPriceId}": {
      "put": {
        "operationId": "v2AirportsFuelPricesByIdPut",
        "summary": "Update individual fuel price",
        "description": "Updates a specific fuel price by its ID. This endpoint allows partners to modify individual fuel pricing records.\n\n**Features:**\n- Updates a single fuel price record by its numeric ID\n\n**Note:** This endpoint is for Partner Fuel Providers. Only fuel prices associated with the operator linked to the authentication token can be updated.\n",
        "tags": [
          "Airport Fuel Prices"
        ],
        "parameters": [
          {
            "name": "fuelPriceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the fuel price to update",
            "example": "12345"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AirportFuelPriceCreateDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated fuel price",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AirportFuelPriceDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - fuel price does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "delete": {
        "operationId": "v2AirportsFuelPricesByIdDelete",
        "summary": "Delete individual fuel price",
        "description": "Deletes a specific fuel price by its ID. This endpoint allows partners to remove individual fuel pricing records.\n\n**Features:**\n- Removes a single fuel price record by its numeric ID\n\n**Note:** This endpoint is for Partner Fuel Providers. Only fuel prices associated with the operator linked to the authentication token can be deleted.\n",
        "tags": [
          "Airport Fuel Prices"
        ],
        "parameters": [
          {
            "name": "fuelPriceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the fuel price to delete",
            "example": "12345"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted fuel price"
          },
          "400": {
            "description": "Bad request - invalid fuel price ID format"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/webhooks/subscriptions": {
      "get": {
        "operationId": "webhookSubscriptionsGet",
        "summary": "Get webhook subscriptions",
        "description": "Retrieves all webhook subscriptions for the authenticated partner and operator.\n\n**Features:**\n- Returns active and inactive webhook subscriptions\n- Filtered by partner and operator context\n\nFor more information on setting up and managing webhooks, see the [Event Notifications (Webhook) Guide](/guides/guides/event-notifications).\n",
        "tags": [
          "Webhooks"
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved webhook subscriptions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WebhookSubscriptionResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "post": {
        "operationId": "webhookSubscriptionPost",
        "summary": "Create a new webhook subscription",
        "description": "Creates a new webhook subscription for receiving near‑real‑time event notifications.\n\n**Features:**\n- Validates the callback URL format; only HTTPS is supported\n- Sets an automatic expiration date of 15 days for subscriptions\n- Only one subscription per event type is allowed per partner/operator; returns `409` if a non-deleted subscription for the same event type already exists\n\nFor more information on setting up and managing webhooks, see the [Event Notifications (Webhook) Guide](/guides/guides/event-notifications).\n",
        "tags": [
          "Webhooks"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookSubscriptionCreateDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successfully created webhook subscription",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions or event not allowed in API plan"
          },
          "409": {
            "description": "Conflict - a subscription for this event type already exists"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/webhooks/subscriptions/{subscriptionId}": {
      "get": {
        "operationId": "webhookSubscriptionByIdGet",
        "summary": "Get webhook subscription by ID",
        "description": "Retrieves a specific webhook subscription by its unique identifier.\n\n**Features:**\n- Returns detailed subscription information\n\nFor more information on setting up and managing webhooks, see the [Event Notifications (Webhook) Guide](/guides/guides/event-notifications).\n",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the webhook subscription to retrieve.\n",
            "example": "webhook-sub-12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved webhook subscription",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - subscription does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "patch": {
        "operationId": "webhookSubscriptionByIdPatch",
        "summary": "Update webhook subscription callback URL or status",
        "description": "Updates the callback URL and/or the status (active or inactive) for an existing webhook subscription.\n\n**Features:**\n- Validates the new callback URL format; only HTTPS is supported\n- Updates the subscription status to active or inactive\n\nFor more information on setting up and managing webhooks, see the [Event Notifications (Webhook) Guide](/guides/guides/event-notifications).\n",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the webhook subscription to update.\n",
            "example": "webhook-sub-12345"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookSubscriptionPatchDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated webhook subscription",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - subscription does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "delete": {
        "operationId": "webhookSubscriptionByIdDelete",
        "summary": "Delete a webhook subscription",
        "description": "Deletes a webhook subscription and stops receiving notifications for the associated event type.\n\n**Features:**\n- Immediately stops webhook deliveries\n\nFor more information on setting up and managing webhooks, see the [Event Notifications (Webhook) Guide](/guides/guides/event-notifications).\n",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the webhook subscription to delete.\n",
            "example": "webhook-sub-12345"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted webhook subscription"
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - subscription does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/webhooks/subscriptions/{subscriptionId}/renewals": {
      "post": {
        "operationId": "webhookSubscriptionRenewalPost",
        "summary": "Renew a webhook subscription",
        "description": "Renews an existing webhook subscription to extend its expiration date.\n\n**Features:**\n- Extends subscription expiration by 1 month from current expiration date.\n- Subscriptions can only be renewed 5 days before expiration.\n\nFor more information on setting up and managing webhooks, see the [Event Notifications (Webhook) Guide](/guides/guides/event-notifications).\n",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the webhook subscription to renew.\n",
            "example": "webhook-sub-12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully renewed webhook subscription",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions or subscription cannot be renewed yet (more than 5 days remain until expiration)"
          },
          "404": {
            "description": "Not found - subscription does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/webhooks/deliveries": {
      "get": {
        "operationId": "webhookDeliveriesGet",
        "summary": "Get webhook deliveries",
        "description": "Retrieve paginated webhook delivery history for the authenticated partner and operator.\n\n`Note: Only failed deliveries are supported at this time.`\n\n**Features:**\n- Returns paginated delivery history with filtering and sorting\n- Supports filtering by completion date and status\n- Default sorting by completion date (descending)\n\nFor more information on setting up and managing webhooks, see the [Event Notifications (Webhook) Guide](/guides/guides/event-notifications).\n",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 10,
              "maximum": 50,
              "default": 10
            },
            "description": "Maximum number of records to return.",
            "example": 20
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Number of records to skip before starting to return results.",
            "example": 6
          },
          {
            "name": "filter",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Filter by completedAtDateTime and status.\n\n**Required filters:**\n- `completedAtDateTime` with `GTE` operator (greater than or equal)\n  - Date Constraints: Can be up to 2 months in the past.\n  - Date format: yyyy-MM-ddTHH:mm:ss.SSSZ\n  - Date value must be url encoded. Example: the following value `completedAtDateTime,GTE,2025-01-01T10:23:57.980Z&filter=status,EQ,FAILED` would be encoded and sent as `completedAtDateTime%2CGTE%2C2025-01-01T10%3A23%3A57.980Z&filter=status%2CEQ%2CFAILED`.\n- `status` with `EQ` operator (equal)\n  - Supported values: `FAILED`\n",
            "example": "completedAtDateTime%2CGTE%2C2025-01-01T10%3A23%3A57.980Z&filter=status%2CEQ%2CFAILED"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "completedAtDateTime desc"
            },
            "description": "Sort criteria in the format: field direction\n\nSupported sort fields:\n- `completedAtDateTime` (default: desc)\n",
            "example": "completedAtDateTime,desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved webhook deliveries",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid parameters or missing required filters"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/crew-qualifications": {
      "get": {
        "operationId": "crewQualificationsGet",
        "summary": "Get crew qualifications",
        "description": "Retrieves crew qualifications with pagination and filtering capabilities.\n\n**Features:**\n- Filter by crew ID (required)\n- Paginated results\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Crew Qualifications"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 10,
              "maximum": 50,
              "default": 10
            },
            "description": "Maximum number of records to return.",
            "example": 20
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Number of records to skip before starting to return results.",
            "example": 0
          },
          {
            "name": "filter",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "**Required filters:**\n- `crewId` with `EQ` operator — numeric crew member ID\n  - Example: `crewId,EQ,12345`\n",
            "example": "crewId,EQ,12345"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "createdAtDateTime desc"
            },
            "description": "Sort criteria in the format: `field direction`\n\nSupported sort fields:\n- `createdAtDateTime` (default: desc)\n",
            "example": "createdAtDateTime,desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved crew qualifications",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrewQualificationPageResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error (missing required crewId filter)"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - crew member does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "post": {
        "operationId": "crewQualificationPost",
        "summary": "Assign a qualification to a crew member",
        "description": "Assigns a new qualification to a crew member with license details, expiration dates, and other relevant information.\n\n**Features:**\n- Validates required fields including crew ID and qualification ID\n- Supports license numbers, issuing authorities, and country information\n- Handles pilot-in-command designations and base month calculations\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Crew Qualifications"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrewQualificationCreateDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successfully assigned qualification to crew member",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrewQualificationSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/crew-qualifications/{crewQualificationId}": {
      "get": {
        "operationId": "crewQualificationByIdGet",
        "summary": "Get a crew qualification by ID",
        "description": "Retrieves detailed information about a specific crew qualification including associated documents.\n\n**Features:**\n- Returns complete qualification details including document references\n- Includes creation and update timestamps\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Crew Qualifications"
        ],
        "parameters": [
          {
            "name": "crewQualificationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the crew qualification to retrieve",
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved crew qualification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrewQualificationDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - crew qualification does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "patch": {
        "operationId": "crewQualificationByIdPatch",
        "summary": "Update a crew qualification by ID",
        "description": "Updates an existing crew qualification with new information.\n\n**Features:**\n- Updates qualification details including license numbers and dates\n- Supports partial updates of qualification information\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Crew Qualifications"
        ],
        "parameters": [
          {
            "name": "crewQualificationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the crew qualification to update",
            "example": "12345"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrewQualificationPatchDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated crew qualification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrewQualificationDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - crew qualification does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "delete": {
        "operationId": "crewQualificationByIdDelete",
        "summary": "Delete a crew qualification by ID",
        "description": "Deletes a crew qualification and removes it from the system.\n\n**Features:**\n- Permanently removes the qualification record\n- Returns confirmation of deletion\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Crew Qualifications"
        ],
        "parameters": [
          {
            "name": "crewQualificationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the crew qualification to delete",
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted crew qualification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - crew qualification does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/crew-qualifications/{crewQualificationId}/documents/{uuid}": {
      "delete": {
        "operationId": "crewQualificationDocumentDelete",
        "summary": "Delete document associated with a crew qualification",
        "description": "Deletes a document associated with a crew qualification.\n\n**Features:**\n- Permanently removes the document file\n- Returns confirmation of deletion\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Crew Qualifications"
        ],
        "parameters": [
          {
            "name": "crewQualificationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the crew qualification",
            "example": "12345"
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The UUID of the document to delete",
            "example": "550e8400-e29b-41d4-a716-446655440000"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - crew qualification or document does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      },
      "get": {
        "operationId": "crewQualificationDocumentGet",
        "summary": "Get document associated with a crew qualification",
        "description": "Downloads a document associated with a crew qualification.\n\n**Features:**\n- Downloads the actual document file\n- Validates document ownership and access permissions\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Crew Qualifications"
        ],
        "parameters": [
          {
            "name": "crewQualificationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the crew qualification",
            "example": "12345"
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The UUID of the document to download",
            "example": "550e8400-e29b-41d4-a716-446655440000"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved document",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - crew qualification or document does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/crew-qualifications/{crewQualificationId}/documents": {
      "post": {
        "operationId": "crewQualificationDocumentPost",
        "summary": "Upload document associated with a crew qualification",
        "description": "Uploads a document file to be associated with a crew qualification.\n\n**Features:**\n- Associates the document with the specific qualification\n- Returns document metadata including UUID for future access\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Crew Qualifications"
        ],
        "parameters": [
          {
            "name": "crewQualificationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the crew qualification",
            "example": "12345"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The document file to upload"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully uploaded document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/B2CBinaryReferenceDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — file is required"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - crew qualification does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/qualification-types": {
      "get": {
        "operationId": "qualificationTypesGet",
        "summary": "Get qualification types",
        "description": "Retrieves available qualification types and their details for use in crew qualification assignments.\n\n**Features:**\n- Returns paginated list of available qualifications\n- Includes qualification metadata and configuration\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Qualification Types"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 10,
              "maximum": 50,
              "default": 10
            },
            "description": "Maximum number of records to return.",
            "example": 20
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Number of records to skip before starting to return results.",
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved qualifications",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedQualificationDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/qualification-types/{id}": {
      "get": {
        "operationId": "qualificationTypeByIdGet",
        "summary": "Get qualification type by ID",
        "description": "Retrieves detailed information about a specific qualification type.\n\n**Features:**\n- Returns complete qualification configuration and metadata\n- Includes validity periods, grace periods, and relation information\n\nFor more information on managing crew qualifications, see the [Crew Qualification Management Guide](/guides/guides/crew-qualification).\n",
        "tags": [
          "Qualification Types"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the qualification to retrieve",
            "example": "qual-type-12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved qualification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QualificationDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - qualification does not exist"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/v2/roster-types-search": {
      "post": {
        "operationId": "rosterTypesSearch",
        "summary": "Get roster types",
        "description": "Returns roster (duty) types with pagination. Each item is simplified; use GET /api/v2/roster-types/{id} for the full type including boolean flags.\n\n**Features:**\n- Filter by native/custom duty types\n- Sort results by name\n- Pagination support\n",
        "tags": [
          "Roster Types"
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RosterTypesSearchRequest"
              },
              "example": {
                "limit": 20,
                "offset": 0,
                "filters": {
                  "isNative": true
                },
                "sorts": {
                  "name": "ASC"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully retrieved roster types (paginated; each item is simplified with nestedTypes tree)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RosterTypePageResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/roster-types/{id}": {
      "get": {
        "operationId": "rosterTypeByIdGet",
        "summary": "Get roster type",
        "description": "Retrieves full details for a roster type, including all boolean flags that control which fields are enabled for assignments of this type.\n\n**Features:**\n- Returns the complete flag set for a specific duty type\n- Use before creating or updating a roster assignment to determine which fields apply\n",
        "tags": [
          "Roster Types"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique identifier of the roster type (same value you use as rosterTypeId in roster assignments).",
            "example": "112233"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved roster type",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RosterTypeDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found - roster type does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crew-position-search": {
      "post": {
        "operationId": "crewPositionSearch",
        "summary": "Search crew positions for an aircraft",
        "description": "Returns a paginated list of crew positions configured for a specific aircraft. Exactly one of `aircraftId` or `tailNumber` must be provided in filters.\n\n**Features:**\n- Search by aircraft id or tail number\n- Filter by assignability to show only positions usable in roster assignments\n- Sort results by position name\n- Paginated response\n\nCrew positions returned by this endpoint can be used as `crewPositionId` in roster assignment create and update requests (see `aircraft.crewPositionId` on roster assignment endpoints). The crew position must belong to the aircraft specified in the assignment.\n",
        "tags": [
          "Crew Position"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CrewPositionSearchRequest"
              },
              "example": {
                "limit": 20,
                "offset": 0,
                "filters": {
                  "tailNumber": "OE-FLX",
                  "isAssignable": true
                },
                "sorts": {
                  "name": "ASC"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully retrieved crew positions (paginated).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrewPositionPageResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error (e.g. both aircraftId and tailNumber provided, or neither provided).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — invalid authentication.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — insufficient permissions. Requires crew position read permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/rosters-search": {
      "post": {
        "operationId": "rosterAssignmentsSearch",
        "summary": "Get roster assignments",
        "description": "Returns a paginated list of roster assignments. Each item in the response is simplified; use GET /api/v2/rosters/{id} for full details.\n",
        "tags": [
          "Roster Assignment"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RosterAssignmentsSearchRequest"
              },
              "example": {
                "limit": 20,
                "offset": 0,
                "filters": {
                  "dateRange": {
                    "from": "2025-03-01T00:00:00.000Z",
                    "to": "2025-03-31T23:59:59.999Z"
                  },
                  "crewId": "crew-12345"
                },
                "sorts": {
                  "startDateTime": "ASC"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully retrieved roster assignments (paginated; each item is simplified; use GET /rosters/{id} for full details)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RosterAssignmentPageResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error (e.g. missing filters, invalid date range).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/rosters": {
      "post": {
        "operationId": "rosterAssignmentCreate",
        "summary": "Create roster assignment",
        "description": "Creates a new roster assignment for a crew member. This is equivalent to adding a duty or day in the FL3XX roster interface.\n\n**Example Use Case:** An automated scheduling system creates a \"Standby\" duty for a crew member, providing the start and end times, and ensuring all required references are correctly resolved.\n\n**Duration constraints:**\n- `startDateTime` must be strictly before `endDateTime`\n- Maximum duration is **31 days** for all roster types\n- Maximum duration is **2 days** for roster types with `isDutyTimeVisible` enabled\n\n**Field validation rules:**\n- Fields that the roster type does **not** support (e.g. sending `dutyShiftType` when `isSubtypeVisible` is false) are **rejected with 400** — they are not silently ignored\n- When a roster type has `isDutyTimeVisible` enabled, the following fields become mandatory if their corresponding flag is set: `dutyAirportCode` (`isLocationVisible`), `departureAirportCode` (`isDepartureAirportEnabled`), `arrivalAirportCode` (`isArrivalAirportEnabled`), `serviceAirportCode` (`isForAirportEnabled`), `aircraft.tailNumber` (`isAircraftEnabled`)\n- When `aircraft.crewPositionId` is provided, `aircraft.tailNumber` is required. The crew position must be linked to the specified aircraft and must be assignable — use POST /api/v2/crew-position-search to discover valid positions\n\nCheck the roster type's configuration using GET /api/v2/roster-types/{id} before creating an assignment.\n",
        "tags": [
          "Roster Assignment"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RosterAssignmentCreateDto"
              },
              "example": {
                "crewId": "crew-12345",
                "rosterTypeId": "112233",
                "startDateTime": "2025-03-01T09:00:00.000Z",
                "endDateTime": "2025-03-01T17:00:00.000Z",
                "dutyShiftType": "ALL_DAY",
                "notes": "Day off as requested"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully created roster assignment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RosterAssignmentDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error (e.g. missing required fields, disallowed field for roster type, duration exceeded).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/rosters/{id}": {
      "get": {
        "operationId": "rosterAssignmentByIdGet",
        "summary": "Get roster assignment",
        "description": "Retrieves the full details of a specific roster assignment.\n\n**Features:**\n- Returns complete assignment data including aircraft, airports, and logbook details\n- Provides timing and status information\n- Dynamic response structure based on the assignment's roster type\n\n**Example Use Case:** A crew member's mobile app retrieves the full details of a \"Flight\" duty to display the assigned aircraft and the departure/arrival airports to the user.\n\n**Note:** Sections such as `aircraft`, `logbook`, and `ftl` will be populated only if they are enabled for that specific duty type; otherwise, they will be null.\n",
        "tags": [
          "Roster Assignment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique identifier of the roster assignment.",
            "example": "98765"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved roster assignment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RosterAssignmentDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found - roster assignment does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "rosterAssignmentByIdPut",
        "summary": "Replace roster assignment",
        "description": "Replaces an existing roster assignment. All optional fields **not provided** in the request body are **cleared** on the assignment.\n\n**`startDateTime` and `endDateTime` should always be provided for a semantically correct PUT.** If omitted, the existing values are preserved (due to how the API handles absent fields), but this behaviour should not be relied upon — always supply them.\n\n**Example Use Case:** A scheduler performs a full replacement of a duty record, providing all relevant fields in the request to ensure a clean, authoritative update.\n\n**Validation rules (same as create):**\n- `startDateTime` must be strictly before `endDateTime`\n- Fields the roster type does not support are **rejected with 400**\n- Mandatory fields (when `isDutyTimeVisible` is set) must be present\n- Duration constraints apply: max 31 days; max 2 days when `isDutyTimeVisible`\n- FTL interdependency rules apply (see FTL schema)\n- When `aircraft.crewPositionId` is provided, `aircraft.tailNumber` is required. The crew position must be linked to the specified aircraft and must be assignable\n",
        "tags": [
          "Roster Assignment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique identifier of the roster assignment to replace.",
            "example": "98765"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RosterAssignmentPatchDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully replaced roster assignment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RosterAssignmentDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error (e.g. disallowed field for roster type, duration exceeded, missing mandatory field).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found - roster assignment does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "rosterAssignmentByIdPatch",
        "summary": "Patch roster assignment",
        "description": "Partially updates an existing roster assignment. Only the fields provided in the request body are updated; fields not included remain unchanged.\n\n**Example Use Case:** A scheduler updates only the end time of an existing duty without affecting any other fields.\n\n**Validation rules:**\n- If provided, `startDateTime` must be strictly before `endDateTime`\n- Fields the roster type does not support are **rejected with 400** — they are not silently ignored\n- Mandatory field checks (for `isDutyTimeVisible`) are **not** enforced on PATCH — only on PUT and create\n- Duration constraints apply to the resulting start/end: max 31 days; max 2 days when `isDutyTimeVisible`\n- FTL interdependency rules apply if `ftl` is provided (see FTL schema)\n- When `aircraft.crewPositionId` is provided, `aircraft.tailNumber` is required. The crew position must be linked to the specified aircraft and must be assignable\n",
        "tags": [
          "Roster Assignment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique identifier of the roster assignment to patch.",
            "example": "98765"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RosterAssignmentPatchDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully patched roster assignment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RosterAssignmentDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — validation error (e.g. disallowed field for roster type, FTL interdependency violation).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found - roster assignment does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "rosterAssignmentByIdDelete",
        "summary": "Delete a roster assignment",
        "description": "Permanently removes the roster assignment.",
        "tags": [
          "Roster Assignment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique identifier of the roster assignment to delete.",
            "example": "98765"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted — no response body."
          },
          "401": {
            "description": "Unauthorized - invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - insufficient permissions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found - roster assignment does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/flights": {
      "get": {
        "operationId": "flightsGet",
        "summary": "Get flights",
        "description": "Retrieves flights with pagination and filtering capabilities. This endpoint provides access to simplified flight information including schedules, aircraft assignments, airports, and passenger counts.\n\n**Features:**\n- Filter by estimated blocks‑off date and time range (required) using the `BTW` (between) operator\n- Paginated results with configurable limit (10–50) and offset\n- Default sorting by estimated blocks‑off date and time (descending)\n- Returns flight data, including arrival and departure airport details, quote information, and workflow type\n\n**Response Data:**\n- Flight identification (ID, flight number, tail number)\n- Quote information (quote ID, external reference, identifier)\n- Time estimates (blocks‑off and blocks‑on estimated times)\n- Airport details (arrival and departure airports with ICAO, IATA, FAA codes)\n- Passenger and trip information\n- Customer and account identifiers\n- Workflow type and custom workflow name\n\n**Example Use Case:** An operations manager needs to retrieve all flights scheduled between two dates to plan crew assignments and resource allocation. The endpoint returns paginated results with complete airport information for both departure and arrival locations.\n\n**Note:**\n> The only available filter is estimated blocks‑off (`blocksOffEstimatedDateTime`). There is no filtering by flight status, so the response returns everything within the requested blocks‑off window, including confirmed flights, cancelled flights, and potential flights (options).\n\n**Date range limit:** Both ends of the `BTW` range must fall within 1 month before or after the current date/time, so the widest possible query spans about 2 months total. A range extending further than that in either direction returns a 400 error. Use V2 for near‑term operational queries; use V1 for anything further out.\n",
        "tags": [
          "Flights"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 10,
              "maximum": 50,
              "default": 10
            },
            "description": "Maximum number of records to return.",
            "example": 20
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Number of records to skip before starting to return results.",
            "example": 0
          },
          {
            "name": "filter",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Filter by `blocksOffEstimatedDateTime` (required).\n\n**Required filters:**\n- `blocksOffEstimatedDateTime` with the `BTW` operator (between)\n  - Date format: `YYYY-MM-DDTHH:mm:ss.SSSZ`\n  - Date values must be URL‑encoded. For example, the following value `blocksOffEstimatedDateTime,BTW,2025-01-01T00:00:00.000Z/2025-01-31T23:59:59.999Z` must be encoded and sent as `blocksOffEstimatedDateTime,BTW,2025-01-01T00%3A00%3A00.000Z/2025-01-31T23%3A59%3A59.999Z`.\n",
            "example": "blocksOffEstimatedDateTime,BTW,2025-01-01T00%3A00%3A00.000Z/2025-01-31T23%3A59%3A59.999Z"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "blocksOffEstimatedDateTime desc"
            },
            "description": "Sort criteria in the format: field direction\n\nSupported sort fields:\n- `blocksOffEstimatedDateTime` (default: desc)\n",
            "example": "blocksOffEstimatedDateTime desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flights",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlightPageResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid parameters or missing required filters"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          }
        }
      }
    },
    "/api/v2/flights/{flightId}/permits": {
      "get": {
        "operationId": "flightPermitsGet",
        "summary": "Get flight permits",
        "description": "Retrieves all flight permits for a specific flight.\n\n**Features:**\n- Returns all permits associated with the flight\n- Includes permit details, status, and document information\n\n**Note:** This endpoint is for operators within the context of the operator data. For FL3XX Partner Providers, use the `/partners` endpoints instead.\n\n**Example Use Case:** An operations manager needs to retrieve all permits for a flight to verify compliance and check permit statuses before departure.\n",
        "tags": [
          "Flight Permits"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight",
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flight permits",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlightPermitSimplifiedDto"
                  }
                },
                "example": [
                  {
                    "id": "10603830",
                    "permitNumber": "123456",
                    "status": "OK",
                    "notes": "Note Example",
                    "providerId": "093d574d69fd4aeea128db565d662006",
                    "type": "OVERFLIGHT",
                    "externalNotes": "12345678",
                    "externalStatus": "DO",
                    "country": "DEU",
                    "airport": null,
                    "issueDate": "2026-06-26T00:00:00.000Z",
                    "documentUuid": "36766813-e2af-4cb1-8d6e-8b15e5dbb3c6",
                    "expirationDate": "2026-06-28T00:00:00.000Z",
                    "createdAtDateTime": "2026-06-26T09:41:36.036Z",
                    "updatedAtDateTime": "2026-06-26T11:59:59.703Z"
                  },
                  {
                    "id": "10603837",
                    "permitNumber": null,
                    "status": "DO",
                    "notes": null,
                    "providerId": "093d574d69fd4aeea128db565d662006",
                    "type": "TAKEOFF",
                    "externalNotes": null,
                    "externalStatus": null,
                    "country": "AUT",
                    "airport": null,
                    "issueDate": null,
                    "documentUuid": null,
                    "expirationDate": null,
                    "createdAtDateTime": "2026-06-26T12:14:07.501Z",
                    "updatedAtDateTime": null
                  },
                  {
                    "id": "10603797",
                    "permitNumber": "",
                    "status": "REQ",
                    "notes": "",
                    "providerId": "093d574d69fd4aeea128db565d662006",
                    "type": "LANDING",
                    "externalNotes": "12345678",
                    "externalStatus": "DO",
                    "country": "FRA",
                    "airport": {
                      "id": "20158",
                      "name": "Paris Le Bourget",
                      "icao": "LFPB",
                      "iata": "LBG",
                      "faa": null,
                      "localIdentifier": null
                    },
                    "issueDate": null,
                    "documentUuid": null,
                    "expirationDate": null,
                    "createdAtDateTime": "2026-06-26T09:32:16.346Z",
                    "updatedAtDateTime": "2026-06-26T12:03:21.232Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad request - invalid flight ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          }
        }
      }
    },
    "/api/v2/flight-permits/{id}": {
      "get": {
        "operationId": "flightPermitsByIdGet",
        "summary": "Get flight permit by ID",
        "description": "Retrieves detailed information about a specific flight permit including associated documents.\n\n**Features:**\n- Returns complete permit details including document references\n- Includes creation and update timestamps\n\n**Note:** This endpoint is for operators within the context of the operator data. For FL3XX Partner Providers, use the `/partners` endpoints instead.\n\n**Example Use Case:** An operations manager needs to review the complete details of a specific permit, including any uploaded documents, to verify compliance or prepare for audits.\n",
        "tags": [
          "Flight Permits"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight permit to retrieve",
            "example": "10603830"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flight permit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlightPermitDto"
                },
                "example": {
                  "id": "10603830",
                  "permitNumber": "123456",
                  "status": "OK",
                  "notes": "Note example",
                  "providerId": "093d574d69fd4aeea128db565d662006",
                  "type": "OVERFLIGHT",
                  "externalNotes": null,
                  "externalStatus": null,
                  "country": "LUX",
                  "airport": null,
                  "issueDate": "2026-06-26T00:00:00.000Z",
                  "document": {
                    "id": 103597,
                    "uuid": "36766813-e2af-4cb1-8d6e-8b15e5dbb3c6",
                    "originalName": "superadmin.png",
                    "fileSize": 52232,
                    "createdAtDateTime": "2026-06-26T09:47:54.749Z",
                    "customName": null,
                    "imageSizeX": 860,
                    "imageSizeY": 828,
                    "isThumbnail": false
                  },
                  "expirationDate": "2026-06-28T00:00:00.000Z",
                  "createdAtDateTime": "2026-06-26T09:41:36.036Z",
                  "updatedAtDateTime": null
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid permit ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - permit does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flights/{flightId}/permits": {
      "get": {
        "operationId": "partnerFlightPermitsGet",
        "summary": "Get flight permits - partner scope",
        "description": "Retrieves all flight permits for a specific flight within the partner's scope.\n\n**Features:**\n- Returns only permits accessible to the authenticated partner\n- Includes permit details, status, and document information\n\n**Note:** This endpoint is for Trip Support Providers. Only permits associated with the operator linked to the authentication token will be returned.\n\n**Example Use Case:** A trip support provider needs to retrieve all permits for a flight to verify compliance and check permit statuses before departure.\n",
        "tags": [
          "Flight Permits (Provider)"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight",
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flight permits",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlightPermitSimplifiedDto"
                  }
                },
                "example": [
                  {
                    "id": "10603830",
                    "permitNumber": "123456",
                    "status": "OK",
                    "notes": "Note Example",
                    "providerId": "093d574d69fd4aeea128db565d662006",
                    "type": "OVERFLIGHT",
                    "externalNotes": "12345678",
                    "externalStatus": "DO",
                    "country": "DEU",
                    "airport": null,
                    "issueDate": "2026-06-26T00:00:00.000Z",
                    "documentUuid": "36766813-e2af-4cb1-8d6e-8b15e5dbb3c6",
                    "expirationDate": "2026-06-28T00:00:00.000Z",
                    "createdAtDateTime": "2026-06-26T09:41:36.036Z",
                    "updatedAtDateTime": "2026-06-26T11:59:59.703Z"
                  },
                  {
                    "id": "10603837",
                    "permitNumber": null,
                    "status": "DO",
                    "notes": null,
                    "providerId": "093d574d69fd4aeea128db565d662006",
                    "type": "TAKEOFF",
                    "externalNotes": null,
                    "externalStatus": null,
                    "country": "AUT",
                    "airport": null,
                    "issueDate": null,
                    "documentUuid": null,
                    "expirationDate": null,
                    "createdAtDateTime": "2026-06-26T12:14:07.501Z",
                    "updatedAtDateTime": null
                  },
                  {
                    "id": "10603797",
                    "permitNumber": "",
                    "status": "REQ",
                    "notes": "",
                    "providerId": "093d574d69fd4aeea128db565d662006",
                    "type": "LANDING",
                    "externalNotes": "12345678",
                    "externalStatus": "DO",
                    "country": "FRA",
                    "airport": {
                      "id": "20158",
                      "name": "Paris Le Bourget",
                      "icao": "LFPB",
                      "iata": "LBG",
                      "faa": null,
                      "localIdentifier": null
                    },
                    "issueDate": null,
                    "documentUuid": null,
                    "expirationDate": null,
                    "createdAtDateTime": "2026-06-26T09:32:16.346Z",
                    "updatedAtDateTime": "2026-06-26T12:03:21.232Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad request - invalid flight ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          }
        }
      }
    },
    "/api/v2/partners/flight-permits/{id}": {
      "get": {
        "operationId": "partnerFlightPermitsByIdGet",
        "summary": "Get flight permit by ID - partner scope",
        "description": "Retrieves detailed information about a specific flight permit within the partner's scope, including associated documents.\n\n**Features:**\n- Returns complete permit details including document references\n- Includes creation and update timestamps\n\n**Note:** This endpoint is for Trip Support Providers. Only permits associated with the operator linked to the authentication token can be retrieved.\n\n**Example Use Case:** A trip support provider needs to review the complete details of a specific permit, including any uploaded documents, to verify compliance or prepare for audits.\n",
        "tags": [
          "Flight Permits (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight permit to retrieve",
            "example": "10603830"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flight permit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlightPermitDto"
                },
                "example": {
                  "id": "10603830",
                  "permitNumber": "123456",
                  "status": "OK",
                  "notes": "Note example",
                  "providerId": "093d574d69fd4aeea128db565d662006",
                  "type": "OVERFLIGHT",
                  "externalNotes": null,
                  "externalStatus": null,
                  "country": "LUX",
                  "airport": null,
                  "issueDate": "2026-06-26T00:00:00.000Z",
                  "document": {
                    "id": 103597,
                    "uuid": "36766813-e2af-4cb1-8d6e-8b15e5dbb3c6",
                    "originalName": "superadmin.png",
                    "fileSize": 52232,
                    "createdAtDateTime": "2026-06-26T09:47:54.749Z",
                    "customName": null,
                    "imageSizeX": 860,
                    "imageSizeY": 828,
                    "isThumbnail": false
                  },
                  "expirationDate": "2026-06-28T00:00:00.000Z",
                  "createdAtDateTime": "2026-06-26T09:41:36.036Z",
                  "updatedAtDateTime": null
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid permit ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - permit does not exist"
          }
        }
      },
      "patch": {
        "operationId": "partnerFlightPermitsPatch",
        "summary": "Update flight permit by ID - partner scope",
        "description": "Updates an existing flight permit with new information.\n\n**Features:**\n- Updates permit details including permit number, status, dates, and notes\n- Supports partial updates of permit information\n\n**Note:** This endpoint is for Trip Support Providers. Only permits associated with the operator linked to the authentication token can be updated.\n\n**Partial updates supported:** The request body can contain none, one, several, or all fields from the schema — only the fields provided will be updated. Omitted fields remain unchanged.\n\n**Example Use Case:** A trip support provider needs to update a permit after receiving a new permit number or when permit status changes.\n",
        "tags": [
          "Flight Permits (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight permit to update",
            "example": "10603830"
          }
        ],
        "requestBody": {
          "required": false,
          "description": "All fields are optional. Send an empty body `{}` to make no changes, or include any combination of fields to update only those values.\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FlightPermitPathDto"
              },
              "example": {
                "permitNumber": "12345",
                "status": "REQ",
                "notes": "Notes Example",
                "approvalDateTime": "2026-06-29T10:39:22.695Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated flight permit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlightPermitSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error or permit not found"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - permit does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerFlightPermitsDelete",
        "summary": "Delete flight permit by ID - partner scope",
        "description": "Deletes a flight permit and removes it from the system.\n\n**Features:**\n- Permanently removes the permit record\n- Returns confirmation of deletion\n\n**Note:** This endpoint is for Trip Support Providers. Only permits associated with the operator linked to the authentication token can be deleted.\n\n**Example Use Case:** A trip support provider needs to remove an obsolete permit that is no longer valid or relevant for a flight.\n",
        "tags": [
          "Flight Permits (Provider)"
        ],
        "parameters": [
          {
            "name": "flightPermitId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight permit to delete",
            "example": "10603831"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted flight permit"
          },
          "400": {
            "description": "Bad request - permit not found"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - permit does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flight-permits": {
      "post": {
        "operationId": "partnerFlightPermitsPost",
        "summary": "Create flight permit - partner scope",
        "description": "Creates a new flight permit for a flight with permit details, status, and dates.\n\n**Features:**\n- Validates required fields including flight ID and permit type\n- Supports permit number, status, dates, country, and airport information\n- Handles takeoff, landing, and overflight permit types\n\n**Note:** This endpoint is for Trip Support Providers. Only permits for flights associated with the operator linked to the authentication token can be created.\n\n**Example Use Case:** A trip support provider needs to create a new landing permit for a flight after receiving approval from the destination country's aviation authority.\n",
        "tags": [
          "Flight Permits (Provider)"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FlightPermitCreateDto"
              },
              "example": {
                "flightId": "87461",
                "permitNumber": "123456",
                "status": "OK",
                "notes": "Note Example",
                "type": "OVERFLIGHT",
                "country": "DEU",
                "issueDate": "2026-06-26T00:00:00.000Z",
                "documentUuid": "36766813-e2af-4cb1-8d6e-8b15e5dbb3c6",
                "expirationDate": "2026-06-28T00:00:00.000Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully created flight permit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlightPermitSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          }
        }
      }
    },
    "/api/v2/partners/flight-permits/{flightPermitId}/documents": {
      "post": {
        "operationId": "partnerFlightPermitDocumentPost",
        "summary": "Upload document associated with a flight permit - partner scope",
        "description": "Uploads a document file to be associated with a flight permit.\n\n**Features:**\n- Supports various document formats\n- Associates the document with the specific permit\n- Returns confirmation of upload\n\n**Supported File Types:**\n- Images: All image formats (JPEG, PNG, GIF, BMP, etc.) except SVG\n- Documents: PDF, Microsoft Office (Word, Excel, PowerPoint: .doc, .docx, .xls, .xlsx, .ppt, .pptx), OpenDocument formats (.odt, .ods), Microsoft Word legacy (.doc)\n- Other: Email messages (.eml), Apple Passbook (.pkpass)\n\n**File Size Limits:**\n- Maximum file size: 5 MB (5,242,880 bytes)\n\n**Note:** This endpoint is for Trip Support Providers. Only permits associated with the operator linked to the authentication token can have documents uploaded. Each permit can have only one document associated with it.\n\n**Example Use Case:** A trip support provider needs to upload a scanned copy of a permit certificate or approval document to maintain digital records for compliance and verification.\n",
        "tags": [
          "Flight Permits (Provider)"
        ],
        "parameters": [
          {
            "name": "flightPermitId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight permit",
            "example": "10603830"
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The document file to upload. Maximum file size is 5 MB. Supported formats include images (except SVG), PDF, Microsoft Office documents, OpenDocument formats, and email messages.\n"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successfully uploaded document"
          },
          "400": {
            "description": "Bad request - invalid file or permit ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - permit does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flight-permits/{flightPermitId}/documents/{documentUuid}": {
      "get": {
        "operationId": "partnerFlightPermitDocumentGet",
        "summary": "Get document associated with a flight permit - partner scope",
        "description": "Downloads a document associated with a flight permit.\n\n**Features:**\n- Downloads the actual document file\n- Validates document ownership and access permissions\n\n**Note:** This endpoint is for Trip Support Providers. Only documents for permits associated with the operator linked to the authentication token can be downloaded.\n\n**Example Use Case:** A trip support provider needs to download a permit certificate or approval document for verification or compliance purposes.\n",
        "tags": [
          "Flight Permits (Provider)"
        ],
        "parameters": [
          {
            "name": "flightPermitId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight permit",
            "example": "10603830"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the document to download",
            "example": "ee71d72b-158e-4176-9172-01a4434637b2"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved document",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid permit ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - permit or document does not exist"
          }
        }
      },
      "delete": {
        "operationId": "deleteFlightPermitDocumentForPartner",
        "summary": "Delete document associated with a flight permit - partner scope",
        "description": "Deletes a document associated with a flight permit.\n\n**Features:**\n- Permanently removes the document file\n- Returns confirmation of deletion\n\n**Note:** This endpoint is for Trip Support Providers. Only documents for permits associated with the operator linked to the authentication token can be deleted.\n\n**Example Use Case:** A trip support provider needs to remove an outdated or incorrect document that was previously uploaded for a permit.\n",
        "tags": [
          "Flight Permits (Provider)"
        ],
        "parameters": [
          {
            "name": "flightPermitId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight permit",
            "example": "10603830"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the document to delete",
            "example": "ee71d72b-158e-4176-9172-01a4434637b2"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted document"
          },
          "400": {
            "description": "Bad request - invalid permit ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - permit or document does not exist"
          }
        }
      }
    },
    "/api/v2/flights/{flightId}/slots-pprs": {
      "get": {
        "operationId": "slotsAndPprsGet",
        "summary": "Get flight slots and PPRs",
        "description": "Retrieves all flight slots and PPRs for a specific flight.\n\n**Features:**\n- Returns all slots and PPRs associated with the flight\n- Includes slot/PPR details, status, and document information\n\n**Note:** This endpoint is for operators within the context of the operator data. For Trip Support Providers, use the `/partners` endpoints instead.\n\n**Example Use Case:** An operations manager needs to retrieve all slots and PPRs for a flight to verify compliance and check statuses before departure.\n",
        "tags": [
          "Flight Slots & PPRs"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight",
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flight slots and PPRs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlightSlotPprSimplifiedDto"
                  }
                },
                "example": [
                  {
                    "id": "10603875",
                    "permitNumber": null,
                    "status": "DO",
                    "notes": "Notes Example",
                    "tripProviderId": "12",
                    "providerPublicId": "093d574d69fd4aeea128db565d662006",
                    "type": "SLOT",
                    "direction": "ARRIVAL",
                    "airport": {
                      "id": "14359",
                      "name": "Lester B Pearson International",
                      "icao": "CYYZ",
                      "iata": "YYZ",
                      "faa": null,
                      "localIdentifier": "CYYZ"
                    },
                    "approvalDateTime": null,
                    "documentUuid": null,
                    "createdAtDateTime": "2026-06-29T10:39:22.695Z",
                    "updatedAtDateTime": "2026-06-29T10:39:22.695Z"
                  },
                  {
                    "id": "10603874",
                    "permitNumber": null,
                    "status": "DO",
                    "notes": "Notes Example",
                    "tripProviderId": "12",
                    "providerPublicId": "093d574d69fd4aeea128db565d662006",
                    "type": "UNDEFINED",
                    "direction": "DEPARTURE",
                    "airport": {
                      "id": "14784",
                      "name": "Berlin Brandenburg",
                      "icao": "EDDB",
                      "iata": "BER",
                      "faa": null,
                      "localIdentifier": null
                    },
                    "approvalDateTime": null,
                    "documentUuid": "b0b6f944-b9a8-432b-a456-a58011685f75",
                    "createdAtDateTime": "2026-06-29T10:39:22.647Z",
                    "updatedAtDateTime": "2026-06-29T10:39:22.647Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad request - invalid flight ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          }
        }
      }
    },
    "/api/v2/flight-slots-pprs/{id}": {
      "get": {
        "operationId": "slotPprByIdGet",
        "summary": "Get flight slot/PPR by ID",
        "description": "Retrieves detailed information about a specific flight slot or PPR including associated documents.\n\n**Features:**\n- Returns complete slot/PPR details including document references\n- Includes creation and update timestamps\n\n**Note:** This endpoint is for operators within the context of the operator data. For Trip Support Providers, use the `/partners` endpoints instead.\n\n**Example Use Case:** An operations manager needs to review the complete details of a specific slot or PPR, including any uploaded documents, to verify compliance or prepare for audits.\n",
        "tags": [
          "Flight Slots & PPRs"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight slot or PPR to retrieve",
            "example": "10603875"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flight slot/PPR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlightSlotPprDto"
                },
                "example": {
                  "id": "10603875",
                  "permitNumber": null,
                  "status": "DO",
                  "notes": "Notes Example",
                  "tripProviderId": "12",
                  "providerPublicId": "093d574d69fd4aeea128db565d662006",
                  "type": "SLOT",
                  "direction": "ARRIVAL",
                  "airport": {
                    "id": "14359",
                    "name": "Lester B Pearson International",
                    "icao": "CYYZ",
                    "iata": "YYZ",
                    "faa": null,
                    "localIdentifier": "CYYZ"
                  },
                  "approvalDateTime": null,
                  "document": null,
                  "createdAtDateTime": "2026-06-29T10:39:22.695Z",
                  "updatedAtDateTime": "2026-06-29T10:39:22.695Z"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid slot/PPR ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - slot/PPR does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flights/{flightId}/slots-pprs": {
      "get": {
        "operationId": "partnerSlotsAndPprsGet",
        "summary": "Get flight slots and PPRs - partner scope",
        "description": "Retrieves all flight slots and PPRs for a specific flight within the partner's scope.\n\n**Features:**\n- Returns only slots and PPRs accessible to the authenticated partner\n- Includes slot/PPR details, status, and document information\n\n**Note:** This endpoint is for Trip Support Providers. Only slots and PPRs associated with the operator linked to the authentication token will be returned.\n\n**Example Use Case:** A trip support provider needs to retrieve all slots and PPRs for a flight to verify compliance and check statuses before departure.\n",
        "tags": [
          "Flight Slots & PPRs (Provider)"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight",
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flight slots and PPRs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FlightSlotPprSimplifiedDto"
                  }
                },
                "example": [
                  {
                    "id": "10603875",
                    "permitNumber": null,
                    "status": "DO",
                    "notes": "Notes Example",
                    "tripProviderId": "12",
                    "providerPublicId": "093d574d69fd4aeea128db565d662006",
                    "type": "SLOT",
                    "direction": "ARRIVAL",
                    "airport": {
                      "id": "14359",
                      "name": "Lester B Pearson International",
                      "icao": "CYYZ",
                      "iata": "YYZ",
                      "faa": null,
                      "localIdentifier": "CYYZ"
                    },
                    "approvalDateTime": null,
                    "documentUuid": null,
                    "createdAtDateTime": "2026-06-29T10:39:22.695Z",
                    "updatedAtDateTime": "2026-06-29T10:39:22.695Z"
                  },
                  {
                    "id": "10603874",
                    "permitNumber": null,
                    "status": "DO",
                    "notes": "Notes Example",
                    "tripProviderId": "12",
                    "providerPublicId": "093d574d69fd4aeea128db565d662006",
                    "type": "UNDEFINED",
                    "direction": "DEPARTURE",
                    "airport": {
                      "id": "14784",
                      "name": "Berlin Brandenburg",
                      "icao": "EDDB",
                      "iata": "BER",
                      "faa": null,
                      "localIdentifier": null
                    },
                    "approvalDateTime": null,
                    "documentUuid": "b0b6f944-b9a8-432b-a456-a58011685f75",
                    "createdAtDateTime": "2026-06-29T10:39:22.647Z",
                    "updatedAtDateTime": "2026-06-29T10:39:22.647Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad request - invalid flight ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - flight does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flight-slots-pprs/{id}": {
      "get": {
        "operationId": "partnerSlotsAndPprsByIdGet",
        "summary": "Get flight slot/PPR by ID - partner scope",
        "description": "Retrieves detailed information about a specific flight slot or PPR within the partner's scope, including associated documents.\n\n**Features:**\n- Returns complete slot/PPR details including document references\n- Includes creation and update timestamps\n\n**Note:** This endpoint is for Trip Support Providers. Only slots and PPRs associated with the operator linked to the authentication token can be retrieved.\n\n**Example Use Case:** A trip support provider needs to review the complete details of a specific slot or PPR, including any uploaded documents, to verify compliance or prepare for audits.\n",
        "tags": [
          "Flight Slots & PPRs (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight slot or PPR to retrieve",
            "example": "10603875"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved flight slot/PPR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlightSlotPprDto"
                },
                "example": {
                  "id": "10603875",
                  "permitNumber": null,
                  "status": "DO",
                  "notes": "Notes Example",
                  "tripProviderId": "12",
                  "providerPublicId": "093d574d69fd4aeea128db565d662006",
                  "type": "SLOT",
                  "direction": "ARRIVAL",
                  "airport": {
                    "id": "14359",
                    "name": "Lester B Pearson International",
                    "icao": "CYYZ",
                    "iata": "YYZ",
                    "faa": null,
                    "localIdentifier": "CYYZ"
                  },
                  "approvalDateTime": null,
                  "document": null,
                  "createdAtDateTime": "2026-06-29T10:39:22.695Z",
                  "updatedAtDateTime": "2026-06-29T10:39:22.695Z"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid slot/PPR ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - slot/PPR does not exist"
          }
        }
      },
      "patch": {
        "operationId": "partnerSlotsAndPprsByIdPatch",
        "summary": "Update flight slot/PPR by ID - partner scope",
        "description": "Updates an existing flight slot or PPR with new information.\n\n**Features:**\n- Updates slot/PPR details including permit number, status, approval date, and notes\n- Supports partial updates of slot/PPR information\n\n**Note:** This endpoint is for Trip Support Providers. Only slots and PPRs associated with the operator linked to the authentication token can be updated.\n\n**Example Use Case:** A trip support provider needs to update a slot or PPR after receiving a new permit number or when status changes.\n",
        "tags": [
          "Flight Slots & PPRs (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight slot or PPR to update",
            "example": "10603875"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FlightSlotPprPathDto"
              },
              "example": {
                "permitNumber": "12345",
                "status": "REQ",
                "notes": "Notes Example",
                "approvalDateTime": "2026-06-29T10:39:22.695Z"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated flight slot/PPR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlightSlotPprSimplifiedDto"
                },
                "example": {
                  "id": "10603875",
                  "permitNumber": "12345",
                  "status": "REQ",
                  "notes": "Notes Example",
                  "tripProviderId": "12",
                  "providerPublicId": "093d574d69fd4aeea128db565d662006",
                  "type": "SLOT",
                  "direction": "ARRIVAL",
                  "airport": {
                    "id": "14359",
                    "name": "Lester B Pearson International",
                    "icao": "CYYZ",
                    "iata": "YYZ",
                    "faa": null,
                    "localIdentifier": "CYYZ"
                  },
                  "approvalDateTime": "2026-06-29T10:39:22.695Z",
                  "document": null,
                  "createdAtDateTime": "2026-06-29T10:39:22.695Z",
                  "updatedAtDateTime": "2026-06-29T10:39:22.695Z"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error or slot/PPR not found"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - slot/PPR does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flight-slots-pprs/{id}/documents": {
      "post": {
        "operationId": "partnerSlotPprDocumentsPost",
        "summary": "Upload document associated with a flight slot/PPR - partner scope",
        "description": "Uploads a document file to be associated with a flight slot or PPR.\n\n**Supported File Types:**\n- Images: All image formats (JPEG, PNG, GIF, BMP, etc.) except SVG\n- Documents: PDF, Microsoft Office (Word, Excel, PowerPoint: .doc, .docx, .xls, .xlsx, .ppt, .pptx), OpenDocument formats (.odt, .ods), Microsoft Word legacy (.doc)\n- Other: Email messages (.eml), Apple Passbook (.pkpass)\n\n**File Size Limits:**\n- Maximum file size: 5 MB (5,242,880 bytes)\n\n**Note:** Each slot/PPR can have only one document associated with it.\n",
        "tags": [
          "Flight Slots & PPRs (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight slot or PPR",
            "example": "10603875"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The document file to upload. Maximum file size is 5 MB.\n"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successfully uploaded document"
          },
          "400": {
            "description": "Bad request - invalid file or slot/PPR ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - slot/PPR does not exist"
          },
          "422": {
            "description": "Unprocessable entity - slot/PPR already has a document associated"
          }
        }
      }
    },
    "/api/v2/partners/flight-slots-pprs/{id}/documents/{documentUuid}": {
      "get": {
        "operationId": "partnerSlotPprDocumentsGet",
        "summary": "Get document associated with a flight slot/PPR - partner scope",
        "description": "Downloads a document associated with a flight slot or PPR.\n",
        "tags": [
          "Flight Slots & PPRs (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight slot or PPR",
            "example": "10603875"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the document to download",
            "example": "b0b6f944-b9a8-432b-b456-a58011685f75"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved document",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid slot/PPR ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - slot/PPR or document does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerSlotPprDocumentsDelete",
        "summary": "Delete document associated with a flight slot/PPR - partner scope",
        "description": "Deletes a document associated with a flight slot or PPR.\n",
        "tags": [
          "Flight Slots & PPRs (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight slot or PPR",
            "example": "10603875"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the document to delete",
            "example": "b0b6f944-b9a8-432b-b456-a58011685f75"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted document"
          },
          "400": {
            "description": "Bad request - invalid slot/PPR ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - slot/PPR or document does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flights/{flightId}/fbo-services": {
      "get": {
        "operationId": "partnerFboGet",
        "summary": "Get FBO service for a flight - partner scope",
        "description": "Retrieves the FBO (Fixed Base Operator) service information for a specific flight within the partner's scope. Returns departure and arrival FBO service entries along with surrounding flight context (previous and next flights) and aircraft details.\n\n**Features:**\n- Returns departure and arrival FBO service entries for the flight\n- Includes previous and next flight context for operational awareness\n- Includes aircraft details such as type, registration, and MTOW\n\n<br/>\n\n**Note:** This endpoint is for Trip Support Providers. Only FBO services associated with the operator linked to the authentication token will be returned.\n\n**Example Use Case:** A trip support provider retrieves the FBO service details for a flight to review handling requests and confirm service status before departure.\n",
        "tags": [
          "FBO (Provider)"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight",
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved FBO service",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "previousFlight": {
                    "flightType": "PAX",
                    "fplType": "N",
                    "flightNumber": "FL30001",
                    "bookingIdentifier": "OWECT",
                    "airportFrom": {
                      "icao": "KTEB",
                      "iata": "TEB",
                      "faa": "TEB",
                      "localIdentifier": "TEB",
                      "aid": "APT-CQ9K-5CIO",
                      "name": "Teterboro"
                    },
                    "airportTo": {
                      "icao": "MMUN",
                      "iata": "CUN",
                      "faa": null,
                      "localIdentifier": null,
                      "aid": "APT-82TH-5GW7",
                      "name": "Cancún International"
                    },
                    "etd": "2026-06-01T05:00:00.000Z",
                    "eta": "2026-06-01T09:26:00.000Z",
                    "crewNumber": 2,
                    "paxNumber": 5
                  },
                  "nextFlight": {
                    "flightType": "POS",
                    "fplType": "N",
                    "flightNumber": "FL30003",
                    "bookingIdentifier": "DOYEW",
                    "airportFrom": {
                      "icao": "EGGW",
                      "iata": "LTN",
                      "faa": null,
                      "localIdentifier": null,
                      "aid": "APT-6DMK-X0VI",
                      "name": "London Luton"
                    },
                    "airportTo": {
                      "icao": "EGLC",
                      "iata": "LCY",
                      "faa": null,
                      "localIdentifier": null,
                      "aid": "APT-5FUF-SBAP",
                      "name": "London City"
                    },
                    "etd": "2026-06-03T08:18:18.000Z",
                    "eta": "2026-06-03T08:37:18.000Z",
                    "crewNumber": 2,
                    "paxNumber": 0
                  },
                  "departureFboService": {
                    "status": "DO",
                    "id": "10610232",
                    "name": "FL3XX Aviation",
                    "aviowikiId": "PRV-B5MZ-7G2Z",
                    "by": "FL3XX Trip Support",
                    "type": "Handling Request",
                    "request": [
                      "Stairs",
                      "Luggage"
                    ],
                    "remarks": "example",
                    "documentUuids": [
                      "6e6eeedf-f2a1-4413-b387-b0ca6c5ab138"
                    ]
                  },
                  "arrivalFboService": {
                    "status": "DO",
                    "id": "10600293",
                    "name": "FL3XX Handling Services",
                    "aviowikiId": "PRV-H8HZ-M4ZH",
                    "by": "FL3XX Trip Support",
                    "type": "Handling Request",
                    "request": [],
                    "remarks": null,
                    "documentUuids": []
                  },
                  "aircraft": {
                    "aircraftType": "C510",
                    "registrationNumber": "OE-FL3XX",
                    "aircraftAOC": "FL3XX",
                    "mtow": 3912,
                    "mtowUnit": "KG",
                    "fireCategory": "1 A",
                    "seatCapacity": 4
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid flight ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - flight or FBO service does not exist"
          }
        }
      },
      "patch": {
        "operationId": "partnerFboPatch",
        "summary": "Update FBO services for a flight - partner scope",
        "description": "Updates the arrival and/or departure FBO service entries for a specific flight.\n\n**Features:**\n- Updates departure and arrival FBO service details including status, aviowikiId, type, request items, and remarks\n- Supports partial updates of FBO service information\n\n**Note:** This endpoint is for Trip Support Providers. Only FBO services associated with the operator linked to the authentication token can be updated.\n\n**Partial updates supported:** The request body can contain none, one, or both service objects — only the fields provided will be updated. Omitted fields remain unchanged.\n\n**Example Use Case:** A trip support provider updates the arrival FBO handling requests after confirming services with the ground handler.\n",
        "tags": [
          "FBO (Provider)"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the flight",
            "example": "12345"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FboFlightPatchDto"
              },
              "example": {
                "arrivalFboService": {
                  "status": "DO",
                  "aviowikiId": "PRV-3D2P-PXOT",
                  "type": "Handling Request",
                  "request": [
                    "Handling",
                    "Stairs",
                    "Red Carpet"
                  ],
                  "remarks": "Remarks text"
                },
                "departureFboService": {
                  "status": "DO",
                  "aviowikiId": "PRV-F51N-Z7WB",
                  "type": "Handling Request",
                  "request": [],
                  "remarks": null
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated FBO services",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FboFlightResponseDto"
                },
                "example": {
                  "previousFlight": {
                    "flightType": "PAX",
                    "fplType": "N",
                    "flightNumber": "FL30001",
                    "bookingIdentifier": "OWECT",
                    "airportFrom": {
                      "icao": "KTEB",
                      "iata": "TEB",
                      "faa": "TEB",
                      "localIdentifier": "TEB",
                      "aid": "APT-CQ9K-5CIO",
                      "name": "Teterboro"
                    },
                    "airportTo": {
                      "icao": "MMUN",
                      "iata": "CUN",
                      "faa": null,
                      "localIdentifier": null,
                      "aid": "APT-82TH-5GW7",
                      "name": "Cancún International"
                    },
                    "etd": "2026-06-01T05:00:00.000Z",
                    "eta": "2026-06-01T09:26:00.000Z",
                    "crewNumber": 2,
                    "paxNumber": 5
                  },
                  "nextFlight": {
                    "flightType": "POS",
                    "fplType": "N",
                    "flightNumber": "FL30003",
                    "bookingIdentifier": "DOYEW",
                    "airportFrom": {
                      "icao": "EGGW",
                      "iata": "LTN",
                      "faa": null,
                      "localIdentifier": null,
                      "aid": "APT-6DMK-X0VI",
                      "name": "London Luton"
                    },
                    "airportTo": {
                      "icao": "EGLC",
                      "iata": "LCY",
                      "faa": null,
                      "localIdentifier": null,
                      "aid": "APT-5FUF-SBAP",
                      "name": "London City"
                    },
                    "etd": "2026-06-03T08:18:18.000Z",
                    "eta": "2026-06-03T08:37:18.000Z",
                    "crewNumber": 2,
                    "paxNumber": 0
                  },
                  "departureFboService": {
                    "status": "DO",
                    "id": "10603878",
                    "name": "FL3XX Services",
                    "aviowikiId": "PRV-G51N-Z5OB",
                    "by": "FL3XX",
                    "type": "Handling Request",
                    "request": [],
                    "remarks": null,
                    "documentUuids": []
                  },
                  "arrivalFboService": {
                    "status": "DO",
                    "id": "10603879",
                    "name": "FL3XX AVIATION",
                    "aviowikiId": "PRV-2D2P-NXOT",
                    "by": "FL3XX",
                    "type": "Handling Request",
                    "request": [
                      "Handling",
                      "Stairs",
                      "Red Carpet"
                    ],
                    "remarks": "Remarks text",
                    "documentUuids": []
                  },
                  "aircraft": {
                    "aircraftType": "FA8X",
                    "registrationNumber": "OE-FL3XX",
                    "aircraftAOC": "FL3XX",
                    "mtow": 77500,
                    "mtowUnit": "LBS",
                    "fireCategory": null,
                    "seatCapacity": 14
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error or flight not found"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - flight does not exist"
          }
        }
      }
    },
    "/api/v2/partners/fbo-services/{serviceId}/documents": {
      "post": {
        "operationId": "partnerFboDocumentPost",
        "summary": "Upload document associated with an FBO service - partner scope",
        "description": "Uploads a document file to be associated with an FBO service. Maximum file size is 5 MB.\n",
        "tags": [
          "FBO (Provider)"
        ],
        "parameters": [
          {
            "name": "serviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The unique identifier of the FBO service",
            "example": "12345"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successfully uploaded document"
          },
          "400": {
            "description": "Bad request - invalid file or FBO ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - FBO service does not exist"
          }
        }
      }
    },
    "/api/v2/partners/fbo-services/{serviceId}/documents/{uuid}": {
      "get": {
        "operationId": "partnerFboDocumentGet",
        "summary": "Get document associated with an FBO service - partner scope",
        "tags": [
          "FBO (Provider)"
        ],
        "parameters": [
          {
            "name": "serviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345"
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "8afd6579-0ce1-43d5-923a-1a094d903426"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved document",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid FBO ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - FBO service or document does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerFboDocumentDelete",
        "summary": "Delete document associated with an FBO service - partner scope",
        "tags": [
          "FBO (Provider)"
        ],
        "parameters": [
          {
            "name": "serviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345"
          },
          {
            "name": "uuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "8afd6579-0ce1-43d5-923a-1a094d903426"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid FBO ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - FBO service or document does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flights/{flightId}/transport-services": {
      "get": {
        "operationId": "partnerTransportsGet",
        "summary": "Get transport services for a flight - partner scope",
        "description": "Retrieves all transport service entries for a specific flight within the partner's scope. Returns a list of transport service objects including status, transport type, assignment, airport, notes, and associated document UUIDs.\n\n**Assignment (`for`):** Each transport service is assigned either to a group or to one person, never both:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\n- `\"for\": {\"person\": {\"id\": \"...\", \"name\": \"...\"}}` — the service is assigned to a single individual, who can be a passenger or a crew member. `person.id` is the userId.\n\n**Note:** This endpoint is for Trip Support Providers. Only transport services associated with the operator linked to the authentication token can be accessed.\n\n**Example Use Case:** A trip support provider checks which transport arrangements already exist for a flight before creating a new one.\n\n**Note:** This endpoint is for Trip Support Providers. Transport services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n",
        "tags": [
          "Transport (Provider)"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved transport services",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TransportSimplifiedDto"
                  }
                },
                "example": [
                  {
                    "id": "10600980",
                    "status": "DO",
                    "type": "LIMOUSINE",
                    "for": {
                      "group": "PAX"
                    },
                    "notes": "Drop-off at the FL3XX Inn hotel",
                    "airport": {
                      "icao": "LFPB",
                      "iata": "LBG",
                      "faa": null,
                      "localIdentifier": null,
                      "aviowikiId": "APT-QB1X-QTGK",
                      "name": "Paris Le Bourget"
                    },
                    "documentUuids": [
                      "8afd6579-0ce1-43d5-923a-1a094d903426"
                    ],
                    "createdAtDateTime": "2026-06-02T09:43:11.946Z",
                    "updatedAtDateTime": "2026-06-02T10:07:48.921Z"
                  },
                  {
                    "id": "10600995",
                    "status": "OK",
                    "type": "TAXI",
                    "for": {
                      "person": {
                        "id": "143686",
                        "name": "John ABC"
                      }
                    },
                    "notes": "Pick up from the hotel at 0300z",
                    "airport": {
                      "icao": "OMDW",
                      "iata": "DWC",
                      "faa": null,
                      "localIdentifier": null,
                      "aviowikiId": "APT-OIBO-WGX2",
                      "name": "Dubai Al Maktoum International"
                    },
                    "documentUuids": [
                      "8afd6579-0ce1-43d5-923a-1a094d903426"
                    ],
                    "createdAtDateTime": "2026-06-02T10:22:50.813Z",
                    "updatedAtDateTime": "2026-06-02T10:22:50.813Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad request - invalid flight ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - flight does not exist"
          }
        }
      }
    },
    "/api/v2/partners/transport-services/{id}": {
      "get": {
        "operationId": "partnerTransportByIdGet",
        "summary": "Get transport service by ID - partner scope",
        "description": "Retrieves the full details of a single transport service by its ID, including status, transport type, assignment, airport, notes, and the metadata of all associated documents.\n\n**Assignment (`for`):** Each transport service is assigned either to a group or to one person, never both:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\n- `\"for\": {\"person\": {\"id\": \"...\", \"name\": \"...\"}}` — the service is assigned to a single individual, who can be a passenger or a crew member. `person.id` is the userId.\n\n**Note:** This endpoint is for Trip Support Providers. Only transport services associated with the operator linked to the authentication token can be accessed.\n\n**Example Use Case:** A trip support provider opens a transport service entry to review its current status and attached confirmation documents.\n\n**Note:** This endpoint is for Trip Support Providers. Transport services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n",
        "tags": [
          "Transport (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604230"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved transport service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransportDto"
                },
                "example": {
                  "id": "10600980",
                  "status": "DO",
                  "type": "LIMOUSINE",
                  "for": {
                    "group": "CREW"
                  },
                  "notes": "Drop-off at the FL3XX Inn hotel",
                  "airport": {
                    "icao": "LFPB",
                    "iata": "LBG",
                    "faa": null,
                    "localIdentifier": null,
                    "aviowikiId": "APT-QB1X-QTGK",
                    "name": "Paris Le Bourget"
                  },
                  "documents": [
                    {
                      "id": 103791,
                      "uuid": "8afd6579-0ce1-43d5-923a-1a094d903426",
                      "originalName": "sample.png",
                      "fileSize": 24884,
                      "createdAtDateTime": "2026-07-06T17:31:27.062Z",
                      "customName": null,
                      "imageSizeX": 613,
                      "imageSizeY": 326,
                      "isThumbnail": false
                    }
                  ],
                  "createdAtDateTime": "2026-06-02T09:43:11.946Z",
                  "updatedAtDateTime": "2026-06-02T10:07:48.921Z"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid transport ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - transport service does not exist"
          }
        }
      },
      "patch": {
        "operationId": "partnerTransportPatch",
        "summary": "Update transport service by ID - partner scope",
        "description": "Updates an existing transport service by its ID.\n\n**Features:**\n- Updates transport service details including status, transport type, assignment, and notes\n- Supports partial updates of transport service information\n\n**Assignment (`for`):** Each transport service is assigned either to a group or to one person, never both:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\n- `\"for\": {\"person\": {\"id\": \"...\", \"name\": \"...\"}}` — the service is assigned to a single individual, who can be a passenger or a crew member. `person.id` is the userId.\n\n**Partial updates supported:** The request body can contain any subset of the fields — only the fields provided will be updated. Omitted fields remain unchanged.\n\n**Note:** This endpoint is for Trip Support Providers. Only transport services associated with the operator linked to the authentication token can be updated.\n\n**Example Use Case:** A trip support provider sets the status to OK after the ground transportation has been confirmed with the local supplier.\n\n**Note:** This endpoint is for Trip Support Providers. Transport services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n",
        "tags": [
          "Transport (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604230"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransportPathDto"
              },
              "example": {
                "status": "OK",
                "type": "LIMOUSINE",
                "for": {
                  "person": {
                    "id": "108199",
                    "name": "John Jake"
                  }
                },
                "notes": "Limousine confirmed: pickup at GA terminal, driver contact +34 612 345 678."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated transport service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransportSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error or transport service not found"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - transport service does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerTransportDelete",
        "summary": "Delete transport service by ID - partner scope",
        "description": "Deletes a transport service by its ID.\n\n**Note:** This endpoint is for Trip Support Providers. Only transport services associated with the operator linked to the authentication token can be deleted. Deletion is only allowed if the transport service was created by the partner; transport services created by the operator cannot be deleted.\n\n**Example Use Case:** A trip support provider removes a transport service entry that was created by mistake or is no longer needed.\n\n**Note:** This endpoint is for Trip Support Providers. Transport services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n",
        "tags": [
          "Transport (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604230"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted transport service"
          },
          "400": {
            "description": "Bad request - transport service not found or not created by partner"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions or transport service not created by partner"
          },
          "404": {
            "description": "Not found - transport service does not exist"
          }
        }
      }
    },
    "/api/v2/partners/transport-services": {
      "post": {
        "operationId": "partnerTransportPost",
        "summary": "Create transport service - partner scope",
        "description": "Creates a new transport service for a flight.\n\n**Features:**\n- Creates a transport service with status, transport type, assignment, airport, and notes\n- The flight is specified via the required `flightId` field in the request body — unlike the other transport endpoints, the `flightId` is not part of the URL path\n- The airport the service applies to is set via the `airport` object in the request body\n\n**Assignment (`for`):** Each transport service is assigned either to a group or to one person, never both:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\n- `\"for\": {\"person\": {\"id\": \"...\", \"name\": \"...\"}}` — the service is assigned to a single individual, who can be a passenger or a crew member. `person.id` is the userId.\n\n**Note:** This endpoint is for Trip Support Providers. Transport services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider creates a limousine transfer entry for the passengers of an upcoming flight.\n",
        "tags": [
          "Transport (Provider)"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransportCreateDto"
              },
              "example": {
                "status": "DO",
                "type": "LIMOUSINE",
                "flightId": "87094",
                "airport": {
                  "icao": "LEMG",
                  "iata": "AGP",
                  "aviowikiId": "APT-HYJ5-33DN",
                  "name": "Malaga Costa del Sol"
                },
                "for": {
                  "person": {
                    "id": "108199",
                    "name": "John Jake"
                  }
                },
                "notes": "Limousine confirmed for passenger: pickup at Malaga GA terminal, driver contact +34 612 345 678."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully created transport service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransportSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions or partner not assigned to flight"
          }
        }
      }
    },
    "/api/v2/partners/transport-services/{id}/documents": {
      "post": {
        "operationId": "partnerTransportDocumentPost",
        "summary": "Upload document associated with a transport service - partner scope",
        "description": "Uploads a document file to be associated with a transport service. Maximum file size is 5 MB.\n\n**Note:** This endpoint is for Trip Support Providers. Only transport services associated with the operator linked to the authentication token can be modified.\n\n**Example Use Case:** A trip support provider attaches the booking confirmation received from the transport supplier to the transport service entry.\n\n**Note:** This endpoint is for Trip Support Providers. Transport services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n",
        "tags": [
          "Transport (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604230"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successfully uploaded document"
          },
          "400": {
            "description": "Bad request - invalid file or transport ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - transport service does not exist"
          }
        }
      }
    },
    "/api/v2/partners/transport-services/{id}/documents/{documentUuid}": {
      "get": {
        "operationId": "partnerTransportDocumentGet",
        "summary": "Get document associated with a transport service - partner scope",
        "description": "Downloads a document associated with a transport service. The response contains the binary file content.\n\n**Note:** This endpoint is for Trip Support Providers. Only documents of transport services associated with the operator linked to the authentication token can be accessed.\n\n**Example Use Case:** A trip support provider retrieves a previously uploaded booking confirmation to verify the details.\n\n**Note:** This endpoint is for Trip Support Providers. Transport services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n",
        "tags": [
          "Transport (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604230"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "8afd6579-0ce1-43d5-923a-1a094d903426"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved document",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid transport ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - transport service or document does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerTransportDocumentDelete",
        "summary": "Delete document associated with a transport service - partner scope",
        "description": "Deletes a document associated with a transport service.\n\n**Note:** This endpoint is for Trip Support Providers. Only documents of transport services associated with the operator linked to the authentication token can be deleted.\n\n**Example Use Case:** A trip support provider removes an outdated booking confirmation after uploading a revised version.\n\n**Note:** This endpoint is for Trip Support Providers. Transport services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n",
        "tags": [
          "Transport (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604230"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "8afd6579-0ce1-43d5-923a-1a094d903426"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid transport ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - transport service or document does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flights/{flightId}/hotel-services": {
      "get": {
        "operationId": "partnerHotelsGet",
        "summary": "Get hotel services for a flight - partner scope",
        "description": "Retrieves all hotel service entries for a specific flight within the partner's scope. Returns a list of hotel service objects including status, assignment, airport, notes, and associated document UUIDs.\n\n**Assignment (`for`):** Each hotel service is assigned either to a group or to one person, never both:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\n- `\"for\": {\"person\": {\"id\": \"...\", \"name\": \"...\"}}` — the service is assigned to a single individual, who can be a passenger or a crew member. `person.id` is the userId.\n\n**Note:** This endpoint is for Trip Support Providers. Only hotel services associated with the operator linked to the authentication token can be accessed.\n\n**Note:** This endpoint is for Trip Support Providers. Hotel services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider checks which hotel arrangements already exist for a flight before creating a new one.\n",
        "tags": [
          "Hotel (Provider)"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved hotel services",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HotelSimplifiedDto"
                  }
                },
                "example": [
                  {
                    "id": "10604233",
                    "status": null,
                    "for": {
                      "group": "CREW"
                    },
                    "notes": "Notes for the Crew",
                    "airport": {
                      "icao": "LGAV",
                      "iata": "ATH",
                      "faa": null,
                      "localIdentifier": null,
                      "aviowikiId": "APT-96TV-K5A6",
                      "name": "Athinai Eleftherios Venizelos"
                    },
                    "documentUuids": [
                      "80230597-57ba-40db-9195-ba91b71cde2d"
                    ],
                    "createdAtDateTime": "2026-07-06T20:24:00.797Z",
                    "updatedAtDateTime": "2026-07-06T20:24:00.797Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad request - invalid flight ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - flight does not exist"
          }
        }
      }
    },
    "/api/v2/partners/hotel-services/{id}": {
      "get": {
        "operationId": "partnerHotelByIdGet",
        "summary": "Get hotel service by ID - partner scope",
        "description": "Retrieves the full details of a single hotel service by its ID, including status, assignment, airport, notes, and the metadata of all associated documents.\n\n**Assignment (`for`):** Each hotel service is assigned either to a group or to one person, never both:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\n- `\"for\": {\"person\": {\"id\": \"...\", \"name\": \"...\"}}` — the service is assigned to a single individual, who can be a passenger or a crew member. `person.id` is the userId.\n\n**Note:** This endpoint is for Trip Support Providers. Only hotel services associated with the operator linked to the authentication token can be accessed.\n\n**Note:** This endpoint is for Trip Support Providers. Hotel services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider opens a hotel service entry to review its current status and attached confirmation documents.\n",
        "tags": [
          "Hotel (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604233"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved hotel service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HotelDto"
                },
                "example": {
                  "id": "10604233",
                  "status": "DO",
                  "for": {
                    "group": "CREW"
                  },
                  "notes": "Notes for the Crew",
                  "airport": {
                    "icao": "LGAV",
                    "iata": "ATH",
                    "faa": null,
                    "localIdentifier": null,
                    "aviowikiId": "APT-96TV-K5A6",
                    "name": "Athinai Eleftherios Venizelos"
                  },
                  "documents": [
                    {
                      "id": 103795,
                      "uuid": "80230597-57ba-40db-9195-ba91b71cde2d",
                      "originalName": "sample.png",
                      "fileSize": 24884,
                      "createdAtDateTime": "2026-07-06T20:25:35.388Z",
                      "customName": null,
                      "imageSizeX": 613,
                      "imageSizeY": 326,
                      "isThumbnail": false
                    }
                  ],
                  "createdAtDateTime": "2026-07-06T20:24:00.797Z",
                  "updatedAtDateTime": "2026-07-06T20:24:00.797Z"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid hotel ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - hotel service does not exist"
          }
        }
      },
      "patch": {
        "operationId": "partnerHotelPatch",
        "summary": "Update hotel service by ID - partner scope",
        "description": "Updates an existing hotel service by its ID.\n\n**Features:**\n- Updates hotel service details including status, assignment, and notes\n- Supports partial updates of hotel service information\n\n**Assignment (`for`):** Each hotel service is assigned either to a group or to one person, never both:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\n- `\"for\": {\"person\": {\"id\": \"...\", \"name\": \"...\"}}` — the service is assigned to a single individual, who can be a passenger or a crew member. `person.id` is the userId.\n\n**Partial updates supported:** The request body can contain any subset of the fields — only the fields provided will be updated. Omitted fields remain unchanged.\n\n**Note:** This endpoint is for Trip Support Providers. Only hotel services associated with the operator linked to the authentication token can be updated.\n\n**Note:** This endpoint is for Trip Support Providers. Hotel services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider sets the status to OK after the hotel booking has been confirmed with the property.\n",
        "tags": [
          "Hotel (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604233"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HotelPathDto"
              },
              "example": {
                "status": "DO",
                "for": {
                  "group": "CREW"
                },
                "notes": "Notes for the Crew"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated hotel service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HotelSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error or hotel service not found"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - hotel service does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerHotelDelete",
        "summary": "Delete hotel service by ID - partner scope",
        "description": "Deletes a hotel service by its ID.\n\n**Note:** This endpoint is for Trip Support Providers. Only hotel services associated with the operator linked to the authentication token can be deleted. Deletion is only allowed if the hotel service was created by the partner; hotel services created by the operator cannot be deleted.\n\n**Note:** This endpoint is for Trip Support Providers. Hotel services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider removes a hotel service entry that was created by mistake or is no longer needed.\n",
        "tags": [
          "Hotel (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604233"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted hotel service"
          },
          "400": {
            "description": "Bad request - hotel service not found or not created by partner"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions or hotel service not created by partner"
          },
          "404": {
            "description": "Not found - hotel service does not exist"
          }
        }
      }
    },
    "/api/v2/partners/hotel-services": {
      "post": {
        "operationId": "partnerHotelPost",
        "summary": "Create hotel service - partner scope",
        "description": "Creates a new hotel service for a flight.\n\n**Features:**\n- Creates a hotel service with status, assignment, airport, and notes\n- The flight is specified via the required `flightId` field in the request body — unlike the other hotel endpoints, the `flightId` is not part of the URL path\n- The airport the service applies to is set via the `airport` object in the request body\n\n**Assignment (`for`):** Each hotel service is assigned either to a group or to one person, never both:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\n- `\"for\": {\"person\": {\"id\": \"...\", \"name\": \"...\"}}` — the service is assigned to a single individual, who can be a passenger or a crew member. `person.id` is the userId.\n\n**Note:** This endpoint is for Trip Support Providers. Hotel services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider creates a hotel booking entry for the crew of an upcoming flight.\n",
        "tags": [
          "Hotel (Provider)"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HotelCreateDto"
              },
              "example": {
                "status": "DO",
                "flightId": "10604233",
                "airport": {
                  "icao": "LGAV",
                  "iata": "ATH",
                  "aviowikiId": "APT-96TV-K5A6",
                  "name": "Athinai Eleftherios Venizelos"
                },
                "for": {
                  "group": "CREW"
                },
                "notes": "Notes for the Crew"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully created hotel service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HotelSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions or partner not assigned to flight"
          }
        }
      }
    },
    "/api/v2/partners/hotel-services/{id}/documents": {
      "post": {
        "operationId": "partnerHotelDocumentPost",
        "summary": "Upload document associated with a hotel service - partner scope",
        "description": "Uploads a document file to be associated with a hotel service. Maximum file size is 5 MB.\n\n**Note:** This endpoint is for Trip Support Providers. Only hotel services associated with the operator linked to the authentication token can be modified.\n\n**Note:** This endpoint is for Trip Support Providers. Hotel services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider attaches the booking confirmation received from the hotel to the hotel service entry.\n",
        "tags": [
          "Hotel (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604233"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successfully uploaded document"
          },
          "400": {
            "description": "Bad request - invalid file or hotel ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - hotel service does not exist"
          }
        }
      }
    },
    "/api/v2/partners/hotel-services/{id}/documents/{documentUuid}": {
      "get": {
        "operationId": "partnerHotelDocumentGet",
        "summary": "Get document associated with a hotel service - partner scope",
        "description": "Downloads a document associated with a hotel service. The response contains the binary file content.\n\n**Note:** This endpoint is for Trip Support Providers. Only documents of hotel services associated with the operator linked to the authentication token can be accessed.\n\n**Note:** This endpoint is for Trip Support Providers. Hotel services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider retrieves a previously uploaded booking confirmation to verify the details.\n",
        "tags": [
          "Hotel (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604233"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "80230597-57ba-40db-9195-ba91b71cde2d"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved document",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid hotel ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - hotel service or document does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerHotelDocumentDelete",
        "summary": "Delete document associated with a hotel service - partner scope",
        "description": "Deletes a document associated with a hotel service.\n\n**Note:** This endpoint is for Trip Support Providers. Only documents of hotel services associated with the operator linked to the authentication token can be deleted.\n\n**Note:** This endpoint is for Trip Support Providers. Hotel services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider removes an outdated booking confirmation after uploading a revised version.\n",
        "tags": [
          "Hotel (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604233"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "80230597-57ba-40db-9195-ba91b71cde2d"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid hotel ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - hotel service or document does not exist"
          }
        }
      }
    },
    "/api/v2/partners/flights/{flightId}/catering-services": {
      "get": {
        "operationId": "partnerCateringGet",
        "summary": "Get catering services for a flight - partner scope",
        "description": "Retrieves all catering service entries for a specific flight within the partner's scope. Returns a list of catering service objects including status, assignment, airport, order, pax count, remarks, and associated document UUIDs.\n\n**Assignment (`for`):** Catering services are only ever assigned to a group, never to an individual person:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\nUnlike Hotel and Transport services, per-person assignment (`\"for\": {\"person\": {...}}`) is not supported for catering. Create one catering service for `PAX` and, if needed, a separate one for `CREW`.\n\n**Note:** This endpoint is for Trip Support Providers. Only catering services associated with the operator linked to the authentication token can be accessed.\n\n**Note:** This endpoint is for Trip Support Providers. Catering services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider checks which catering orders already exist for a flight before placing a new one.\n",
        "tags": [
          "Catering (Provider)"
        ],
        "parameters": [
          {
            "name": "flightId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved catering services",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CateringSimplifiedDto"
                  }
                },
                "example": [
                  {
                    "id": "10604801",
                    "status": "OK",
                    "for": {
                      "group": "PAX"
                    },
                    "order": "8x continental breakfast, 2x gluten-free",
                    "pax": 8,
                    "remarks": "Deliver 30 minutes before boarding",
                    "airport": {
                      "icao": "LFPB",
                      "iata": "LBG",
                      "faa": null,
                      "localIdentifier": null,
                      "aviowikiId": "APT-QB1X-QTGK",
                      "name": "Paris Le Bourget"
                    },
                    "documentUuids": [
                      "391f8d63-5397-4a3a-b9e6-d8f03cd72185"
                    ],
                    "createdAtDateTime": "2026-07-06T20:24:00.797Z",
                    "updatedAtDateTime": "2026-07-06T20:24:00.797Z"
                  },
                  {
                    "id": "10604802",
                    "status": "REQ",
                    "for": {
                      "group": "CREW"
                    },
                    "order": "3x crew meal, chicken",
                    "pax": 3,
                    "remarks": "Standard crew catering",
                    "airport": {
                      "icao": "LFPB",
                      "iata": "LBG",
                      "faa": null,
                      "localIdentifier": null,
                      "aviowikiId": "APT-QB1X-QTGK",
                      "name": "Paris Le Bourget"
                    },
                    "documentUuids": [],
                    "createdAtDateTime": "2026-07-06T21:10:00.000Z",
                    "updatedAtDateTime": "2026-07-06T21:10:00.000Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad request - invalid flight ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - flight does not exist"
          }
        }
      }
    },
    "/api/v2/partners/catering-services/{id}": {
      "get": {
        "operationId": "partnerCateringByIdGet",
        "summary": "Get catering service by ID - partner scope",
        "description": "Retrieves the full details of a single catering service by its ID, including status, assignment, airport, order, pax count, remarks, and the metadata of all associated documents.\n\n**Assignment (`for`):** Catering services are only ever assigned to a group, never to an individual person:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\nUnlike Hotel and Transport services, per-person assignment (`\"for\": {\"person\": {...}}`) is not supported for catering. Create one catering service for `PAX` and, if needed, a separate one for `CREW`.\n\n**Note:** This endpoint is for Trip Support Providers. Only catering services associated with the operator linked to the authentication token can be accessed.\n\n**Note:** This endpoint is for Trip Support Providers. Catering services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider opens a catering entry to confirm the order details before delivery.\n",
        "tags": [
          "Catering (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604801"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved catering service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CateringDto"
                },
                "example": {
                  "id": "10604801",
                  "status": "OK",
                  "for": {
                    "group": "PAX"
                  },
                  "order": "8x continental breakfast, 2x gluten-free",
                  "pax": 8,
                  "remarks": "Deliver 30 minutes before boarding",
                  "airport": {
                    "icao": "LFPB",
                    "iata": "LBG",
                    "faa": null,
                    "localIdentifier": null,
                    "aviowikiId": "APT-QB1X-QTGK",
                    "name": "Paris Le Bourget"
                  },
                  "documents": [
                    {
                      "id": 103795,
                      "uuid": "391f8d63-5397-4a3a-b9e6-d8f03cd72185",
                      "originalName": "catering_invoice.pdf",
                      "fileSize": 24884,
                      "createdAtDateTime": "2026-07-06T20:25:35.388Z",
                      "customName": null,
                      "imageSizeX": null,
                      "imageSizeY": null,
                      "isThumbnail": false
                    }
                  ],
                  "createdAtDateTime": "2026-07-06T20:24:00.797Z",
                  "updatedAtDateTime": "2026-07-06T20:24:00.797Z"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid catering ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - catering service does not exist"
          }
        }
      },
      "patch": {
        "operationId": "partnerCateringPatch",
        "summary": "Update catering service by ID - partner scope",
        "description": "Updates an existing catering service by its ID.\n\n**Features:**\n- Updates catering service details including status, assignment, order, and remarks\n- Supports partial updates of catering service information\n- `pax` cannot be changed after creation; it is only settable via the create endpoint\n\n**Assignment (`for`):** Catering services are only ever assigned to a group, never to an individual person:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\nUnlike Hotel and Transport services, per-person assignment (`\"for\": {\"person\": {...}}`) is not supported for catering. Create one catering service for `PAX` and, if needed, a separate one for `CREW`.\n\n**Partial updates supported:** The request body can contain any subset of the fields — only the fields provided will be updated. Omitted fields remain unchanged.\n\n**Note:** This endpoint is for Trip Support Providers. Only catering services associated with the operator linked to the authentication token can be updated.\n\n**Note:** This endpoint is for Trip Support Providers. Catering services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider sets the status to OK once the catering order has been confirmed with the vendor.\n",
        "tags": [
          "Catering (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604801"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CateringPathDto"
              },
              "example": {
                "status": "OK",
                "for": {
                  "group": "PAX"
                },
                "order": "8x continental breakfast, 2x gluten-free",
                "remarks": "Deliver 30 minutes before boarding"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully updated catering service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CateringSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error or catering service not found"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - catering service does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerCateringDelete",
        "summary": "Delete catering service by ID - partner scope",
        "description": "Deletes a catering service by its ID.\n\n**Note:** This endpoint is for Trip Support Providers. Only catering services associated with the operator linked to the authentication token can be deleted. Deletion is only allowed if the catering service was created by the partner; catering services created by the operator cannot be deleted.\n\n**Note:** This endpoint is for Trip Support Providers. Catering services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider removes a catering entry that was created by mistake or is no longer needed.\n",
        "tags": [
          "Catering (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604801"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully deleted catering service"
          },
          "400": {
            "description": "Bad request - catering service not found or not created by partner"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions or catering service not created by partner"
          },
          "404": {
            "description": "Not found - catering service does not exist"
          }
        }
      }
    },
    "/api/v2/partners/catering-services": {
      "post": {
        "operationId": "partnerCateringPost",
        "summary": "Create catering service - partner scope",
        "description": "Creates a new catering service for a flight.\n\n**Features:**\n- Creates a catering service with status, assignment, airport, order, pax count, and remarks\n- The flight is specified via the required `flightId` field in the request body — unlike the other catering endpoints, the `flightId` is not part of the URL path\n- The airport the service applies to is set via the `airport` object in the request body\n\n**Assignment (`for`):** Catering services are only ever assigned to a group, never to an individual person:\n- `\"for\": {\"group\": \"PAX\"}` or `\"for\": {\"group\": \"CREW\"}` — the service applies to the whole passenger or crew group\nUnlike Hotel and Transport services, per-person assignment (`\"for\": {\"person\": {...}}`) is not supported for catering. Create one catering service for `PAX` and, if needed, a separate one for `CREW`.\n\n**Note:** This endpoint is for Trip Support Providers. Catering services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider places a catering order for the passengers of an upcoming flight.\n",
        "tags": [
          "Catering (Provider)"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CateringCreateDto"
              },
              "example": {
                "flightId": "10604801",
                "status": "REQ",
                "airport": {
                  "icao": "LFPB",
                  "iata": "LBG",
                  "aviowikiId": "APT-QB1X-QTGK",
                  "name": "Paris Le Bourget"
                },
                "for": {
                  "group": "PAX"
                },
                "order": "8x continental breakfast, 2x gluten-free",
                "pax": 8,
                "remarks": "Deliver 30 minutes before boarding"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully created catering service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CateringSimplifiedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - validation error"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions or partner not assigned to flight"
          }
        }
      }
    },
    "/api/v2/partners/catering-services/{id}/documents": {
      "post": {
        "operationId": "partnerCateringDocumentPost",
        "summary": "Upload document associated with a catering service - partner scope",
        "description": "Uploads a document file to be associated with a catering service. Maximum file size is 5 MB.\n\n**Note:** This endpoint is for Trip Support Providers. Only catering services associated with the operator linked to the authentication token can be modified.\n\n**Note:** This endpoint is for Trip Support Providers. Catering services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider attaches the vendor invoice to the catering service entry.\n",
        "tags": [
          "Catering (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604801"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successfully uploaded document"
          },
          "400": {
            "description": "Bad request - invalid file or catering ID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - catering service does not exist"
          }
        }
      }
    },
    "/api/v2/partners/catering-services/{id}/documents/{documentUuid}": {
      "get": {
        "operationId": "partnerCateringDocumentGet",
        "summary": "Get document associated with a catering service - partner scope",
        "description": "Downloads a document associated with a catering service. The response contains the binary file content.\n\n**Note:** This endpoint is for Trip Support Providers. Only documents of catering services associated with the operator linked to the authentication token can be accessed.\n\n**Note:** This endpoint is for Trip Support Providers. Catering services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider retrieves a previously uploaded invoice to verify the order.\n",
        "tags": [
          "Catering (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604801"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "391f8d63-5397-4a3a-b9e6-d8f03cd72185"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved document",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid catering ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - catering service or document does not exist"
          }
        }
      },
      "delete": {
        "operationId": "partnerCateringDocumentDelete",
        "summary": "Delete document associated with a catering service - partner scope",
        "description": "Deletes a document associated with a catering service.\n\n**Note:** This endpoint is for Trip Support Providers. Only documents of catering services associated with the operator linked to the authentication token can be deleted.\n\n**Note:** This endpoint is for Trip Support Providers. Catering services can only be created for flights of the operator linked to the authentication token, and only if the partner is assigned to the flight.\n\n**Example Use Case:** A trip support provider removes an outdated invoice after uploading a revised version.\n",
        "tags": [
          "Catering (Provider)"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "10604801"
          },
          {
            "name": "documentUuid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "391f8d63-5397-4a3a-b9e6-d8f03cd72185"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletedDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid catering ID or document UUID"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "404": {
            "description": "Not found - catering service or document does not exist"
          }
        }
      }
    },
    "/api/v2/aircraft": {
      "get": {
        "operationId": "fleetGet",
        "summary": "Get fleet data",
        "description": "Retrieves aircraft fleet data with pagination capabilities.\n\n**Features:**\n- Returns both active and inactive aircraft in the fleet\n- Paginated results with configurable limit (0–50) and offset\n- Default sorting by updated date and time (descending)\n",
        "tags": [
          "Aircraft"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 10
            },
            "description": "Maximum number of records to return.",
            "example": 20
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Number of records to skip before starting to return results.",
            "example": 0
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "updatedAtDateTime desc"
            },
            "description": "Sort criteria in the format: field direction\n\nSupported sort fields:\n- `updatedAtDateTime` (default: desc)\n",
            "example": "updatedAtDateTime desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved fleet data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AircraftPageResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid parameters"
          },
          "401": {
            "description": "Unauthorized - invalid authentication"
          },
          "403": {
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "X-Api-Client-Id": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Client-Id"
      },
      "X-Auth-Token": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Auth-Token"
      }
    },
    "schemas": {
      "AirportV2Dto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for the airport.",
            "example": "123"
          },
          "name": {
            "type": "string",
            "description": "Full name of the airport.",
            "example": "Vienna International Airport"
          },
          "icao": {
            "type": "string",
            "description": "ICAO code of the airport.",
            "example": "LOWW"
          },
          "iata": {
            "type": "string",
            "description": "IATA code of the airport.",
            "example": "VIE"
          },
          "faa": {
            "type": "string",
            "description": "FAA code of the airport (US airports only).",
            "example": "KJFK"
          },
          "localIdentifier": {
            "type": "string",
            "description": "Local identifier code for the airport.",
            "example": "ABC"
          },
          "servedCity": {
            "type": "string",
            "description": "City primarily served by the airport.",
            "example": "Vienna"
          },
          "timezone": {
            "type": "string",
            "description": "Timezone of the airport.",
            "example": "Europe/Vienna"
          },
          "location": {
            "$ref": "#/components/schemas/AirportLocation"
          }
        }
      },
      "AirportLocation": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "Country name where the airport is located",
            "example": "Austria"
          },
          "countryCode": {
            "type": "string",
            "description": "ISO country code alpha-3",
            "example": "AUT"
          }
        }
      },
      "AirportFuelPriceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for the fuel price record",
            "example": "12345"
          },
          "fboName": {
            "type": "string",
            "description": "Name of the Fixed Base Operator (FBO)",
            "example": "Jet FBO"
          },
          "contractorName": {
            "type": "string",
            "description": "Name of the fuel contractor",
            "example": "Shell Aviation"
          },
          "currency": {
            "type": "string",
            "description": "Currency code for the fuel prices",
            "example": "EUR"
          },
          "volumeFrom": {
            "type": "number",
            "format": "double",
            "description": "Minimum volume for this price tier",
            "example": 1000
          },
          "volumeTo": {
            "type": "number",
            "format": "double",
            "description": "Maximum volume for this price tier",
            "example": 5000
          },
          "unit": {
            "$ref": "#/components/schemas/UnitVolume"
          },
          "pricingPrivate": {
            "$ref": "#/components/schemas/FuelPrice"
          },
          "pricingCommercial": {
            "$ref": "#/components/schemas/FuelPrice"
          },
          "preArrivalRemarks": {
            "type": "string",
            "description": "Remarks for pre-arrival fuel services",
            "example": "24-hour notice required"
          },
          "paymentMethod": {
            "type": "string",
            "description": "Accepted payment methods",
            "example": "Credit Card, Invoice"
          },
          "phone": {
            "type": "string",
            "description": "Contact phone number",
            "example": "+1-555-123-4567"
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Contact email address",
            "example": "fuel@jetfbo.com"
          },
          "remarks": {
            "type": "string",
            "description": "Additional remarks or notes",
            "example": "Preferred fuel provider"
          },
          "airport": {
            "$ref": "#/components/schemas/AirportMinimalDto"
          },
          "source": {
            "type": "string",
            "description": "Source of the fuel price data",
            "example": "Partner API"
          },
          "vendorId": {
            "type": "string",
            "description": "Vendor identifier",
            "example": "vendor123"
          },
          "vendorName": {
            "type": "string",
            "description": "Vendor name",
            "example": "Fuel Provider Inc"
          },
          "expirationDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Expiration date and time for the fuel price. Format `yyyy-MM-ddTHH:mm:ss.SSSZ`.",
            "example": "2024-12-31T23:59:59.000Z"
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Creation date and time. Format `yyyy-MM-ddTHH:mm:ss.SSSZ`.",
            "example": "2024-12-31T23:59:59.000Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Last update date and time. Format `yyyy-MM-ddTHH:mm:ss.SSSZ`.",
            "example": "2024-12-31T23:59:59.000Z"
          }
        }
      },
      "AirportFuelPriceCreateDto": {
        "type": "object",
        "required": [
          "fboName",
          "contractorName",
          "currency",
          "unit"
        ],
        "properties": {
          "fboName": {
            "type": "string",
            "description": "Name of the Fixed Base Operator (FBO) at the airport.",
            "example": "Jet FBO"
          },
          "contractorName": {
            "type": "string",
            "description": "Name of the contractor providing the fuel services.",
            "example": "Shell Aviation"
          },
          "currency": {
            "$ref": "#/components/schemas/Currency"
          },
          "volumeFrom": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Minimum volume (inclusive) for which this fuel price applies.",
            "example": 1000
          },
          "volumeTo": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Maximum volume (inclusive) for which this fuel price applies.",
            "example": 5000
          },
          "unit": {
            "$ref": "#/components/schemas/UnitVolume"
          },
          "pricingPrivate": {
            "$ref": "#/components/schemas/FuelPrice"
          },
          "pricingCommercial": {
            "$ref": "#/components/schemas/FuelPrice"
          },
          "preArrivalRemarks": {
            "type": "string",
            "description": "Remarks or instructions for pre-arrival fuel services.",
            "example": "24-hour notice required"
          },
          "paymentMethod": {
            "type": "string",
            "description": "Accepted payment method for the fuel services.",
            "example": "Credit Card, Invoice"
          },
          "phone": {
            "type": "string",
            "description": "Contact phone number for the FBO or fuel provider.",
            "example": "+1-555-123-4567"
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Contact email address for the FBO or fuel provider.",
            "example": "fuel@jetfbo.com"
          },
          "remarks": {
            "type": "string",
            "description": "Additional remarks or notes for the fuel provider.",
            "example": "Preferred fuel provider"
          },
          "expirationDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Expiration date and time of this fuel price offer. Format `yyyy-MM-ddTHH:mm:ss.SSSZ`.",
            "example": "2024-12-31T23:59:59.000Z"
          }
        }
      },
      "FuelPrice": {
        "type": "object",
        "properties": {
          "price": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "The price of the fuel per unit.",
            "example": 1.85
          },
          "priceIndex": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Price in the given location divided by the Price Private in the base location multiplied by 100",
            "example": 105.5
          }
        }
      },
      "AirportDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "123"
          },
          "name": {
            "type": "string",
            "example": "Vienna International Airport"
          },
          "icao": {
            "type": "string",
            "example": "LOWW"
          },
          "iata": {
            "type": "string",
            "example": "VIE"
          },
          "faa": {
            "type": "string",
            "example": "KJFK"
          },
          "localIdentifier": {
            "type": "string",
            "example": "ABC"
          },
          "aid": {
            "type": "string",
            "example": "AID123"
          }
        }
      },
      "AirportMinimalDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "123"
          },
          "name": {
            "type": "string",
            "example": "Vienna International Airport"
          },
          "icao": {
            "type": "string",
            "example": "LOWW"
          },
          "iata": {
            "type": "string",
            "example": "VIE"
          }
        }
      },
      "Currency": {
        "type": "string",
        "enum": [
          "EUR",
          "USD"
        ]
      },
      "UnitVolume": {
        "type": "string",
        "enum": [
          "LITER",
          "GALLON_USA"
        ]
      },
      "WebhookSubscriptionResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "webhook-sub-12345"
          },
          "event": {
            "$ref": "#/components/schemas/WebhookEventType"
          },
          "callbackUrl": {
            "type": "string",
            "format": "uri",
            "example": "https://example.com/webhooks"
          },
          "status": {
            "$ref": "#/components/schemas/DbStatusType"
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          },
          "expirationDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-02-15T10:30:00.000Z"
          }
        }
      },
      "WebhookSubscriptionCreateDto": {
        "type": "object",
        "required": [
          "event",
          "callbackUrl",
          "signingKey"
        ],
        "properties": {
          "event": {
            "$ref": "#/components/schemas/WebhookEventType"
          },
          "callbackUrl": {
            "type": "string",
            "format": "uri",
            "example": "https://example.com/webhooks/flight-updates"
          },
          "signingKey": {
            "type": "string",
            "example": "your-secret-signing-key-123"
          }
        }
      },
      "WebhookSubscriptionPatchDto": {
        "type": "object",
        "required": [
          "callbackUrl"
        ],
        "properties": {
          "callbackUrl": {
            "type": "string",
            "format": "uri",
            "example": "https://new-example.com/webhooks"
          },
          "status": {
            "$ref": "#/components/schemas/DbStatusType"
          }
        }
      },
      "WebhookEventType": {
        "type": "string",
        "enum": [
          "FLIGHT_CREATE",
          "FLIGHT_CANCEL",
          "FLIGHT_TIME_UPDATE",
          "FLIGHT_AIRCRAFT_UPDATE",
          "FLIGHT_AIRPORT_UPDATE",
          "FLIGHT_POST_FLIGHT_STATUS",
          "FLIGHT_MOVEMENT_UPDATE",
          "FLIGHT_PAX_COUNT_UPDATE",
          "FLIGHT_PAX_LIST_UPDATE",
          "FLIGHT_PERMIT_ASSIGNMENT",
          "FLIGHT_PERMIT_UNASSIGNMENT",
          "FLIGHT_SLOT_PPR_ASSIGNMENT",
          "FLIGHT_SLOT_PPR_UNASSIGNMENT",
          "FLIGHT_FBO_ASSIGNMENT",
          "FLIGHT_FBO_UNASSIGNMENT",
          "FLIGHT_HOTEL_ASSIGNMENT",
          "FLIGHT_HOTEL_UNASSIGNMENT",
          "FLIGHT_CATERING_ASSIGNMENT",
          "FLIGHT_CATERING_UNASSIGNMENT",
          "FLIGHT_TRANSPORT_ASSIGNMENT",
          "FLIGHT_TRANSPORT_UNASSIGNMENT",
          "FLIGHT_CREW_ASSIGNMENT",
          "FLIGHT_CREW_DOCUMENT_UPDATE",
          "FLIGHT_CREW_ADDRESS_UPDATE"
        ]
      },
      "DbStatusType": {
        "type": "string",
        "enum": [
          "ACTIVE",
          "INACTIVE"
        ]
      },
      "WebhookDeliveryDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "delivery-12345"
          },
          "resourceType": {
            "type": "string",
            "enum": [
              "FLIGHT"
            ]
          },
          "resourceId": {
            "type": "string",
            "example": "flight-67890"
          },
          "event": {
            "type": "string",
            "enum": [
              "FLIGHT_CREATE",
              "FLIGHT_CANCEL",
              "FLIGHT_TIME_UPDATE",
              "FLIGHT_AIRCRAFT_UPDATE",
              "FLIGHT_AIRPORT_UPDATE",
              "FLIGHT_POST_FLIGHT_STATUS",
              "FLIGHT_MOVEMENT_UPDATE",
              "FLIGHT_PAX_COUNT_UPDATE",
              "FLIGHT_PAX_LIST_UPDATE",
              "FLIGHT_CREW_LIST_UPDATE",
              "FLIGHT_CREW_ASSIGNMENT",
              "FLIGHT_CREW_DOCUMENT_UPDATE",
              "FLIGHT_CREW_ADDRESS_UPDATE",
              "FLIGHT_PERMIT_ASSIGNMENT",
              "FLIGHT_PERMIT_UNASSIGNMENT",
              "FLIGHT_SLOT_PPR_ASSIGNMENT",
              "FLIGHT_SLOT_PPR_UNASSIGNMENT",
              "FLIGHT_FBO_ASSIGNMENT",
              "FLIGHT_FBO_UNASSIGNMENT",
              "FLIGHT_HOTEL_ASSIGNMENT",
              "FLIGHT_HOTEL_UNASSIGNMENT",
              "FLIGHT_CATERING_ASSIGNMENT",
              "FLIGHT_CATERING_UNASSIGNMENT",
              "FLIGHT_TRANSPORT_ASSIGNMENT",
              "FLIGHT_TRANSPORT_UNASSIGNMENT",
              "FLIGHT_UPDATE",
              "FLIGHT_PASSENGER_UPDATE",
              "FLIGHT_PERMIT_UPDATE",
              "FLIGHT_SLOT_PPR_UPDATE",
              "FLIGHT_FBO_UPDATE",
              "FLIGHT_TRANSPORT_UPDATE",
              "FLIGHT_HOTEL_UPDATE",
              "FLIGHT_CATERING_UPDATE",
              "FLIGHT_CREW_UPDATE"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "FAILED"
            ]
          },
          "completedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          }
        }
      },
      "PageResult": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookDeliveryDto"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "Pagination": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "example": 0
          },
          "limit": {
            "type": "integer",
            "example": 20
          },
          "totalItems": {
            "type": "integer",
            "example": 150
          },
          "sortItems": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "issueDate desc"
            ]
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string"
                },
                "operator": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "CrewQualificationDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "qual-12345"
          },
          "crewId": {
            "type": "string",
            "example": "crew-67890"
          },
          "qualificationTypeId": {
            "type": "string",
            "example": "qual-type-12345"
          },
          "licenseNumber": {
            "type": "string",
            "example": "ATP-123456"
          },
          "issuingAuthority": {
            "type": "string",
            "example": "FAA"
          },
          "country": {
            "type": "string",
            "example": "AUT"
          },
          "issueDate": {
            "type": "string",
            "format": "date",
            "example": "2023-01-15"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "example": "2025-01-15"
          },
          "trainingStartDate": {
            "type": "string",
            "format": "date",
            "example": "2022-12-01"
          },
          "notes": {
            "type": "string",
            "example": "Completed simulator training"
          },
          "isPilotInCommand": {
            "type": "boolean",
            "example": true
          },
          "baseMonth": {
            "type": "string",
            "enum": [
              "JANUARY",
              "FEBRUARY",
              "MARCH",
              "APRIL",
              "MAY",
              "JUNE",
              "JULY",
              "AUGUST",
              "SEPTEMBER",
              "OCTOBER",
              "NOVEMBER",
              "DECEMBER"
            ],
            "example": "JANUARY"
          },
          "document": {
            "$ref": "#/components/schemas/BinaryDocumentDto"
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          }
        }
      },
      "CrewQualificationSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "qual-12345"
          },
          "crewId": {
            "type": "string",
            "example": "crew-67890"
          },
          "qualificationTypeId": {
            "type": "string",
            "example": "qual-type-12345"
          },
          "licenseNumber": {
            "type": "string",
            "example": "ATP-123456"
          },
          "issuingAuthority": {
            "type": "string",
            "example": "FAA"
          },
          "country": {
            "type": "string",
            "example": "AUT"
          },
          "issueDate": {
            "type": "string",
            "format": "date",
            "example": "2023-01-15"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "example": "2025-01-15"
          },
          "trainingStartDate": {
            "type": "string",
            "format": "date",
            "example": "2022-12-01"
          },
          "notes": {
            "type": "string",
            "example": "Completed simulator training"
          },
          "isPilotInCommand": {
            "type": "boolean",
            "example": true
          },
          "baseMonth": {
            "type": "string",
            "enum": [
              "JANUARY",
              "FEBRUARY",
              "MARCH",
              "APRIL",
              "MAY",
              "JUNE",
              "JULY",
              "AUGUST",
              "SEPTEMBER",
              "OCTOBER",
              "NOVEMBER",
              "DECEMBER"
            ],
            "example": "JANUARY"
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          }
        }
      },
      "CrewQualificationCreateDto": {
        "type": "object",
        "required": [
          "crewId",
          "qualificationTypeId"
        ],
        "properties": {
          "crewId": {
            "type": "string",
            "example": "crew-67890"
          },
          "qualificationTypeId": {
            "type": "string",
            "example": "qual-type-12345"
          },
          "licenseNumber": {
            "type": "string",
            "example": "ATP-123456"
          },
          "issuingAuthority": {
            "type": "string",
            "example": "FAA"
          },
          "country": {
            "type": "string",
            "example": "AUT"
          },
          "issueDate": {
            "type": "string",
            "format": "date",
            "example": "2023-01-15"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "example": "2025-01-15"
          },
          "trainingStartDate": {
            "type": "string",
            "format": "date",
            "example": "2022-12-01"
          },
          "notes": {
            "type": "string",
            "example": "Completed simulator training"
          },
          "isPilotInCommand": {
            "type": "boolean",
            "example": true
          },
          "baseMonth": {
            "type": "string",
            "enum": [
              "JANUARY",
              "FEBRUARY",
              "MARCH",
              "APRIL",
              "MAY",
              "JUNE",
              "JULY",
              "AUGUST",
              "SEPTEMBER",
              "OCTOBER",
              "NOVEMBER",
              "DECEMBER"
            ],
            "example": "JANUARY"
          }
        }
      },
      "CrewQualificationPatchDto": {
        "type": "object",
        "properties": {
          "qualificationTypeId": {
            "type": "string",
            "example": "qual-type-12345"
          },
          "licenseNumber": {
            "type": "string",
            "example": "ATP-123456"
          },
          "issuingAuthority": {
            "type": "string",
            "example": "FAA"
          },
          "country": {
            "type": "string",
            "example": "AUT"
          },
          "issueDate": {
            "type": "string",
            "format": "date",
            "example": "2023-01-15"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "example": "2025-01-15"
          },
          "trainingStartDate": {
            "type": "string",
            "format": "date",
            "example": "2022-12-01"
          },
          "notes": {
            "type": "string",
            "example": "Completed simulator training"
          },
          "isPilotInCommand": {
            "type": "boolean",
            "example": true
          },
          "baseMonth": {
            "type": "string",
            "enum": [
              "JANUARY",
              "FEBRUARY",
              "MARCH",
              "APRIL",
              "MAY",
              "JUNE",
              "JULY",
              "AUGUST",
              "SEPTEMBER",
              "OCTOBER",
              "NOVEMBER",
              "DECEMBER"
            ],
            "example": "JANUARY"
          }
        }
      },
      "BinaryDocumentDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 12345
          },
          "uuid": {
            "type": "string",
            "example": "doc-uuid-67890"
          },
          "originalName": {
            "type": "string",
            "example": "pilot_license.pdf"
          },
          "fileSize": {
            "type": "number",
            "format": "double",
            "example": 1024000
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          },
          "customName": {
            "type": "string",
            "example": "Captain License"
          },
          "imageSizeX": {
            "type": "number",
            "format": "double",
            "example": 1920
          },
          "imageSizeY": {
            "type": "number",
            "format": "double",
            "example": 1080
          },
          "isThumbnail": {
            "type": "boolean",
            "example": false
          }
        }
      },
      "FlightPermitDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10603796"
          },
          "permitNumber": {
            "type": "string",
            "example": "123456"
          },
          "status": {
            "$ref": "#/components/schemas/FlightPermitStatus"
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "providerId": {
            "type": "string",
            "example": "093d574d69fd4aeea128db565d662006"
          },
          "type": {
            "$ref": "#/components/schemas/PermissionType"
          },
          "externalNotes": {
            "type": "string",
            "nullable": true
          },
          "externalStatus": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true,
            "example": "DEU"
          },
          "airport": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AirportMinimalDto"
              }
            ]
          },
          "issueDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2026-06-26T00:00:00.000Z"
          },
          "document": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/BinaryDocumentDto"
              }
            ]
          },
          "expirationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2026-06-28T00:00:00.000Z"
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-06-26T09:32:15.303Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "FlightPermitSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10603796"
          },
          "permitNumber": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/FlightPermitStatus"
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "providerId": {
            "type": "string",
            "example": "093d574d69fd4aeea128db565d662006"
          },
          "type": {
            "$ref": "#/components/schemas/PermissionType"
          },
          "externalNotes": {
            "type": "string",
            "nullable": true
          },
          "externalStatus": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "airport": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AirportMinimalDto"
              }
            ]
          },
          "issueDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "documentUuid": {
            "type": "string",
            "nullable": true
          },
          "expirationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "FlightPermitCreateDto": {
        "type": "object",
        "required": [
          "flightId",
          "type"
        ],
        "properties": {
          "flightId": {
            "type": "string",
            "example": "12345"
          },
          "permitNumber": {
            "type": "string",
            "example": "PER-2025-001"
          },
          "status": {
            "$ref": "#/components/schemas/FlightPermitStatus"
          },
          "notes": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/PermissionType"
          },
          "externalNotes": {
            "type": "string"
          },
          "externalStatus": {
            "type": "string"
          },
          "country": {
            "type": "string",
            "example": "MLT"
          },
          "airportCode": {
            "type": "string",
            "example": "LMML"
          },
          "issueDate": {
            "type": "string",
            "format": "date-time"
          },
          "expirationDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FlightPermitPathDto": {
        "type": "object",
        "properties": {
          "permitNumber": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/FlightPermitStatus"
          },
          "notes": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/PermissionType"
          },
          "externalNotes": {
            "type": "string"
          },
          "externalStatus": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "airportCode": {
            "type": "string"
          },
          "issueDate": {
            "type": "string",
            "format": "date-time"
          },
          "expirationDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FlightPermitStatus": {
        "type": "string",
        "enum": [
          "NA",
          "NR",
          "DO",
          "HOLD",
          "REQ",
          "OK",
          "INIT",
          "OK_REVISED",
          "REQ_REVISED",
          "HOLD_REVISED",
          "DO_REVISED",
          "CNL"
        ],
        "example": "OK"
      },
      "PermissionType": {
        "type": "string",
        "enum": [
          "TAKEOFF",
          "LANDING",
          "OVERFLIGHT"
        ],
        "example": "LANDING"
      },
      "FlightSlotPprDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "slot-ppr-12345"
          },
          "permitNumber": {
            "type": "string",
            "example": "SLOT-2025-001"
          },
          "status": {
            "$ref": "#/components/schemas/FlightPermitStatus"
          },
          "notes": {
            "type": "string"
          },
          "tripProviderId": {
            "type": "string",
            "example": "provider-123"
          },
          "providerPublicId": {
            "type": "string",
            "example": "provider-public-abc"
          },
          "type": {
            "$ref": "#/components/schemas/SlotPprType"
          },
          "direction": {
            "$ref": "#/components/schemas/SlotPprDirection"
          },
          "airport": {
            "$ref": "#/components/schemas/AirportMinimalDto"
          },
          "approvalDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "document": {
            "$ref": "#/components/schemas/BinaryDocumentDto"
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FlightSlotPprSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "slot-ppr-12345"
          },
          "permitNumber": {
            "type": "string",
            "example": "SLOT-2025-001"
          },
          "status": {
            "$ref": "#/components/schemas/FlightPermitStatus"
          },
          "notes": {
            "type": "string"
          },
          "tripProviderId": {
            "type": "string",
            "example": "provider-123"
          },
          "providerPublicId": {
            "type": "string",
            "example": "provider-public-abc"
          },
          "type": {
            "$ref": "#/components/schemas/SlotPprType"
          },
          "direction": {
            "$ref": "#/components/schemas/SlotPprDirection"
          },
          "airport": {
            "$ref": "#/components/schemas/AirportMinimalDto"
          },
          "approvalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "documentUuid": {
            "type": "string",
            "nullable": true
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FlightSlotPprPathDto": {
        "type": "object",
        "properties": {
          "permitNumber": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/FlightPermitStatus"
          },
          "notes": {
            "type": "string"
          },
          "approvalDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SlotPprType": {
        "type": "string",
        "enum": [
          "UNDEFINED",
          "SLOT",
          "PPR"
        ],
        "example": "SLOT"
      },
      "SlotPprDirection": {
        "type": "string",
        "enum": [
          "DEPARTURE",
          "ARRIVAL"
        ],
        "example": "DEPARTURE"
      },
      "GroundServiceStatus": {
        "type": "string",
        "enum": [
          "NA",
          "NR",
          "DO",
          "HOLD",
          "REQ",
          "OK",
          "INIT",
          "OK_REVISED",
          "REQ_REVISED",
          "HOLD_REVISED",
          "DO_REVISED",
          "CNL"
        ],
        "example": "OK"
      },
      "TransportType": {
        "type": "string",
        "enum": [
          "LIMOUSINE",
          "CARRENTAL",
          "TAXI",
          "GROUNDTRANSPORTATION"
        ],
        "example": "LIMOUSINE"
      },
      "FlightServiceFor": {
        "type": "string",
        "enum": [
          "PAX",
          "CREW"
        ],
        "example": "PAX"
      },
      "FboDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "fbo-12345"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "remarks": {
            "type": "string"
          },
          "documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BinaryDocumentDto"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FboSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "fbo-12345"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "remarks": {
            "type": "string"
          },
          "documentUuids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FboPathDto": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "remarks": {
            "type": "string"
          }
        }
      },
      "FboFlightPatchDto": {
        "type": "object",
        "properties": {
          "arrivalFboService": {
            "$ref": "#/components/schemas/FboServicePatchDto"
          },
          "departureFboService": {
            "$ref": "#/components/schemas/FboServicePatchDto"
          }
        }
      },
      "FboFlightResponseDto": {
        "type": "object",
        "properties": {
          "previousFlight": {
            "$ref": "#/components/schemas/FboFlightSummaryDto"
          },
          "nextFlight": {
            "$ref": "#/components/schemas/FboFlightSummaryDto"
          },
          "departureFboService": {
            "$ref": "#/components/schemas/FboServiceResponseDto"
          },
          "arrivalFboService": {
            "$ref": "#/components/schemas/FboServiceResponseDto"
          },
          "aircraft": {
            "$ref": "#/components/schemas/FboAircraftDto"
          }
        }
      },
      "FboFlightSummaryDto": {
        "type": "object",
        "properties": {
          "flightType": {
            "type": "string",
            "example": "PAX"
          },
          "fplType": {
            "type": "string",
            "example": "N"
          },
          "flightNumber": {
            "type": "string",
            "example": "FL30001"
          },
          "bookingIdentifier": {
            "type": "string",
            "example": "OWECT"
          },
          "airportFrom": {
            "type": "object",
            "properties": {
              "icao": {
                "type": "string"
              },
              "iata": {
                "type": "string"
              },
              "faa": {
                "type": "string",
                "nullable": true
              },
              "localIdentifier": {
                "type": "string",
                "nullable": true
              },
              "aid": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "airportTo": {
            "type": "object",
            "properties": {
              "icao": {
                "type": "string"
              },
              "iata": {
                "type": "string"
              },
              "faa": {
                "type": "string",
                "nullable": true
              },
              "localIdentifier": {
                "type": "string",
                "nullable": true
              },
              "aid": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "etd": {
            "type": "string",
            "format": "date-time"
          },
          "eta": {
            "type": "string",
            "format": "date-time"
          },
          "crewNumber": {
            "type": "integer",
            "example": 2
          },
          "paxNumber": {
            "type": "integer",
            "example": 5
          }
        }
      },
      "FboServiceResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10603879"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "name": {
            "type": "string",
            "example": "FL3XX AVIATION"
          },
          "aviowikiId": {
            "type": "string",
            "example": "PRV-2D2P-NXOT"
          },
          "by": {
            "type": "string",
            "example": "FL3XX"
          },
          "type": {
            "type": "string",
            "example": "Handling Request"
          },
          "request": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "Handling",
              "Stairs"
            ]
          },
          "remarks": {
            "type": "string",
            "nullable": true
          },
          "documentUuids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "FboAircraftDto": {
        "type": "object",
        "properties": {
          "aircraftType": {
            "type": "string",
            "example": "FA8X"
          },
          "registrationNumber": {
            "type": "string",
            "example": "OE-FL3XX"
          },
          "aircraftAOC": {
            "type": "string",
            "example": "FL3XX"
          },
          "mtow": {
            "type": "number",
            "format": "double",
            "example": 77500
          },
          "mtowUnit": {
            "type": "string",
            "example": "LBS"
          },
          "fireCategory": {
            "type": "string",
            "nullable": true
          },
          "seatCapacity": {
            "type": "integer",
            "example": 14
          }
        }
      },
      "FboServicePatchDto": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "aviowikiId": {
            "type": "string",
            "description": "AvioWiki provider identifier",
            "example": "PRV-3D2P-PXOT"
          },
          "type": {
            "type": "string",
            "description": "Type of FBO service",
            "example": "Handling Request"
          },
          "request": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of requested services",
            "example": [
              "Handling",
              "Stairs",
              "Red Carpet"
            ]
          },
          "remarks": {
            "type": "string",
            "nullable": true,
            "description": "Additional remarks or notes"
          }
        }
      },
      "TransportDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10600980"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "type": {
            "$ref": "#/components/schemas/TransportType"
          },
          "for": {
            "$ref": "#/components/schemas/FlightServiceForDto"
          },
          "notes": {
            "type": "string",
            "example": "Drop-off at the FL3XX Inn hotel"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BinaryDocumentDto"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-06-02T09:43:11.946Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-06-02T10:07:48.921Z"
          }
        }
      },
      "TransportSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10600980"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "type": {
            "$ref": "#/components/schemas/TransportType"
          },
          "for": {
            "$ref": "#/components/schemas/FlightServiceForDto"
          },
          "notes": {
            "type": "string",
            "example": "Drop-off at the FL3XX Inn hotel"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "documentUuids": {
            "type": "array",
            "items": {
              "type": "string",
              "example": "391f8d63-5397-4a3a-b9e6-d8f03cd72185"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-06-02T09:43:11.946Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-06-02T10:07:48.921Z"
          }
        }
      },
      "FlightServiceForDto": {
        "type": "object",
        "description": "Specifies who the service is for. Contains either `group` or `person`, never both.\n\n- `group`: the service is assigned to the whole passenger (`PAX`) or crew (`CREW`) group of the flight\n- `person`: the service is assigned to one individual, who can be either a passenger or a crew member. `person.id` is the userId.\n",
        "properties": {
          "group": {
            "$ref": "#/components/schemas/FlightServiceFor"
          },
          "person": {
            "type": "object",
            "description": "The individual the service is assigned to. `id` is the userId.",
            "properties": {
              "id": {
                "type": "string",
                "example": "143686"
              },
              "name": {
                "type": "string",
                "example": "John ABC"
              }
            }
          }
        }
      },
      "ServiceAirportDto": {
        "type": "object",
        "properties": {
          "icao": {
            "type": "string",
            "example": "LFPB"
          },
          "iata": {
            "type": "string",
            "example": "LBG"
          },
          "faa": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "localIdentifier": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "aviowikiId": {
            "type": "string",
            "example": "APT-QB1X-QTGK"
          },
          "name": {
            "type": "string",
            "example": "Paris Le Bourget"
          }
        }
      },
      "TransportCreateDto": {
        "type": "object",
        "required": [
          "flightId"
        ],
        "properties": {
          "flightId": {
            "type": "string",
            "example": "87094"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "type": {
            "$ref": "#/components/schemas/TransportType"
          },
          "for": {
            "$ref": "#/components/schemas/FlightServiceForDto"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "notes": {
            "type": "string",
            "example": "Limousine confirmed for passenger: pickup at Malaga GA terminal, driver contact +34 612 345 678."
          }
        }
      },
      "TransportPathDto": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "type": {
            "$ref": "#/components/schemas/TransportType"
          },
          "for": {
            "$ref": "#/components/schemas/FlightServiceForDto"
          },
          "notes": {
            "type": "string",
            "example": "Limousine confirmed: pickup at GA terminal, driver contact +34 612 345 678."
          }
        }
      },
      "HotelDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10604233"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "for": {
            "$ref": "#/components/schemas/FlightServiceForDto"
          },
          "notes": {
            "type": "string",
            "example": "Notes for the Crew"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BinaryDocumentDto"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-06T20:24:00.797Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-06T20:24:00.797Z"
          }
        }
      },
      "HotelSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10604233"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "for": {
            "$ref": "#/components/schemas/FlightServiceForDto"
          },
          "notes": {
            "type": "string",
            "example": "Notes for the Crew"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "documentUuids": {
            "type": "array",
            "items": {
              "type": "string",
              "example": "80230597-57ba-40db-9195-ba91b71cde2d"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-06T20:24:00.797Z"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-06T20:24:00.797Z"
          }
        }
      },
      "HotelCreateDto": {
        "type": "object",
        "required": [
          "flightId"
        ],
        "properties": {
          "flightId": {
            "type": "string",
            "example": "10604233"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "for": {
            "$ref": "#/components/schemas/FlightServiceForDto"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "notes": {
            "type": "string",
            "example": "Notes for the Crew"
          }
        }
      },
      "HotelPathDto": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "for": {
            "$ref": "#/components/schemas/FlightServiceForDto"
          },
          "notes": {
            "type": "string",
            "example": "Notes for the Crew"
          }
        }
      },
      "CateringForDto": {
        "type": "object",
        "description": "Specifies who the catering service is for. Catering services are only ever assigned to a group — either the whole passenger (`PAX`) group or the whole crew (`CREW`) group. Unlike Hotel and Transport services, per-person assignment is not supported for catering.\n",
        "required": [
          "group"
        ],
        "properties": {
          "group": {
            "$ref": "#/components/schemas/FlightServiceFor"
          }
        }
      },
      "CateringDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10604801"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "for": {
            "$ref": "#/components/schemas/CateringForDto"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "order": {
            "type": "string",
            "example": "8x continental breakfast, 2x gluten-free"
          },
          "pax": {
            "type": "integer",
            "example": 8
          },
          "remarks": {
            "type": "string",
            "example": "Deliver 30 minutes before boarding"
          },
          "documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BinaryDocumentDto"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CateringSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "10604801"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "for": {
            "$ref": "#/components/schemas/CateringForDto"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "order": {
            "type": "string",
            "example": "8x continental breakfast, 2x gluten-free"
          },
          "pax": {
            "type": "integer",
            "example": 8
          },
          "remarks": {
            "type": "string",
            "example": "Deliver 30 minutes before boarding"
          },
          "documentUuids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CateringCreateDto": {
        "type": "object",
        "required": [
          "flightId"
        ],
        "properties": {
          "flightId": {
            "type": "string",
            "example": "10604801"
          },
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "for": {
            "$ref": "#/components/schemas/CateringForDto"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "order": {
            "type": "string",
            "example": "8x continental breakfast, 2x gluten-free"
          },
          "pax": {
            "type": "integer",
            "example": 8
          },
          "remarks": {
            "type": "string",
            "example": "Deliver 30 minutes before boarding"
          }
        }
      },
      "CateringPathDto": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/GroundServiceStatus"
          },
          "for": {
            "$ref": "#/components/schemas/CateringForDto"
          },
          "airport": {
            "$ref": "#/components/schemas/ServiceAirportDto"
          },
          "order": {
            "type": "string",
            "example": "8x continental breakfast, 2x gluten-free"
          },
          "remarks": {
            "type": "string",
            "example": "Deliver 30 minutes before boarding"
          }
        }
      },
      "B2CBinaryReferenceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 12345
          },
          "uuid": {
            "type": "string",
            "example": "doc-uuid-67890"
          },
          "originalName": {
            "type": "string",
            "example": "pilot_license.pdf"
          },
          "fileSize": {
            "type": "integer",
            "format": "int64",
            "example": 1024000
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          },
          "customName": {
            "type": "string"
          },
          "imageSizeX": {
            "type": "integer",
            "format": "int32"
          },
          "imageSizeY": {
            "type": "integer",
            "format": "int32"
          },
          "isThumbnail": {
            "type": "boolean",
            "example": false
          }
        }
      },
      "DeletedDto": {
        "type": "object",
        "properties": {
          "deleted": {
            "type": "boolean",
            "example": true
          }
        }
      },
      "QualificationDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "qual-type-12345"
          },
          "name": {
            "type": "string",
            "example": "Airline Transport Pilot License"
          },
          "abbreviation": {
            "type": "string",
            "example": "ATPL"
          },
          "warning": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "parentId": {
            "type": "string"
          },
          "appliesTo": {
            "type": "string",
            "enum": [
              "FLIGHT_DECK",
              "PIC",
              "SIC",
              "CREW_CABIN",
              "CREW_POSITIONS_AND_ROLES"
            ],
            "example": "FLIGHT_DECK"
          },
          "type": {
            "type": "string",
            "enum": [
              "PILOT_PRIVATE",
              "PILOT_COMMERCIAL",
              "TYPE_RATING",
              "DIFFERENCE_TRAINING",
              "MEDICAL_US_CL1",
              "US_61_58",
              "MEDICAL_EU",
              "AIRPORT_SPECIFIC",
              "MEDICAL_US_CL2",
              "MEDICAL_US_CL3",
              "SPECIAL_INTERNATIONAL",
              "EFVS",
              "RESTRICTIONS",
              "RECENCY",
              "OPC"
            ],
            "example": "TYPE_RATING"
          },
          "trainingType": {
            "type": "string",
            "enum": [
              "NONE",
              "AIRCRAFT",
              "ATO",
              "CLASSROOM",
              "ELEARNING",
              "BASE",
              "CHECKS_ORAL",
              "CHECKS_FLIGHT_CHECK",
              "GROUND_TRAINING",
              "AIRCRAFT_SPECIFIC",
              "SIM",
              "SPECIAL_CURRICULUM",
              "CURRENCY",
              "MISC",
              "SPECIAL",
              "DEPRECATED_TYPE_RATING",
              "LICENSE"
            ],
            "example": "SIM"
          },
          "isActive": {
            "type": "boolean",
            "example": true
          },
          "isVisibleOnRoster": {
            "type": "boolean"
          },
          "isRecency": {
            "type": "boolean"
          },
          "recencyType": {
            "type": "string",
            "enum": [
              "EU",
              "US",
              "AIRPORT",
              "EFVS",
              "CANADA",
              "AU",
              "US_V2",
              "CUSTOM_RECENT_FLIGHTS",
              "US_V3",
              "CANADA_V2",
              "AU_V2",
              "US_V4",
              "HELI",
              "US_V5",
              "ARO",
              "US_V6",
              "EFVS_PF",
              "EFVS_PNF",
              "AU_V3"
            ]
          },
          "isAssignable": {
            "type": "boolean"
          },
          "isExpirationLocked": {
            "type": "boolean"
          },
          "isRequired": {
            "type": "boolean"
          },
          "isDirectAlternativeOnly": {
            "type": "boolean"
          },
          "validityDto": {
            "$ref": "#/components/schemas/ValidityDto"
          },
          "gracePeriod": {
            "$ref": "#/components/schemas/GracePeriodDto"
          },
          "relation": {
            "$ref": "#/components/schemas/QualificationRelation"
          },
          "alternativeQualificationIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "QualificationSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "qual-type-12345"
          },
          "name": {
            "type": "string",
            "example": "Airline Transport Pilot License"
          },
          "abbreviation": {
            "type": "string",
            "example": "ATPL"
          },
          "warning": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "parentId": {
            "type": "string"
          },
          "appliesTo": {
            "type": "string",
            "enum": [
              "FLIGHT_DECK",
              "PIC",
              "SIC",
              "CREW_CABIN",
              "CREW_POSITIONS_AND_ROLES"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "PILOT_PRIVATE",
              "PILOT_COMMERCIAL",
              "TYPE_RATING",
              "DIFFERENCE_TRAINING",
              "MEDICAL_US_CL1",
              "US_61_58",
              "MEDICAL_EU",
              "AIRPORT_SPECIFIC",
              "MEDICAL_US_CL2",
              "MEDICAL_US_CL3",
              "SPECIAL_INTERNATIONAL",
              "EFVS",
              "RESTRICTIONS",
              "RECENCY",
              "OPC"
            ]
          },
          "trainingType": {
            "type": "string",
            "enum": [
              "NONE",
              "AIRCRAFT",
              "ATO",
              "CLASSROOM",
              "ELEARNING",
              "BASE",
              "CHECKS_ORAL",
              "CHECKS_FLIGHT_CHECK",
              "GROUND_TRAINING",
              "AIRCRAFT_SPECIFIC",
              "SIM",
              "SPECIAL_CURRICULUM",
              "CURRENCY",
              "MISC",
              "SPECIAL",
              "DEPRECATED_TYPE_RATING",
              "LICENSE"
            ]
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "QualificationRelation": {
        "type": "object",
        "properties": {
          "primary": {
            "$ref": "#/components/schemas/QualificationRelationDto"
          },
          "secondary": {
            "$ref": "#/components/schemas/QualificationRelationDto"
          }
        }
      },
      "ValidityDto": {
        "type": "object",
        "properties": {
          "unit": {
            "type": "string",
            "enum": [
              "DAYS",
              "MONTHS"
            ],
            "example": "MONTHS"
          },
          "value": {
            "type": "integer",
            "format": "int32",
            "example": 24
          }
        }
      },
      "GracePeriodDto": {
        "type": "object",
        "properties": {
          "start": {
            "$ref": "#/components/schemas/GracePeriodItemDto"
          },
          "end": {
            "$ref": "#/components/schemas/GracePeriodItemDto"
          }
        }
      },
      "GracePeriodItemDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "NONE",
              "FIXED_DAYS_BEFORE_DATE",
              "FIXED_DAYS_AFTER_DATE",
              "FIRST_DAY_OF_MONTH",
              "LAST_DAY_OF_MONTH",
              "FIRST_DAY_OF_LAST_MONTH",
              "LAST_DAY_OF_LAST_MONTH",
              "FIRST_DAY_OF_NEXT_MONTH",
              "LAST_DAY_OF_NEXT_MONTH",
              "FIXED_MONTHS_BEFORE_DATE",
              "FIXED_MONTHS_AFTER_DATE"
            ]
          },
          "value": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "QualificationRelationDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "AIRCRAFT",
              "AIRPORT",
              "AIRPORT_C",
              "PILOT_AND_AIRCRAFT"
            ]
          },
          "value": {
            "type": "string"
          }
        }
      },
      "PaginatedQualificationDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/QualificationSimplifiedDto"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "RosterTypeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "112233"
          },
          "name": {
            "type": "string",
            "example": "OFF"
          },
          "displayLabel": {
            "type": "string",
            "example": "Off"
          },
          "isNative": {
            "type": "boolean"
          },
          "displayOrder": {
            "type": "integer",
            "format": "int64"
          },
          "isHidden": {
            "type": "boolean"
          },
          "isSubtypeVisible": {
            "type": "boolean"
          },
          "isAircraftEnabled": {
            "type": "boolean"
          },
          "isAircraftTypeVisible": {
            "type": "boolean"
          },
          "isTypeRatingVisible": {
            "type": "boolean"
          },
          "isDepartureAirportEnabled": {
            "type": "boolean"
          },
          "isArrivalAirportEnabled": {
            "type": "boolean"
          },
          "isForAirportEnabled": {
            "type": "boolean"
          },
          "isNotesVisible": {
            "type": "boolean"
          },
          "isAttachmentVisible": {
            "type": "boolean"
          },
          "isLandingsVisible": {
            "type": "boolean"
          },
          "isRoleVisible": {
            "type": "boolean"
          },
          "isCrewPositionVisible": {
            "type": "boolean"
          },
          "isLocationVisible": {
            "type": "boolean"
          },
          "isDutyTimeVisible": {
            "type": "boolean"
          },
          "isActualTimeVisible": {
            "type": "boolean"
          },
          "isRelatedBookingVisible": {
            "type": "boolean"
          },
          "isExternalAircraftVisible": {
            "type": "boolean"
          },
          "isFlightTimeVisible": {
            "type": "boolean"
          },
          "isFlightNumberVisible": {
            "type": "boolean"
          },
          "isPilotFlightTypeVisible": {
            "type": "boolean"
          },
          "isOperationalConditionVisible": {
            "type": "boolean"
          },
          "isApproachesVisible": {
            "type": "boolean"
          },
          "isDpTimeEnabled": {
            "type": "boolean"
          },
          "isFdpTimeVisible": {
            "type": "boolean"
          },
          "isBlockTimeVisible": {
            "type": "boolean"
          },
          "nestedTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RosterTypeDto"
            }
          }
        }
      },
      "RosterTypeSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "112233"
          },
          "name": {
            "type": "string",
            "example": "OFF"
          },
          "displayLabel": {
            "type": "string",
            "example": "Off"
          },
          "isNative": {
            "type": "boolean"
          },
          "displayOrder": {
            "type": "integer",
            "format": "int64"
          },
          "nestedTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RosterTypeSimplifiedDto"
            }
          }
        }
      },
      "RosterTypePageResult": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RosterTypeSimplifiedDto"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "RosterTypesSearchRequest": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "example": 20
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "default": 0,
            "example": 0
          },
          "filters": {
            "type": "object",
            "properties": {
              "isNative": {
                "type": "boolean"
              }
            }
          },
          "sorts": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "ASC",
                  "DESC"
                ],
                "default": "ASC"
              }
            }
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "required": [
          "title",
          "message",
          "errors"
        ],
        "properties": {
          "title": {
            "type": "string",
            "enum": [
              "bad_request",
              "unauthorized",
              "forbidden",
              "conflict",
              "not_found",
              "internal_error"
            ],
            "example": "bad_request"
          },
          "message": {
            "type": "string",
            "example": "dateRange.from must be before dateRange.to"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": []
          }
        }
      },
      "CrewPositionSearchRequest": {
        "type": "object",
        "required": [
          "filters"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "example": 20
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "minimum": 0,
            "default": 0,
            "example": 0
          },
          "filters": {
            "type": "object",
            "properties": {
              "aircraftId": {
                "type": "string",
                "example": "12345"
              },
              "tailNumber": {
                "type": "string",
                "example": "OE-FLX"
              },
              "isAssignable": {
                "type": "boolean"
              }
            }
          },
          "sorts": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "ASC",
                  "DESC"
                ],
                "default": "ASC"
              }
            }
          }
        }
      },
      "CrewPositionDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "101"
          },
          "code": {
            "type": "string",
            "example": "CP"
          },
          "name": {
            "type": "string",
            "example": "Captain"
          },
          "role": {
            "type": "string",
            "enum": [
              "CMD",
              "FO",
              "CC",
              "MED1",
              "ATPL",
              "LST",
              "AQ",
              "OPCRH",
              "PA",
              "FA",
              "CPL",
              "DG",
              "ESET",
              "Sec",
              "FF",
              "ENL4",
              "ENL5",
              "ENL6",
              "LC",
              "OPC",
              "LVTO",
              "LV",
              "RVSM",
              "TRI",
              "TRE",
              "AUS",
              "SQMM",
              "SECG",
              "BMVIT",
              "EFB",
              "GRT",
              "ESE",
              "OCC",
              "OICC",
              "PICC",
              "DITCH",
              "FAID",
              "WINTER",
              "BRNAV",
              "MNPS_ETOPS",
              "RACQ",
              "ETOPS",
              "TCAS",
              "CRM",
              "ASH",
              "USER0",
              "USER1",
              "USER2",
              "USER3",
              "USER4",
              "USER5",
              "USER6",
              "USER7",
              "USER8",
              "USER9",
              "ENG",
              "AUGM_CREW",
              "ADD_CREW",
              "CREW",
              "IR",
              "HW_OPS",
              "PBN",
              "PFI",
              "FM",
              "SEP",
              "SEP_IR",
              "FI_A",
              "MEP",
              "CR",
              "RC",
              "OBS",
              "DHC",
              "EX_CM"
            ],
            "example": "CMD"
          },
          "crewType": {
            "type": "string",
            "enum": [
              "FLIGHT_DECK",
              "CABIN"
            ],
            "example": "FLIGHT_DECK"
          },
          "isAssignable": {
            "type": "boolean",
            "example": true
          }
        }
      },
      "CrewPositionPageResult": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CrewPositionDto"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "RosterAssignmentsSearchRequest": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "example": 20
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0,
            "example": 0
          },
          "filters": {
            "type": "object",
            "required": [
              "dateRange"
            ],
            "properties": {
              "dateRange": {
                "type": "object",
                "required": [
                  "from",
                  "to"
                ],
                "properties": {
                  "from": {
                    "type": "string",
                    "format": "date-time",
                    "example": "2025-03-01T00:00:00.000Z"
                  },
                  "to": {
                    "type": "string",
                    "format": "date-time",
                    "example": "2025-03-31T23:59:59.999Z"
                  }
                }
              },
              "crewId": {
                "type": "string",
                "example": "crew-12345"
              },
              "rosterTypeId": {
                "type": "string",
                "example": "112233"
              }
            }
          },
          "sorts": {
            "type": "object",
            "properties": {
              "startDateTime": {
                "type": "string",
                "enum": [
                  "ASC",
                  "DESC"
                ],
                "default": "ASC"
              }
            }
          }
        }
      },
      "RosterAssignmentDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "crewId": {
            "type": "string"
          },
          "rosterTypeId": {
            "type": "string"
          },
          "dutyShiftType": {
            "type": "string",
            "enum": [
              "EARLY",
              "LATE",
              "ALL_DAY",
              "NIGHT"
            ]
          },
          "crewRole": {
            "type": "string",
            "enum": [
              "CMD",
              "FO",
              "INSTRUCTOR",
              "FA"
            ]
          },
          "startDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2025-03-01T09:00:00.000Z"
          },
          "endDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2025-03-01T17:00:00.000Z"
          },
          "actualStartDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "actualEndDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "dutyAirportCode": {
            "type": "string"
          },
          "departureAirportCode": {
            "type": "string"
          },
          "arrivalAirportCode": {
            "type": "string"
          },
          "serviceAirportCode": {
            "type": "string"
          },
          "flightNumber": {
            "type": "string"
          },
          "bookingId": {
            "type": "string"
          },
          "takeoffDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "landingDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "aircraft": {
            "$ref": "#/components/schemas/RosterAssignmentAircraftDto"
          },
          "logbook": {
            "$ref": "#/components/schemas/RosterAssignmentLogbook"
          },
          "ftl": {
            "$ref": "#/components/schemas/RosterAssignmentFtl"
          },
          "notes": {
            "type": "string"
          }
        }
      },
      "RosterAssignmentAircraftDto": {
        "type": "object",
        "properties": {
          "tailNumber": {
            "type": "string"
          },
          "crewPositionId": {
            "type": "string"
          },
          "aircraftModelCode": {
            "type": "string"
          },
          "qualificationTypeId": {
            "type": "string"
          },
          "externalAircraftRegistration": {
            "type": "string"
          },
          "engineConfiguration": {
            "type": "string",
            "enum": [
              "SINGLE_ENGINE",
              "MULTI_ENGINE"
            ]
          }
        }
      },
      "RosterAssignmentLogbook": {
        "type": "object",
        "properties": {
          "crewCompositionType": {
            "type": "string",
            "enum": [
              "SINGLE_PILOT",
              "MULTI_PILOT"
            ]
          },
          "operationalCondition": {
            "type": "string",
            "enum": [
              "IFR",
              "VFR",
              "NIGHT"
            ]
          },
          "operationType": {
            "type": "string",
            "enum": [
              "COMMERCIAL",
              "PRIVATE"
            ]
          },
          "aocId": {
            "type": "string"
          },
          "numDayTakeoffs": {
            "type": "integer",
            "format": "int64"
          },
          "numNightTakeoffs": {
            "type": "integer",
            "format": "int64"
          },
          "numDayLandings": {
            "type": "integer",
            "format": "int64"
          },
          "numNightLandings": {
            "type": "integer",
            "format": "int64"
          },
          "numPrecisionApproaches": {
            "type": "integer",
            "format": "int32"
          },
          "approachCategory": {
            "type": "string",
            "enum": [
              "CAT1",
              "CAT1_LTS",
              "CAT2",
              "CAT3",
              "LVO",
              "ILS",
              "GCA",
              "GPS",
              "MLS",
              "GLS",
              "PAR",
              "LOC",
              "LDA",
              "VLR",
              "RNP_AR",
              "RNP_RNAV",
              "TWO_D_AZIMUTH",
              "TWO_D_CDI",
              "THREE_D_CDI",
              "JPALS"
            ]
          },
          "numNonPrecisionApproaches": {
            "type": "integer",
            "format": "int32"
          },
          "isVisualApproach": {
            "type": "boolean"
          },
          "isInstrumentHold": {
            "type": "boolean"
          },
          "isFullMotionSimulator": {
            "type": "boolean"
          }
        }
      },
      "RosterAssignmentFtl": {
        "type": "object",
        "properties": {
          "beginsDutyPeriod": {
            "type": "boolean"
          },
          "endsDutyPeriod": {
            "type": "boolean"
          },
          "beginsSplitDutyBreak": {
            "type": "boolean"
          },
          "endsSplitDutyBreak": {
            "type": "boolean"
          },
          "dutyTimeMinutes": {
            "type": "integer"
          },
          "fdpTimeMinutes": {
            "type": "integer"
          },
          "blockTimeMinutes": {
            "type": "integer"
          }
        }
      },
      "RosterAssignmentSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "crewId": {
            "type": "string"
          },
          "rosterTypeId": {
            "type": "string"
          },
          "startDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "endDateTime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "RosterAssignmentPageResult": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RosterAssignmentSimplifiedDto"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "RosterAssignmentCreateDto": {
        "type": "object",
        "required": [
          "crewId",
          "rosterTypeId",
          "startDateTime",
          "endDateTime"
        ],
        "properties": {
          "crewId": {
            "type": "string"
          },
          "rosterTypeId": {
            "type": "string"
          },
          "startDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "endDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "dutyShiftType": {
            "type": "string",
            "enum": [
              "EARLY",
              "LATE",
              "ALL_DAY",
              "NIGHT"
            ]
          },
          "crewRole": {
            "type": "string",
            "enum": [
              "CMD",
              "FO",
              "INSTRUCTOR",
              "FA"
            ]
          },
          "actualStartDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "actualEndDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "dutyAirportCode": {
            "type": "string"
          },
          "departureAirportCode": {
            "type": "string"
          },
          "arrivalAirportCode": {
            "type": "string"
          },
          "serviceAirportCode": {
            "type": "string"
          },
          "flightNumber": {
            "type": "string"
          },
          "takeoffDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "landingDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "aircraft": {
            "$ref": "#/components/schemas/RosterAssignmentAircraftDto"
          },
          "logbook": {
            "$ref": "#/components/schemas/RosterAssignmentLogbook"
          },
          "ftl": {
            "$ref": "#/components/schemas/RosterAssignmentFtl"
          },
          "notes": {
            "type": "string"
          },
          "bookingId": {
            "type": "string"
          }
        }
      },
      "RosterAssignmentPatchDto": {
        "type": "object",
        "properties": {
          "dutyShiftType": {
            "type": "string",
            "enum": [
              "EARLY",
              "LATE",
              "ALL_DAY",
              "NIGHT"
            ]
          },
          "crewRole": {
            "type": "string",
            "enum": [
              "CMD",
              "FO",
              "INSTRUCTOR",
              "FA"
            ]
          },
          "startDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "endDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "actualStartDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "actualEndDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "dutyAirportCode": {
            "type": "string"
          },
          "departureAirportCode": {
            "type": "string"
          },
          "arrivalAirportCode": {
            "type": "string"
          },
          "serviceAirportCode": {
            "type": "string"
          },
          "flightNumber": {
            "type": "string"
          },
          "takeoffDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "landingDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "aircraft": {
            "$ref": "#/components/schemas/RosterAssignmentAircraftDto"
          },
          "logbook": {
            "$ref": "#/components/schemas/RosterAssignmentLogbook"
          },
          "ftl": {
            "$ref": "#/components/schemas/RosterAssignmentFtl"
          },
          "notes": {
            "type": "string"
          },
          "bookingId": {
            "type": "string"
          }
        }
      },
      "FlightWorkflow": {
        "type": "string",
        "enum": [
          "COMMERCIAL",
          "MAINTENANCE",
          "PRIVATE",
          "TRAINING",
          "OWNER",
          "INTERNAL",
          "RESERVED",
          "CHARTER",
          "SUBCHARTER",
          "SCHEDULED",
          "AMBULANCE",
          "CUSTOM1",
          "CUSTOM2",
          "CUSTOM3",
          "CUSTOM4",
          "CUSTOM5",
          "CUSTOM6",
          "BROKER",
          "BROKER_SUBCHARTER"
        ]
      },
      "FlightPageResult": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FlightSimplifiedDto"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "CrewQualificationPageResult": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CrewQualificationSimplifiedDto"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "AircraftPageResult": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AircraftSimplifiedDto"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "FlightSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "12345"
          },
          "flightNumber": {
            "type": "string",
            "example": "FL123"
          },
          "tailNumber": {
            "type": "string",
            "example": "N123AB"
          },
          "quoteId": {
            "type": "string",
            "example": "quote-67890"
          },
          "quoteExternalReference": {
            "type": "string",
            "example": "EXT-REF-123"
          },
          "quoteIdentifier": {
            "type": "string",
            "example": "Q-2025-001"
          },
          "blocksOffEstimated": {
            "type": "string",
            "format": "date-time",
            "example": "2025-01-15T10:30:00.000Z"
          },
          "blocksOnEstimated": {
            "type": "string",
            "format": "date-time",
            "example": "2025-01-15T14:45:00.000Z"
          },
          "tripNumber": {
            "type": "integer",
            "example": 1
          },
          "paxNumber": {
            "type": "integer",
            "example": 8
          },
          "arrivalAirport": {
            "$ref": "#/components/schemas/AirportDto"
          },
          "departureAirport": {
            "$ref": "#/components/schemas/AirportDto"
          },
          "customerId": {
            "type": "string",
            "example": "customer-123"
          },
          "accountId": {
            "type": "string",
            "example": "account-456"
          },
          "workflow": {
            "$ref": "#/components/schemas/FlightWorkflow"
          },
          "workflowCustomName": {
            "type": "string",
            "example": "Charter Flight"
          }
        }
      },
      "AircraftSimplifiedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "12345"
          },
          "tailNumber": {
            "type": "string",
            "example": "N123AB"
          },
          "name": {
            "type": "string",
            "example": "Gulfstream G650"
          },
          "notes": {
            "type": "string"
          },
          "typeOfUse": {
            "type": "string",
            "enum": [
              "CHARTER",
              "PRIVATE"
            ],
            "example": "CHARTER"
          },
          "numberOfSeats": {
            "type": "integer",
            "format": "int32",
            "example": 14
          },
          "status": {
            "type": "string",
            "enum": [
              "OTHER",
              "ACTIVE",
              "INACTIVE"
            ],
            "example": "ACTIVE"
          },
          "homeBase": {
            "type": "string",
            "example": "EGLL"
          },
          "category": {
            "type": "string",
            "enum": [
              "PISTON",
              "TURBO_PROP",
              "VERY_LIGHT_JET",
              "LIGHT_JET",
              "SUPER_LIGHT_JET",
              "MIDSIZE_JET",
              "SUPER_MIDSIZE_JET",
              "HEAVY_JET",
              "ULTRA_LONG_RANGE_JET",
              "VIP_JET",
              "AIRLINER",
              "AMPHIBIAN",
              "GYROCOPTER",
              "HELICOPTER",
              "SEA_PLANE",
              "TILT_ROTOR"
            ],
            "example": "HEAVY_JET"
          },
          "updatedAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2025-01-15T10:30:00.000Z"
          },
          "createdAtDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-15T10:30:00.000Z"
          }
        }
      }
    }
  },
  "x-original-swagger-version": "2.0"
}