{"x-generator":"NSwag v14.6.3.0 (NJsonSchema v11.5.2.0 (Newtonsoft.Json v13.0.0.0))","openapi":"3.0.0","info":{"title":"PreflightApi","description":"Aviation data API for VFR flight planning — weather, airports, airspace, NOTAMs, navigation, and E6B flight computer calculations.","version":"v1 (1.2.0)"},"servers":[{"url":"https://api.preflightapi.io"}],"paths":{"/api/v1/airports":{"get":{"tags":["Airports"],"summary":"Lists airports with optional search and state filtering","description":"Supports combinable query parameters for flexible filtering:\n\n``` GET /api/v1/airports — all airports (paginated) GET /api/v1/airports?search=Dallas — text search across name, city, ICAO, and FAA identifier GET /api/v1/airports?state=TX — airports in Texas GET /api/v1/airports?state=TX,OK,LA — airports in multiple states GET /api/v1/airports?search=Regional&state=TX — combined search + state filter ```","operationId":"Airport_GetAirports","parameters":[{"name":"search","in":"query","description":"Optional text search across airport name, city, ICAO code, and FAA identifier","schema":{"type":"string","nullable":true},"x-position":1},{"name":"state","in":"query","description":"Optional comma-separated two-letter state codes (e.g., TX or TX,OK,LA)","schema":{"type":"string","nullable":true},"x-position":2},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":3},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":4}],"responses":{"200":{"description":"Returns the paginated airports","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfAirportDto"}}}}}}},"/api/v1/airports/nearby":{"get":{"tags":["Airports"],"summary":"Searches for airports near a geographic point","description":"Useful for finding diversion airports, fuel stops, or nearby facilities.\n\n``` GET /api/v1/airports/nearby?lat=32.897&lon=-97.038&radiusNm=30 ```","operationId":"Airport_SearchNearby","parameters":[{"name":"lat","in":"query","description":"Latitude in decimal degrees (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"lon","in":"query","description":"Longitude in decimal degrees (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":3},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":4},{"name":"radiusNm","in":"query","description":"Search radius in nautical miles (default 30, max 500)","schema":{"type":"number","format":"double","default":30},"x-position":5}],"responses":{"200":{"description":"Returns the nearby airports","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfAirportDto"}}}},"400":{"description":"If coordinates or radius are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airports/{icaoCodeOrIdent}":{"get":{"tags":["Airports"],"summary":"Gets a specific airport by ICAO code or FAA identifier","description":"Accepts both ICAO codes and FAA identifiers. If the exact identifier is not found, the API automatically tries the alternate format (e.g., `KW05` resolves to `W05`, `PA88` resolves to `A88`, `DFW` resolves to `KDFW`).\n\n``` GET /api/v1/airports/KDFW — by ICAO code GET /api/v1/airports/DFW — by FAA identifier GET /api/v1/airports/KW05 — resolves to FAA identifier W05 GET /api/v1/airports/PA88 — resolves to FAA identifier A88 (Alaska) ```","operationId":"Airport_GetAirportByIcaoCodeOrIdent","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW, KW05). Case-insensitive. Automatically resolves ICAO/FAA format mismatches.","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the airport","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AirportDto"}}}},"404":{"description":"If the airport is not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airports/batch":{"get":{"tags":["Airports"],"summary":"Gets multiple airports by their ICAO codes or FAA identifiers","description":"Pass ICAO codes or FAA identifiers as a single comma-separated query parameter. Both ICAO codes (KDFW) and FAA identifiers (DFW) can be mixed in the same request. ICAO/FAA format mismatches are automatically resolved (e.g., `KW05` resolves to `W05`).\n\n``` GET /api/v1/airports/batch?ids=KDFW,KAUS,KHOU GET /api/v1/airports/batch?ids=KDFW,W05,PA88 ```","operationId":"Airport_GetAirportsBatch","parameters":[{"name":"ids","in":"query","description":"Comma-separated ICAO codes or FAA identifiers (e.g., KDFW,KAUS,KHOU)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the matching airports","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AirportDto"}}}}},"400":{"description":"If the ids parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airspaces/by-classes":{"get":{"tags":["Airspace"],"summary":"Gets controlled airspaces filtered by airspace class (B, C, or D).","description":"``` GET /api/v1/airspaces/by-classes?classes=B — all Class B airspaces GET /api/v1/airspaces/by-classes?classes=B,C,D — Class B, C, and D airspaces ```","operationId":"Airspace_GetByClasses","parameters":[{"name":"classes","in":"query","description":"Comma-separated airspace classes: B, C, or D","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the paginated airspaces","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfAirspaceDto"}}}},"400":{"description":"If the classes parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airspaces/by-cities":{"get":{"tags":["Airspace"],"summary":"Gets controlled airspaces filtered by city name.","description":"``` GET /api/v1/airspaces/by-cities?cities=Dallas — airspaces for Dallas GET /api/v1/airspaces/by-cities?cities=Dallas,Houston — multiple cities ```","operationId":"Airspace_GetByCity","parameters":[{"name":"cities","in":"query","description":"Comma-separated city names (e.g., Dallas or Dallas,Houston)","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the paginated airspaces","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfAirspaceDto"}}}},"400":{"description":"If the cities parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airspaces/by-states":{"get":{"tags":["Airspace"],"summary":"Gets controlled airspaces filtered by two-letter state code.","description":"``` GET /api/v1/airspaces/by-states?states=TX — airspaces in Texas GET /api/v1/airspaces/by-states?states=TX,OK — airspaces in Texas and Oklahoma ```","operationId":"Airspace_GetByState","parameters":[{"name":"states","in":"query","description":"Comma-separated two-letter state codes (e.g., TX or TX,OK)","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the paginated airspaces","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfAirspaceDto"}}}},"400":{"description":"If the states parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airspaces/special-use/by-type-codes":{"get":{"tags":["Airspace"],"summary":"Gets special use airspaces filtered by type code.","description":"**Type Codes**\n\n- `R` — Restricted\n\n- `P` — Prohibited\n\n- `W` — Warning\n\n- `A` — Alert\n\n- `M` — MOA (Military Operations Area)\n\n``` GET /api/v1/airspaces/special-use/by-type-codes?typeCodes=R,P — restricted and prohibited GET /api/v1/airspaces/special-use/by-type-codes?typeCodes=M — MOAs only ```","operationId":"Airspace_GetByTypeCode","parameters":[{"name":"typeCodes","in":"query","description":"Comma-separated type codes: R (restricted), P (prohibited), W (warning), A (alert), M (MOA)","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the paginated special use airspaces","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfSpecialUseAirspaceDto"}}}},"400":{"description":"If the type codes parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airspaces/by-icao-or-idents":{"get":{"tags":["Airspace"],"summary":"Gets controlled airspaces associated with specific airports by ICAO code or FAA identifier.","description":"Returns all controlled airspace boundaries (Class B, C, D) associated with the given airport identifiers. Each result includes the airspace classification, altitude limits, and boundary geometry. Pass multiple identifiers as a comma-separated list to retrieve airspaces for several airports in a single request.","operationId":"Airspace_GetByIcaoOrIdent","parameters":[{"name":"icaoOrIdents","in":"query","description":"Comma-separated ICAO codes or FAA identifiers (e.g., KDFW,KORD,KJFK)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the matching airspaces","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AirspaceDto"}}}}},"400":{"description":"The identifiers parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airspaces/by-global-ids":{"get":{"tags":["Airspace"],"summary":"Gets controlled airspaces by their global IDs. This endpoint is designed to be used with the\nAirspaceGlobalIds returned by the navigation log endpoint (POST /api/v1/navlog/calculate)\nto retrieve full details for airspaces along a planned route.","description":"``` GET /api/v1/airspaces/by-global-ids?globalIds={guid1},{guid2} ```","operationId":"Airspace_GetByGlobalIds","parameters":[{"name":"globalIds","in":"query","description":"Comma-separated global IDs (GUIDs from the navlog response's AirspaceGlobalIds field)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the matching airspaces","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AirspaceDto"}}}}},"400":{"description":"If the global IDs parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/airspaces/special-use/by-global-ids":{"get":{"tags":["Airspace"],"summary":"Gets special use airspaces by their global IDs. This endpoint is designed to be used with the\nSpecialUseAirspaceGlobalIds returned by the navigation log endpoint (POST /api/v1/navlog/calculate)\nto retrieve full details for special use airspaces along a planned route.","description":"``` GET /api/v1/airspaces/special-use/by-global-ids?globalIds={guid1},{guid2} ```","operationId":"Airspace_GetSpecialUseByGlobalIds","parameters":[{"name":"globalIds","in":"query","description":"Comma-separated global IDs (GUIDs from the navlog response's SpecialUseAirspaceGlobalIds field)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the matching special use airspaces","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpecialUseAirspaceDto"}}}}},"400":{"description":"If the global IDs parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/briefing/route":{"post":{"tags":["Briefing"],"summary":"Generates a composite weather briefing for a flight route. Accepts a list of waypoints\n(airport identifiers or lat/lon coordinates) and returns all weather products affecting\nthe route corridor: METARs and TAFs for airports along the route, PIREPs within the\ncorridor, SIGMETs and G-AIRMETs intersecting the route, and active NOTAMs.","description":"Each waypoint is either an airport identifier (ICAO or FAA) or a lat/lon coordinate. At least two waypoints are required. The corridor width controls how far from the route centerline to search for PIREPs, airports, and NOTAMs (default 25 NM each side). Airport identifiers automatically resolve ICAO/FAA format mismatches — for example, `KW05` resolves to `W05`, and `PA88` resolves to `A88`.\n\n**Airport-only route**\n\n``` { \"waypoints\": [ { \"airportIdentifier\": \"KDFW\" }, { \"airportIdentifier\": \"KAUS\" } ] } ```\n\n**Mixed route with coordinate waypoints and custom corridor**\n\n``` { \"waypoints\": [ { \"airportIdentifier\": \"KDFW\" }, { \"latitude\": 31.5, \"longitude\": -97.2 }, { \"airportIdentifier\": \"KAUS\" } ], \"corridorWidthNm\": 30 } ```\n\n**Response Contents**\n\n- `Metars` — latest METARs for airports within the corridor\n\n- `Tafs` — current TAFs for airports within the corridor\n\n- `Pireps` — pilot reports within the corridor\n\n- `Sigmets` — active SIGMETs whose boundaries intersect the route\n\n- `GAirmets` — active G-AIRMETs whose boundaries intersect the route\n\n- `Notams` — active NOTAMs for airports along the route","operationId":"Briefing_GetRouteBriefing","requestBody":{"x-name":"request","description":"Route definition containing Waypoints (minimum 2, each with AirportIdentifier\nor Latitude/Longitude) and optional CorridorWidthNm (default 25).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteBriefingRequest"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the route weather briefing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteBriefingResponse"}}}},"400":{"description":"If the request is invalid (fewer than 2 waypoints, invalid coordinates, etc.)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"If an airport waypoint is not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/chart-supplements/{icaoCodeOrIdent}":{"get":{"tags":["Chart Supplements"],"summary":"Gets time-limited pre-signed URLs for all chart supplement pages for an airport.\nMulti-page supplements will have one URL per page. The URLs expire after a limited period;\nrequest new URLs if they have expired.","description":"Returns the airport's name, city, code, and a list of page URLs. Accepts both ICAO codes and FAA identifiers — ICAO prefixes (`K`, `P`) are automatically stripped to resolve the FAA identifier (e.g., `KDFW` resolves to `DFW`, `PA88` resolves to `A88`).\n\n``` GET /api/v1/chart-supplements/KDFW GET /api/v1/chart-supplements/DFW GET /api/v1/chart-supplements/KW05 — resolves to FAA identifier W05 ```","operationId":"ChartSupplement_GetChartSupplements","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches.","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the chart supplements for the airport","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChartSupplementsResponseDto"}}}},"404":{"description":"If no chart supplements are found for the given identifier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/communication-frequencies/{servicedFacility}":{"get":{"tags":["Communication Frequencies"],"summary":"Gets all communication frequencies for a serviced facility (airport or ATC facility).\nReturns frequencies including their intended use (e.g., TWR, GND, ATIS, APP, DEP),\ncall signs, operating hours, and sectorization details.","description":"Frequencies are stored under the FAA airport code (e.g., `DFW`), but you can pass either format — ICAO prefixes (`K`, `P`, `H`) are automatically stripped (e.g., `KDFW` resolves to `DFW`, `PA88` resolves to `A88`).\n\n``` GET /api/v1/communication-frequencies/DFW — by FAA identifier GET /api/v1/communication-frequencies/KDFW — ICAO prefix stripped automatically GET /api/v1/communication-frequencies/KW05 — resolves to FAA identifier W05 ```","operationId":"CommunicationFrequency_GetFrequenciesByServicedFacility","parameters":[{"name":"servicedFacility","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. ICAO prefixes are automatically stripped to resolve the FAA facility code.","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the communication frequencies","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfCommunicationFrequencyDto"}}}},"400":{"description":"If the serviced facility identifier is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"If the facility is not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/e6b/crosswind/{icaoCodeOrIdent}":{"get":{"tags":["E6B Flight Computer"],"summary":"Calculates crosswind and headwind components for every runway at an airport using live METAR wind data.","description":"Fetches the airport's latest METAR observation and computes wind components for each runway end. The response includes a `RecommendedRunway` — the runway end with the lowest crosswind that also has a headwind (not a tailwind).\n\n**Sign Conventions**\n\n- `CrosswindKt` — positive = wind from the right, negative = wind from the left\n\n- `HeadwindKt` — positive = headwind (favorable), negative = tailwind (unfavorable)\n\nIf the METAR reports variable wind (VRB), `IsVariableWind` is true and crosswind components are calculated using the full wind speed for all runway ends. If gusts are reported, separate `GustCrosswindKt` and `GustHeadwindKt` fields show the worst-case gust components.","operationId":"E6b_GetCrosswindForAirport","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches (e.g., KW05 resolves to W05).","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns crosswind data for all runways with a recommended runway","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AirportCrosswindResponseDto"}}}},"400":{"description":"The METAR is missing wind direction or wind speed data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"The airport was not found, or no current METAR is available for this airport","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/e6b/crosswind/calculate":{"post":{"tags":["E6B Flight Computer"],"summary":"Calculates crosswind and headwind components from manually provided wind and runway heading values.","description":"Provide wind direction, wind speed, and a runway heading to compute the headwind and crosswind components. Optionally include a gust speed to also compute gust components.\n\n**Sign Conventions**\n\n- `CrosswindKt` — positive = wind from the right, negative = wind from the left\n\n- `HeadwindKt` — positive = headwind (favorable), negative = tailwind (unfavorable)","operationId":"E6b_CalculateCrosswind","requestBody":{"x-name":"request","description":"WindDirectionDegrees (0-360, or null for variable),\nWindSpeedKt (knots),\nWindGustKt (knots, optional),\nRunwayHeadingDegrees (magnetic degrees, 0-360).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrosswindCalculationRequestDto"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the calculated crosswind and headwind components","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrosswindCalculationResponseDto"}}}},"400":{"description":"The request parameters are invalid (e.g., wind speed is negative)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/e6b/density-altitude/{icaoCodeOrIdent}":{"get":{"tags":["E6B Flight Computer"],"summary":"Calculates density altitude for an airport using live METAR data with optional overrides.","description":"Fetches the airport's latest METAR to obtain temperature and altimeter setting, then computes density altitude using the ISA model. You can optionally override either value via query parameters for \"what if\" scenarios (e.g., \"what would density altitude be if the temperature reached 40°C?\").\n\n**Response Fields**\n\n- `DensityAltitudeFt` — the effective altitude the aircraft \"feels\" based on air density\n\n- `PressureAltitudeFt` — field elevation corrected for non-standard pressure\n\n- `IsaTemperatureCelsius` — the standard (ISA) temperature expected at this pressure altitude\n\n- `TemperatureDeviationCelsius` — how far the actual temperature deviates from ISA (positive = hotter than standard)\n\n*Formula:*`DA = PA + 120 * (OAT - ISA_temp)`. This does not account for humidity, local pressure patterns, or non-standard lapse rates.","operationId":"E6b_GetDensityAltitudeForAirport","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches (e.g., KW05 resolves to W05).","schema":{"type":"string"},"x-position":1},{"name":"TemperatureCelsiusOverride","in":"query","description":"Override temperature in Celsius (uses METAR if not provided)","schema":{"type":"number","format":"double","nullable":true},"x-position":2},{"name":"AltimeterInHgOverride","in":"query","description":"Override altimeter setting in inHg (uses METAR if not provided)","schema":{"type":"number","format":"double","nullable":true},"x-position":3}],"responses":{"200":{"description":"Returns density altitude data for the airport","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DensityAltitudeResponseDto"}}}},"400":{"description":"The METAR is missing temperature or altimeter data and no override was provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"The airport was not found, or no current METAR is available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/e6b/density-altitude/calculate":{"post":{"tags":["E6B Flight Computer"],"summary":"Calculates density altitude from manually provided field elevation, altimeter setting, and temperature.","description":"Provide your own values instead of relying on METAR data. Useful for any location, for planning with forecast temperatures, or when METAR data is not available.\n\n**Response Fields**\n\n- `DensityAltitudeFt` — the effective altitude the aircraft \"feels\" based on air density\n\n- `PressureAltitudeFt` — field elevation corrected for non-standard pressure\n\n- `IsaTemperatureCelsius` — the standard (ISA) temperature expected at this pressure altitude\n\n- `TemperatureDeviationCelsius` — how far the actual temperature deviates from ISA (positive = hotter than standard)\n\n*Formula:*`DA = PA + 120 * (OAT - ISA_temp)`. This does not account for humidity, local pressure patterns, or non-standard lapse rates.","operationId":"E6b_CalculateDensityAltitude","requestBody":{"x-name":"request","description":"FieldElevationFt (feet MSL),\nAltimeterInHg (inches of mercury),\nTemperatureCelsius (degrees Celsius).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DensityAltitudeRequestDto"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the calculated density altitude","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DensityAltitudeResponseDto"}}}},"400":{"description":"The request parameters are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/e6b/wind-triangle/calculate":{"post":{"tags":["E6B Flight Computer"],"summary":"Solves the wind triangle to compute true heading and ground speed.","description":"Given your desired true course, true airspeed, and the wind conditions, this calculates the heading you need to fly to stay on course and your resulting ground speed.\n\n**Response Fields**\n\n- `TrueHeadingDegrees` — the heading to fly (true course + wind correction angle)\n\n- `GroundSpeedKt` — your speed over the ground after accounting for wind\n\n- `WindCorrectionAngleDegrees` — the crab angle needed to stay on course (positive = correct to the right, negative = correct to the left)\n\n- `HeadwindComponentKt` — positive = headwind, negative = tailwind\n\n- `CrosswindComponentKt` — positive = from the right, negative = from the left\n\nWind direction is the direction the wind is blowing *from* (standard meteorological convention).","operationId":"E6b_CalculateWindTriangle","requestBody":{"x-name":"request","description":"TrueCourseDegrees (0-360),\nTrueAirspeedKt (knots, must be greater than 0),\nWindDirectionDegrees (0-360, direction wind blows from),\nWindSpeedKt (knots).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WindTriangleRequestDto"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the wind triangle solution","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WindTriangleResponseDto"}}}},"400":{"description":"The request parameters are invalid (e.g., TAS is zero or negative)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/e6b/true-airspeed/calculate":{"post":{"tags":["E6B Flight Computer"],"summary":"Calculates true airspeed (TAS) from calibrated airspeed, pressure altitude, and outside air temperature.","description":"Uses the full compressible isentropic flow conversion (CAS to impact pressure to Mach to TAS), accurate from sea level through FL410+ including above the ISA tropopause at 36,089 ft. This is more accurate than the simplified `CAS / sqrt(sigma)` formula, which diverges significantly at higher altitudes.\n\n**Response Fields**\n\n- `TrueAirspeedKt` — the aircraft's actual speed through the air mass (knots)\n\n- `DensityAltitudeFt` — density altitude at the given conditions (feet)\n\n- `MachNumber` — the aircraft's speed as a fraction of the local speed of sound\n\n*Note:* The ISA tropopause is modeled at 36,089 ft. The real tropopause varies from ~26,000 ft near the poles to ~55,000 ft near the equator, which affects accuracy at high altitudes in non-mid-latitude regions.","operationId":"E6b_CalculateTrueAirspeed","requestBody":{"x-name":"request","description":"CalibratedAirspeedKt (knots, must be greater than 0),\nPressureAltitudeFt (feet, can be negative),\nOutsideAirTemperatureCelsius (degrees Celsius).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrueAirspeedRequestDto"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the TAS calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrueAirspeedResponseDto"}}}},"400":{"description":"The request parameters are invalid (e.g., CAS is zero or negative)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/e6b/cloud-base/calculate":{"post":{"tags":["E6B Flight Computer"],"summary":"Estimates cloud base height AGL from surface temperature and dewpoint spread.","description":"Uses the standard pilot rule of thumb: `cloud base (ft AGL) = (temperature - dewpoint) * 400`. This approximates the lifting condensation level based on the average dry adiabatic lapse rate (~3°C/1000 ft) and dewpoint lapse rate (~0.5°C/1000 ft).\n\n**Response Fields**\n\n- `EstimatedCloudBaseFtAgl` — estimated height of the cloud base above ground level (feet)\n\n- `TemperatureDewpointSpreadCelsius` — the difference between temperature and dewpoint (degrees Celsius)\n\n*Note:* Actual cloud bases vary with humidity profiles, inversions, and local convective conditions. A small spread (less than 3°C) generally indicates a high likelihood of low ceilings or fog.","operationId":"E6b_CalculateCloudBase","requestBody":{"x-name":"request","description":"TemperatureCelsius (surface temperature in °C) and\nDewpointCelsius (dewpoint in °C, must be less than or equal to the temperature).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudBaseRequestDto"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the cloud base estimation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudBaseResponseDto"}}}},"400":{"description":"The dewpoint exceeds the temperature, which is physically invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/e6b/pressure-altitude/calculate":{"post":{"tags":["E6B Flight Computer"],"summary":"Calculates pressure altitude from field elevation and altimeter setting.","description":"Pressure altitude is the altitude in the standard atmosphere where the pressure equals the current pressure at your location. It is the starting point for density altitude, TAS, and performance chart calculations.\n\n*Formula:*`PA = FieldElevation + (29.92 - Altimeter) * 1000`\n\n**Response Fields**\n\n- `PressureAltitudeFt` — the calculated pressure altitude (feet)\n\n- `AltimeterCorrectionFt` — the deviation from standard pressure expressed in feet (positive = lower pressure than standard, negative = higher)\n\n*Note:* The 1 inHg = 1000 ft approximation is most accurate near sea level and diverges slightly at higher elevations and extreme altimeter settings.","operationId":"E6b_CalculatePressureAltitude","requestBody":{"x-name":"request","description":"FieldElevationFt (feet MSL) and\nAltimeterInHg (inches of mercury, must be between 25.0 and 35.0).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PressureAltitudeRequestDto"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the pressure altitude calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PressureAltitudeResponseDto"}}}},"400":{"description":"The altimeter setting is outside the valid range (25.0 - 35.0 inHg)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/g-airmets":{"get":{"tags":["Weather - G-AIRMETs"],"summary":"Gets all current G-AIRMET advisories across all product types and hazards.","description":"Returns every active G-AIRMET regardless of product type (SIERRA, TANGO, ZULU) or hazard type. Each advisory includes the hazard, severity, affected altitude range, forecast valid time, and a geographic polygon defining the affected area. Use the `GET /product/{product}` or `GET /hazard/{hazardType}` endpoints to filter by specific product or hazard type.","operationId":"GAirmet_GetAllGAirmets","parameters":[{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":1},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":2}],"responses":{"200":{"description":"Returns the paginated list of all current G-AIRMETs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfGAirmetDto"}}}}}}},"/api/v1/g-airmets/product/{product}":{"get":{"tags":["Weather - G-AIRMETs"],"summary":"Gets G-AIRMETs filtered by product type.","description":"**Product Types**\n\n- `SIERRA` — IFR conditions and mountain obscuration\n\n- `TANGO` — turbulence, low-level wind shear, and strong surface winds\n\n- `ZULU` — icing and freezing level\n\n``` GET /api/v1/g-airmets/product/SIERRA GET /api/v1/g-airmets/product/ZULU ```","operationId":"GAirmet_GetGAirmetsByProduct","parameters":[{"name":"product","in":"path","required":true,"description":"Product type: SIERRA, TANGO, or ZULU","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the filtered G-AIRMETs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfGAirmetDto"}}}},"400":{"description":"If the product type is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/g-airmets/hazard/{hazardType}":{"get":{"tags":["Weather - G-AIRMETs"],"summary":"Gets G-AIRMETs filtered by hazard type.","description":"**Hazard Types**\n\n- `IFR` — IFR conditions (ceiling below 1000 ft and/or visibility below 3 SM)\n\n- `MT_OBSC` — mountain obscuration\n\n- `TURB_LO` — low-level turbulence (below FL180)\n\n- `TURB_HI` — high-level turbulence (FL180 and above)\n\n- `LLWS` — low-level wind shear\n\n- `SFC_WIND` — strong surface winds (30 kt or greater)\n\n- `ICE` — icing\n\n- `FZLVL` — freezing level\n\n- `M_FZLVL` — multiple freezing levels\n\n``` GET /api/v1/g-airmets/hazard/ICE GET /api/v1/g-airmets/hazard/TURB_LO ```","operationId":"GAirmet_GetGAirmetsByHazardType","parameters":[{"name":"hazardType","in":"path","required":true,"description":"Hazard type: MT_OBSC, IFR, TURB_LO, TURB_HI, LLWS, SFC_WIND, ICE, FZLVL, or M_FZLVL","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the filtered G-AIRMETs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfGAirmetDto"}}}},"400":{"description":"If the hazard type is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/g-airmets/affecting":{"get":{"tags":["Weather - G-AIRMETs"],"summary":"Finds G-AIRMETs whose geographic boundary contains the given point. Returns advisories\nthat affect a specific location, answering \"what G-AIRMETs are active at this position?\"","description":"``` GET /api/v1/g-airmets/affecting?lat=32.897&lon=-97.038 ```","operationId":"GAirmet_SearchAffecting","parameters":[{"name":"lat","in":"query","description":"Latitude in decimal degrees (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"lon","in":"query","description":"Longitude in decimal degrees (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":3},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":4}],"responses":{"200":{"description":"Returns the G-AIRMETs found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfGAirmetDto"}}}},"400":{"description":"If coordinates are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/metars/{icaoCodeOrIdent}":{"get":{"tags":["Weather - METARs"],"summary":"Gets the most recent METAR observation for a specific airport.\nReturns decoded weather data including wind, visibility, sky conditions, temperature, and flight category.","description":"Accepts both ICAO codes and FAA identifiers. If the exact identifier is not found, the API automatically tries the alternate format (e.g., `KW05` resolves to `W05`, `DFW` resolves to `KDFW`). Note that many small airports do not have weather reporting stations and will return 404 regardless of identifier format.\n\n``` GET /api/v1/metars/KDFW — by ICAO code GET /api/v1/metars/DFW — by FAA identifier GET /api/v1/metars/KW05 — resolves to W05 (may still 404 if airport has no weather station) ```","operationId":"Metar_GetMetarForAirport","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches.","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the METAR observation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetarDto"}}}},"404":{"description":"If no METAR is found for the airport","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/metars/batch":{"get":{"tags":["Weather - METARs"],"summary":"Gets the most recent METAR observations for multiple airports in a single request.\nAccepts ICAO codes or FAA identifiers. Identifiers that don't resolve to a METAR are silently skipped.","description":"Both ICAO codes and FAA identifiers can be mixed in the same request. ICAO/FAA format mismatches are automatically resolved (e.g., `KW05` resolves to `W05`). Maximum 100 identifiers per request.\n\n``` GET /api/v1/metars/batch?ids=KDFW,KAUS,KHOU GET /api/v1/metars/batch?ids=DFW,AUS,KW05 ```","operationId":"Metar_GetMetarsBatch","parameters":[{"name":"ids","in":"query","description":"Comma-separated ICAO codes or FAA identifiers (e.g., KDFW,KAUS,KHOU). Maximum 100.","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the METAR observations","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MetarDto"}}}}},"400":{"description":"If the ids parameter is empty or exceeds 100 identifiers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/metars":{"get":{"tags":["Weather - METARs"],"summary":"Gets METARs for airports in one or more states","description":"Pass state codes as a single comma-separated query parameter:\n\n``` GET /api/v1/metars?state=TX — METARs for Texas airports GET /api/v1/metars?state=TX,OK,LA — METARs for multiple states ```","operationId":"Metar_GetMetarsByState","parameters":[{"name":"state","in":"query","description":"Comma-separated two-letter state codes (e.g., TX or TX,OK,LA)","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the paginated METARs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfMetarDto"}}}},"400":{"description":"If the state parameter is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/navaids":{"get":{"tags":["Navaids"],"summary":"Gets a paginated list of navaids with optional filtering.","description":"``` GET /api/v1/navaids — all navaids (paginated) GET /api/v1/navaids?search=DFW — search by identifier, name, or city GET /api/v1/navaids?type=VOR — filter by facility type GET /api/v1/navaids?state=TX — filter by state GET /api/v1/navaids?search=Dallas&type=VORTAC&state=TX — combine filters ```","operationId":"Navaid_GetNavaids","parameters":[{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":1},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":2},{"name":"search","in":"query","description":"Search across NavId (starts with), Name (contains), and City (contains)","schema":{"type":"string","nullable":true},"x-position":3},{"name":"type","in":"query","description":"Filter by navaid facility type (e.g., VOR, VORTAC, VOR/DME, NDB, NDB/DME, TACAN, DME)","schema":{"type":"string","nullable":true},"x-position":4},{"name":"state","in":"query","description":"Filter by two-letter state code (e.g., TX, CA)","schema":{"type":"string","nullable":true},"x-position":5}],"responses":{"200":{"description":"Returns the navaids","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfNavaidDto"}}}}}}},"/api/v1/navaids/type/{type}":{"get":{"tags":["Navaids"],"summary":"Gets a paginated list of navaids filtered by facility type.","description":"``` GET /api/v1/navaids/type/Vor — all VOR facilities GET /api/v1/navaids/type/Vortac — all VORTAC facilities GET /api/v1/navaids/type/NdbDme — all NDB/DME facilities ```","operationId":"Navaid_GetByType","parameters":[{"name":"type","in":"path","required":true,"description":"NAVAID facility type enum value","schema":{"$ref":"#/components/schemas/NavaidType"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the navaids","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfNavaidDto"}}}}}}},"/api/v1/navaids/{navId}":{"get":{"tags":["Navaids"],"summary":"Gets all navaids matching an identifier. Because NavId is not globally unique\n(e.g., \"DFW\" can be both a VOR and an NDB), this endpoint returns a list.","description":"``` GET /api/v1/navaids/DFW — returns all navaids with identifier \"DFW\" GET /api/v1/navaids/BIE — returns all navaids with identifier \"BIE\" ```","operationId":"Navaid_GetByIdentifier","parameters":[{"name":"navId","in":"path","required":true,"description":"NAVAID facility identifier (e.g., DFW, AUS, BIE)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the matching navaids","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NavaidDto"}}}}},"400":{"description":"If the identifier is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"If no navaids match the identifier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/navaids/batch":{"get":{"tags":["Navaids"],"summary":"Gets navaids for multiple identifiers in a single request.","description":"``` GET /api/v1/navaids/batch?ids=DFW,BIE,AUS ```","operationId":"Navaid_GetBatch","parameters":[{"name":"ids","in":"query","description":"Comma-separated list of NAVAID identifiers (maximum 100)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the matching navaids (may include multiple per identifier)","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NavaidDto"}}}}},"400":{"description":"If the list is empty or exceeds 100 identifiers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/navaids/nearby":{"get":{"tags":["Navaids"],"summary":"Searches for navaids near a geographic point. Results are filtered by radius but not sorted by distance;\npagination order is deterministic but arbitrary.","description":"``` GET /api/v1/navaids/nearby?lat=32.897&lon=-97.038 — default 30 NM radius GET /api/v1/navaids/nearby?lat=32.897&lon=-97.038&radiusNm=50&type=VOR — VORs within 50 NM ```","operationId":"Navaid_SearchNearby","parameters":[{"name":"lat","in":"query","description":"Latitude in decimal degrees (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"lon","in":"query","description":"Longitude in decimal degrees (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":3},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":4},{"name":"radiusNm","in":"query","description":"Search radius in nautical miles (default 30, must be greater than 0)","schema":{"type":"number","format":"double","default":30},"x-position":5},{"name":"type","in":"query","description":"Optional navaid type filter (e.g., VOR, VORTAC, NDB)","schema":{"type":"string","nullable":true},"x-position":6}],"responses":{"200":{"description":"Returns the navaids found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfNavaidDto"}}}},"400":{"description":"If coordinates or radius are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/navlog/calculate":{"post":{"tags":["Navigation Log"],"summary":"Calculates a complete VFR navigation log for a cross-country flight.","description":"Provide an ordered list of waypoints (minimum 2) with aircraft performance data, a cruising altitude, and a departure time. The service calculates every leg of the route and returns detailed per-leg data including course, heading, ground speed, distance, estimated time, fuel burn, and wind information.\n\n**Automatic Waypoint Insertion**\n\nThe service automatically inserts calculated waypoints into the route to model climb and descent phases:\n\n- **Top of Climb (TOC)** — Inserted after departure (or after a refueling stop) at the point where the aircraft reaches cruising altitude. Position is calculated using the climb true airspeed and climb rate from your performance data. Legs before the TOC use climb airspeed and climb fuel burn rate.\n\n- **Top of Descent (TOD)** — Inserted before the destination (or before a refueling stop) at the point where the aircraft should begin descending. Calculated using descent airspeed, descent rate, and a 3 NM final approach buffer. Legs after the TOD use descent airspeed and descent fuel burn rate.\n\n- **Bottom of Descent (BOD)** — Inserted 3 NM before the destination airport at Traffic Pattern Altitude (airport elevation + 1000 ft, rounded to the nearest 100 ft). This marks the point where the aircraft levels off at pattern altitude for the approach.\n\n**Wind Correction**\n\nThe service automatically fetches winds aloft forecast data based on your departure time and selects the nearest reporting station to each waypoint. Wind direction, speed, and temperature are interpolated to the leg's altitude. The magnetic heading returned for each leg is the actual heading to fly after accounting for both magnetic variation and wind correction. If wind data is unavailable, the calculation proceeds with zero-wind assumptions (ground speed equals true airspeed).\n\n**Fuel Tracking**\n\nFuel is tracked across the entire route. Start/Taxi/Takeoff (STT) fuel is deducted at departure and again after each refueling stop. Each leg burns fuel at the rate matching its phase (climb, cruise, or descent). The `RemainingFuelGals` field on each leg shows usable fuel remaining at the end of that leg. Refueling stops can either add a specific number of gallons or refuel to full capacity.\n\n**Refueling Stops**\n\nAny intermediate waypoint can be marked as a refueling stop. When a refueling stop is present, the route is segmented so that each segment gets its own independent TOC, TOD, and BOD waypoints. This models a real multi-leg flight where you climb out after each stop and descend into each landing.\n\n**Airspace and Obstacle Detection**\n\nAfter calculating the route, the service queries the database for controlled airspaces (Class B, C, D, E), special use airspaces (Restricted, Prohibited, MOA, Warning, Alert), and obstacles along the route corridor. The response includes identifier collections that you can use with other endpoints to retrieve full details:\n\n- `AirspaceGlobalIds` — use with `GET /api/v1/airspaces/by-global-ids`\n\n- `SpecialUseAirspaceGlobalIds` — use with `GET /api/v1/airspaces/special-use/by-global-ids`\n\n- `ObstacleOasNumbers` — use with `POST /api/v1/obstacles/by-oas-numbers`","operationId":"Navlog_CalculateNavlog","requestBody":{"x-name":"request","description":"Navigation log request containing:\nWaypoints (ordered route points with lat/lon/altitude, minimum 2),\nPerformanceData (climb/cruise/descent airspeeds in knots, climb/descent rates in FPM,\nfuel burn rates in GPH, STT fuel in gallons, and total fuel on board in gallons),\nPlannedCruisingAltitude (feet MSL), and\nTimeOfDeparture (UTC, used to select the appropriate winds aloft forecast).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NavlogRequestDto"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the calculated navigation log","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NavlogResponseDto"}}}},"400":{"description":"\n             The request data is invalid. Common causes: fewer than 2 waypoints, missing performance data,\n             or invalid coordinate values.\n             ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"\n             An external service required for the calculation is temporarily unavailable.\n             This can be the NOAA magnetic variation API or the winds aloft data source.\n             ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/navlog/bearing-and-distance":{"post":{"tags":["Navigation Log"],"summary":"Calculates the great-circle bearing and distance between two geographic points.","description":"Provide a start and end point as latitude/longitude in decimal degrees. The service computes:\n\n- **True Course** — The initial bearing from start to end referenced to True North (0-360 degrees), computed using WGS84 geodesic (great-circle) geometry.\n\n- **Magnetic Course** — The true course adjusted for local magnetic variation at the start point. This is the course you would read on a magnetic compass (0-360 degrees).\n\n- **Distance** — The great-circle distance between the two points in nautical miles.\n\nThis endpoint is useful for quick point-to-point calculations without building a full navigation log. Note that this returns *course* (direction of the route), not *heading* (direction the aircraft nose points). For wind-corrected headings, use the full navigation log endpoint.","operationId":"Navlog_CalculateBearingAndDistance","requestBody":{"x-name":"request","description":"Start and end point coordinates. All values are in decimal degrees\n(e.g., 36.1245 for latitude, -86.6782 for longitude).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BearingAndDistanceRequestDto"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the bearing and distance calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BearingAndDistanceResponseDto"}}}},"400":{"description":"The coordinates are invalid (e.g., latitude outside -90 to 90 range)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"The NOAA magnetic variation service is temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/navlog/winds-aloft/{forecast}":{"get":{"tags":["Navigation Log"],"summary":"Retrieves winds aloft (FB) forecast data for all reporting sites across the US.","description":"Returns wind direction, wind speed, and temperature at standard altitude levels for every winds aloft reporting station in the United States. This is the same raw forecast data that the navigation log calculator uses internally to compute wind-corrected headings and ground speeds.\n\n**Altitude Levels**\n\nData is provided at the following standard levels (feet MSL): 3000, 6000, 9000, 12000, 18000, 24000, 30000, 34000, and 39000. Not all stations report temperature at every level. Wind direction and speed may be null for calm or light/variable conditions.\n\n**Forecast Periods**\n\n- **6-hour** — Short-range forecast, most accurate for near-term flights\n\n- **12-hour** — Medium-range forecast for flights departing later in the day\n\n- **24-hour** — Long-range forecast for next-day planning\n\n**Response Structure**\n\nThe response includes the forecast validity window (`ValidTime`, `ForUseStartTime`, `ForUseEndTime`) and a list of reporting sites. Each site has an identifier, coordinates, and a dictionary of wind/temperature data keyed by altitude level (e.g., \"3000\", \"6000\"). Wind direction is in degrees true (the direction wind is blowing *from*), speed is in knots, and temperature is in degrees Celsius.","operationId":"Navlog_GetWindsAloftData","parameters":[{"name":"forecast","in":"path","required":true,"description":"Forecast period in hours. Must be 6, 12, or 24.","schema":{"type":"integer","format":"int32"},"x-position":1}],"responses":{"200":{"description":"Returns the winds aloft forecast data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WindsAloftDto"}}}},"400":{"description":"The forecast period is not 6, 12, or 24","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"The winds aloft data source is temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/notams/number/{notamNumber}":{"get":{"tags":["NOTAMs"],"summary":"Gets NOTAMs by NOTAM number in various formats.","description":"Searches the database for NOTAMs matching the given number. Unlike most NOTAM endpoints, this does *not* filter out cancelled or expired NOTAMs — so results may include recently expired or cancelled NOTAMs that have not yet been purged. This is *not* a historical archive; the database periodically purges stale NOTAMs.\n\n**Supported Input Formats**\n\n- **Bare number** — `3997`\n\n- **Number/year** — `3997/2025` or `3997/25`\n\n- **Month-prefix** — `03/420`\n\n- **Domestic** — `BNA 420`, `BNA 03/420`, `!BNA 03/420`\n\n- **FDC** — `FDC 4/3997`, `!FDC 4/3997`\n\n- **ICAO** — `A1234/25`\n\n**Disambiguation**\n\nBare numbers (e.g., `3997`) may match multiple NOTAMs across different accounts or years. Include the year, account ID, or full domestic format to narrow results.\n\n**Examples**\n\n``` GET /api/v1/notams/number/3997 — bare number (may return multiple matches) GET /api/v1/notams/number/3997%2F2025 — number with year (%2F = /) GET /api/v1/notams/number/BNA%20420 — domestic format (%20 = space) GET /api/v1/notams/number/A1234%2F25 — ICAO format ```","operationId":"Notam_GetNotamsByNumber","parameters":[{"name":"notamNumber","in":"path","required":true,"description":"NOTAM number in any supported format (URL-encoded)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the matching NOTAMs","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NotamDto"}}}}},"400":{"description":"If the input cannot be parsed or is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"If no NOTAMs match the given number","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/notams/{icaoCodeOrIdent}":{"get":{"tags":["NOTAMs"],"summary":"Gets all active NOTAMs for a specific airport.","description":"Returns NOTAMs matching the airport's FAA identifier or ICAO code. The identifier is case-insensitive — `kdfw`, `KDFW`, and `DFW` all match the same airport.\n\n**Optional Filters**\n\nAll filter parameters are optional and can be combined to narrow results:\n\n- `classification` — NOTAM classification: `INTERNATIONAL`, `MILITARY`, `LOCAL_MILITARY`, `DOMESTIC`, `FDC`\n\n- `feature` — feature type: `RWY`, `TWY`, `APRON`, `AD`, `OBST`, `NAV`, `COM`, `SVC`, `AIRSPACE`, `ODP`, `SID`, `STAR`, `CHART`, `DATA`, `DVA`, `IAP`, `VFP`, `ROUTE`, `SPECIAL`, `SECURITY`\n\n- `freeText` — text search within NOTAM text (max 80 characters, alphanumeric and `/.-( )` only)\n\n- `effectiveStartDate` / `effectiveEndDate` — ISO 8601 date range (must be paired)\n\n**Examples**\n\n``` GET /api/v1/notams/KDFW — all active NOTAMs for DFW GET /api/v1/notams/DFW?classification=FDC — only FDC NOTAMs GET /api/v1/notams/KDFW?feature=RWY — only runway-related NOTAMs GET /api/v1/notams/KDFW?freeText=CLOSED — text search within NOTAM text GET /api/v1/notams/KDFW?classification=DOMESTIC&feature=RWY — combined filters ```","operationId":"Notam_GetNotamsForAirport","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code (e.g., KDFW) or FAA identifier (e.g., DFW). Case-insensitive.","schema":{"type":"string"},"x-position":1},{"name":"classification","in":"query","description":"Optional NOTAM classification filter: INTERNATIONAL, MILITARY, LOCAL_MILITARY, DOMESTIC, FDC","schema":{"type":"string","nullable":true},"x-position":2},{"name":"feature","in":"query","description":"Optional NOTAM feature type filter: RWY, TWY, APRON, AD, OBST, NAV, COM, SVC, AIRSPACE, ODP, SID, STAR, CHART, DATA, DVA, IAP, VFP, ROUTE, SPECIAL, SECURITY","schema":{"type":"string","nullable":true},"x-position":3},{"name":"freeText","in":"query","description":"Optional text search within NOTAM text (max 80 characters, alphanumeric and /.-() only)","schema":{"type":"string","nullable":true},"x-position":4},{"name":"effectiveStartDate","in":"query","description":"Optional effective start date filter (ISO 8601). Must be paired with effectiveEndDate.","schema":{"type":"string","nullable":true},"x-position":5},{"name":"effectiveEndDate","in":"query","description":"Optional effective end date filter (ISO 8601). Must be paired with effectiveStartDate.","schema":{"type":"string","nullable":true},"x-position":6}],"responses":{"200":{"description":"Returns the NOTAMs for the airport","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotamResponseDto"}}}},"400":{"description":"If the airport identifier is missing or filter values are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/notams/radius":{"get":{"tags":["NOTAMs"],"summary":"Gets NOTAMs within a radius of a geographic point.","description":"Performs a spatial query using PostGIS to find NOTAMs whose geometry falls within the specified radius of the given coordinates. Only NOTAMs with stored geometry are returned — NOTAMs that lack geographic data (no point or polygon in the source GeoJSON) are excluded from spatial queries.\n\nThe same optional filters available on the airport endpoint (`classification`, `feature`, `freeText`, `effectiveStartDate`/`effectiveEndDate`) can be combined with the spatial search.\n\n**Examples**\n\n``` GET /api/v1/notams/radius?latitude=32.8998&longitude=-97.0403&radiusNm=25 GET /api/v1/notams/radius?latitude=32.8998&longitude=-97.0403&radiusNm=10&classification=DOMESTIC ```","operationId":"Notam_GetNotamsByRadius","parameters":[{"name":"latitude","in":"query","description":"Latitude in decimal degrees (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"longitude","in":"query","description":"Longitude in decimal degrees (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"radiusNm","in":"query","description":"Search radius in nautical miles (greater than 0, max 100)","schema":{"type":"number","format":"double"},"x-position":3},{"name":"classification","in":"query","description":"Optional NOTAM classification filter: INTERNATIONAL, MILITARY, LOCAL_MILITARY, DOMESTIC, FDC","schema":{"type":"string","nullable":true},"x-position":4},{"name":"feature","in":"query","description":"Optional NOTAM feature type filter: RWY, TWY, APRON, AD, OBST, NAV, COM, SVC, AIRSPACE, ODP, SID, STAR, CHART, DATA, DVA, IAP, VFP, ROUTE, SPECIAL, SECURITY","schema":{"type":"string","nullable":true},"x-position":5},{"name":"freeText","in":"query","description":"Optional text search within NOTAM text (max 80 characters, alphanumeric and /.-() only)","schema":{"type":"string","nullable":true},"x-position":6},{"name":"effectiveStartDate","in":"query","description":"Optional effective start date filter (ISO 8601). Must be paired with effectiveEndDate.","schema":{"type":"string","nullable":true},"x-position":7},{"name":"effectiveEndDate","in":"query","description":"Optional effective end date filter (ISO 8601). Must be paired with effectiveStartDate.","schema":{"type":"string","nullable":true},"x-position":8}],"responses":{"200":{"description":"Returns the NOTAMs within the search radius","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotamResponseDto"}}}},"400":{"description":"If coordinates, radius, or filter values are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/notams/route":{"post":{"tags":["NOTAMs"],"summary":"Gets NOTAMs for a flight route (airports and/or waypoints).","description":"Queries NOTAMs for each point along a route, deduplicates them, and returns a single combined result.\n\n**Option 1 — Airport identifiers only (simple)**\n\nProvide a list of airport identifiers. Each airport is queried by identifier match (FAA or ICAO). Best for straightforward airport-to-airport routes with no en-route waypoints.\n\n``` { \"airportIdentifiers\": [\"KDFW\", \"KAUS\"] } ```\n\n**Option 2 — Route points (airports + waypoints)**\n\nProvide an ordered list of route points. Each point is either an airport (queried by identifier) or a geographic waypoint (queried by spatial radius around its coordinates). Use this when your route includes en-route waypoints or you need per-point radius control.\n\n``` { \"routePoints\": [ { \"airportIdentifier\": \"KDFW\" }, { \"name\": \"Lake Travis\", \"latitude\": 30.4082, \"longitude\": -97.8538 }, { \"latitude\": 30.1, \"longitude\": -97.6, \"radiusNm\": 15 }, { \"airportIdentifier\": \"KAUS\" } ], \"corridorRadiusNm\": 25, \"filters\": { \"classification\": \"DOMESTIC\", \"feature\": \"RWY\" } } ```\n\n**How each point type is queried**\n\n- **Airport points** — queried by identifier (same as the single-airport endpoint). Radius settings do not apply.\n\n- **Waypoints** — queried by spatial radius. The radius used is: the point's own `radiusNm` if set, otherwise the request-level `corridorRadiusNm`, otherwise the server default (25 NM).\n\n**Notes**\n\n- If both `routePoints` and `airportIdentifiers` are provided, `routePoints` is used and `airportIdentifiers` is ignored.\n\n- Duplicate NOTAMs appearing at multiple route points are returned only once.\n\n- Optional `filters` (classification, feature, freeText, date range) are applied to every route point query.","operationId":"Notam_GetNotamsForRoute","requestBody":{"x-name":"request","description":"Route query — provide either airportIdentifiers or routePoints, with optional corridorRadiusNm and filters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotamQueryByRouteRequest"}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the combined NOTAMs for the route","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotamResponseDto"}}}},"400":{"description":"If no airports or route points are provided, or if coordinates/filters are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/notams/search":{"get":{"tags":["NOTAMs"],"summary":"Searches NOTAMs across all locations using filter criteria.","description":"Searches the entire active NOTAM database without requiring a specific airport or location. At least one filter parameter is required to prevent unbounded queries. Mirrors the FAA NMS API query parameters for flexible NOTAM filtering.\n\n**Pagination**\n\nResults are returned with cursor-based pagination. Pass the `pagination.nextCursor` value from a previous response as the `cursor` query parameter to retrieve the next page. The `limit` parameter controls page size (1–500, default 100).\n\n**Parameter Pairing Rules**\n\n- `notamNumber` must be paired with `location` or `accountability`\n\n- `latitude`, `longitude`, and `radius` must all be provided together\n\n- `effectiveStartDate` and `effectiveEndDate` must both be provided or both omitted\n\n- `lastUpdatedDate`: when provided, returns both active and inactive NOTAMs modified since that time\n\n**Examples**\n\n``` GET /api/v1/notams/search?classification=FDC — all active FDC NOTAMs GET /api/v1/notams/search?freeText=CLOSED&limit=50 — text search, 50 per page GET /api/v1/notams/search?feature=RWY&classification=DOMESTIC — combined filters GET /api/v1/notams/search?accountability=BNA — NOTAMs by issuing office GET /api/v1/notams/search?location=DFW — NOTAMs for a location GET /api/v1/notams/search?notamNumber=420&location=DFW — NOTAM by number + location GET /api/v1/notams/search?latitude=32.8998&longitude=-97.0403&radius=25 — spatial search GET /api/v1/notams/search?lastUpdatedDate=2025-03-01T00:00:00Z — recently modified (active + inactive) GET /api/v1/notams/search?classification=FDC&cursor=ABC123&limit=100 — next page ```","operationId":"Notam_SearchNotams","parameters":[{"name":"classification","in":"query","description":"Optional NOTAM classification filter: INTERNATIONAL, MILITARY, LOCAL_MILITARY, DOMESTIC, FDC","schema":{"type":"string","nullable":true},"x-position":1},{"name":"feature","in":"query","description":"Optional NOTAM feature type filter: RWY, TWY, APRON, AD, OBST, NAV, COM, SVC, AIRSPACE, ODP, SID, STAR, CHART, DATA, DVA, IAP, VFP, ROUTE, SPECIAL, SECURITY","schema":{"type":"string","nullable":true},"x-position":2},{"name":"freeText","in":"query","description":"Optional text search within NOTAM text (max 80 characters, alphanumeric and /.-() only)","schema":{"type":"string","nullable":true},"x-position":3},{"name":"effectiveStartDate","in":"query","description":"Optional effective start date filter (ISO 8601). Must be paired with effectiveEndDate.","schema":{"type":"string","nullable":true},"x-position":4},{"name":"effectiveEndDate","in":"query","description":"Optional effective end date filter (ISO 8601). Must be paired with effectiveStartDate.","schema":{"type":"string","nullable":true},"x-position":5},{"name":"accountability","in":"query","description":"Optional accountability code (issuing office) filter, e.g., \"BNA\", \"FDC\". Alphanumeric, max 10 characters.","schema":{"type":"string","nullable":true},"x-position":6},{"name":"location","in":"query","description":"Optional location identifier filter (FAA domestic or ICAO code), e.g., \"DFW\" or \"KDFW\". Alphanumeric, max 10 characters.","schema":{"type":"string","nullable":true},"x-position":7},{"name":"notamNumber","in":"query","description":"Optional NOTAM number filter. Must be paired with location or accountability.","schema":{"type":"string","nullable":true},"x-position":8},{"name":"latitude","in":"query","description":"Optional latitude in decimal degrees (-90 to 90). Must be paired with longitude and radius.","schema":{"type":"number","format":"double","nullable":true},"x-position":9},{"name":"longitude","in":"query","description":"Optional longitude in decimal degrees (-180 to 180). Must be paired with latitude and radius.","schema":{"type":"number","format":"double","nullable":true},"x-position":10},{"name":"radius","in":"query","description":"Optional search radius in nautical miles (0 to 100). Must be paired with latitude and longitude.","schema":{"type":"number","format":"double","nullable":true},"x-position":11},{"name":"lastUpdatedDate","in":"query","description":"Optional ISO 8601 timestamp. Returns NOTAMs modified since this time, including inactive NOTAMs.","schema":{"type":"string","nullable":true},"x-position":12},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":13},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":14}],"responses":{"200":{"description":"Returns the paginated matching NOTAMs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfNotamDto"}}}},"400":{"description":"If no filters are provided, or if filter values are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/notams/id/{nmsId}":{"get":{"tags":["NOTAMs"],"summary":"Gets a single NOTAM by its NMS ID.","description":"Retrieves a specific NOTAM by its FAA NMS identifier. Unlike most NOTAM endpoints, this does *not* filter out cancelled or expired NOTAMs — so the result may be a recently expired or cancelled NOTAM that has not yet been purged. This is *not* a historical archive; the database periodically purges stale NOTAMs.\n\n**Example**\n\n``` GET /api/v1/notams/id/1757609538792382 ```","operationId":"Notam_GetNotamByNmsId","parameters":[{"name":"nmsId","in":"path","required":true,"description":"Numeric NMS NOTAM identifier (1–64 digits)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the NOTAM","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotamDto"}}}},"400":{"description":"If the NMS ID is not a valid numeric string","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"If no NOTAM exists with the given NMS ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/obstacles/airport/{icaoCodeOrIdent}":{"get":{"tags":["Obstacles"],"summary":"Searches for obstacles near an airport. Looks up the airport coordinates, then finds\nobstacles within the specified radius. Use minHeightAgl to filter out low obstacles.","description":"Accepts both ICAO codes and FAA identifiers. ICAO/FAA format mismatches are automatically resolved (e.g., `KW05` resolves to `W05`).\n\n``` GET /api/v1/obstacles/airport/KDFW — default 10 NM radius GET /api/v1/obstacles/airport/DFW?radiusNm=5&minHeightAgl=200 — towers 200+ ft AGL within 5 NM ```","operationId":"Obstacle_SearchNearAirport","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches.","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3},{"name":"radiusNm","in":"query","description":"Search radius in nautical miles (default 10, must be greater than 0)","schema":{"type":"number","format":"double","default":10},"x-position":4},{"name":"minHeightAgl","in":"query","description":"Optional minimum height AGL in feet — only return obstacles at or above this height","schema":{"type":"integer","format":"int32","nullable":true},"x-position":5}],"responses":{"200":{"description":"Returns the obstacles found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfObstacleDto"}}}},"400":{"description":"If the radius is invalid or the airport has no coordinates on record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"If the airport is not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/obstacles/search":{"get":{"tags":["Obstacles"],"summary":"Searches for obstacles near a geographic point.","description":"``` GET /api/v1/obstacles/search?lat=32.897&lon=-97.038 — default 5 NM radius GET /api/v1/obstacles/search?lat=32.897&lon=-97.038&radiusNm=10&minHeightAgl=500 — tall obstacles within 10 NM ```","operationId":"Obstacle_SearchNearby","parameters":[{"name":"lat","in":"query","description":"Latitude in decimal degrees (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"lon","in":"query","description":"Longitude in decimal degrees (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":3},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":4},{"name":"radiusNm","in":"query","description":"Search radius in nautical miles (default 5, must be greater than 0)","schema":{"type":"number","format":"double","default":5},"x-position":5},{"name":"minHeightAgl","in":"query","description":"Optional minimum height AGL in feet — only return obstacles at or above this height","schema":{"type":"integer","format":"int32","nullable":true},"x-position":6}],"responses":{"200":{"description":"Returns the obstacles found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfObstacleDto"}}}},"400":{"description":"If coordinates or radius are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/obstacles/state/{stateCode}":{"get":{"tags":["Obstacles"],"summary":"Gets obstacles in a specific state.","description":"``` GET /api/v1/obstacles/state/TX — all obstacles in Texas GET /api/v1/obstacles/state/TX?minHeightAgl=1000 — obstacles 1000+ ft AGL in Texas ```","operationId":"Obstacle_GetByState","parameters":[{"name":"stateCode","in":"path","required":true,"description":"Two-letter state code (e.g., TX, CA)","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3},{"name":"minHeightAgl","in":"query","description":"Optional minimum height AGL in feet — only return obstacles at or above this height","schema":{"type":"integer","format":"int32","nullable":true},"x-position":4}],"responses":{"200":{"description":"Returns the obstacles","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfObstacleDto"}}}},"400":{"description":"If the state code is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/obstacles/{oasNumber}":{"get":{"tags":["Obstacles"],"summary":"Gets a single obstacle by its OAS (Obstacle Assessment Surface) number.","description":"``` GET /api/v1/obstacles/12-345678 ```","operationId":"Obstacle_GetByOasNumber","parameters":[{"name":"oasNumber","in":"path","required":true,"description":"Obstacle Assessment Surface number (e.g., 12-345678)","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the obstacle","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObstacleDto"}}}},"404":{"description":"If the obstacle is not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/obstacles/by-oas-numbers":{"post":{"tags":["Obstacles"],"summary":"Gets multiple obstacles by their OAS numbers. This endpoint is designed to be used with the\nObstacleOasNumbers returned by the navigation log endpoint (POST /api/v1/navlog/calculate)\nto retrieve full details for obstacles near a planned route.","description":"Send a JSON array of OAS number strings in the request body:\n\n``` [\"12-345678\", \"12-345679\", \"12-345680\"] ```","operationId":"Obstacle_GetByOasNumbers","requestBody":{"x-name":"oasNumbers","description":"JSON array of OAS number strings (maximum 1000)","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true,"x-position":1},"responses":{"200":{"description":"Returns the matching obstacles","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ObstacleDto"}}}}},"400":{"description":"If the list is empty or exceeds 1000 items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/obstacles/bbox":{"get":{"tags":["Obstacles"],"summary":"Gets obstacles within a geographic bounding box.","description":"**Note:** The bounding box must not cross the antimeridian (i.e., `minLon` must be less than `maxLon`). Antimeridian-crossing queries are not supported.\n\n``` GET /api/v1/obstacles/bbox?minLat=32.5&maxLat=33.5&minLon=-97.5&maxLon=-96.5 GET /api/v1/obstacles/bbox?minLat=32.5&maxLat=33.5&minLon=-97.5&maxLon=-96.5&minHeightAgl=500 ```","operationId":"Obstacle_GetByBoundingBox","parameters":[{"name":"minLat","in":"query","description":"Southwest corner latitude (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"maxLat","in":"query","description":"Northeast corner latitude (-90 to 90, must be greater than minLat)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"minLon","in":"query","description":"Southwest corner longitude (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":3},{"name":"maxLon","in":"query","description":"Northeast corner longitude (-180 to 180, must be greater than minLon)","schema":{"type":"number","format":"double"},"x-position":4},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":5},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":6},{"name":"minHeightAgl","in":"query","description":"Optional minimum height AGL in feet — only return obstacles at or above this height","schema":{"type":"integer","format":"int32","nullable":true},"x-position":7}],"responses":{"200":{"description":"Returns the obstacles found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfObstacleDto"}}}},"400":{"description":"If coordinates are invalid, minLat >= maxLat, or the box crosses the antimeridian","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/pireps":{"get":{"tags":["Weather - PIREPs"],"summary":"Gets all current PIREPs. Returns all active pilot reports with reported conditions\nincluding turbulence (type, intensity, altitude), icing (type, intensity, altitude),\nand sky conditions. Each report includes the geographic coordinates and altitude where\nthe observation was made.","operationId":"Pirep_GetAllPireps","parameters":[{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":1},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":2}],"responses":{"200":{"description":"Returns the paginated list of PIREPs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfPirepDto"}}}}}}},"/api/v1/pireps/nearby":{"get":{"tags":["Weather - PIREPs"],"summary":"Searches for PIREPs near a geographic point. Returns pilot reports within the specified\nradius of the given coordinates, useful for checking conditions along a flight route.","description":"``` GET /api/v1/pireps/nearby?lat=32.897&lon=-97.038 — default 50 NM radius GET /api/v1/pireps/nearby?lat=32.897&lon=-97.038&radiusNm=100 — custom radius ```","operationId":"Pirep_SearchNearby","parameters":[{"name":"lat","in":"query","description":"Latitude in decimal degrees (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"lon","in":"query","description":"Longitude in decimal degrees (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":3},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":4},{"name":"radiusNm","in":"query","description":"Search radius in nautical miles (default 50, max 500)","schema":{"type":"number","format":"double","default":50},"x-position":5}],"responses":{"200":{"description":"Returns the PIREPs found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfPirepDto"}}}},"400":{"description":"If coordinates or radius are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/pireps/airport/{icaoCodeOrIdent}":{"get":{"tags":["Weather - PIREPs"],"summary":"Searches for PIREPs near an airport. Looks up the airport coordinates by ICAO code or\nFAA identifier, then returns pilot reports within the specified radius.","description":"Accepts both ICAO codes and FAA identifiers. If the exact identifier is not found, the API automatically tries the alternate format (e.g., `KW05` resolves to `W05`, `DFW` resolves to `KDFW`).\n\n``` GET /api/v1/pireps/airport/KDFW — default 50 NM radius GET /api/v1/pireps/airport/DFW?radiusNm=100 — custom radius with FAA identifier GET /api/v1/pireps/airport/KW05 — resolves to FAA identifier W05 ```","operationId":"Pirep_SearchNearAirport","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches.","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3},{"name":"radiusNm","in":"query","description":"Search radius in nautical miles (default 50, max 500)","schema":{"type":"number","format":"double","default":50},"x-position":4}],"responses":{"200":{"description":"Returns the PIREPs found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfPirepDto"}}}},"400":{"description":"If the radius is invalid or the airport has no coordinates on record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"If the airport is not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/runways/airport/{icaoCodeOrIdent}":{"get":{"tags":["Runways"],"summary":"Gets runways for a specific airport by ICAO code or FAA identifier.","description":"Accepts both ICAO codes and FAA identifiers. If the exact identifier is not found, the API automatically tries the alternate format (e.g., `KW05` resolves to `W05`, `PA88` resolves to `A88`, `DFW` resolves to `KDFW`).\n\n``` GET /api/v1/runways/airport/KDFW — runways at DFW GET /api/v1/runways/airport/DFW?includeGeometry=true — with ArcGIS polygon geometry GET /api/v1/runways/airport/KW05 — resolves to FAA identifier W05 ```","operationId":"Runway_GetRunwaysByAirport","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches.","schema":{"type":"string"},"x-position":1},{"name":"includeGeometry","in":"query","description":"Include ArcGIS runway polygon geometry in the response (default false)","schema":{"type":"boolean","default":false},"x-position":2}],"responses":{"200":{"description":"Returns the airport's runways","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RunwayDto"}}}}},"400":{"description":"If the identifier is empty","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"description":"If the airport is not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/runways":{"get":{"tags":["Runways"],"summary":"Gets a paginated list of runways with optional filtering.","description":"``` GET /api/v1/runways — all runways (paginated) GET /api/v1/runways?search=DFW — search by airport identifier, name, or city GET /api/v1/runways?surfaceType=Asphalt&minLength=5000 — asphalt runways 5000+ ft GET /api/v1/runways?state=TX&lighted=true — lighted runways in Texas ```","operationId":"Runway_GetRunways","parameters":[{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":1},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":2},{"name":"search","in":"query","description":"Search across airport identifier, ICAO code, name, and city","schema":{"type":"string","nullable":true},"x-position":3},{"name":"surfaceType","in":"query","description":"Filter by runway surface type enum (e.g., Asphalt, Concrete, Turf). Matches runways where the type appears as either the primary or secondary surface.","schema":{"oneOf":[{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwaySurfaceType"}]}]},"x-position":4},{"name":"minLength","in":"query","description":"Minimum runway length in feet","schema":{"type":"integer","format":"int32","nullable":true},"x-position":5},{"name":"state","in":"query","description":"Filter by two-letter state code (e.g., TX, CA)","schema":{"type":"string","nullable":true},"x-position":6},{"name":"lighted","in":"query","description":"Filter by whether the runway has edge lighting","schema":{"type":"boolean","nullable":true},"x-position":7}],"responses":{"200":{"description":"Returns the runways","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfRunwayDto"}}}}}}},"/api/v1/runways/nearby":{"get":{"tags":["Runways"],"summary":"Searches for runways near a geographic point using the parent airport's location.\nUseful for finding diversion airports with suitable runways.","description":"``` GET /api/v1/runways/nearby?lat=32.897&lon=-97.038 — default 30 NM radius GET /api/v1/runways/nearby?lat=32.897&lon=-97.038&minLength=4000&surfaceType=Asphalt — paved 4000+ ft runways GET /api/v1/runways/nearby?lat=32.897&lon=-97.038&includeGeometry=true — with polygon geometry ```","operationId":"Runway_SearchNearby","parameters":[{"name":"lat","in":"query","description":"Latitude in decimal degrees (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"lon","in":"query","description":"Longitude in decimal degrees (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":3},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":4},{"name":"radiusNm","in":"query","description":"Search radius in nautical miles (default 30, max 500)","schema":{"type":"number","format":"double","default":30},"x-position":5},{"name":"minLength","in":"query","description":"Minimum runway length in feet","schema":{"type":"integer","format":"int32","nullable":true},"x-position":6},{"name":"surfaceType","in":"query","description":"Filter by runway surface type enum (e.g., Asphalt, Concrete). Matches runways where the type appears as either the primary or secondary surface.","schema":{"oneOf":[{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwaySurfaceType"}]}]},"x-position":7},{"name":"includeGeometry","in":"query","description":"Include ArcGIS runway polygon geometry in the response (default false)","schema":{"type":"boolean","default":false},"x-position":8}],"responses":{"200":{"description":"Returns the runways found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfRunwayDto"}}}},"400":{"description":"If coordinates or radius are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/sigmets":{"get":{"tags":["Weather - Domestic SIGMETs"],"summary":"Gets all current domestic SIGMET advisories across all hazard types.","description":"Returns every active domestic SIGMET regardless of hazard type. Each advisory includes the hazard (convective activity, severe turbulence, severe icing, IFR conditions, or mountain obscuration), severity, affected altitude range, and a geographic polygon defining the affected area. Use the `GET /hazard/{hazardType}` endpoint to filter by a specific hazard type.","operationId":"Sigmet_GetAllSigmets","parameters":[{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":1},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":2}],"responses":{"200":{"description":"Returns the paginated list of all current domestic SIGMETs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfSigmetDto"}}}}}}},"/api/v1/sigmets/hazard/{hazardType}":{"get":{"tags":["Weather - Domestic SIGMETs"],"summary":"Gets SIGMETs filtered by hazard type.","description":"**Hazard Types**\n\n- `CONVECTIVE` — thunderstorms and convective activity\n\n- `ICE` — severe icing\n\n- `TURB` — severe turbulence\n\n- `IFR` — widespread IFR conditions\n\n- `MTN_OBSCN` — mountain obscuration\n\n``` GET /api/v1/sigmets/hazard/CONVECTIVE GET /api/v1/sigmets/hazard/TURB ```","operationId":"Sigmet_GetSigmetsByHazardType","parameters":[{"name":"hazardType","in":"path","required":true,"description":"Hazard type: CONVECTIVE, ICE, TURB, IFR, or MTN_OBSCN","schema":{"type":"string"},"x-position":1},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":2},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":3}],"responses":{"200":{"description":"Returns the filtered SIGMETs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfSigmetDto"}}}},"400":{"description":"If the hazard type is invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/sigmets/affecting":{"get":{"tags":["Weather - Domestic SIGMETs"],"summary":"Finds SIGMETs whose geographic boundary contains the given point. Returns advisories\nthat affect a specific location, answering \"what SIGMETs are active at this position?\"","description":"``` GET /api/v1/sigmets/affecting?lat=32.897&lon=-97.038 ```","operationId":"Sigmet_SearchAffecting","parameters":[{"name":"lat","in":"query","description":"Latitude in decimal degrees (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"lon","in":"query","description":"Longitude in decimal degrees (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":3},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":4}],"responses":{"200":{"description":"Returns the SIGMETs found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfSigmetDto"}}}},"400":{"description":"If coordinates are invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/sigmets/by-area":{"get":{"tags":["Weather - Domestic SIGMETs"],"summary":"Finds SIGMETs that intersect a geographic bounding box. Returns advisories whose\nboundary overlaps the specified area, useful for checking conditions across a flight route.","description":"**Note:** The bounding box must not cross the antimeridian (i.e., `minLon` must be less than `maxLon`). Antimeridian-crossing queries are not supported. This endpoint covers domestic US SIGMETs within the contiguous United States.\n\n``` GET /api/v1/sigmets/by-area?minLat=30&maxLat=35&minLon=-100&maxLon=-95 ```","operationId":"Sigmet_SearchByArea","parameters":[{"name":"minLat","in":"query","description":"Minimum latitude (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":1},{"name":"maxLat","in":"query","description":"Maximum latitude (-90 to 90)","schema":{"type":"number","format":"double"},"x-position":2},{"name":"minLon","in":"query","description":"Minimum longitude (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":3},{"name":"maxLon","in":"query","description":"Maximum longitude (-180 to 180)","schema":{"type":"number","format":"double"},"x-position":4},{"name":"cursor","in":"query","description":"Opaque cursor value from a previous response's pagination.nextCursor field. Omit or leave null to start from the first page.","schema":{"type":"string","nullable":true},"x-position":5},{"name":"limit","in":"query","description":"Maximum number of items to return per page. Minimum 1, maximum 500, default 100.","schema":{"type":"integer","format":"int32","default":100,"maximum":500,"minimum":1},"x-position":6}],"responses":{"200":{"description":"Returns the SIGMETs found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseOfSigmetDto"}}}},"400":{"description":"If coordinates are invalid or the bounding box crosses the antimeridian","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/tafs/batch":{"get":{"tags":["Weather - TAFs"],"summary":"Gets the current TAFs for multiple airports in a single request.\nAccepts ICAO codes or FAA identifiers. Identifiers that don't resolve to a TAF are silently skipped.","description":"Both ICAO codes and FAA identifiers can be mixed in the same request. ICAO/FAA format mismatches are automatically resolved (e.g., `KW05` resolves to `W05`). Maximum 100 identifiers per request.\n\n``` GET /api/v1/tafs/batch?ids=KDFW,KAUS,KHOU GET /api/v1/tafs/batch?ids=DFW,AUS ```","operationId":"Taf_GetTafsBatch","parameters":[{"name":"ids","in":"query","description":"Comma-separated ICAO codes or FAA identifiers (e.g., KDFW,KAUS,KHOU). Maximum 100.","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the TAFs with all forecast periods","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TafDto"}}}}},"400":{"description":"If the ids parameter is empty or exceeds 100 identifiers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/tafs/{icaoCodeOrIdent}":{"get":{"tags":["Weather - TAFs"],"summary":"Gets the current TAF for a specific airport, including all forecast periods with expected\nweather conditions (wind, visibility, sky cover, precipitation, turbulence, and icing).","description":"Accepts both ICAO codes and FAA identifiers. If the exact identifier is not found, the API automatically tries the alternate format (e.g., `KW05` resolves to `W05`, `DFW` resolves to `KDFW`). Note that many small airports do not issue TAFs and will return 404 regardless of identifier format.\n\n``` GET /api/v1/tafs/KDFW — by ICAO code GET /api/v1/tafs/DFW — by FAA identifier ```","operationId":"Taf_GetTafByIcaoCodeOrIdent","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches.","schema":{"type":"string"},"x-position":1}],"responses":{"200":{"description":"Returns the TAF with all forecast periods","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TafDto"}}}},"404":{"description":"If no TAF is found for the airport","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}},"/api/v1/terminal-procedures/{icaoCodeOrIdent}":{"get":{"tags":["Terminal Procedures"],"summary":"Gets time-limited pre-signed URLs for all available terminal procedure chart PDFs.\nThe URLs expire after a limited period; request new URLs if they have expired.","description":"Returns the airport's ICAO code, name, and a list of procedure chart URLs. Optionally filter by chart code (IAP, DP, STAR, APD, MIN, HOT, etc.).\n\nAccepts both ICAO codes and FAA identifiers. If the exact identifier is not found, the API automatically tries the alternate format (e.g., `KW05` resolves to `W05`, `DFW` resolves to `KDFW`).\n\n``` GET /api/v1/terminal-procedures/KDFW GET /api/v1/terminal-procedures/DFW?chartCode=IAP GET /api/v1/terminal-procedures/KW05 — resolves to FAA identifier W05 ```","operationId":"TerminalProcedure_GetTerminalProcedures","parameters":[{"name":"icaoCodeOrIdent","in":"path","required":true,"description":"ICAO code or FAA identifier (e.g., KDFW, DFW). Case-insensitive. Automatically resolves ICAO/FAA format mismatches.","schema":{"type":"string"},"x-position":1},{"name":"chartCode","in":"query","description":"Optional chart code filter (e.g., IAP, DP, STAR, APD, MIN, HOT). Case-insensitive.","schema":{"type":"string","nullable":true},"x-position":2}],"responses":{"200":{"description":"Returns the terminal procedures","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminalProceduresResponseDto"}}}},"404":{"description":"If no terminal procedures are found for the given identifier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}}}}}},"components":{"schemas":{"PaginatedResponseOfAirportDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/AirportDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"AirportDto":{"type":"object","description":"Airport data from the FAA National Airspace System Resources (NASR) database.\nCombines data from APT_BASE, APT_ATT, and APT_CON CSV files.\nUse the airport's IcaoId or ArptId to query related endpoints such as runways\n(GET /api/v1/runways/airport/{icaoCodeOrIdent}), communication frequencies\n(GET /api/v1/communication-frequencies/{servicedFacility}), METARs\n(GET /api/v1/metars/{icaoCodeOrIdent}), TAFs (GET /api/v1/tafs/{icaoCodeOrIdent}),\nairport diagrams (GET /api/v1/airport-diagrams/{icaoCodeOrIdent}), and\nchart supplements (GET /api/v1/chart-supplements/{icaoCodeOrIdent}).","additionalProperties":false,"properties":{"siteNo":{"type":"string","description":"FAA NASR field: SITE_NO. Unique Site Number assigned by the FAA to identify the airport facility."},"icaoId":{"type":"string","description":"FAA NASR field: ICAO_ID. ICAO (International Civil Aviation Organization) identifier (e.g., KDFW, KLAX).","nullable":true},"arptId":{"type":"string","description":"FAA NASR field: ARPT_ID. FAA location identifier (e.g., DFW, LAX, ORD). Up to 4 characters.","nullable":true},"arptName":{"type":"string","description":"FAA NASR field: ARPT_NAME. Official Facility Name.","nullable":true},"effDate":{"type":"string","description":"FAA NASR field: EFF_DATE. Effective date of the airport information. ISO 8601 UTC format.","format":"date-time"},"siteType":{"description":"FAA NASR field: SITE_TYPE_CODE. Landing facility type.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/AirportSiteType"}]},"ownershipType":{"description":"FAA NASR field: OWNERSHIP_TYPE_CODE. Airport ownership type.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/AirportOwnershipType"}]},"facilityUse":{"description":"FAA NASR field: FACILITY_USE_CODE. Facility use designation.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/AirportFacilityUse"}]},"arptStatus":{"description":"FAA NASR field: ARPT_STATUS. Airport operational status.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/AirportStatus"}]},"naspCode":{"type":"string","description":"FAA NASR field: NASP_CODE. NPIAS/Federal Agreements Code. A combination of 1 to 7 codes indicating the type of Federal agreements existing at the Airport.","nullable":true},"city":{"type":"string","description":"FAA NASR field: CITY. Associated city name for the airport.","nullable":true},"stateCode":{"type":"string","description":"FAA NASR field: STATE_CODE. Two-letter USPS state code where the airport is located.","nullable":true},"countryCode":{"type":"string","description":"FAA NASR field: COUNTRY_CODE. Two-letter country code.","nullable":true},"stateName":{"type":"string","description":"FAA NASR field: STATE_NAME. Full state name where the airport is located.","nullable":true},"regionCode":{"type":"string","description":"FAA NASR field: REGION_CODE. FAA region code (e.g., ASW, AEA, AWP).","nullable":true},"adoCode":{"type":"string","description":"FAA NASR field: ADO_CODE. FAA Airports District Office code.","nullable":true},"countyName":{"type":"string","description":"FAA NASR field: COUNTY_NAME. County name where the airport is located.","nullable":true},"countyAssocState":{"type":"string","description":"FAA NASR field: COUNTY_ASSOC_STATE. Two-letter state, territory, or country code associated with the county (e.g., US state codes, CN for Canada, GU for Guam, VI for Virgin Islands).","nullable":true},"distCityToAirport":{"type":"number","description":"FAA NASR field: DIST_CITY_TO_AIRPORT. Distance from Central Business District of the Associated City to the Airport, in nautical miles.","format":"double","nullable":true},"directionCode":{"type":"string","description":"FAA NASR field: DIRECTION_CODE. Direction of Airport from Central Business District of Associated City (Nearest 1/8 Compass Point).","nullable":true},"acreage":{"type":"integer","description":"FAA NASR field: ACREAGE. Land Area Covered by Airport (Acres).","format":"int32","nullable":true},"latDecimal":{"type":"number","description":"FAA NASR field: LAT_DECIMAL. Latitude of airport reference point in decimal degrees (WGS 84).","format":"double","nullable":true},"longDecimal":{"type":"number","description":"FAA NASR field: LONG_DECIMAL. Longitude of airport reference point in decimal degrees (WGS 84).","format":"double","nullable":true},"latDeg":{"type":"integer","description":"FAA NASR field: LAT_DEG. Latitude degrees of airport reference point.","format":"int32","nullable":true},"latMin":{"type":"integer","description":"FAA NASR field: LAT_MIN. Latitude minutes of airport reference point.","format":"int32","nullable":true},"latSec":{"type":"number","description":"FAA NASR field: LAT_SEC. Latitude seconds of airport reference point.","format":"double","nullable":true},"latHemis":{"type":"string","description":"FAA NASR field: LAT_HEMIS. Latitude hemisphere of airport reference point (N or S).","nullable":true},"longDeg":{"type":"integer","description":"FAA NASR field: LONG_DEG. Longitude degrees of airport reference point.","format":"int32","nullable":true},"longMin":{"type":"integer","description":"FAA NASR field: LONG_MIN. Longitude minutes of airport reference point.","format":"int32","nullable":true},"longSec":{"type":"number","description":"FAA NASR field: LONG_SEC. Longitude seconds of airport reference point.","format":"double","nullable":true},"longHemis":{"type":"string","description":"FAA NASR field: LONG_HEMIS. Longitude hemisphere of airport reference point (E or W).","nullable":true},"positionSurveyMethod":{"description":"FAA NASR field: SURVEY_METHOD_CODE. Method used to determine the airport reference point position.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/SurveyMethod"}]},"arptPsnSource":{"type":"string","description":"FAA NASR field: ARPT_PSN_SOURCE. Source of the airport position information.","nullable":true},"positionSrcDate":{"type":"string","description":"FAA NASR field: POSITION_SRC_DATE. Date the airport position information was determined. ISO 8601 UTC format.","format":"date-time","nullable":true},"elev":{"type":"number","description":"FAA NASR field: ELEV. Airport elevation in feet MSL, to the nearest tenth of a foot. Measured at the highest point on the centerline of the usable landing surface.","format":"double","nullable":true},"elevationSurveyMethod":{"description":"FAA NASR field: ELEV_METHOD_CODE. Method used to determine the airport elevation.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/SurveyMethod"}]},"arptElevSource":{"type":"string","description":"FAA NASR field: ARPT_ELEV_SOURCE. Source of the airport elevation information.","nullable":true},"elevationSrcDate":{"type":"string","description":"FAA NASR field: ELEVATION_SRC_DATE. Date the airport elevation information was determined. ISO 8601 UTC format.","format":"date-time","nullable":true},"magVarn":{"type":"number","description":"FAA NASR field: MAG_VARN. Magnetic Variation in degrees. Use with MagHemis (E or W) to determine sign.","format":"double","nullable":true},"magHemis":{"type":"string","description":"FAA NASR field: MAG_HEMIS. Magnetic Variation Direction (E or W).","nullable":true},"magVarnYear":{"type":"integer","description":"FAA NASR field: MAG_VARN_YEAR. Magnetic Variation Epoch Year.","format":"int32","nullable":true},"tpa":{"type":"integer","description":"FAA NASR field: TPA. Traffic Pattern Altitude (Whole Feet AGL).","format":"int32","nullable":true},"chartName":{"type":"string","description":"FAA NASR field: CHART_NAME. Sectional aeronautical chart name on which the airport appears.","nullable":true},"respArtccId":{"type":"string","description":"FAA NASR field: RESP_ARTCC_ID. Responsible ARTCC Identifier. The Responsible ARTCC is the FAA Air Route Traffic Control Center that has control over the Airport.","nullable":true},"artccName":{"type":"string","description":"FAA NASR field: ARTCC_NAME. Name of the responsible ARTCC.","nullable":true},"twrTypeCode":{"type":"string","description":"FAA NASR field: TWR_TYPE_CODE. Air Traffic Control Tower Facility Type (ATCT, NON-ATCT, ATCT-A/C, ATCT-RAPCON, ATCT-RATCF, ATCT-TRACON, TRACON).","nullable":true},"fssOnAirport":{"type":"boolean","description":"FAA NASR field: FSS_ON_ARPT_FLAG. Tie-In FSS Physically Located On Facility."},"fssId":{"type":"string","description":"FAA NASR field: FSS_ID. Tie-In Flight Service Station (FSS) Identifier.","nullable":true},"fssName":{"type":"string","description":"FAA NASR field: FSS_NAME. Tie-In FSS Name.","nullable":true},"fssPhoneNumber":{"type":"string","description":"FAA NASR field: PHONE_NO. Local Phone Number from Airport to FSS for Administrative Services.","nullable":true},"tollFreeNumber":{"type":"string","description":"FAA NASR field: TOLL_FREE_NO. Toll Free Phone Number from Airport to FSS for Pilot Briefing Services.","nullable":true},"altFssId":{"type":"string","description":"FAA NASR field: ALT_FSS_ID. Alternate FSS Identifier. Identifies a full-time FSS that assumes responsibility during the off hours of a part-time primary FSS.","nullable":true},"altFssName":{"type":"string","description":"FAA NASR field: ALT_FSS_NAME. Alternate Flight Service Station name.","nullable":true},"altTollFreeNumber":{"type":"string","description":"FAA NASR field: ALT_TOLL_FREE_NO. Toll Free Phone Number from Airport to Alternate FSS for Pilot Briefing Services.","nullable":true},"notamId":{"type":"string","description":"FAA NASR field: NOTAM_ID. Identifier of the Facility responsible for issuing NOTAMs and Weather information for the Airport.","nullable":true},"notamAvailable":{"type":"boolean","description":"FAA NASR field: NOTAM_FLAG. Availability of NOTAM 'D' Service at Airport."},"customsPortOfEntry":{"type":"boolean","description":"FAA NASR field: CUST_FLAG. Facility designated by U.S. Department of Homeland Security as an International Airport of Entry for Customs."},"customsLandingRights":{"type":"boolean","description":"FAA NASR field: LNDG_RIGHTS_FLAG. Facility designated by U.S. Department of Homeland Security as a Customs Landing Rights Airport."},"jointUse":{"type":"boolean","description":"FAA NASR field: JOINT_USE_FLAG. Facility has Military/Civil Joint Use Agreement that allows Civil Operations at a Military Airport."},"militaryLandingRights":{"type":"boolean","description":"FAA NASR field: MIL_LNDG_FLAG. Airport has entered into an Agreement that Grants Landing Rights to the Military."},"inspectionMethod":{"description":"FAA NASR field: INSPECT_METHOD_CODE. Airport inspection method.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/AirportInspectionMethod"}]},"inspectorAgency":{"description":"FAA NASR field: INSPECTOR_CODE. Agency/Group Performing Physical Inspection.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/AirportInspectorAgency"}]},"lastInspection":{"type":"string","description":"FAA NASR field: LAST_INSPECTION. Date of the last physical inspection. ISO 8601 UTC format.","format":"date-time","nullable":true},"lastInfoResponse":{"type":"string","description":"FAA NASR field: LAST_INFO_RESPONSE. Date of the last information request response. ISO 8601 UTC format.","format":"date-time","nullable":true},"fuelTypes":{"type":"string","description":"FAA NASR field: FUEL_TYPES. Fuel Types available for public use at the Airport (e.g., 100LL, A, A+, MOGAS, UL94).","nullable":true},"contractFuelAvailable":{"type":"boolean","description":"FAA NASR field: CONTR_FUEL_AVBL. Whether contract fuel is available."},"airframeRepairService":{"description":"FAA NASR field: AIRFRAME_REPAIR_SER_CODE. Airframe repair service availability.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RepairServiceAvailability"}]},"powerPlantRepairService":{"description":"FAA NASR field: PWR_PLANT_REPAIR_SER. Power plant (engine) repair service availability.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RepairServiceAvailability"}]},"bottledOxygenType":{"description":"FAA NASR field: BOTTLED_OXY_TYPE. Type of bottled oxygen available.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/OxygenPressureType"}]},"bulkOxygenType":{"description":"FAA NASR field: BULK_OXY_TYPE. Type of bulk oxygen available.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/OxygenPressureType"}]},"otherServices":{"type":"string","description":"FAA NASR field: OTHER_SERVICES. Other airport services available (comma-separated codes).","nullable":true},"transientStorageBuoys":{"type":"boolean","description":"FAA NASR field: TRNS_STRG_BUOY_FLAG. Whether transient storage buoys are available."},"transientStorageHangars":{"type":"boolean","description":"FAA NASR field: TRNS_STRG_HGR_FLAG. Whether transient storage hangars are available."},"transientStorageTiedowns":{"type":"boolean","description":"FAA NASR field: TRNS_STRG_TIE_FLAG. Whether transient storage tie-downs are available."},"lgtSked":{"type":"string","description":"FAA NASR field: LGT_SKED. Airport Lighting Schedule. Beginning-ending times (local time) that Standard Airport Lights are operated. Value can be 'SS-SR' (sunset-sunrise), blank, or 'SEE RMK'.","nullable":true},"bcnLgtSked":{"type":"string","description":"FAA NASR field: BCN_LGT_SKED. Beacon Lighting Schedule. Beginning-ending times (local time) that the Rotating Airport Beacon Light is operated. Value can be 'SS-SR' (sunset-sunrise), blank, or 'SEE RMK'.","nullable":true},"beaconLensColor":{"description":"FAA NASR field: BCN_LENS_COLOR. Airport beacon lens color.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/BeaconLensColor"}]},"segmentedCircleMarker":{"description":"FAA NASR field: SEG_CIRCLE_MKR_FLAG. Segmented circle airport marker system.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/SegmentedCircleMarkerType"}]},"windIndicator":{"description":"FAA NASR field: WIND_INDCR_FLAG. Wind indicator type.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/WindIndicatorType"}]},"landingFee":{"type":"boolean","description":"FAA NASR field: LNDG_FEE_FLAG. Landing Fee charged to Non-Commercial Users of Airport."},"medicalUse":{"type":"boolean","description":"FAA NASR field: MEDICAL_USE_FLAG. Indicates that the Landing Facility is used for Medical Purposes."},"activationDate":{"type":"string","description":"FAA NASR field: ACTIVATION_DATE. Airport Activation Date (YYYY/MM). Year and month the facility was added to the NFDC airport database. Only available for facilities opened since 1981.","nullable":true},"minOpNetwork":{"type":"string","description":"FAA NASR field: MIN_OP_NETWORK. Minimum Operational Network (MON) designation.","nullable":true},"userFeeFlag":{"type":"string","description":"FAA NASR field: USER_FEE_FLAG. US Customs User Fee Airport designation.","nullable":true},"cta":{"type":"string","description":"FAA NASR field: CTA. Cold Temperature Airport. Altitude correction required at or below the temperature given in Celsius.","nullable":true},"computerId":{"type":"string","description":"FAA NASR field: COMPUTER_ID. Responsible ARTCC (FAA) Computer Identifier.","nullable":true},"far139TypeCode":{"type":"string","description":"FAA NASR field: FAR_139_TYPE_CODE. Airport ARFF Certification Type Code. Format is class code (I/II/III/IV) followed by A/B/C/D/E (full certificate) or L (limited certification). Blank if not certificated.","nullable":true},"far139CarrierSerCode":{"type":"string","description":"FAA NASR field: FAR_139_CARRIER_SER_CODE. Airport ARFF Certification Carrier Service Code. S (scheduled service) or U (not receiving scheduled service).","nullable":true},"arffCertTypeDate":{"type":"string","description":"FAA NASR field: ARFF_CERT_TYPE_DATE. Airport ARFF Certification Date. ISO 8601 UTC format.","format":"date-time","nullable":true},"aspAnalysisDtrmCode":{"type":"string","description":"FAA NASR field: ASP_ANLYS_DTRM_CODE. Airport Airspace Analysis Determination (CONDL, NOT ANALYZED, NO OBJECTION, OBJECTIONABLE).","nullable":true},"skedSeqNo":{"type":"integer","description":"FAA NASR field: SKED_SEQ_NO (APT_ATT). Attendance Schedule Sequence Number.","format":"int32","nullable":true},"attendanceMonth":{"type":"string","description":"FAA NASR field: MONTH (APT_ATT). Months the facility is attended. May contain 'UNATNDD' for unattended facilities.","nullable":true},"attendanceDay":{"type":"string","description":"FAA NASR field: DAY (APT_ATT). Days of the week the facility is open.","nullable":true},"attendanceHours":{"type":"string","description":"FAA NASR field: HOUR (APT_ATT). Hours within the day the facility is attended.","nullable":true},"contactTitle":{"type":"string","description":"FAA NASR field: TITLE (APT_CON). Title of the facility contact (e.g., MANAGER, OWNER).","nullable":true},"contactName":{"type":"string","description":"FAA NASR field: NAME (APT_CON). Facility contact name.","nullable":true},"contactAddress1":{"type":"string","description":"FAA NASR field: ADDRESS1 (APT_CON). Contact address line 1.","nullable":true},"contactAddress2":{"type":"string","description":"FAA NASR field: ADDRESS2 (APT_CON). Contact address line 2.","nullable":true},"contactCity":{"type":"string","description":"FAA NASR field: TITLE_CITY (APT_CON). Contact city.","nullable":true},"contactState":{"type":"string","description":"FAA NASR field: STATE (APT_CON). Contact state.","nullable":true},"contactZipCode":{"type":"string","description":"FAA NASR field: ZIP_CODE (APT_CON). Contact ZIP code.","nullable":true},"contactZipPlusFour":{"type":"string","description":"FAA NASR field: ZIP_PLUS_FOUR (APT_CON). Contact ZIP+4 code.","nullable":true},"contactPhoneNumber":{"type":"string","description":"FAA NASR field: PHONE_NO (APT_CON). Contact phone number.","nullable":true}}},"AirportSiteType":{"type":"string","description":"Landing Facility Site Type. Corresponds to FAA NASR field SITE_TYPE_CODE (APT_BASE).","x-enumNames":["Airport","Heliport","SeaplaneBase","Balloonport","Gliderport","Ultralight"],"enum":["Airport","Heliport","SeaplaneBase","Balloonport","Gliderport","Ultralight"]},"AirportOwnershipType":{"type":"string","description":"Airport Ownership Type. Corresponds to FAA NASR field OWNERSHIP_TYPE_CODE (APT_BASE).","x-enumNames":["PubliclyOwned","PrivatelyOwned","AirForce","Navy","Army","CoastGuard"],"enum":["PubliclyOwned","PrivatelyOwned","AirForce","Navy","Army","CoastGuard"]},"AirportFacilityUse":{"type":"string","description":"Airport Facility Use. Corresponds to FAA NASR field FACILITY_USE_CODE (APT_BASE).","x-enumNames":["Undetermined","PublicUse","PrivateUse"],"enum":["Undetermined","PublicUse","PrivateUse"]},"AirportStatus":{"type":"string","description":"Airport Operational Status. Corresponds to FAA NASR field ARPT_STATUS (APT_BASE).","x-enumNames":["Operational","ClosedIndefinitely","ClosedPermanently"],"enum":["Operational","ClosedIndefinitely","ClosedPermanently"]},"SurveyMethod":{"type":"string","description":"Survey Method for position or elevation determination. Corresponds to FAA NASR fields SURVEY_METHOD_CODE and ELEV_METHOD_CODE (APT_BASE).","x-enumNames":["Estimated","Surveyed"],"enum":["Estimated","Surveyed"]},"AirportInspectionMethod":{"type":"string","description":"Airport Inspection Method. Corresponds to FAA NASR field INSPECT_METHOD_CODE (APT_BASE).","x-enumNames":["Federal","State","Contractor","PublicUseMailout","PrivateUseMailout"],"enum":["Federal","State","Contractor","PublicUseMailout","PrivateUseMailout"]},"AirportInspectorAgency":{"type":"string","description":"Airport Inspector Agency. Corresponds to FAA NASR field INSPECTOR_CODE (APT_BASE).","x-enumNames":["Faa","State","Contractor","Owner"],"enum":["Faa","State","Contractor","Owner"]},"RepairServiceAvailability":{"type":"string","description":"Repair Service Availability. Corresponds to FAA NASR fields AIRFRAME_REPAIR_SER_CODE and PWR_PLANT_REPAIR_SER (APT_BASE).","x-enumNames":["None","Major","Minor"],"enum":["None","Major","Minor"]},"OxygenPressureType":{"type":"string","description":"Oxygen Pressure Type. Corresponds to FAA NASR fields BOTTLED_OXY_TYPE and BULK_OXY_TYPE (APT_BASE).","x-enumNames":["None","High","Low","HighAndLow"],"enum":["None","High","Low","HighAndLow"]},"BeaconLensColor":{"type":"string","description":"Airport Beacon Lens Color. Corresponds to FAA NASR field BCN_LENS_COLOR (APT_BASE).","x-enumNames":["WhiteGreen","WhiteYellow","WhiteGreenYellow","SplitWhiteGreen","White","Yellow","Green","None"],"enum":["WhiteGreen","WhiteYellow","WhiteGreenYellow","SplitWhiteGreen","White","Yellow","Green","None"]},"SegmentedCircleMarkerType":{"type":"string","description":"Segmented Circle Airport Marker. Corresponds to FAA NASR field SEG_CIRCLE_MKR_FLAG (APT_BASE).","x-enumNames":["None","Yes","YesLighted"],"enum":["None","Yes","YesLighted"]},"WindIndicatorType":{"type":"string","description":"Wind Indicator Type. Corresponds to FAA NASR field WIND_INDCR_FLAG (APT_BASE).","x-enumNames":["None","Unlighted","Lighted"],"enum":["None","Unlighted","Lighted"]},"PaginationMetadata":{"type":"object","description":"Metadata for cursor-based pagination. Use nextCursor as the cursor query parameter\nto fetch the next page of results. When hasMore is false, there are no more pages.","additionalProperties":false,"properties":{"nextCursor":{"type":"string","description":"Opaque cursor value to pass as the cursor query parameter to fetch the next page. Null when there are no more results.","nullable":true},"hasMore":{"type":"boolean","description":"True if more results are available beyond this page; false if this is the last page."},"previousCursor":{"type":"string","description":"Opaque cursor value to pass as the cursor query parameter to fetch the previous page. Null on the first page.","nullable":true},"hasPrevious":{"type":"boolean","description":"True if there are results before this page; false if this is the first page."},"limit":{"type":"integer","description":"Maximum number of items returned per page (1-500, default 100).","format":"int32"}}},"ApiErrorResponse":{"type":"object","description":"Standardized error response format for API errors.","additionalProperties":false,"properties":{"code":{"type":"string","description":"Machine-readable error code (e.g., \"AIRCRAFT_NOT_FOUND\")."},"message":{"type":"string","description":"Human-readable error message suitable for display."},"details":{"type":"string","description":"Additional error details (only included in development environment).","nullable":true},"service":{"type":"string","description":"Name of the external service that failed (only included for 503 errors).","nullable":true},"validationErrors":{"type":"object","description":"Field-level validation errors (only for validation failures).","nullable":true,"additionalProperties":{"type":"array","items":{"type":"string"}}},"timestamp":{"type":"string","description":"UTC timestamp when the error occurred."},"traceId":{"type":"string","description":"Correlation ID for tracing the request.","nullable":true},"path":{"type":"string","description":"Request path that generated the error.","nullable":true}}},"PaginatedResponseOfAirspaceDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/AirspaceDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"AirspaceDto":{"type":"object","description":"Controlled airspace data (Class B, C, D, E) sourced from FAA ArcGIS.\nGeometry boundaries are generalized (~1.1m accuracy) for efficient storage and rendering.\nUse the GlobalId to cross-reference with navigation log results — the navlog response's\nAirspaceGlobalIds field contains GlobalIds from this endpoint for airspaces along a planned route.","additionalProperties":false,"properties":{"globalId":{"type":"string","description":"ArcGIS global unique identifier. This is the key used to look up airspaces returned by the navigation log endpoint's AirspaceGlobalIds field.","nullable":true},"ident":{"type":"string","description":"FAA identifier.","nullable":true},"icaoId":{"type":"string","description":"ICAO identifier.","nullable":true},"name":{"type":"string","description":"Airspace name.","nullable":true},"upperDesc":{"type":"string","description":"Upper altitude limit description.","nullable":true},"upperVal":{"type":"number","description":"Upper altitude limit value. Unit determined by UpperUom (FT = feet, FL = flight level). Reference determined by UpperCode (MSL or AGL).","format":"double","nullable":true},"upperUom":{"type":"string","description":"Upper altitude unit of measure (e.g., FT, FL).","nullable":true},"upperCode":{"type":"string","description":"Upper altitude reference code (e.g., MSL, AGL).","nullable":true},"lowerDesc":{"type":"string","description":"Lower altitude limit description.","nullable":true},"lowerVal":{"type":"number","description":"Lower altitude limit value. Unit determined by LowerUom (FT = feet, FL = flight level). Reference determined by LowerCode (MSL or AGL).","format":"double","nullable":true},"lowerUom":{"type":"string","description":"Lower altitude unit of measure (e.g., FT, FL).","nullable":true},"lowerCode":{"type":"string","description":"Lower altitude reference code (e.g., MSL, AGL).","nullable":true},"typeCode":{"type":"string","description":"Airspace type code (e.g., CLASS_B, CLASS_C).","nullable":true},"localType":{"type":"string","description":"Local airspace type.","nullable":true},"class":{"type":"string","description":"Airspace class (e.g., B, C, D, E).","nullable":true},"milCode":{"type":"string","description":"Military use code.","nullable":true},"commName":{"type":"string","description":"Communications facility name.","nullable":true},"level":{"type":"string","description":"Level designation (e.g., SURFACE, UPPER).","nullable":true},"sector":{"type":"string","description":"Sector identifier.","nullable":true},"onshore":{"type":"string","description":"Whether the airspace is onshore.","nullable":true},"exclusion":{"type":"string","description":"Exclusion area indicator.","nullable":true},"wkhrCode":{"type":"string","description":"Working hours code.","nullable":true},"wkhrRmk":{"type":"string","description":"Working hours remarks.","nullable":true},"dst":{"type":"string","description":"Daylight saving time indicator.","nullable":true},"gmtOffset":{"type":"string","description":"GMT offset.","nullable":true},"contAgent":{"type":"string","description":"Controlling agency.","nullable":true},"city":{"type":"string","description":"City associated with the airspace.","nullable":true},"state":{"type":"string","description":"State associated with the airspace.","nullable":true},"country":{"type":"string","description":"Country code.","nullable":true},"adhpId":{"type":"string","description":"Associated aerodrome identifier.","nullable":true},"geometry":{"description":"GeoJSON boundary geometry. Generalized with ~1.1m accuracy from source data.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/GeoJsonGeometry"}]}}},"GeoJsonGeometry":{"type":"object","description":"GeoJSON geometry object with a type and coordinate array.","additionalProperties":false,"properties":{"type":{"type":"string","description":"Geometry type (e.g., Polygon, MultiPolygon)."},"coordinates":{"type":"array","description":"Coordinate array defining the geometry boundary.","items":{"type":"array","items":{"type":"array","items":{"type":"number","format":"double"}}}}}},"PaginatedResponseOfSpecialUseAirspaceDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/SpecialUseAirspaceDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"SpecialUseAirspaceDto":{"type":"object","description":"Special use airspace data (restricted, prohibited, warning, MOA, alert) sourced from FAA ArcGIS.\nGeometry boundaries are generalized (~11m accuracy) for efficient storage and rendering.\nUse the GlobalId to cross-reference with navigation log results — the navlog response's\nSpecialUseAirspaceGlobalIds field contains GlobalIds from this endpoint for special use airspaces along a planned route.","additionalProperties":false,"properties":{"globalId":{"type":"string","description":"ArcGIS global unique identifier. This is the key used to look up special use airspaces returned by the navigation log endpoint's SpecialUseAirspaceGlobalIds field.","nullable":true},"name":{"type":"string","description":"Airspace name.","nullable":true},"typeCode":{"type":"string","description":"Type code (e.g., R for restricted, P for prohibited).","nullable":true},"class":{"type":"string","description":"Airspace class.","nullable":true},"upperDesc":{"type":"string","description":"Upper altitude limit description.","nullable":true},"upperVal":{"type":"number","description":"Upper altitude limit value. Unit determined by UpperUom (FT = feet, FL = flight level). Reference determined by UpperCode (MSL or AGL).","format":"double","nullable":true},"upperUom":{"type":"string","description":"Upper altitude unit of measure (e.g., FT, FL).","nullable":true},"upperCode":{"type":"string","description":"Upper altitude reference code (e.g., MSL, AGL).","nullable":true},"lowerDesc":{"type":"string","description":"Lower altitude limit description.","nullable":true},"lowerVal":{"type":"number","description":"Lower altitude limit value. Unit determined by LowerUom (FT = feet, FL = flight level). Reference determined by LowerCode (MSL or AGL).","format":"double","nullable":true},"lowerUom":{"type":"string","description":"Lower altitude unit of measure (e.g., FT, FL).","nullable":true},"lowerCode":{"type":"string","description":"Lower altitude reference code (e.g., MSL, AGL).","nullable":true},"levelCode":{"type":"string","description":"Level code.","nullable":true},"city":{"type":"string","description":"City associated with the airspace.","nullable":true},"state":{"type":"string","description":"State associated with the airspace.","nullable":true},"country":{"type":"string","description":"Country code.","nullable":true},"contAgent":{"type":"string","description":"Controlling agency.","nullable":true},"commName":{"type":"string","description":"Communications facility name.","nullable":true},"sector":{"type":"string","description":"Sector identifier.","nullable":true},"onshore":{"type":"string","description":"Whether the airspace is onshore.","nullable":true},"exclusion":{"type":"string","description":"Exclusion area indicator.","nullable":true},"timesOfUse":{"type":"string","description":"Times of use for the airspace.","nullable":true},"gmtOffset":{"type":"string","description":"GMT offset.","nullable":true},"dstCode":{"type":"string","description":"Daylight saving time code.","nullable":true},"remarks":{"type":"string","description":"Additional remarks.","nullable":true},"geometry":{"description":"GeoJSON boundary geometry. Generalized with ~11m accuracy from source data.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/GeoJsonGeometry"}]}}},"RouteBriefingResponse":{"type":"object","description":"Composite weather briefing for a flight route, containing all weather products\naffecting the route corridor.","additionalProperties":false,"properties":{"route":{"type":"string","description":"Route description (e.g., \"KDFW -> KAUS\")."},"corridorWidthNm":{"type":"number","description":"Corridor width in nautical miles used for the search.","format":"double"},"generatedAt":{"type":"string","description":"UTC timestamp when the briefing was generated.","format":"date-time"},"metars":{"type":"array","description":"METARs for airports found along the route corridor.","items":{"$ref":"#/components/schemas/MetarDto"}},"tafs":{"type":"array","description":"TAFs for airports found along the route corridor.","items":{"$ref":"#/components/schemas/TafDto"}},"pireps":{"type":"array","description":"PIREPs within the route corridor.","items":{"$ref":"#/components/schemas/PirepDto"}},"sigmets":{"type":"array","description":"SIGMETs whose boundaries intersect the route.","items":{"$ref":"#/components/schemas/SigmetDto"}},"gAirmets":{"type":"array","description":"G-AIRMETs whose boundaries intersect the route.","items":{"$ref":"#/components/schemas/GAirmetDto"}},"notams":{"type":"array","description":"Active NOTAMs within the route corridor.","items":{"$ref":"#/components/schemas/NotamDto"}},"summary":{"description":"Summary counts for each weather product category.","oneOf":[{"$ref":"#/components/schemas/RouteBriefingSummary"}]}}},"MetarDto":{"type":"object","description":"METAR (Meteorological Aerodrome Report) observation data for an airport.","additionalProperties":false,"properties":{"id":{"type":"integer","description":"Database identifier.","format":"int32"},"rawText":{"type":"string","description":"Raw METAR text string as received from the source.","nullable":true},"stationId":{"type":"string","description":"ICAO station identifier (e.g., KDFW).","nullable":true},"observationTime":{"type":"string","description":"Observation time in ISO 8601 format.","nullable":true},"latitude":{"type":"number","description":"Station latitude in decimal degrees (WGS 84).","format":"double","nullable":true},"longitude":{"type":"number","description":"Station longitude in decimal degrees (WGS 84).","format":"double","nullable":true},"tempC":{"type":"number","description":"Temperature in degrees Celsius.","format":"double","nullable":true},"dewpointC":{"type":"number","description":"Dewpoint temperature in degrees Celsius.","format":"double","nullable":true},"windDirDegrees":{"type":"string","description":"Wind direction in degrees true, or \"VRB\" for variable.","nullable":true},"windSpeedKt":{"type":"integer","description":"Wind speed in knots.","format":"int32","nullable":true},"windGustKt":{"type":"integer","description":"Wind gust speed in knots.","format":"int32","nullable":true},"visibilityStatuteMi":{"type":"string","description":"Visibility in statute miles.","nullable":true},"altimInHg":{"type":"number","description":"Altimeter setting in inches of mercury.","format":"double","nullable":true},"seaLevelPressureMb":{"type":"number","description":"Sea level pressure in millibars. ex: 1016.2","format":"double","nullable":true},"qualityControlFlags":{"description":"Quality control flags for the observation.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/MetarQualityControlFlagsDto"}]},"wxString":{"type":"string","description":"Present weather string (e.g., \"-RA\" for light rain).","nullable":true},"skyCondition":{"type":"array","description":"Sky condition layers (cloud cover and bases).","nullable":true,"items":{"$ref":"#/components/schemas/MetarSkyConditionDto"}},"flightCategory":{"description":"Flight category: VFR, MVFR, IFR, or LIFR.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/FlightCategory"}]},"threeHrPressureTendencyMb":{"type":"number","description":"Three-hour pressure tendency in millibars.","format":"double","nullable":true},"maxTC":{"type":"number","description":"Maximum temperature in degrees Celsius.","format":"double","nullable":true},"minTC":{"type":"number","description":"Minimum temperature in degrees Celsius.","format":"double","nullable":true},"maxT24hrC":{"type":"number","description":"Maximum temperature over the past 24 hours in degrees Celsius.","format":"double","nullable":true},"minT24hrC":{"type":"number","description":"Minimum temperature over the past 24 hours in degrees Celsius.","format":"double","nullable":true},"precipIn":{"type":"number","description":"Precipitation accumulation in inches since the last routine observation.","format":"double","nullable":true},"pcp3hrIn":{"type":"number","description":"Precipitation accumulation in inches over the past 3 hours.","format":"double","nullable":true},"pcp6hrIn":{"type":"number","description":"Precipitation accumulation in inches over the past 6 hours.","format":"double","nullable":true},"pcp24hrIn":{"type":"number","description":"Precipitation accumulation in inches over the past 24 hours.","format":"double","nullable":true},"snowIn":{"type":"number","description":"Snow depth in inches.","format":"double","nullable":true},"vertVisFt":{"type":"integer","description":"Vertical visibility in feet AGL.","format":"int32","nullable":true},"metarType":{"type":"string","description":"Type of encoding: METAR or SPECI.","nullable":true},"elevationM":{"type":"number","description":"Station elevation in meters MSL.","format":"double","nullable":true}}},"MetarQualityControlFlagsDto":{"type":"object","description":"Quality control flags indicating METAR observation characteristics.","additionalProperties":false,"properties":{"corrected":{"type":"boolean","description":"Indicates a corrected observation.","nullable":true},"auto":{"type":"boolean","description":"Indicates an automated observation.","nullable":true},"autoStation":{"type":"boolean","description":"Indicates an automated station type.","nullable":true},"maintenanceIndicatorOn":{"type":"boolean","description":"Maintenance indicator is on.","nullable":true},"noSignal":{"type":"boolean","description":"No signal received.","nullable":true},"lightningSensorOff":{"type":"boolean","description":"Lightning sensor is off.","nullable":true},"freezingRainSensorOff":{"type":"boolean","description":"Freezing rain sensor is off.","nullable":true},"presentWeatherSensorOff":{"type":"boolean","description":"Present weather sensor is off.","nullable":true}}},"MetarSkyConditionDto":{"type":"object","description":"A single sky condition layer in a METAR observation.","additionalProperties":false,"properties":{"skyCover":{"description":"Sky cover type: SKC (sky clear), CLR (clear below 12,000), FEW (few), SCT (scattered), BKN (broken), OVC (overcast), or OVX (obscured).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/SkyCover"}]},"cloudBaseFtAgl":{"type":"integer","description":"Cloud base height in feet AGL. Null for SKC or CLR.","format":"int32","nullable":true}}},"SkyCover":{"type":"string","description":"","x-enumNames":["SKC","CLR","FEW","SCT","BKN","OVC","OVX"],"enum":["SKC","CLR","FEW","SCT","BKN","OVC","OVX"]},"FlightCategory":{"type":"string","description":"","x-enumNames":["VFR","MVFR","IFR","LIFR"],"enum":["VFR","MVFR","IFR","LIFR"]},"TafDto":{"type":"object","description":"TAF (Terminal Aerodrome Forecast) data for an airport.","additionalProperties":false,"properties":{"rawText":{"type":"string","description":"Raw TAF forecast text as received from the source. ex: KORD 061728Z 0618/0724 21012KT P6SM BKN250","nullable":true},"stationId":{"type":"string","description":"ICAO station identifier (e.g., KDFW).","nullable":true},"issueTime":{"type":"string","description":"Time the TAF was issued in ISO 8601 format.","nullable":true},"bulletinTime":{"type":"string","description":"Bulletin time in ISO 8601 format.","nullable":true},"validTimeFrom":{"type":"string","description":"Start of the TAF valid period in ISO 8601 format.","nullable":true},"validTimeTo":{"type":"string","description":"End of the TAF valid period in ISO 8601 format.","nullable":true},"remarks":{"type":"string","description":"TAF remarks.","nullable":true},"latitude":{"type":"number","description":"Station latitude in decimal degrees (WGS 84).","format":"double","nullable":true},"longitude":{"type":"number","description":"Station longitude in decimal degrees (WGS 84).","format":"double","nullable":true},"elevationM":{"type":"number","description":"Station elevation in meters MSL. This field is in meters (not feet) because it originates from the NOAA Aviation Weather API which uses ICAO standard units.","format":"double","nullable":true},"forecast":{"type":"array","description":"Forecast periods within the TAF.","nullable":true,"items":{"$ref":"#/components/schemas/TafForecast"}}}},"TafForecast":{"type":"object","description":"A single forecast period within a TAF. Each TAF contains one or more forecast periods\ncovering different time ranges, with optional change indicators (TEMPO, BECMG, FM, PROB).","additionalProperties":false,"properties":{"fcstTimeFrom":{"type":"string","description":"Start of this forecast period in ISO 8601 format (UTC).","nullable":true},"fcstTimeTo":{"type":"string","description":"End of this forecast period in ISO 8601 format (UTC).","nullable":true},"changeIndicator":{"type":"string","description":"Change indicator: FM (from), BECMG (becoming), TEMPO (temporary), or PROB (probability). Null for the base forecast.","nullable":true},"timeBecoming":{"type":"string","description":"Time at which a BECMG (becoming) change completes, in ISO 8601 format (UTC).","nullable":true},"probability":{"type":"integer","description":"Probability percentage (e.g., 30 or 40) for PROB-type forecast periods.","format":"int32","nullable":true},"windDirDegrees":{"type":"string","description":"Forecast wind direction in degrees true, or \"VRB\" for variable winds.","nullable":true},"windSpeedKt":{"type":"integer","description":"Forecast wind speed in knots.","format":"int32","nullable":true},"windGustKt":{"type":"integer","description":"Forecast wind gust speed in knots.","format":"int32","nullable":true},"windShearHgtFtAgl":{"type":"integer","description":"Low-level wind shear height in feet AGL.","nullable":true},"windShearDirDegrees":{"type":"integer","description":"Low-level wind shear direction in degrees true.","nullable":true},"windShearSpeedKt":{"type":"integer","description":"Low-level wind shear speed in knots.","format":"int32","nullable":true},"visibilityStatuteMi":{"type":"string","description":"Forecast visibility in statute miles. May contain \"6+\" for visibility greater than 6 miles.","nullable":true},"altimInHg":{"type":"number","description":"Forecast altimeter setting in inches of mercury.","format":"double","nullable":true},"vertVisFt":{"type":"integer","description":"Vertical visibility in feet, reported when the sky is obscured.","nullable":true},"wxString":{"type":"string","description":"Forecast weather phenomena string (e.g., \"-RA\" for light rain, \"+TSRA\" for heavy thunderstorms with rain).","nullable":true},"notDecoded":{"type":"string","description":"Portion of the TAF text that could not be decoded by the parser.","nullable":true},"skyConditions":{"type":"array","description":"Forecast sky condition layers (cloud cover and bases) for this period.","nullable":true,"items":{"$ref":"#/components/schemas/TafSkyCondition"}},"turbulenceConditions":{"type":"array","description":"Forecast turbulence conditions for this period.","nullable":true,"items":{"$ref":"#/components/schemas/TafTurbulenceCondition"}},"icingConditions":{"type":"array","description":"Forecast icing conditions for this period.","nullable":true,"items":{"$ref":"#/components/schemas/TafIcingCondition"}},"temperature":{"type":"array","description":"Forecast temperature data for this period.","nullable":true,"items":{"$ref":"#/components/schemas/TafTemperature"}}}},"TafSkyCondition":{"type":"object","description":"A single sky condition layer in a TAF forecast period.","additionalProperties":false,"properties":{"skyCover":{"type":"string","description":"Sky cover type: CLR (clear), CAVOK (ceiling and visibility OK), FEW (few), SCT (scattered), BKN (broken), OVC (overcast), or OVX (obscured)."},"cloudBaseFtAgl":{"type":"integer","description":"Cloud base height in feet AGL. Null for CLR or CAVOK.","format":"int32","nullable":true},"cloudType":{"type":"string","description":"Cloud type modifier (e.g., CB for cumulonimbus, TCU for towering cumulus).","nullable":true}}},"TafTurbulenceCondition":{"type":"object","description":"Forecast turbulence condition within a TAF forecast period.","additionalProperties":false,"properties":{"turbulenceIntensity":{"type":"string","description":"Turbulence intensity code (integer 0-9 per TAF implementation table): 0 (none), 1 (light), 2 (moderate occasional), 3 (moderate frequent), 4 (severe), 5 (extreme), 6-8 (reserved), 9 (not specified), or X (mountain wave).","nullable":true},"turbulenceMinAltFtAgl":{"type":"integer","description":"Bottom of the turbulence layer in feet AGL.","format":"int32","nullable":true},"turbulenceMaxAltFtAgl":{"type":"integer","description":"Top of the turbulence layer in feet AGL.","format":"int32","nullable":true}}},"TafIcingCondition":{"type":"object","description":"Forecast icing condition within a TAF forecast period.","additionalProperties":false,"properties":{"icingIntensity":{"type":"string","description":"Icing intensity code: 0 (none), 1 (light), 2 (light in clouds), 3 (light in precipitation), 4 (moderate), 5 (moderate in clouds), 6 (moderate in precipitation), 7 (severe), 8 (severe in clouds), 9 (severe in precipitation).","nullable":true},"icingMinAltFtAgl":{"type":"integer","description":"Bottom of the icing layer in feet AGL.","format":"int32","nullable":true},"icingMaxAltFtAgl":{"type":"integer","description":"Top of the icing layer in feet AGL.","format":"int32","nullable":true}}},"TafTemperature":{"type":"object","description":"Forecast temperature data within a TAF forecast period.","additionalProperties":false,"properties":{"validTime":{"type":"string","description":"Valid time for this temperature forecast in ISO 8601 format (UTC).","nullable":true},"sfcTempC":{"type":"number","description":"Forecast surface temperature in degrees Celsius.","format":"double","nullable":true},"maxTempC":{"type":"number","description":"Forecast maximum temperature in degrees Celsius.","format":"double","nullable":true},"minTempC":{"type":"number","description":"Forecast minimum temperature in degrees Celsius.","format":"double","nullable":true}}},"PirepDto":{"type":"object","description":"PIREP (Pilot Report) data including turbulence, icing, and sky conditions.","additionalProperties":false,"properties":{"id":{"type":"integer","description":"Database identifier.","format":"int32"},"rawText":{"type":"string","description":"Raw PIREP text string.","nullable":true},"receiptTime":{"type":"string","description":"Time the PIREP was received. ISO 8601 UTC format.","nullable":true},"observationTime":{"type":"string","description":"Time of the pilot observation. ISO 8601 UTC format.","nullable":true},"qualityControlFlags":{"description":"Quality control flags for the report.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/PirepQualityControlFlags"}]},"aircraftRef":{"type":"string","description":"Aircraft type designation. ex: B738, C172","nullable":true},"latitude":{"type":"number","description":"Latitude of the report in decimal degrees (WGS 84).","format":"double","nullable":true},"longitude":{"type":"number","description":"Longitude of the report in decimal degrees (WGS 84).","format":"double","nullable":true},"altitudeFtMsl":{"type":"integer","description":"Altitude of the report in feet MSL.","format":"int32","nullable":true},"skyConditions":{"type":"array","description":"Reported sky conditions.","nullable":true,"items":{"$ref":"#/components/schemas/PirepSkyCondition"}},"turbulenceConditions":{"type":"array","description":"Reported turbulence conditions.","nullable":true,"items":{"$ref":"#/components/schemas/PirepTurbulenceCondition"}},"icingConditions":{"type":"array","description":"Reported icing conditions.","nullable":true,"items":{"$ref":"#/components/schemas/PirepIcingCondition"}},"visibilityStatuteMi":{"type":"integer","description":"Flight visibility in statute miles.","format":"int32","nullable":true},"wxString":{"type":"string","description":"Present weather string.","nullable":true},"tempC":{"type":"number","description":"Temperature in degrees Celsius.","format":"double","nullable":true},"windDirDegrees":{"type":"integer","description":"Wind direction in degrees true.","format":"int32","nullable":true},"windSpeedKt":{"type":"integer","description":"Wind speed in knots.","format":"int32","nullable":true},"vertGustKt":{"type":"integer","description":"Vertical gust speed in knots.","format":"int32","nullable":true},"reportType":{"description":"Report type: UA (routine PIREP) or UUA (urgent PIREP).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/PirepReportType"}]}}},"PirepQualityControlFlags":{"type":"object","description":"Quality control flags indicating potential data issues with a PIREP.","additionalProperties":false,"properties":{"midPointAssumed":{"type":"string","description":"The report location was assumed to be the midpoint of the route.","nullable":true},"noTimeStamp":{"type":"string","description":"The report had no timestamp and was assigned one by the system.","nullable":true},"fltLvlRange":{"type":"string","description":"The flight level was reported as a range rather than a single altitude.","nullable":true},"aboveGroundLevelIndicated":{"type":"string","description":"The altitude was indicated as AGL rather than the standard MSL.","nullable":true},"noFltLvl":{"type":"string","description":"No flight level was reported.","nullable":true},"badLocation":{"type":"string","description":"The reported location could not be reliably decoded.","nullable":true}}},"PirepSkyCondition":{"type":"object","description":"A sky condition layer reported by a pilot in a PIREP.","additionalProperties":false,"properties":{"skyCover":{"type":"string","description":"Sky cover type: SKC (sky clear), CLR (clear), FEW (few), SCT (scattered), BKN (broken), OVC (overcast), or OVX (obscured)."},"cloudBaseFtMsl":{"type":"integer","description":"Cloud base altitude in feet MSL (note: PIREP altitudes are MSL, unlike TAF/METAR which use AGL).","format":"int32","nullable":true},"cloudTopFtMsl":{"type":"integer","description":"Cloud top altitude in feet MSL.","format":"int32","nullable":true}}},"PirepTurbulenceCondition":{"type":"object","description":"A turbulence condition reported by a pilot in a PIREP.","additionalProperties":false,"properties":{"turbulenceType":{"type":"string","description":"Turbulence type: CAT (clear air), CHOP (chop), LLWS (low-level wind shear), or MWAVE (mountain wave).","nullable":true},"turbulenceIntensity":{"type":"string","description":"Turbulence intensity: NEG (none), SMTH-LGT (smooth to light), LGT (light), LGT-MOD (light to moderate), MOD (moderate), MOD-SEV (moderate to severe), SEV (severe), SEV-EXTM (severe to extreme), or EXTM (extreme).","nullable":true},"turbulenceBaseFtMsl":{"type":"integer","description":"Bottom of the turbulence layer in feet MSL.","format":"int32","nullable":true},"turbulenceTopFtMsl":{"type":"integer","description":"Top of the turbulence layer in feet MSL.","format":"int32","nullable":true},"turbulenceFreq":{"type":"string","description":"Turbulence frequency: ISOL (isolated), OCNL (occasional), or CONT (continuous).","nullable":true}}},"PirepIcingCondition":{"type":"object","description":"An icing condition reported by a pilot in a PIREP.","additionalProperties":false,"properties":{"icingType":{"type":"string","description":"Icing type: RIME (rime ice), CLEAR (clear ice), or MIXED (mixed rime and clear).","nullable":true},"icingIntensity":{"type":"string","description":"Icing intensity: NEG (none), NEGclr (none, clear of clouds), TRC (trace), TRC-LGT (trace to light), LGT (light), LGT-MOD (light to moderate), MOD (moderate), MOD-SEV (moderate to severe), HVY (heavy/severe), or SEV (severe).","nullable":true},"icingBaseFtMsl":{"type":"integer","description":"Bottom of the icing layer in feet MSL.","format":"int32","nullable":true},"icingTopFtMsl":{"type":"integer","description":"Top of the icing layer in feet MSL.","format":"int32","nullable":true}}},"PirepReportType":{"type":"string","description":"","x-enumNames":["UA","UUA","PIREP","AIREP"],"enum":["UA","UUA","PIREP","AIREP"]},"SigmetDto":{"type":"object","description":"Domestic SIGMET advisory data including hazard information and affected area.","additionalProperties":false,"properties":{"id":{"type":"integer","description":"Database identifier.","format":"int32"},"rawText":{"type":"string","description":"Raw SIGMET text.","nullable":true},"validTimeFrom":{"type":"string","description":"Start of the valid period in ISO 8601 format.","nullable":true},"validTimeTo":{"type":"string","description":"End of the valid period in ISO 8601 format.","nullable":true},"altitude":{"description":"Altitude range of the advisory.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/SigmetAltitude"}]},"movementDirDegrees":{"type":"integer","description":"Movement direction in degrees true.","format":"int32","nullable":true},"movementSpeedKt":{"type":"integer","description":"Movement speed in knots.","format":"int32","nullable":true},"hazard":{"description":"Hazard type and severity information.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/SigmetHazardDto"}]},"sigmetType":{"type":"string","description":"Advisory type: always SIGMET.","nullable":true},"areas":{"type":"array","description":"Geographic areas affected by the advisory.","nullable":true,"items":{"$ref":"#/components/schemas/SigmetArea"}}}},"SigmetAltitude":{"type":"object","description":"Altitude range for a SIGMET advisory.","additionalProperties":false,"properties":{"minFtMsl":{"type":"integer","description":"Minimum altitude in feet MSL for the advisory area.","format":"int32","nullable":true},"maxFtMsl":{"type":"integer","description":"Maximum altitude in feet MSL for the advisory area.","format":"int32","nullable":true}}},"SigmetHazardDto":{"type":"object","description":"Hazard type and severity information for a SIGMET advisory.","additionalProperties":false,"properties":{"type":{"description":"The weather hazard type: CONVECTIVE (thunderstorms/convection), ICE (icing), TURB (turbulence), IFR (instrument flight rules conditions), ASH (volcanic ash), or MTN_OBSCN (mountain obscuration).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/SigmetHazardType"}]},"severity":{"description":"Hazard severity: LGT (light), LT_MOD (light to moderate), MOD (moderate, typical for AIRMET), MOD_SEV (moderate to severe), SEV (severe, typical for SIGMET). Convective SIGMETs do not have a severity value.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/HazardSeverity"}]}}},"SigmetHazardType":{"type":"string","description":"SIGMET hazard types","x-enumNames":["CONVECTIVE","ICE","TURB","IFR","ASH","MTN_OBSCN"],"enum":["CONVECTIVE","ICE","TURB","IFR","ASH","MTN_OBSCN"]},"HazardSeverity":{"type":"string","description":"","x-enumNames":["LGT","LT_MOD","MOD","MOD_SEV","SEV"],"enum":["LGT","LT_MOD","MOD","MOD_SEV","SEV"]},"SigmetArea":{"type":"object","description":"Geographic area affected by a SIGMET, defined as a polygon of lat/lon points.","additionalProperties":false,"properties":{"numPoints":{"type":"integer","description":"Number of points defining the polygon boundary.","format":"int32"},"points":{"type":"array","description":"Ordered list of lat/lon points forming the polygon boundary of the affected area.","items":{"$ref":"#/components/schemas/SigmetPoint"}}}},"SigmetPoint":{"type":"object","description":"A geographic coordinate point forming part of a SIGMET area boundary polygon.","additionalProperties":false,"properties":{"longitude":{"type":"number","description":"Longitude in decimal degrees.","format":"double"},"latitude":{"type":"number","description":"Latitude in decimal degrees.","format":"double"}}},"GAirmetDto":{"type":"object","description":"G-AIRMET (Graphical AIRMET) advisory data with hazard, altitude, and area information.","additionalProperties":false,"properties":{"id":{"type":"integer","description":"Database identifier.","format":"int32"},"receiptTime":{"type":"string","description":"Time the advisory was received. ISO 8601 UTC format.","format":"date-time"},"issueTime":{"type":"string","description":"Time the advisory was issued. ISO 8601 UTC format.","format":"date-time"},"expireTime":{"type":"string","description":"Time the advisory expires, typically 6 hours after issuance. ISO 8601 UTC format.","format":"date-time"},"validTime":{"type":"string","description":"The valid time of the G-AIRMET snapshot. ISO 8601 UTC format.","format":"date-time"},"product":{"description":"Product type: SIERRA, TANGO, or ZULU.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/GAirmetProduct"}]},"tag":{"type":"string","description":"Forecast component identifier tag. ex: 1C","nullable":true},"forecastHour":{"type":"integer","description":"The forecast hour taken from initial product issuance. ex: 0, 3, 6, 9, 12","format":"int32"},"hazard":{"description":"Hazard type: IFR, MT_OBSC, TURB_HI, TURB_LO, ICE, FZLVL, M_FZLVL, SFC_WIND, or LLWS.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/GAirmetHazardType"}]},"hazardSeverity":{"description":"Hazard severity: MOD (moderate) or null.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/HazardSeverity"}]},"geometryType":{"type":"string","description":"The geometry type: AREA or LINE.","nullable":true},"dueTo":{"type":"string","description":"Additional information, reason for the AIRMET. ex: CIG BLW 010/VIS BLW 3SM PCPN/BR/FG","nullable":true},"altitudes":{"type":"array","description":"Altitude ranges for the advisory in feet MSL. 0 indicates surface, -1 indicates freezing level.","nullable":true,"items":{"$ref":"#/components/schemas/GAirmetAltitude"}},"area":{"description":"Geographic area affected by the advisory.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/GAirmetArea"}]}}},"GAirmetProduct":{"type":"string","description":"G-AIRMET product types","x-enumNames":["SIERRA","TANGO","ZULU"],"enum":["SIERRA","TANGO","ZULU"]},"GAirmetHazardType":{"type":"string","description":"G-AIRMET hazard types","x-enumNames":["MT_OBSC","IFR","TURB_LO","TURB_HI","LLWS","SFC_WIND","ICE","FZLVL","M_FZLVL"],"enum":["MT_OBSC","IFR","TURB_LO","TURB_HI","LLWS","SFC_WIND","ICE","FZLVL","M_FZLVL"]},"GAirmetAltitude":{"type":"object","description":"Altitude information for a G-AIRMET advisory. Bottom/top levels valid in feet MSL; 0 indicates surface, -1 indicates freezing level.","additionalProperties":false,"properties":{"minFtMsl":{"type":"string","description":"Minimum altitude in feet MSL. 0 indicates surface, -1 indicates freezing level.","nullable":true},"maxFtMsl":{"type":"string","description":"Maximum altitude in feet MSL.","nullable":true},"levelFtMsl":{"type":"string","description":"Single level altitude in feet MSL (used for freezing level lines).","nullable":true},"fzlAltitude":{"description":"Range of altitudes for freezing level within an icing AIRMET.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/GAirmetFzlAltitude"}]}}},"GAirmetFzlAltitude":{"type":"object","description":"Range of altitudes for the freezing level within an icing G-AIRMET.","additionalProperties":false,"properties":{"minFtMsl":{"type":"string","description":"Minimum freezing level altitude in feet MSL.","nullable":true},"maxFtMsl":{"type":"string","description":"Maximum freezing level altitude in feet MSL.","nullable":true}}},"GAirmetArea":{"type":"object","description":"Geographic area affected by a G-AIRMET, defined as a polygon of lat/lon points.","additionalProperties":false,"properties":{"numPoints":{"type":"integer","description":"Number of points defining the polygon boundary.","format":"int32"},"points":{"type":"array","description":"Ordered list of lat/lon points forming the polygon boundary of the affected area.","items":{"$ref":"#/components/schemas/GAirmetPoint"}}}},"GAirmetPoint":{"type":"object","description":"A geographic coordinate point forming part of a G-AIRMET area boundary polygon.","additionalProperties":false,"properties":{"longitude":{"type":"number","description":"Longitude in decimal degrees.","format":"double"},"latitude":{"type":"number","description":"Latitude in decimal degrees.","format":"double"}}},"NotamDto":{"type":"object","description":"Represents a NOTAM as a GeoJSON Feature from the NMS API.\nSee nms-api.yaml NmsNotamData schema for full specification.","additionalProperties":false,"properties":{"type":{"type":"string","description":"GeoJSON type, always \"Feature\"."},"id":{"type":"string","description":"Unique NOTAM feature identifier.","nullable":true},"geometry":{"description":"GeoJSON geometry representing the NOTAM's geographic location or affected area (Point, Polygon, or GeometryCollection).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamGeometryDto"}]},"properties":{"description":"NOTAM properties containing the core NOTAM data, detail fields, and translations.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamPropertiesDto"}]}}},"NotamGeometryDto":{"type":"object","description":"GeoJSON geometry - can be Point, Polygon, or GeometryCollection","additionalProperties":false,"properties":{"type":{"type":"string"},"coordinates":{"description":"For Point: [lon, lat] array\nFor Polygon: array of coordinate rings\nFor GeometryCollection: null (use Geometries instead)","nullable":true},"geometries":{"type":"array","description":"For GeometryCollection type - contains child geometries","nullable":true,"items":{"$ref":"#/components/schemas/NotamGeometryDto"}}}},"NotamPropertiesDto":{"type":"object","description":"Properties of a NOTAM GeoJSON Feature containing the core NOTAM data.","additionalProperties":false,"properties":{"coreNOTAMData":{"description":"Core NOTAM data including the event metadata, detail fields, and translations.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/CoreNotamDataDto"}]}}},"CoreNotamDataDto":{"type":"object","description":"Core NOTAM data structure containing event metadata, the NOTAM detail, and any translations.","additionalProperties":false,"properties":{"notamEvent":{"description":"NOTAM event metadata (encoding format and scenario).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamEventDto"}]},"notam":{"description":"The NOTAM detail fields including identifier, text, effective dates, location, and classification.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamDetailDto"}]},"notamTranslation":{"type":"array","description":"NOTAM text translations in various formats (plain English, domestic format, ICAO format).","nullable":true,"items":{"$ref":"#/components/schemas/NotamTranslationDto"}}}},"NotamEventDto":{"type":"object","description":"NOTAM event metadata","additionalProperties":false,"properties":{"encoding":{"type":"string","nullable":true},"scenario":{"type":"string","nullable":true}}},"NotamDetailDto":{"type":"object","description":"Core NOTAM detail fields per NMS API specification.\nClassification values: INTERNATIONAL, MILITARY, LOCAL_MILITARY, DOMESTIC, FDC\nFeature values: RWY, TWY, APRON, AD, OBST, NAV, COM, SVC, AIRSPACE, ODP, SID, STAR, CHART, DATA, DVA, IAP, VFP, ROUTE, SPECIAL, SECURITY\nSeries values: A, B, C, D, E, G, H, I, J, K, N, R, V, Z","additionalProperties":false,"properties":{"id":{"type":"string","description":"Unique 16-digit NMS identifier","nullable":true},"number":{"type":"string","description":"NOTAM number as returned by the NMS API. Typically a bare sequence number (e.g., \"420\", \"3997\")\nbut may include a month prefix (e.g., \"01/123\") for domestic NOTAMs or a series prefix\n(e.g., \"A1234/25\") for ICAO NOTAMs. Stored as-is from the source; the denormalized\nnotam_number column on the entity strips any month prefix for indexed search.","nullable":true},"series":{"type":"string","description":"ICAO series code (A, B, C, D, E, G, H, I, J, K, N, R, V, Z)","nullable":true},"year":{"type":"string","description":"4-digit NOTAM year (e.g., \"2025\"). Denormalized to the notam_year entity column for indexed search.","nullable":true},"type":{"description":"NOTAM type (N=New, R=Replace, C=Cancel)","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamType"}]},"feature":{"description":"Feature category: RWY, TWY, APRON, AD, OBST, NAV, COM, SVC, AIRSPACE, ODP, SID, STAR, CHART, DATA, DVA, IAP, VFP, ROUTE, SPECIAL, SECURITY","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamFeature"}]},"issued":{"type":"string","description":"Issuance timestamp (ISO 8601)","nullable":true},"affectedFir":{"type":"string","description":"Affected FIR/ARTCC (e.g., \"ZTL\")","nullable":true},"selectionCode":{"type":"string","description":"Q-code selection code (e.g., \"QXXX\")","nullable":true},"traffic":{"description":"Traffic type (I=IFR, V=VFR, IV=Both)","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamTraffic"}]},"purpose":{"type":"string","description":"Purpose code (e.g., \"BO\")","nullable":true},"scope":{"description":"Scope (A=Aerodrome, E=En-route, W=Navigation warning)","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamScope"}]},"minimumFl":{"type":"string","description":"Minimum flight level (e.g., \"000\")","nullable":true},"maximumFl":{"type":"string","description":"Maximum flight level (e.g., \"999\")","nullable":true},"location":{"type":"string","description":"Domestic location identifier (e.g., \"CLT\")","nullable":true},"icaoLocation":{"type":"string","description":"ICAO location identifier (e.g., \"KCLT\")","nullable":true},"airportName":{"type":"string","description":"Airport/facility name (AIXM-only, e.g., \"JOHN C TUNE\"). Null for GeoJSON-sourced NOTAMs.","nullable":true},"effectiveStart":{"type":"string","description":"Effective start timestamp (ISO 8601)","nullable":true},"effectiveEnd":{"type":"string","description":"Effective end timestamp (ISO 8601)","nullable":true},"estimated":{"type":"boolean","description":"Whether end time is estimated.","nullable":true},"text":{"type":"string","description":"NOTAM text content","nullable":true},"classification":{"description":"Classification: INTERNATIONAL, MILITARY, LOCAL_MILITARY, DOMESTIC, FDC","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamClassification"}]},"cancelationDate":{"type":"string","description":"Cancellation date timestamp (ISO 8601)","nullable":true},"accountId":{"type":"string","description":"Accountability ID — the issuing office code (e.g., \"BNA\", \"FDC\", \"CLT\").\n3-4 characters for domestic NOTAMs, up to 8 characters for AFTN.\nDenormalized to the account_id entity column for indexed search.","nullable":true},"originId":{"type":"string","description":"Origin identifier from FAA FNSE extension","nullable":true},"lastUpdated":{"type":"string","description":"Last updated timestamp (ISO 8601)","nullable":true},"schedule":{"type":"string","description":"Schedule string (e.g., \"Daily:1200-1230~DLY 1200-1230\")","nullable":true},"lowerLimit":{"type":"string","description":"Lower altitude limit (e.g., \"SFC\", \"3000FT\")","nullable":true},"upperLimit":{"type":"string","description":"Upper altitude limit (e.g., \"280M\", \"FL180\")","nullable":true},"coordinates":{"type":"string","description":"ICAO coordinates string (e.g., \"3939N04302E\")","nullable":true},"radius":{"type":"string","description":"Radius in nautical miles","nullable":true}}},"NotamType":{"type":"integer","description":"","x-enumNames":["N","R","C"],"enum":[0,1,2]},"NotamFeature":{"type":"integer","description":"","x-enumNames":["RWY","TWY","APRON","AD","OBST","NAV","COM","SVC","AIRSPACE","ODP","SID","STAR","CHART","DATA","DVA","IAP","VFP","ROUTE","SPECIAL","SECURITY"],"enum":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]},"NotamTraffic":{"type":"integer","description":"","x-enumNames":["I","V","IV"],"enum":[0,1,2]},"NotamScope":{"type":"integer","description":"","x-enumNames":["A","E","W"],"enum":[0,1,2]},"NotamClassification":{"type":"integer","description":"","x-enumNames":["INTERNATIONAL","MILITARY","LOCAL_MILITARY","DOMESTIC","FDC"],"enum":[0,1,2,3,4]},"NotamTranslationDto":{"type":"object","description":"NOTAM translation in various formats.\nType values: LOCAL_FORMAT, ICAO","additionalProperties":false,"properties":{"type":{"type":"string","description":"Translation type: LOCAL_FORMAT or ICAO","nullable":true},"simpleText":{"type":"string","description":"Simple text translation (plain English)","nullable":true},"domestic_message":{"type":"string","description":"Domestic format message (for LOCAL_FORMAT type)","nullable":true},"icao_message":{"type":"string","description":"ICAO format message (for ICAO type)","nullable":true},"formattedText":{"type":"string","description":"Formatted text (HTML or rich text)","nullable":true}}},"RouteBriefingSummary":{"type":"object","description":"Count summary for a route briefing response.","additionalProperties":false,"properties":{"metarCount":{"type":"integer","format":"int32"},"tafCount":{"type":"integer","format":"int32"},"pirepCount":{"type":"integer","format":"int32"},"sigmetCount":{"type":"integer","format":"int32"},"gAirmetCount":{"type":"integer","format":"int32"},"notamCount":{"type":"integer","format":"int32"}}},"RouteBriefingRequest":{"type":"object","description":"Request for a composite route weather briefing along a flight path.","additionalProperties":false,"properties":{"waypoints":{"type":"array","description":"Ordered list of waypoints defining the flight route. Each waypoint is either an\nairport identifier (ICAO code or FAA identifier) or a lat/lon coordinate pair.\nAt least two waypoints are required to define a route.","items":{"$ref":"#/components/schemas/BriefingWaypoint"}},"corridorWidthNm":{"type":"number","description":"Corridor width in nautical miles on each side of the route centerline.\nUsed for PIREPs, NOTAMs, and airport searches. Default is 25 NM.","format":"double"}}},"BriefingWaypoint":{"type":"object","description":"A single waypoint in a briefing route. Specify either an airport identifier\nor latitude/longitude coordinates.","additionalProperties":false,"properties":{"airportIdentifier":{"type":"string","description":"Airport ICAO code (e.g., KDFW) or FAA identifier (e.g., DFW).\nIf provided, latitude and longitude are ignored and looked up from the database.","nullable":true},"latitude":{"type":"number","description":"Latitude in decimal degrees (WGS 84), range -90 to 90. Required when AirportIdentifier is null.","format":"decimal","nullable":true},"longitude":{"type":"number","description":"Longitude in decimal degrees (WGS 84), range -180 to 180. Required when AirportIdentifier is null.","format":"decimal","nullable":true}}},"ChartSupplementsResponseDto":{"type":"object","description":"Airport information with all available chart supplement (formerly Airport/Facility Directory) pages.\nChart supplements contain detailed airport information including runway data, lighting, services,\nNOTAMs, and other operational details published by the FAA. The PDF URLs are time-limited pre-signed URLs.","additionalProperties":false,"properties":{"airportName":{"type":"string","description":"Official airport name.","nullable":true},"airportCity":{"type":"string","description":"City the airport is associated with.","nullable":true},"airportCode":{"type":"string","description":"Airport ICAO code or FAA identifier used to query this data.","nullable":true},"supplements":{"type":"array","description":"List of chart supplement PDF pages with time-limited download URLs. Multi-page supplements will have one entry per page.","items":{"$ref":"#/components/schemas/ChartSupplementDto"}}}},"ChartSupplementDto":{"type":"object","description":"A single chart supplement page with a time-limited pre-signed URL for PDF download.","additionalProperties":false,"properties":{"pdfUrl":{"type":"string","description":"Pre-signed URL to download the chart supplement PDF page. This URL expires after a limited time period; request a new URL if it has expired."}}},"PaginatedResponseOfCommunicationFrequencyDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/CommunicationFrequencyDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"CommunicationFrequencyDto":{"type":"object","description":"Communication frequency data from the FAA NASR database, sourced from the FRQ CSV file.\nContains radio frequencies for ATC facilities, towers, approach/departure control, and other aviation communication services.","additionalProperties":false,"properties":{"id":{"type":"string","description":"System-generated unique identifier.","format":"guid"},"facilityCode":{"type":"string","description":"FAA NASR field: FACILITY. Contains FACILITY ID except for FACILITY TYPE AFIS, CTAF, GCO, UNICOM and RCAG. The FACILITY NAME is used for RCAG sites. AFIS, CTAF, GCO and UNICOM are NULL.","nullable":true},"effectiveDate":{"type":"string","description":"FAA NASR field: EFF_DATE. The 28 Day NASR Subscription Effective Date. ISO 8601 UTC format.","format":"date-time"},"facilityName":{"type":"string","description":"FAA NASR field: FAC_NAME. Official Facility Name. NULL for AFIS, CTAF, GCO, UNICOM (no FACILITY ID or NAME in NASR) and ASOS/AWOS (no FACILITY NAME in NASR).","nullable":true},"facilityType":{"type":"string","description":"FAA NASR field: FACILITY_TYPE. All records contain a FACILITY TYPE. Note: RCO and RCO1 serve the same function (remote communication outlet). An RCO1 may exist if two separate sites share the same identifier."},"artccOrFssId":{"type":"string","description":"FAA NASR field: ARTCC_OR_FSS_ID. RCAG facilities contain an ARTCC ID; RCO/RCO1 facilities contain an FSS ID. Included for convenience to identify the parent ARTCC or FSS resource in NASR.","nullable":true},"cpdlc":{"type":"string","description":"FAA NASR field: CPDLC. A Controller Pilot Data Link Communications (CPDLC) remark associated with a FACILITY.","nullable":true},"towerHours":{"type":"string","description":"FAA NASR field: TOWER_HRS. Tower operating hours. Only listed for ATCT FACILITY TYPEs where the FACILITY equals the SERVICED FACILITY.","nullable":true},"servicedFacility":{"type":"string","description":"FAA NASR field: SERVICED_FACILITY. The FACILITY ID (or FACILITY NAME if FACILITY TYPE is RCAG) that is serviced by the frequencies listed. This is a NON-NULL field."},"servicedFacilityName":{"type":"string","description":"FAA NASR field: SERVICED_FAC_NAME. The FACILITY NAME that is serviced by the frequencies listed.","nullable":true},"servicedSiteType":{"type":"string","description":"FAA NASR field: SERVICED_SITE_TYPE. Facility Type of SERVICED FACILITY.","nullable":true},"latitude":{"type":"number","description":"FAA NASR field: LAT_DECIMAL. Facility Reference Point Latitude in decimal degrees (WGS 84).","format":"double","nullable":true},"longitude":{"type":"number","description":"FAA NASR field: LONG_DECIMAL. Facility Reference Point Longitude in decimal degrees (WGS 84).","format":"double","nullable":true},"servicedCity":{"type":"string","description":"FAA NASR field: SERVICED_CITY. Serviced Facility Associated City Name.","nullable":true},"servicedState":{"type":"string","description":"FAA NASR field: SERVICED_STATE. Two-letter state ID of the SERVICED FACILITY.","nullable":true},"servicedCountry":{"type":"string","description":"FAA NASR field: SERVICED_COUNTRY. Country Post Office Code of Serviced Facility.","nullable":true},"towerOrCommCall":{"type":"string","description":"FAA NASR field: TOWER_OR_COMM_CALL. Radio call used by pilot to contact ATC or FSS facility.","nullable":true},"primaryApproachRadioCall":{"type":"string","description":"FAA NASR field: PRIMARY_APPROACH_RADIO_CALL. Radio call of facility that furnishes primary approach control.","nullable":true},"frequency":{"type":"string","description":"FAA NASR field: FREQ. Frequency for SERVICED FACILITY use, in MHz (e.g., \"118.300\"). For NAVAIDs with DME/TACAN Channel, the value includes the channel (e.g., \"110.60/CH43X\").","nullable":true},"sectorization":{"type":"string","description":"FAA NASR field: SECTORIZATION. Sectorization based on SERVICED FACILITY or airway boundaries, or limitations based on runway usage. For ARTCC and RCAG, identifies the Frequency Altitude as Low, High, Low/High or Ultra-High.","nullable":true},"frequencyUse":{"type":"string","description":"FAA NASR field: FREQ_USE. Intended use of the frequency (e.g., ATIS, LCL/P (Local/Tower), GND/P (Ground), CD/P (Clearance Delivery), APCH/P (Approach), DEP/P (Departure)).","nullable":true},"remark":{"type":"string","description":"FAA NASR field: REMARK. Remark Text (Free Form Text that further describes a specific Information Item).","nullable":true}}},"AirportCrosswindResponseDto":{"type":"object","description":"Response DTO containing crosswind components for all runways at an airport","additionalProperties":false,"properties":{"airportIdentifier":{"type":"string","description":"ICAO code or identifier of the airport"},"windDirectionDegrees":{"type":"integer","description":"Wind direction in degrees from METAR (null if variable)","format":"int32","nullable":true},"windSpeedKt":{"type":"integer","description":"Wind speed in knots from METAR","format":"int32"},"windGustKt":{"type":"integer","description":"Wind gust speed in knots from METAR (if reported)","format":"int32","nullable":true},"isVariableWind":{"type":"boolean","description":"Whether the wind was reported as variable (VRB)"},"rawMetar":{"type":"string","description":"Raw METAR text for reference","nullable":true},"observationTime":{"type":"string","description":"METAR observation time","nullable":true},"runways":{"type":"array","description":"Crosswind components for each runway end at the airport","items":{"$ref":"#/components/schemas/RunwayCrosswindComponentDto"}},"recommendedRunway":{"type":"string","description":"Recommended runway end identifier (lowest crosswind with headwind)","nullable":true}}},"RunwayCrosswindComponentDto":{"type":"object","description":"Crosswind component data for a single runway end","additionalProperties":false,"properties":{"runwayEndId":{"type":"string","description":"Runway end identifier (e.g., \"09\", \"27L\")"},"magneticHeadingDegrees":{"type":"integer","description":"Runway heading in magnetic degrees","format":"int32"},"crosswindKt":{"type":"number","description":"Crosswind component in knots. Positive = from the right, Negative = from the left","format":"double"},"headwindKt":{"type":"number","description":"Headwind component in knots. Positive = headwind, Negative = tailwind","format":"double"},"gustCrosswindKt":{"type":"number","description":"Crosswind component from gusts in knots (if gust data available). Positive = from the right","format":"double","nullable":true},"gustHeadwindKt":{"type":"number","description":"Headwind component from gusts in knots (if gust data available). Positive = headwind","format":"double","nullable":true},"absoluteCrosswindKt":{"type":"number","description":"Absolute value of crosswind component (for comparison purposes)","format":"double"},"hasHeadwind":{"type":"boolean","description":"Whether this runway has a headwind (favorable) vs tailwind"}}},"CrosswindCalculationResponseDto":{"type":"object","description":"Response DTO for a single crosswind calculation","additionalProperties":false,"properties":{"crosswindKt":{"type":"number","description":"Crosswind component in knots. Positive = from the right, Negative = from the left","format":"double"},"headwindKt":{"type":"number","description":"Headwind component in knots. Positive = headwind, Negative = tailwind","format":"double"},"gustCrosswindKt":{"type":"number","description":"Crosswind component from gusts in knots (if gust data provided). Positive = from the right","format":"double","nullable":true},"gustHeadwindKt":{"type":"number","description":"Headwind component from gusts in knots (if gust data provided). Positive = headwind","format":"double","nullable":true},"windDirectionDegrees":{"type":"integer","description":"Wind direction used in calculation (degrees)","format":"int32","nullable":true},"windSpeedKt":{"type":"integer","description":"Wind speed used in calculation (knots)","format":"int32"},"windGustKt":{"type":"integer","description":"Wind gust speed used in calculation (knots)","format":"int32","nullable":true},"runwayHeadingDegrees":{"type":"integer","description":"Runway heading used in calculation (degrees)","format":"int32"},"isVariableWind":{"type":"boolean","description":"Whether the wind was reported as variable (VRB)"}}},"CrosswindCalculationRequestDto":{"type":"object","description":"Request DTO for manual crosswind calculation with user-provided parameters","additionalProperties":false,"properties":{"windDirectionDegrees":{"type":"integer","description":"Wind direction in degrees (0-360, or null for variable)","format":"int32","nullable":true},"windSpeedKt":{"type":"integer","description":"Wind speed in knots","format":"int32"},"windGustKt":{"type":"integer","description":"Wind gust speed in knots (optional)","format":"int32","nullable":true},"runwayHeadingDegrees":{"type":"integer","description":"Runway heading in magnetic degrees (0-360)","format":"int32"}}},"DensityAltitudeResponseDto":{"type":"object","description":"Response DTO for density altitude calculation","additionalProperties":false,"properties":{"airportIdentifier":{"type":"string","description":"Airport identifier (for airport-based calculations)","nullable":true},"fieldElevationFt":{"type":"number","description":"Field elevation in feet MSL","format":"double"},"pressureAltitudeFt":{"type":"number","description":"Pressure altitude in feet","format":"double"},"densityAltitudeFt":{"type":"number","description":"Density altitude in feet","format":"double"},"isaTemperatureCelsius":{"type":"number","description":"Standard (ISA) temperature at this pressure altitude in Celsius","format":"double"},"actualTemperatureCelsius":{"type":"number","description":"Actual temperature in Celsius","format":"double"},"temperatureDeviationCelsius":{"type":"number","description":"Temperature deviation from ISA in Celsius","format":"double"},"altimeterInHg":{"type":"number","description":"Altimeter setting used in calculation (inHg)","format":"double"},"rawMetar":{"type":"string","description":"Raw METAR text for reference (for airport-based calculations)","nullable":true},"observationTime":{"type":"string","description":"METAR observation time (for airport-based calculations)","nullable":true}}},"DensityAltitudeRequestDto":{"type":"object","description":"Request DTO for manual density altitude calculation","additionalProperties":false,"properties":{"fieldElevationFt":{"type":"number","description":"Field elevation in feet MSL","format":"double"},"altimeterInHg":{"type":"number","description":"Altimeter setting in inches of mercury (inHg)","format":"double"},"temperatureCelsius":{"type":"number","description":"Temperature in degrees Celsius","format":"double"}}},"WindTriangleResponseDto":{"type":"object","description":"Response DTO for wind triangle calculation containing heading and ground speed results.","additionalProperties":false,"properties":{"trueHeadingDegrees":{"type":"number","description":"True heading in degrees (0–360), corrected for wind","format":"double"},"groundSpeedKt":{"type":"number","description":"Ground speed in knots","format":"double"},"windCorrectionAngleDegrees":{"type":"number","description":"Wind correction angle in degrees (positive = right correction, negative = left)","format":"double"},"headwindComponentKt":{"type":"number","description":"Headwind component in knots (positive = headwind, negative = tailwind)","format":"double"},"crosswindComponentKt":{"type":"number","description":"Crosswind component in knots (positive = from the right, negative = from the left)","format":"double"},"trueCourseDegrees":{"type":"number","description":"True course used in calculation (degrees)","format":"double"},"trueAirspeedKt":{"type":"number","description":"True airspeed used in calculation (knots)","format":"double"},"windDirectionDegrees":{"type":"number","description":"Wind direction used in calculation (degrees)","format":"double"},"windSpeedKt":{"type":"number","description":"Wind speed used in calculation (knots)","format":"double"}}},"WindTriangleRequestDto":{"type":"object","description":"Request DTO for wind triangle (heading and ground speed) calculation.","additionalProperties":false,"properties":{"trueCourseDegrees":{"type":"number","description":"True course in degrees (0–360)","format":"double"},"trueAirspeedKt":{"type":"number","description":"True airspeed in knots (must be greater than 0)","format":"double"},"windDirectionDegrees":{"type":"number","description":"Wind direction in degrees (0–360)","format":"double"},"windSpeedKt":{"type":"number","description":"Wind speed in knots (must be ≥ 0)","format":"double"}}},"TrueAirspeedResponseDto":{"type":"object","description":"Response DTO for true airspeed calculation.","additionalProperties":false,"properties":{"trueAirspeedKt":{"type":"number","description":"Calculated true airspeed in knots","format":"double"},"densityAltitudeFt":{"type":"number","description":"Density altitude in feet at the given conditions","format":"double"},"machNumber":{"type":"number","description":"Mach number at the given conditions","format":"double"},"calibratedAirspeedKt":{"type":"number","description":"Calibrated airspeed used in calculation (knots)","format":"double"},"pressureAltitudeFt":{"type":"number","description":"Pressure altitude used in calculation (feet)","format":"double"},"outsideAirTemperatureCelsius":{"type":"number","description":"Outside air temperature used in calculation (°C)","format":"double"}}},"TrueAirspeedRequestDto":{"type":"object","description":"Request DTO for true airspeed (TAS) calculation.","additionalProperties":false,"properties":{"calibratedAirspeedKt":{"type":"number","description":"Calibrated (indicated) airspeed in knots (must be greater than 0)","format":"double"},"pressureAltitudeFt":{"type":"number","description":"Pressure altitude in feet (can be negative, e.g. Death Valley)","format":"double"},"outsideAirTemperatureCelsius":{"type":"number","description":"Outside air temperature in degrees Celsius","format":"double"}}},"CloudBaseResponseDto":{"type":"object","description":"Response DTO for cloud base estimation.","additionalProperties":false,"properties":{"estimatedCloudBaseFtAgl":{"type":"number","description":"Estimated cloud base in feet AGL","format":"double"},"temperatureDewpointSpreadCelsius":{"type":"number","description":"Temperature/dewpoint spread in degrees Celsius","format":"double"},"temperatureCelsius":{"type":"number","description":"Surface temperature used in calculation (°C)","format":"double"},"dewpointCelsius":{"type":"number","description":"Dewpoint used in calculation (°C)","format":"double"}}},"CloudBaseRequestDto":{"type":"object","description":"Request DTO for cloud base estimation.","additionalProperties":false,"properties":{"temperatureCelsius":{"type":"number","description":"Surface temperature in degrees Celsius","format":"double"},"dewpointCelsius":{"type":"number","description":"Dewpoint temperature in degrees Celsius (must be ≤ temperature)","format":"double"}}},"PressureAltitudeResponseDto":{"type":"object","description":"Response DTO for standalone pressure altitude calculation.","additionalProperties":false,"properties":{"pressureAltitudeFt":{"type":"number","description":"Calculated pressure altitude in feet","format":"double"},"altimeterCorrectionFt":{"type":"number","description":"Altimeter correction — deviation from standard pressure expressed in feet","format":"double"},"fieldElevationFt":{"type":"number","description":"Field elevation used in calculation (feet MSL)","format":"double"},"altimeterInHg":{"type":"number","description":"Altimeter setting used in calculation (inHg)","format":"double"}}},"PressureAltitudeRequestDto":{"type":"object","description":"Request DTO for standalone pressure altitude calculation.","additionalProperties":false,"properties":{"fieldElevationFt":{"type":"number","description":"Field elevation in feet MSL","format":"double"},"altimeterInHg":{"type":"number","description":"Altimeter setting in inches of mercury (must be between 25.0 and 35.0 inHg)","format":"double"}}},"PaginatedResponseOfGAirmetDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/GAirmetDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"PaginatedResponseOfMetarDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/MetarDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"PaginatedResponseOfNavaidDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/NavaidDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"NavaidDto":{"type":"object","description":"Navigation aid (NAVAID) data from the FAA National Airspace System Resources (NASR) database.\nIncludes VOR, VORTAC, VOR/DME, NDB, NDB/DME, TACAN, DME, and other facility types.\nUse the navaid's NavId to query related endpoints such as identifier lookup\n(GET /api/v1/navaids/{navId}), batch lookup\n(GET /api/v1/navaids/batch?ids=DFW,AUS), and nearby search\n(GET /api/v1/navaids/nearby?lat=32.897&lon=-97.038).","additionalProperties":false,"properties":{"id":{"type":"string","description":"Internal unique identifier.","format":"guid"},"navId":{"type":"string","description":"FAA NASR field: NAV_ID. NAVAID facility identifier (e.g., DFW, AUS). Not globally unique — the same identifier may exist for different facility types."},"navType":{"description":"FAA NASR field: NAV_TYPE. Facility type (e.g., VOR, VORTAC, NDB, DME, TACAN).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NavaidType"}]},"navStatus":{"type":"string","description":"FAA NASR field: NAV_STATUS. Current operational status of the facility."},"name":{"type":"string","description":"FAA NASR field: NAME. Official name of the NAVAID facility."},"city":{"type":"string","description":"FAA NASR field: CITY. City associated with the NAVAID."},"stateCode":{"type":"string","description":"FAA NASR field: STATE_CODE. Two-letter state or territory code (e.g., TX, CA).","nullable":true},"stateName":{"type":"string","description":"FAA NASR field: STATE_NAME. Full state or territory name.","nullable":true},"countryCode":{"type":"string","description":"FAA NASR field: COUNTRY_CODE. Two-letter country code (e.g., US)."},"countryName":{"type":"string","description":"FAA NASR field: COUNTRY_NAME. Full country name."},"latitude":{"type":"number","description":"FAA NASR field: LAT_DECIMAL. Latitude in decimal degrees (WGS 84).","format":"double","nullable":true},"longitude":{"type":"number","description":"FAA NASR field: LONG_DECIMAL. Longitude in decimal degrees (WGS 84).","format":"double","nullable":true},"elevation":{"type":"number","description":"FAA NASR field: ELEV. Elevation in feet above MSL.","format":"double","nullable":true},"owner":{"type":"string","description":"FAA NASR field: OWNER. Name of the facility owner.","nullable":true},"operator":{"type":"string","description":"FAA NASR field: OPERATOR. Name of the facility operator.","nullable":true},"nasUse":{"type":"boolean","description":"FAA NASR field: NAS_USE_FLAG. Whether the facility is part of the National Airspace System."},"publicUse":{"type":"boolean","description":"FAA NASR field: PUBLIC_USE_FLAG. Whether the facility is for public use."},"magneticVariation":{"type":"integer","description":"FAA NASR field: MAG_VARN. Magnetic variation in degrees.","format":"int32","nullable":true},"magneticVariationDirection":{"type":"string","description":"FAA NASR field: MAG_VARN_HEMIS. Magnetic variation direction (E or W).","nullable":true},"magneticVariationYear":{"type":"integer","description":"FAA NASR field: MAG_VARN_YEAR. Year the magnetic variation was last determined.","format":"int32","nullable":true},"frequency":{"type":"number","description":"FAA NASR field: FREQ. Transmitted frequency in MHz (VOR) or kHz (NDB).","format":"double","nullable":true},"channel":{"type":"string","description":"FAA NASR field: CHAN. TACAN/VORTAC channel designation (e.g., 78X).","nullable":true},"voiceCall":{"type":"string","description":"FAA NASR field: VOICE_CALL. Voice call name used by the facility.","nullable":true},"operatingHours":{"type":"string","description":"FAA NASR field: OPER_HOURS. Hours of operation (e.g., CONTINUOUS, 0600-2200).","nullable":true},"ndbClassCode":{"type":"string","description":"FAA NASR field: NDB_CLASS_CODE. NDB class code (e.g., HH, MHW, H-SAB/LOM). Only applicable to NDB facility types.","nullable":true},"altCode":{"description":"FAA NASR field: ALT_CODE. VOR Standard Service Volume classification (e.g., High, Low, Terminal).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/VorServiceVolume"}]},"dmeSsv":{"description":"FAA NASR field: DME_SSV. DME Standard Service Volume classification (e.g., High, Low, Terminal).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/DmeServiceVolume"}]},"simultaneousVoice":{"type":"boolean","description":"FAA NASR field: SIMUL_VOICE_FLAG. Whether the facility broadcasts voice simultaneously on the navigation frequency."},"automaticVoiceId":{"type":"boolean","description":"FAA NASR field: AUTO_VOICE_ID_FLAG. Whether the facility has automatic voice identification."},"hiwas":{"type":"boolean","description":"FAA NASR field: HIWAS_FLAG. Whether the facility broadcasts Hazardous Inflight Weather Advisory Service."},"lowNavOnHighChart":{"type":"boolean","description":"FAA NASR field: LOW_NAV_ON_HIGH_CHART_FLAG. Whether this low-altitude NAVAID appears on high-altitude charts."},"powerOutput":{"type":"integer","description":"FAA NASR field: PWR_OUTPUT. Transmitter power output in watts.","format":"int32","nullable":true},"tacanDmeStatus":{"type":"string","description":"FAA NASR field: TACAN_DME_STATUS. Operational status of the co-located TACAN or DME component.","nullable":true},"tacanDmeLatitude":{"type":"number","description":"FAA NASR field: TACAN_DME_LAT_DECIMAL. Latitude of the TACAN/DME antenna in decimal degrees (WGS 84). May differ from the VOR position.","format":"double","nullable":true},"tacanDmeLongitude":{"type":"number","description":"FAA NASR field: TACAN_DME_LONG_DECIMAL. Longitude of the TACAN/DME antenna in decimal degrees (WGS 84).","format":"double","nullable":true},"highAltArtccId":{"type":"string","description":"FAA NASR field: HIGH_ALT_ARTCC_ID. Identifier of the high-altitude Air Route Traffic Control Center.","nullable":true},"highArtccName":{"type":"string","description":"FAA NASR field: HIGH_ARTCC_NAME. Name of the high-altitude ARTCC.","nullable":true},"lowAltArtccId":{"type":"string","description":"FAA NASR field: LOW_ALT_ARTCC_ID. Identifier of the low-altitude ARTCC.","nullable":true},"lowArtccName":{"type":"string","description":"FAA NASR field: LOW_ARTCC_NAME. Name of the low-altitude ARTCC.","nullable":true},"fssId":{"type":"string","description":"FAA NASR field: FSS_ID. Identifier of the associated Flight Service Station.","nullable":true},"fssName":{"type":"string","description":"FAA NASR field: FSS_NAME. Name of the associated Flight Service Station.","nullable":true},"notamId":{"type":"string","description":"FAA NASR field: NOTAM_ID. NOTAM identifier for the facility.","nullable":true},"effectiveDate":{"type":"string","description":"FAA NASR field: EFFECTIVE_DATE. Date the current NASR data cycle became effective. ISO 8601 UTC format.","format":"date-time"},"checkpoints":{"type":"array","description":"VOR receiver checkpoints associated with this NAVAID (from NAV2 records).","nullable":true,"items":{"$ref":"#/components/schemas/NavaidCheckpoint"}},"remarks":{"type":"array","description":"Remarks associated with this NAVAID (from NAV6 records).","nullable":true,"items":{"$ref":"#/components/schemas/NavaidRemark"}}}},"NavaidType":{"type":"string","description":"NAVAID facility type. Corresponds to FAA NASR field NAV_TYPE (NAV1).","x-enumNames":["Consolan","Dme","FanMarker","MarineNdb","MarineNdbDme","Ndb","NdbDme","Tacan","UhfNdb","Vor","Vortac","VorDme","Vot"],"enum":["Consolan","Dme","FanMarker","MarineNdb","MarineNdbDme","Ndb","NdbDme","Tacan","UhfNdb","Vor","Vortac","VorDme","Vot"]},"VorServiceVolume":{"type":"string","description":"VOR Standard Service Volume classification. Corresponds to FAA NASR field ALT_CODE (NAV1).","x-enumNames":["Unknown","High","Low","Terminal","VorHigh","VorLow"],"enum":["Unknown","High","Low","Terminal","VorHigh","VorLow"]},"DmeServiceVolume":{"type":"string","description":"DME Standard Service Volume classification. Corresponds to FAA NASR field DME_SSV (NAV1).","x-enumNames":["Unknown","High","Low","Terminal","DmeHigh","DmeLow"],"enum":["Unknown","High","Low","Terminal","DmeHigh","DmeLow"]},"NavaidCheckpoint":{"type":"object","additionalProperties":false,"properties":{"altitude":{"type":"integer","description":"Altitude only when checkpoint is in air.","format":"int32","nullable":true},"bearing":{"type":"integer","description":"Bearing of checkpoint.","format":"int32"},"airGroundCode":{"type":"string","description":"Air/Ground Code: A=AIR, G=GROUND, G1=GROUND ONE."},"description":{"type":"string","description":"Narrative description associated with the checkpoint."},"airportId":{"type":"string","description":"Airport ID associated with the checkpoint.","nullable":true},"stateCode":{"type":"string","description":"State code in which associated city is located."}}},"NavaidRemark":{"type":"object","additionalProperties":false,"properties":{"tabName":{"type":"string","description":"NASR table associated with remark."},"referenceColumnName":{"type":"string","description":"NASR column name associated with remark."},"sequenceNumber":{"type":"integer","description":"Sequence number assigned to reference column remark.","format":"int32"},"remark":{"type":"string","description":"Remark text (free form text that further describes a specific information item)."}}},"NavlogResponseDto":{"type":"object","description":"Complete navigation log calculation result for a VFR cross-country flight.\nIncludes per-leg calculations (course, speed, fuel, wind) and references to airspace and obstacle\ndata along the route. Use the returned identifiers with the Airspace and Obstacle endpoints to\nretrieve full details about en-route hazards.","additionalProperties":false,"properties":{"totalRouteDistance":{"type":"number","description":"Total route distance in nautical miles (sum of all leg distances).","format":"double"},"totalRouteTimeHours":{"type":"number","description":"Total estimated en-route time in hours (including climb and descent phases).","format":"double"},"totalFuelUsed":{"type":"number","description":"Total fuel consumed for the entire route in gallons (including start/taxi/takeoff fuel).","format":"double"},"averageWindComponent":{"type":"number","description":"Average wind component across all legs in knots. Negative values indicate a net headwind; positive values indicate a net tailwind.","format":"double"},"legs":{"type":"array","description":"Ordered list of navigation legs between each pair of consecutive waypoints, containing computed course, speed, fuel, and wind data.","items":{"$ref":"#/components/schemas/NavigationLegDto"}},"airspaceGlobalIds":{"type":"array","description":"Global IDs of controlled airspaces (Class B, C, D, E) that the route passes through.\nUse these IDs with the GET /api/v1/airspaces/by-global-ids?globalIds=... endpoint to retrieve full airspace details including boundaries and altitude limits.","items":{"type":"string"}},"specialUseAirspaceGlobalIds":{"type":"array","description":"Global IDs of special use airspaces (restricted, prohibited, MOA, warning, alert) that the route passes through.\nUse these IDs with the GET /api/v1/airspaces/special-use/by-global-ids?globalIds=... endpoint to retrieve full airspace details including boundaries and altitude limits.","items":{"type":"string"}},"obstacleOasNumbers":{"type":"array","description":"OAS (Obstacle Assessment Surface) numbers of obstacles near the route.\nUse these numbers with the POST /api/v1/obstacles/by-oas-numbers endpoint to retrieve full obstacle details including type, height, and lighting.","items":{"type":"string"}}}},"NavigationLegDto":{"type":"object","description":"A single navigation leg between two waypoints with computed flight data.","additionalProperties":false,"properties":{"legStartPoint":{"description":"Starting waypoint for this leg.","oneOf":[{"$ref":"#/components/schemas/WaypointDto"}]},"legEndPoint":{"description":"Ending waypoint for this leg.","oneOf":[{"$ref":"#/components/schemas/WaypointDto"}]},"trueCourse":{"type":"number","description":"True course in degrees.","format":"double"},"magneticHeading":{"type":"number","description":"Magnetic heading in degrees (corrected for wind and variation).","format":"double"},"magneticCourse":{"type":"number","description":"Magnetic course in degrees (corrected for variation only).","format":"double"},"groundSpeed":{"type":"number","description":"Ground speed in knots.","format":"double"},"legDistance":{"type":"number","description":"Leg distance in nautical miles.","format":"double"},"distanceRemaining":{"type":"number","description":"Remaining distance to destination in nautical miles.","format":"double"},"startLegTime":{"type":"string","description":"Estimated time at the start of this leg. ISO 8601 UTC format.","format":"date-time"},"endLegTime":{"type":"string","description":"Estimated time at the end of this leg. ISO 8601 UTC format.","format":"date-time"},"legFuelBurnGals":{"type":"number","description":"Fuel burned during this leg in gallons.","format":"double"},"remainingFuelGals":{"type":"number","description":"Remaining fuel at the end of this leg in gallons.","format":"double"},"windDir":{"type":"integer","description":"Forecast wind direction in degrees true.","format":"int32"},"windSpeed":{"type":"integer","description":"Forecast wind speed in knots.","format":"int32"},"headwindComponent":{"type":"number","description":"Headwind component in knots (negative = tailwind).","format":"double"},"tempC":{"type":"number","description":"Forecast temperature in degrees Celsius.","format":"float"}}},"WaypointDto":{"type":"object","description":"A waypoint along a navigation route.","additionalProperties":false,"properties":{"id":{"type":"string","description":"Waypoint identifier (e.g., ICAO code or custom name)."},"name":{"type":"string","description":"Display name of the waypoint."},"latitude":{"type":"number","description":"Latitude in decimal degrees (WGS 84).","format":"double"},"longitude":{"type":"number","description":"Longitude in decimal degrees (WGS 84).","format":"double"},"altitude":{"type":"number","description":"Altitude in feet MSL.","format":"double"},"waypointType":{"description":"Type of waypoint (e.g., airport, navaid, user-defined).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/WaypointType"}]},"refuelGallons":{"type":"number","description":"Gallons to add during a refueling stop.","format":"double","nullable":true},"refuelToFull":{"type":"boolean","description":"Whether to refuel to full capacity at this stop.","nullable":true},"isRefuelingStop":{"type":"boolean","description":"Whether this waypoint is a refueling stop.","nullable":true}}},"WaypointType":{"type":"string","description":"","x-enumNames":["Airport","Custom","CalculatedPoint","Navaid"],"enum":["Airport","Custom","CalculatedPoint","Navaid"]},"NavlogRequestDto":{"type":"object","description":"Request to calculate a VFR navigation log for a cross-country flight.","additionalProperties":false,"properties":{"waypoints":{"type":"array","description":"Ordered list of waypoints defining the route.","items":{"$ref":"#/components/schemas/WaypointDto"}},"performanceData":{"description":"Aircraft performance parameters for the flight.","oneOf":[{"$ref":"#/components/schemas/NavlogPerformanceDataDto"}]},"plannedCruisingAltitude":{"type":"integer","description":"Planned cruising altitude in feet MSL.","format":"int32"},"timeOfDeparture":{"type":"string","description":"Planned departure time. ISO 8601 UTC format.","format":"date-time"}}},"NavlogPerformanceDataDto":{"type":"object","description":"Aircraft performance data used for navigation log calculations.","additionalProperties":false,"properties":{"climbTrueAirspeed":{"type":"integer","description":"True airspeed during climb in knots.","format":"int32"},"cruiseTrueAirspeed":{"type":"integer","description":"True airspeed during cruise in knots.","format":"int32"},"descentTrueAirspeed":{"type":"integer","description":"True airspeed during descent in knots.","format":"int32"},"climbFpm":{"type":"integer","description":"Rate of climb in feet per minute.","format":"int32"},"descentFpm":{"type":"integer","description":"Rate of descent in feet per minute.","format":"int32"},"climbFuelBurn":{"type":"number","description":"Fuel burn rate during climb in gallons per hour.","format":"double"},"cruiseFuelBurn":{"type":"number","description":"Fuel burn rate during cruise in gallons per hour.","format":"double"},"descentFuelBurn":{"type":"number","description":"Fuel burn rate during descent in gallons per hour.","format":"double"},"sttFuelGals":{"type":"number","description":"Fuel used during start, taxi, and takeoff in gallons.","format":"double"},"fuelOnBoardGals":{"type":"number","description":"Total fuel on board at departure in gallons.","format":"double"}}},"BearingAndDistanceResponseDto":{"type":"object","description":"Result of a bearing and distance calculation between two points.","additionalProperties":false,"properties":{"trueCourse":{"type":"number","description":"True course in degrees.","format":"double"},"magneticCourse":{"type":"number","description":"Magnetic course in degrees (adjusted for magnetic variation).","format":"double"},"distance":{"type":"number","description":"Great-circle distance in nautical miles.","format":"double"}}},"BearingAndDistanceRequestDto":{"type":"object","description":"Request to calculate bearing and distance between two geographic points.","additionalProperties":false,"properties":{"startLatitude":{"type":"number","description":"Starting point latitude in decimal degrees.","format":"double"},"startLongitude":{"type":"number","description":"Starting point longitude in decimal degrees.","format":"double"},"endLatitude":{"type":"number","description":"Ending point latitude in decimal degrees.","format":"double"},"endLongitude":{"type":"number","description":"Ending point longitude in decimal degrees.","format":"double"}}},"WindsAloftDto":{"type":"object","description":"Winds aloft forecast data for a specific forecast period.","additionalProperties":false,"properties":{"validTime":{"type":"string","description":"Valid time for the forecast data.","format":"date-time"},"forUseStartTime":{"type":"string","description":"Start of the forecast use period.","format":"date-time"},"forUseEndTime":{"type":"string","description":"End of the forecast use period.","format":"date-time"},"windTemp":{"type":"array","description":"Wind and temperature data for each reporting site.","items":{"$ref":"#/components/schemas/WindsAloftSiteDto"}}}},"WindsAloftSiteDto":{"type":"object","description":"Winds aloft data for a single reporting site.","additionalProperties":false,"properties":{"id":{"type":"string","description":"Site identifier (e.g., DFW, ABI)."},"lat":{"type":"number","description":"Site latitude in decimal degrees (WGS 84).","format":"float"},"lon":{"type":"number","description":"Site longitude in decimal degrees (WGS 84).","format":"float"},"windTemp":{"type":"object","description":"Wind and temperature data keyed by altitude level (e.g., \"3000\", \"6000\").","additionalProperties":{"$ref":"#/components/schemas/WindTempDto"}}}},"WindTempDto":{"type":"object","description":"Wind direction, speed, and temperature at a specific altitude level.","additionalProperties":false,"properties":{"direction":{"type":"integer","description":"Wind direction in degrees true (null if calm or light/variable).","format":"int32","nullable":true},"speed":{"type":"integer","description":"Wind speed in knots.","format":"int32"},"temperature":{"type":"number","description":"Temperature in degrees Celsius (not available at all altitudes).","format":"float","nullable":true}}},"NotamResponseDto":{"type":"object","description":"Response containing NOTAMs (Notices to Air Missions) matching a query.\nEach NOTAM is a GeoJSON Feature with geographic geometry and detailed properties.\nUsed by the airport, radius, and route endpoints. The search endpoint uses cursor-based pagination instead.","additionalProperties":false,"properties":{"notams":{"type":"array","description":"NOTAMs matching the query, each as a GeoJSON Feature with geometry and properties.","items":{"$ref":"#/components/schemas/NotamDto"}},"totalCount":{"type":"integer","description":"Total number of NOTAMs returned in this response.","format":"int32"},"retrievedAt":{"type":"string","description":"UTC timestamp when the query was executed.","format":"date-time"},"queryLocation":{"type":"string","description":"Description of the queried location (e.g., \"KDFW\", \"32.8970,-97.0380 (25nm)\", or \"KDFW -> KAUS\").","nullable":true}}},"NotamQueryByRouteRequest":{"type":"object","description":"Request body for querying NOTAMs along a flight route. Provide either AirportIdentifiers\n(simple airport-only routes) or RoutePoints (mixed airports and waypoints).\nIf both are provided, RoutePoints is used and AirportIdentifiers is ignored.\nNOTAMs from all route points are combined and deduplicated in the response.","additionalProperties":false,"properties":{"airportIdentifiers":{"type":"array","description":"Airport identifiers (ICAO codes or FAA identifiers) along the route, e.g. [\"KDFW\", \"KAUS\"].\nEach airport is queried by identifier match. Use this when your entire route is airport-to-airport\nwith no en-route waypoints. Ignored when RoutePoints is provided.","items":{"type":"string"}},"routePoints":{"type":"array","description":"Route points in flight order. Each point is either an airport (by identifier) or a geographic\nwaypoint (by lat/lon with radius search). Use this when your route includes en-route waypoints\nor you need per-point radius control. When provided, AirportIdentifiers is ignored.","items":{"$ref":"#/components/schemas/RoutePointDto"}},"corridorRadiusNm":{"type":"number","description":"Default search radius in nautical miles applied to any waypoint in RoutePoints that does not\nspecify its own RadiusNm. Has no effect on airport points or on AirportIdentifiers.\nIf omitted, the server default (25 NM) is used.","format":"double","nullable":true},"filters":{"description":"Optional filters (classification, feature, freeText, date range) applied to every route point query.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/NotamFilterDto"}]}}},"RoutePointDto":{"type":"object","description":"A single point along a flight route. Each point is either an airport or a geographic waypoint:\nAirport point: Set AirportIdentifier. NOTAMs are queried by identifier match (not spatial).\nWaypoint: Set Latitude and Longitude. NOTAMs are queried by spatial radius search.","additionalProperties":false,"properties":{"airportIdentifier":{"type":"string","description":"ICAO code (e.g., \"KDFW\") or FAA identifier (e.g., \"DFW\"). Case-insensitive.\nIf set, this point is treated as an airport and NOTAMs are matched by identifier.\nLatitude, Longitude, and RadiusNm are ignored for airport points.","nullable":true},"name":{"type":"string","description":"Optional display name for waypoints (e.g., \"Lake Travis\", \"MAVER\").\nAppears in the response's queryLocation route description.\nIf omitted, coordinates are used instead (e.g., \"30.4082N, 97.8538W\").","nullable":true},"latitude":{"type":"number","description":"Latitude in decimal degrees (-90 to 90). Required when AirportIdentifier is not set.","format":"double","nullable":true},"longitude":{"type":"number","description":"Longitude in decimal degrees (-180 to 180). Required when AirportIdentifier is not set.","format":"double","nullable":true},"radiusNm":{"type":"number","description":"Search radius in nautical miles for this waypoint (max 100). Only applies to waypoints.\nIf omitted, falls back to the request-level CorridorRadiusNm, then the server default (25 NM).","format":"double","nullable":true}}},"NotamFilterDto":{"type":"object","description":"Optional filters for narrowing NOTAM query results. All filters are combinable — when\nmultiple filters are provided, results must match all of them (AND logic).","additionalProperties":false,"properties":{"classification":{"type":"string","description":"Filter by NOTAM classification.\nValid values: INTERNATIONAL, MILITARY, LOCAL_MILITARY, DOMESTIC, FDC.","nullable":true},"feature":{"type":"string","description":"Filter by NOTAM feature type (the aeronautical feature the NOTAM applies to).\nValid values: RWY, TWY, APRON, AD, OBST, NAV, COM, SVC, AIRSPACE, ODP, SID, STAR, CHART, DATA, DVA, IAP, VFP, ROUTE, SPECIAL, SECURITY.","nullable":true},"freeText":{"type":"string","description":"Case-insensitive text search within the NOTAM text field (e.g., \"CLOSED\", \"RWY 18/36\").\nMax 80 characters. Allowed characters: letters, digits, spaces, and /.-().","nullable":true},"effectiveStartDate":{"type":"string","description":"Only include NOTAMs with an effective start on or after this date (ISO 8601).\nMust be paired with EffectiveEndDate.","nullable":true},"effectiveEndDate":{"type":"string","description":"Only include NOTAMs with an effective end on or before this date (ISO 8601).\nMust be paired with EffectiveStartDate.","nullable":true},"accountability":{"type":"string","description":"Filter by accountability code (issuing office), e.g., \"BNA\", \"FDC\", \"CLT\".\nMaps to the account_id column. Alphanumeric, max 10 characters.","nullable":true},"location":{"type":"string","description":"Filter by location identifier (FAA domestic or ICAO code), e.g., \"DFW\" or \"KDFW\".\nMatches against both the domestic location and ICAO location columns. Alphanumeric, max 10 characters.","nullable":true},"lastUpdatedDate":{"type":"string","description":"ISO 8601 timestamp. When provided, returns NOTAMs modified between this time and now,\nincluding both active and inactive NOTAMs (skips the active filter per FAA behavior).","nullable":true},"notamNumber":{"type":"string","description":"NOTAM number in any supported format. Per FAA spec, must be paired with Location or Accountability.","nullable":true},"latitude":{"type":"number","description":"Latitude in decimal degrees [-90, 90]. Must be paired with Longitude and Radius.","format":"double","nullable":true},"longitude":{"type":"number","description":"Longitude in decimal degrees [-180, 180]. Must be paired with Latitude and Radius.","format":"double","nullable":true},"radius":{"type":"number","description":"Search radius in nautical miles [0, 100]. Must be paired with Latitude and Longitude.","format":"double","nullable":true},"hasFilters":{"type":"boolean","description":"Whether any filter values are set."}}},"PaginatedResponseOfNotamDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/NotamDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"PaginatedResponseOfObstacleDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/ObstacleDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"ObstacleDto":{"type":"object","description":"Obstacle data from the FAA Digital Obstacle File (DOF).\nUse the OasNumber to cross-reference with navigation log results — the navlog response's\nObstacleOasNumbers field contains OAS numbers from this endpoint for obstacles near a planned route.","additionalProperties":false,"properties":{"oasNumber":{"type":"string","description":"Obstacle Assessment Surface (OAS) number — the unique identifier for this obstacle. This is the key used to look up obstacles returned by the navigation log endpoint's ObstacleOasNumbers field."},"stateId":{"type":"string","description":"Two-letter state identifier.","nullable":true},"cityName":{"type":"string","description":"City nearest to the obstacle.","nullable":true},"latitude":{"type":"number","description":"Latitude in decimal degrees (WGS 84).","format":"double","nullable":true},"longitude":{"type":"number","description":"Longitude in decimal degrees (WGS 84).","format":"double","nullable":true},"obstacleType":{"type":"string","description":"Type of obstacle (e.g., TOWER, BLDG, STACK).","nullable":true},"quantity":{"type":"integer","description":"Number of obstacles at this location.","format":"int32","nullable":true},"heightAgl":{"type":"integer","description":"Height above ground level in feet.","format":"int32","nullable":true},"heightAmsl":{"type":"integer","description":"Height above mean sea level in feet.","format":"int32","nullable":true},"lighting":{"description":"Lighting type on the obstacle.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/ObstacleLighting"}]},"horizontalAccuracy":{"description":"Horizontal accuracy of the position data.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/HorizontalAccuracy"}]},"verticalAccuracy":{"description":"Vertical accuracy of the height data.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/VerticalAccuracy"}]},"marking":{"description":"Marking type on the obstacle.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/ObstacleMarking"}]},"verificationStatus":{"description":"Verification status of the obstacle data.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/VerificationStatus"}]}}},"ObstacleLighting":{"type":"string","description":"","x-enumNames":["Red","DualMediumWhiteStrobeRed","HighIntensityWhiteStrobeRed","MediumIntensityWhiteStrobe","HighIntensityWhiteStrobe","Flood","DualMediumCatenary","SynchronizedRedLighting","Lighted","None","Unknown"],"enum":["Red","DualMediumWhiteStrobeRed","HighIntensityWhiteStrobeRed","MediumIntensityWhiteStrobe","HighIntensityWhiteStrobe","Flood","DualMediumCatenary","SynchronizedRedLighting","Lighted","None","Unknown"]},"HorizontalAccuracy":{"type":"string","description":"","x-enumNames":["Within20Feet","Within50Feet","Within100Feet","Within250Feet","Within500Feet","Within1000Feet","WithinHalfNauticalMile","Within1NauticalMile","Unknown"],"enum":["Within20Feet","Within50Feet","Within100Feet","Within250Feet","Within500Feet","Within1000Feet","WithinHalfNauticalMile","Within1NauticalMile","Unknown"]},"VerticalAccuracy":{"type":"string","description":"","x-enumNames":["Within3Feet","Within10Feet","Within20Feet","Within50Feet","Within125Feet","Within250Feet","Within500Feet","Within1000Feet","Unknown"],"enum":["Within3Feet","Within10Feet","Within20Feet","Within50Feet","Within125Feet","Within250Feet","Within500Feet","Within1000Feet","Unknown"]},"ObstacleMarking":{"type":"string","description":"","x-enumNames":["OrangeOrOrangeWhitePaint","WhitePaintOnly","Marked","FlagMarker","SphericalMarker","None","Unknown"],"enum":["OrangeOrOrangeWhitePaint","WhitePaintOnly","Marked","FlagMarker","SphericalMarker","None","Unknown"]},"VerificationStatus":{"type":"string","description":"","x-enumNames":["Verified","Unverified"],"enum":["Verified","Unverified"]},"PaginatedResponseOfPirepDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/PirepDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"RunwayDto":{"type":"object","description":"Runway data from the FAA NASR database, sourced from APT_RWY.\nIncludes dimensions, surface, lighting, and weight-bearing information.","additionalProperties":false,"properties":{"id":{"type":"string","description":"System-generated unique identifier.","format":"guid"},"airportIcaoCode":{"type":"string","description":"ICAO code of the parent airport (e.g., KDFW). Included when queried via the Runways endpoints.","nullable":true},"airportArptId":{"type":"string","description":"FAA identifier of the parent airport (e.g., DFW). Included when queried via the Runways endpoints.","nullable":true},"airportName":{"type":"string","description":"Name of the parent airport. Included when queried via the Runways endpoints.","nullable":true},"runwayId":{"type":"string","description":"FAA NASR field: RWY_ID. Runway identification (e.g., \"01/19\", \"09L/27R\", \"H1\" for helipad)."},"length":{"type":"integer","description":"FAA NASR field: RWY_LEN. Physical runway length to the nearest foot.","format":"int32","nullable":true},"width":{"type":"integer","description":"FAA NASR field: RWY_WIDTH. Physical runway width to the nearest foot.","format":"int32","nullable":true},"surfaceType":{"description":"FAA NASR field: SURFACE_TYPE_CODE. Primary runway surface type.\nWhen the runway is composed of distinct sections the FAA reports a combined code (e.g., \"ASPH-CONC\").\nThis property contains the first (primary) surface type; see SecondarySurfaceType for the second.\nCommon values: Concrete (CONC), Asphalt (ASPH), Turf (TURF), Dirt (DIRT), Gravel (GRAVEL), Water (WATER).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwaySurfaceType"}]},"secondarySurfaceType":{"description":"Secondary runway surface type, present only when the runway is composed of two distinct surface sections.\nDerived from the FAA NASR SURFACE_TYPE_CODE combined format (e.g., \"ASPH-CONC\" → Secondary = Concrete).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwaySurfaceType"}]},"surfaceTreatment":{"description":"FAA NASR field: TREATMENT_CODE. Runway surface treatment.\nPossible values: Grooved (GRVD), PorousFrictionCourse (PFC), AggregateFrictionSealCoat (AFSC),\nRubberizedFrictionSealCoat (RFSC), WireComb (WC), None (NONE).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwaySurfaceTreatment"}]},"pavementClassification":{"type":"string","description":"FAA NASR field: PCN. Pavement Classification Number. See FAA Advisory Circular 150/5335-5 for code definitions and PCN determination formula.","nullable":true},"edgeLightIntensity":{"description":"FAA NASR field: RWY_LGT_CODE. Runway lights edge intensity.\nPossible values: High (HIGH), Medium (MED), Low (LOW), Flood (FLD), NonStandard (NSTD), Perimeter (PERI), Strobe (STRB), None (NONE).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwayEdgeLightIntensity"}]},"weightBearingSingleWheel":{"type":"integer","description":"FAA NASR field: GROSS_WT_SW. Runway weight-bearing capacity for single wheel type landing gear, in pounds.","format":"int32","nullable":true},"weightBearingDualWheel":{"type":"integer","description":"FAA NASR field: GROSS_WT_DW. Runway weight-bearing capacity for dual wheel type landing gear, in pounds.","format":"int32","nullable":true},"weightBearingDualTandem":{"type":"integer","description":"FAA NASR field: GROSS_WT_DTW. Runway weight-bearing capacity for two dual wheels in tandem type landing gear, in pounds.","format":"int32","nullable":true},"weightBearingDoubleDualTandem":{"type":"integer","description":"FAA NASR field: GROSS_WT_DDTW. Runway weight-bearing capacity for two dual wheels in tandem/two dual wheels in double tandem body gear type landing gear, in pounds.","format":"int32","nullable":true},"surfaceCondition":{"description":"FAA NASR field: COND. Runway Surface Condition.\nPossible values: Excellent, Good, Fair, Poor, Failed.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwaySurfaceCondition"}]},"pavementType":{"description":"FAA NASR field: PAVEMENT_TYPE_CODE. Pavement Type.\nPossible values: Rigid (R), Flexible (F).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/PavementType"}]},"subgradeStrength":{"description":"FAA NASR field: SUBGRADE_STRENGTH_CODE. Subgrade Strength category (part of PCN system).\nPossible values: High (A), Medium (B), Low (C), UltraLow (D).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/SubgradeStrength"}]},"tirePressure":{"description":"FAA NASR field: TIRE_PRES_CODE. Maximum allowable tire pressure category (part of PCN system).\nPossible values: High/no limit (W), Medium/217 psi (X), Low/145 psi (Y), VeryLow/73 psi (Z).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/TirePressure"}]},"determinationMethod":{"description":"FAA NASR field: DTRM_METHOD_CODE. Pavement strength determination method.\nPossible values: Technical (T), UsingAircraft (U).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/PavementDeterminationMethod"}]},"runwayLengthSource":{"type":"string","description":"FAA NASR field: RWY_LEN_SOURCE. Source of runway length information.","nullable":true},"lengthSourceDate":{"type":"string","description":"FAA NASR field: LENGTH_SOURCE_DATE. Date of runway length source information. ISO 8601 UTC format.","format":"date-time","nullable":true},"geometry":{"description":"GeoJSON polygon geometry of the physical runway boundary. Only included when includeGeometry=true.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/GeoJsonGeometry"}]},"runwayEnds":{"type":"array","description":"Runway end details for each direction (typically two per runway).","items":{"$ref":"#/components/schemas/RunwayEndDto"}}}},"RunwaySurfaceType":{"type":"string","description":"Runway Surface Type. Corresponds to FAA NASR field SURFACE_TYPE_CODE (APT_RWY).\nThe value will usually be one of the common types or a combination of two types\nwhen the runway is composed of distinct sections.","x-enumNames":["Concrete","Asphalt","Snow","Ice","Mats","Treated","Gravel","Turf","Dirt","PartiallyPaved","Rooftop","Water","Aluminum","Brick","Caliche","Coral","Deck","Grass","Metal","NonStandard","OilChip","Psp","Sand","Sod","Steel","Wood","PorousFrictionCourse"],"enum":["Concrete","Asphalt","Snow","Ice","Mats","Treated","Gravel","Turf","Dirt","PartiallyPaved","Rooftop","Water","Aluminum","Brick","Caliche","Coral","Deck","Grass","Metal","NonStandard","OilChip","Psp","Sand","Sod","Steel","Wood","PorousFrictionCourse"]},"RunwaySurfaceTreatment":{"type":"string","description":"Runway Surface Treatment. Corresponds to FAA NASR field TREATMENT_CODE (APT_RWY).","x-enumNames":["None","Grooved","PorousFrictionCourse","AggregateFrictionSealCoat","RubberizedFrictionSealCoat","WireComb"],"enum":["None","Grooved","PorousFrictionCourse","AggregateFrictionSealCoat","RubberizedFrictionSealCoat","WireComb"]},"RunwayEdgeLightIntensity":{"type":"string","description":"Runway Lights Edge Intensity. Corresponds to FAA NASR field RWY_LGT_CODE (APT_RWY).","x-enumNames":["None","High","Medium","Low","Flood","NonStandard","Perimeter","Strobe"],"enum":["None","High","Medium","Low","Flood","NonStandard","Perimeter","Strobe"]},"RunwaySurfaceCondition":{"type":"string","description":"Runway Surface Condition (COND). Corresponds to FAA NASR field SURFACE_COND (APT_RWY).","x-enumNames":["Excellent","Good","Fair","Poor","Failed"],"enum":["Excellent","Good","Fair","Poor","Failed"]},"PavementType":{"type":"string","description":"Pavement Type. Corresponds to FAA NASR field PAVEMENT_TYPE_CODE (APT_RWY).","x-enumNames":["Rigid","Flexible"],"enum":["Rigid","Flexible"]},"SubgradeStrength":{"type":"string","description":"Subgrade Strength. Corresponds to FAA NASR field SUBGRADE_STRENGTH_CODE (APT_RWY).\nPart of the Pavement Classification Number (PCN) system.","x-enumNames":["High","Medium","Low","UltraLow"],"enum":["High","Medium","Low","UltraLow"]},"TirePressure":{"type":"string","description":"Tire Pressure Category. Corresponds to FAA NASR field TIRE_PRES_CODE (APT_RWY).\nPart of the Pavement Classification Number (PCN) system.","x-enumNames":["High","Medium","Low","VeryLow"],"enum":["High","Medium","Low","VeryLow"]},"PavementDeterminationMethod":{"type":"string","description":"Pavement strength determination method. Corresponds to FAA NASR field DTRM_METHOD_CODE (APT_RWY).","x-enumNames":["Technical","UsingAircraft"],"enum":["Technical","UsingAircraft"]},"RunwayEndDto":{"type":"object","description":"Runway end data from the FAA NASR database, sourced from APT_RWY_END.\nIncludes approach, markings, lighting, and controlling obstacle information.","additionalProperties":false,"properties":{"id":{"type":"string","description":"System-generated unique identifier.","format":"guid"},"runwayEndId":{"type":"string","description":"FAA NASR field: RWY_END_ID. Runway end identifier (e.g., \"01\", \"19\", \"09L\", \"27R\")."},"trueAlignment":{"type":"integer","description":"FAA NASR field: TRUE_ALIGNMENT. Runway end true alignment. True heading of the runway to the nearest degree.","format":"int32","nullable":true},"approachType":{"description":"FAA NASR field: ILS_TYPE. Instrument Landing System (ILS) type.\nPossible values: Ils (ILS), Mls (MLS), Sdf (SDF), Localizer (LOCALIZER), Lda (LDA), Ismls (ISMLS),\nIlsDme (ILS/DME), SdfDme (SDF/DME), LocDme (LOC/DME), LocGs (LOC/GS), LdaDme (LDA/DME).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/InstrumentApproachType"}]},"rightHandTrafficPattern":{"type":"boolean","description":"FAA NASR field: RIGHT_HAND_TRAFFIC_PAT_FLAG. Whether right-hand traffic pattern is in effect for landing aircraft."},"markingsType":{"description":"FAA NASR field: RWY_MARKING_TYPE_CODE. Runway markings type.\nPossible values: PrecisionInstrument (PIR), NonPrecisionInstrument (NPI), Basic (BSC),\nNumbersOnly (NRS), NonStandard (NSTD), Buoys (BUOY), Stol (STOL), None (NONE).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwayMarkingsType"}]},"markingsCondition":{"description":"FAA NASR field: RWY_MARKING_COND. Runway markings condition.\nPossible values: Good (G), Fair (F), Poor (P).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwayMarkingsCondition"}]},"latitude":{"type":"number","description":"FAA NASR field: LAT_DECIMAL. Latitude of physical runway end in decimal degrees (WGS 84).","format":"double","nullable":true},"longitude":{"type":"number","description":"FAA NASR field: LONG_DECIMAL. Longitude of physical runway end in decimal degrees (WGS 84).","format":"double","nullable":true},"elevation":{"type":"number","description":"FAA NASR field: RWY_END_ELEV. Elevation at the physical runway end in feet MSL.","format":"double","nullable":true},"thresholdCrossingHeight":{"type":"number","description":"FAA NASR field: THR_CROSSING_HGT. Threshold Crossing Height in feet AGL. Height that the effective visual glide path crosses above the runway threshold.","format":"double","nullable":true},"visualGlidePathAngle":{"type":"number","description":"FAA NASR field: VISUAL_GLIDE_PATH_ANGLE. Visual glide path angle in hundredths of degrees (e.g., 300 = 3.00°).","format":"double","nullable":true},"displacedThresholdLatitude":{"type":"number","description":"FAA NASR field: LAT_DISPLACED_THR_DECIMAL. Latitude of displaced threshold in decimal degrees (WGS 84).","format":"double","nullable":true},"displacedThresholdLongitude":{"type":"number","description":"FAA NASR field: LONG_DISPLACED_THR_DECIMAL. Longitude of displaced threshold in decimal degrees (WGS 84).","format":"double","nullable":true},"displacedThresholdElevation":{"type":"number","description":"FAA NASR field: DISPLACED_THR_ELEV. Elevation at the displaced threshold in feet MSL.","format":"double","nullable":true},"displacedThresholdLength":{"type":"integer","description":"FAA NASR field: DISPLACED_THR_LEN. Displaced threshold length in feet from the runway end.","format":"int32","nullable":true},"touchdownZoneElevation":{"type":"number","description":"FAA NASR field: TDZ_ELEV. Elevation at the touchdown zone in feet MSL.","format":"double","nullable":true},"visualGlideSlopeIndicator":{"description":"FAA NASR field: VGSI_CODE. Visual Glide Slope Indicator type.\nCommon types: VASI (V2L/V4L/etc.), PAPI (P2L/P4L/etc.), SAVASI (S2L/S2R), Tri-Color, Pulsating, Panel systems.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/VisualGlideSlopeIndicatorType"}]},"runwayVisualRangeEquipment":{"description":"FAA NASR field: RWY_VISUAL_RANGE_EQUIP_CODE. Runway Visual Range (RVR) equipment location.\nPossible values: Touchdown (T), Midfield (M), Rollout (R), None (N), TouchdownMidfield (TM), TouchdownRollout (TR), MidfieldRollout (MR), TouchdownMidfieldRollout (TMR).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/RunwayVisualRangeEquipmentType"}]},"runwayVisibilityValueEquipment":{"type":"boolean","description":"FAA NASR field: RWY_VSBY_VALUE_EQUIP_FLAG. Whether Runway Visibility Value (RVV) equipment is installed."},"approachLightSystem":{"description":"FAA NASR field: APCH_LGT_SYSTEM_CODE. Approach light system type.\nSee ApproachLightSystemType enum for all possible values and their FAA descriptions.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/ApproachLightSystemType"}]},"hasRunwayEndLights":{"type":"boolean","description":"FAA NASR field: RWY_END_LGTS_FLAG. Whether Runway End Identifier Lights (REIL) are installed."},"hasCenterlineLights":{"type":"boolean","description":"FAA NASR field: CNTRLN_LGTS_AVBL_FLAG. Whether runway centerline lights are installed."},"hasTouchdownZoneLights":{"type":"boolean","description":"FAA NASR field: TDZ_LGT_AVBL_FLAG. Whether runway end touchdown zone lights are installed."},"controllingObjectDescription":{"type":"string","description":"FAA NASR field: OBSTN_TYPE. Controlling object description (type of obstacle).","nullable":true},"controllingObjectMarking":{"description":"FAA NASR field: OBSTN_MRKD_CODE. Controlling object marked/lighted status.\nPossible values: Marked (M), Lighted (L), MarkedAndLighted (ML), None (NONE).","nullable":true,"oneOf":[{"$ref":"#/components/schemas/ControllingObjectMarking"}]},"controllingObjectClearanceSlope":{"type":"integer","description":"FAA NASR field: OBSTN_CLNC_SLOPE. Controlling object clearance slope value, expressed as a ratio of N:1. If greater than 50:1, then 50 is entered.","format":"int32","nullable":true},"controllingObjectHeightAboveRunway":{"type":"integer","description":"FAA NASR field: OBSTN_HGT. Controlling object height above the physical runway end in feet AGL.","format":"int32","nullable":true},"controllingObjectDistanceFromRunway":{"type":"integer","description":"FAA NASR field: DIST_FROM_THR. Controlling object distance from the physical runway end in feet.","format":"int32","nullable":true},"controllingObjectCenterlineOffset":{"type":"string","description":"FAA NASR field: CNTRLN_OFFSET. Controlling object centerline offset distance from the extended runway centerline, in feet.","nullable":true},"rwyEndLatDeg":{"type":"integer","description":"FAA NASR field: RWY_END_LAT_DEG. Runway end latitude degrees.","format":"int32","nullable":true},"rwyEndLatMin":{"type":"integer","description":"FAA NASR field: RWY_END_LAT_MIN. Runway end latitude minutes.","format":"int32","nullable":true},"rwyEndLatSec":{"type":"number","description":"FAA NASR field: RWY_END_LAT_SEC. Runway end latitude seconds.","format":"double","nullable":true},"rwyEndLatHemis":{"type":"string","description":"FAA NASR field: RWY_END_LAT_HEMIS. Runway end latitude hemisphere (N or S).","nullable":true},"rwyEndLongDeg":{"type":"integer","description":"FAA NASR field: RWY_END_LONG_DEG. Runway end longitude degrees.","format":"int32","nullable":true},"rwyEndLongMin":{"type":"integer","description":"FAA NASR field: RWY_END_LONG_MIN. Runway end longitude minutes.","format":"int32","nullable":true},"rwyEndLongSec":{"type":"number","description":"FAA NASR field: RWY_END_LONG_SEC. Runway end longitude seconds.","format":"double","nullable":true},"rwyEndLongHemis":{"type":"string","description":"FAA NASR field: RWY_END_LONG_HEMIS. Runway end longitude hemisphere (E or W).","nullable":true},"displacedThrLatDeg":{"type":"integer","description":"FAA NASR field: DISPLACED_THR_LAT_DEG. Displaced threshold latitude degrees.","format":"int32","nullable":true},"displacedThrLatMin":{"type":"integer","description":"FAA NASR field: DISPLACED_THR_LAT_MIN. Displaced threshold latitude minutes.","format":"int32","nullable":true},"displacedThrLatSec":{"type":"number","description":"FAA NASR field: DISPLACED_THR_LAT_SEC. Displaced threshold latitude seconds.","format":"double","nullable":true},"displacedThrLatHemis":{"type":"string","description":"FAA NASR field: DISPLACED_THR_LAT_HEMIS. Displaced threshold latitude hemisphere (N or S).","nullable":true},"displacedThrLongDeg":{"type":"integer","description":"FAA NASR field: DISPLACED_THR_LONG_DEG. Displaced threshold longitude degrees.","format":"int32","nullable":true},"displacedThrLongMin":{"type":"integer","description":"FAA NASR field: DISPLACED_THR_LONG_MIN. Displaced threshold longitude minutes.","format":"int32","nullable":true},"displacedThrLongSec":{"type":"number","description":"FAA NASR field: DISPLACED_THR_LONG_SEC. Displaced threshold longitude seconds.","format":"double","nullable":true},"displacedThrLongHemis":{"type":"string","description":"FAA NASR field: DISPLACED_THR_LONG_HEMIS. Displaced threshold longitude hemisphere (E or W).","nullable":true},"farPart77Code":{"type":"string","description":"FAA NASR field: FAR_PART_77_CODE. FAA CFR Part 77 (Objects Affecting Navigable Airspace) Runway Category.\nPossible values: A(V) (Utility Runway with Visual Approach), B(V) (Other Than Utility with Visual Approach),\nA(NP) (Utility with Nonprecision Approach), C (Other Than Utility with Nonprecision, visibility > 3/4 mile),\nD (Other Than Utility with Nonprecision, visibility as low as 3/4 mile), PIR (Precision Instrument Runway).","nullable":true},"centerlineDirectionCode":{"type":"string","description":"FAA NASR field: CNTRLN_DIR_CODE. Controlling Object Centerline Offset Direction. Indicates direction (left or right) to the object from the centerline as seen by an approaching pilot.","nullable":true},"runwayGradient":{"type":"number","description":"FAA NASR field: RWY_GRAD. Runway End Gradient as a percentage (e.g., 0.3 = 0.3% grade).","format":"double","nullable":true},"runwayGradientDirection":{"type":"string","description":"FAA NASR field: RWY_GRAD_DIRECTION. Runway End Gradient Direction (Up or Down).","nullable":true},"rwyEndPositionSource":{"type":"string","description":"FAA NASR field: RWY_END_PSN_SOURCE. Source of runway end position information.","nullable":true},"rwyEndPositionDate":{"type":"string","description":"FAA NASR field: RWY_END_PSN_DATE. Date of runway end position information. ISO 8601 UTC format.","format":"date-time","nullable":true},"rwyEndElevationSource":{"type":"string","description":"FAA NASR field: RWY_END_ELEV_SOURCE. Source of runway end elevation information.","nullable":true},"rwyEndElevationDate":{"type":"string","description":"FAA NASR field: RWY_END_ELEV_DATE. Date of runway end elevation information. ISO 8601 UTC format.","format":"date-time","nullable":true},"displacedThrPositionSource":{"type":"string","description":"FAA NASR field: DSPL_THR_PSN_SOURCE. Source of displaced threshold position information.","nullable":true},"displacedThrPositionDate":{"type":"string","description":"FAA NASR field: RWY_END_DSPL_THR_PSN_DATE. Date of displaced threshold position information. ISO 8601 UTC format.","format":"date-time","nullable":true},"displacedThrElevationSource":{"type":"string","description":"FAA NASR field: DSPL_THR_ELEV_SOURCE. Source of displaced threshold elevation information.","nullable":true},"displacedThrElevationDate":{"type":"string","description":"FAA NASR field: RWY_END_DSPL_THR_ELEV_DATE. Date of displaced threshold elevation information. ISO 8601 UTC format.","format":"date-time","nullable":true},"touchdownZoneElevSource":{"type":"string","description":"FAA NASR field: TDZ_ELEV_SOURCE. Source of touchdown zone elevation information.","nullable":true},"touchdownZoneElevDate":{"type":"string","description":"FAA NASR field: RWY_END_TDZ_ELEV_DATE. Date of touchdown zone elevation information. ISO 8601 UTC format.","format":"date-time","nullable":true},"takeoffRunAvailable":{"type":"integer","description":"FAA NASR field: TKOF_RUN_AVBL. Takeoff Run Available (TORA) in feet.","format":"int32","nullable":true},"takeoffDistanceAvailable":{"type":"integer","description":"FAA NASR field: TKOF_DIST_AVBL. Takeoff Distance Available (TODA) in feet.","format":"int32","nullable":true},"accelerateStopDistAvailable":{"type":"integer","description":"FAA NASR field: ACLT_STOP_DIST_AVBL. Accelerate-Stop Distance Available (ASDA) in feet.","format":"int32","nullable":true},"landingDistanceAvailable":{"type":"integer","description":"FAA NASR field: LNDG_DIST_AVBL. Landing Distance Available (LDA) in feet.","format":"int32","nullable":true},"lahsoAvailableLandingDistance":{"type":"integer","description":"FAA NASR field: LAHSO_ALD. Available Landing Distance for Land and Hold Short Operations (LAHSO), in feet.","format":"int32","nullable":true},"lahsoIntersectingRunway":{"type":"string","description":"FAA NASR field: RWY_END_INTERSECT_LAHSO. ID of Intersecting Runway Defining Hold Short Point.","nullable":true},"lahsoDescription":{"type":"string","description":"FAA NASR field: LAHSO_DESC. Description of Entity Defining Hold Short Point if not an Intersecting Runway.","nullable":true},"lahsoLatitude":{"type":"string","description":"FAA NASR field: LAHSO_LAT. LAHSO hold short point latitude (DMS format).","nullable":true},"lahsoLatDecimal":{"type":"number","description":"FAA NASR field: LAT_LAHSO_DECIMAL. LAHSO hold short point latitude in decimal degrees (WGS 84).","format":"double","nullable":true},"lahsoLongitude":{"type":"string","description":"FAA NASR field: LAHSO_LONG. LAHSO hold short point longitude (DMS format).","nullable":true},"lahsoLongDecimal":{"type":"number","description":"FAA NASR field: LONG_LAHSO_DECIMAL. LAHSO hold short point longitude in decimal degrees (WGS 84).","format":"double","nullable":true},"lahsoPositionSource":{"type":"string","description":"FAA NASR field: LAHSO_PSN_SOURCE. Source of LAHSO position information.","nullable":true},"lahsoPositionDate":{"type":"string","description":"FAA NASR field: RWY_END_LAHSO_PSN_DATE. Date of LAHSO position information. ISO 8601 UTC format.","format":"date-time","nullable":true}}},"InstrumentApproachType":{"type":"string","description":"Instrument Landing System (ILS) Type. Corresponds to FAA NASR field ILS_TYPE (APT_RWY_END).","x-enumNames":["None","Ils","Mls","Sdf","Localizer","Lda","Ismls","IlsDme","SdfDme","LocDme","LocGs","LdaDme"],"enum":["None","Ils","Mls","Sdf","Localizer","Lda","Ismls","IlsDme","SdfDme","LocDme","LocGs","LdaDme"]},"RunwayMarkingsType":{"type":"string","description":"Runway Markings Type. Corresponds to FAA NASR field RWY_MARKING_TYPE_CODE (APT_RWY_END).","x-enumNames":["None","PrecisionInstrument","NonPrecisionInstrument","Basic","NumbersOnly","NonStandard","Buoys","Stol"],"enum":["None","PrecisionInstrument","NonPrecisionInstrument","Basic","NumbersOnly","NonStandard","Buoys","Stol"]},"RunwayMarkingsCondition":{"type":"string","description":"Runway Markings Condition. Corresponds to FAA NASR field RWY_MARKING_COND (APT_RWY_END).","x-enumNames":["Good","Fair","Poor"],"enum":["Good","Fair","Poor"]},"VisualGlideSlopeIndicatorType":{"type":"string","description":"Visual Glide Slope Indicators. Corresponds to FAA NASR field VGSI_CODE (APT_RWY_END).","x-enumNames":["None","Savasi2BoxLeft","Savasi2BoxRight","Vasi2BoxLeft","Vasi2BoxRight","Vasi4BoxLeft","Vasi4BoxRight","Vasi6BoxLeft","Vasi6BoxRight","Vasi12Box","Vasi16Box","Papi2LightLeft","Papi2LightRight","Papi4LightLeft","Papi4LightRight","TriColorLeft","TriColorRight","PulsatingLeft","PulsatingRight","PanelLeft","PanelRight","NonStandard","PrivateUse","NonSpecificVasi"],"enum":["None","Savasi2BoxLeft","Savasi2BoxRight","Vasi2BoxLeft","Vasi2BoxRight","Vasi4BoxLeft","Vasi4BoxRight","Vasi6BoxLeft","Vasi6BoxRight","Vasi12Box","Vasi16Box","Papi2LightLeft","Papi2LightRight","Papi4LightLeft","Papi4LightRight","TriColorLeft","TriColorRight","PulsatingLeft","PulsatingRight","PanelLeft","PanelRight","NonStandard","PrivateUse","NonSpecificVasi"]},"RunwayVisualRangeEquipmentType":{"type":"string","description":"Runway Visual Range (RVR) Equipment Location. Corresponds to FAA NASR field RWY_VISUAL_RANGE_EQUIP_CODE (APT_RWY_END).","x-enumNames":["None","Touchdown","Midfield","Rollout","TouchdownMidfield","TouchdownRollout","MidfieldRollout","TouchdownMidfieldRollout"],"enum":["None","Touchdown","Midfield","Rollout","TouchdownMidfield","TouchdownRollout","MidfieldRollout","TouchdownMidfieldRollout"]},"ApproachLightSystemType":{"type":"string","description":"Approach Light System. Corresponds to FAA NASR field APCH_LGT_SYSTEM_CODE (APT_RWY_END).","x-enumNames":["None","AirForceOverrun","Alsaf","Alsf1","Alsf2","Mals","Malsf","Malsr","Rail","Sals","Salsf","Ssals","Ssalf","Ssalr","Odals","Rlls","MilitaryOverrun","NonStandard"],"enum":["None","AirForceOverrun","Alsaf","Alsf1","Alsf2","Mals","Malsf","Malsr","Rail","Sals","Salsf","Ssals","Ssalf","Ssalr","Odals","Rlls","MilitaryOverrun","NonStandard"]},"ControllingObjectMarking":{"type":"string","description":"Controlling Object Marked/Lighted. Corresponds to FAA NASR field OBSTN_MRKD_CODE (APT_RWY_END).","x-enumNames":["None","Marked","Lighted","MarkedAndLighted"],"enum":["None","Marked","Lighted","MarkedAndLighted"]},"PaginatedResponseOfRunwayDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/RunwayDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"PaginatedResponseOfSigmetDto":{"type":"object","description":"Cursor-based paginated response wrapper. To retrieve subsequent pages, pass the\npagination.nextCursor value as the cursor query parameter in your next request.\nContinue until pagination.hasMore is false.","additionalProperties":false,"properties":{"data":{"type":"array","description":"The current page of results.","items":{"$ref":"#/components/schemas/SigmetDto"}},"pagination":{"description":"Pagination metadata including the cursor to fetch the next page.","oneOf":[{"$ref":"#/components/schemas/PaginationMetadata"}]}}},"TerminalProceduresResponseDto":{"type":"object","description":"Airport information with all available terminal procedure charts. Charts are FAA-published PDFs from the\nDigital Terminal Procedures Publication (d-TPP). The PDF URLs are time-limited pre-signed URLs.","additionalProperties":false,"properties":{"airportName":{"type":"string","description":"Official airport name."},"icaoIdent":{"type":"string","description":"ICAO identifier (e.g., KDFW). Use this to cross-reference with other endpoints such as METARs and TAFs.","nullable":true},"airportIdent":{"type":"string","description":"FAA airport identifier (e.g., DFW). Use this to cross-reference with the Airports endpoint.","nullable":true},"procedures":{"type":"array","description":"List of available terminal procedure chart PDFs with time-limited download URLs.","items":{"$ref":"#/components/schemas/TerminalProcedureDto"}}}},"TerminalProcedureDto":{"type":"object","description":"A terminal procedure chart (IAP, DP, STAR, APD, MIN, HOT, etc.) with a time-limited pre-signed URL for PDF download.","additionalProperties":false,"properties":{"chartCode":{"description":"Chart code indicating the procedure type: IAP, DP, STAR, APD, MIN, or HOT.","nullable":true,"oneOf":[{"$ref":"#/components/schemas/TerminalProcedureChartCode"}]},"chartName":{"type":"string","description":"Name of the chart (e.g., \"ILS OR LOC RWY 18L\", \"AIRPORT DIAGRAM\")."},"pdfUrl":{"type":"string","description":"Pre-signed URL to download the chart PDF. This URL expires after a limited time period; request a new URL if it has expired."},"amendmentNumber":{"type":"string","description":"Amendment number, if applicable.","nullable":true},"amendmentDate":{"type":"string","description":"Amendment date, if applicable.","nullable":true}}},"TerminalProcedureChartCode":{"type":"string","description":"","x-enumNames":["IAP","DP","STAR","APD","MIN","HOT","DAU","LAH","ODP"],"enum":["IAP","DP","STAR","APD","MIN","HOT","DAU","LAH","ODP"]}}},"tags":[{"name":"Airports","description":"Provides access to FAA airport data from the National Airspace System Resources (NASR) database. Airports can be queried by ICAO code, FAA identifier, state, or text search. Use an airport's ICAO code or identifier to query related data from other endpoints such as METARs, TAFs, runways, communication frequencies, airport diagrams, and chart supplements.\n\n**Identifier Resolution**\n\nAll identifier-based lookups accept both ICAO codes (e.g., KDFW) and FAA identifiers (e.g., DFW). If an exact match is not found, the API automatically tries the alternate format. This handles the common case where a user provides an ICAO-formatted code for a small airport that only has an FAA identifier — for example, `KW05` automatically resolves to `W05`, and `K9D4` resolves to `9D4`. Regional ICAO prefixes are also resolved: `K` for the contiguous US, `PA` for Alaska, and `PH` for Hawaii (e.g., `PA88` resolves to `A88`)."},{"name":"Airspace","description":"Provides access to controlled airspace (Class B, C, D) and special use airspace (restricted, prohibited, warning, MOA, alert) data sourced from FAA ArcGIS services. Each airspace includes boundary geometry (GeoJSON), altitude limits, and classification. Airspace GlobalIds are returned by the navigation log endpoint for airspaces along a planned route — use the by-global-ids endpoints to retrieve full details for those airspaces."},{"name":"Briefing","description":"Provides composite weather briefings for flight routes — a single endpoint that returns METARs, TAFs, PIREPs, SIGMETs, G-AIRMETs, and NOTAMs for all airports and airspace along a planned route of flight."},{"name":"Chart Supplements","description":"Provides access to FAA Chart Supplement (formerly Airport/Facility Directory) PDFs. Chart supplements contain comprehensive airport information including detailed runway data, lighting, available services, airspace, and other operational details. PDFs are returned as time-limited pre-signed URLs."},{"name":"Communication Frequencies","description":"Provides access to airport and facility communication frequency data from the FAA NASR database. Includes tower, ground, ATIS, approach/departure, clearance delivery, and other radio frequencies associated with airports and air traffic control facilities."},{"name":"E6B Flight Computer","description":"Provides E6B flight computer calculations for VFR pilots.\n\nEach calculation is available in two forms:\n\n- **Airport-based** — Automatically pulls wind, temperature, and altimeter data from the airport's latest METAR observation. Some airport-based endpoints accept optional overrides for \"what if\" scenarios.\n\n- **Manual** — You provide all input values directly. Useful for any location, hypothetical conditions, or when METAR data is not available.\n\n**Available Calculations**\n\n- **Crosswind** — Headwind and crosswind components for runway selection\n\n- **Density Altitude** — Pressure altitude corrected for non-standard temperature\n\n- **Wind Triangle** — True heading, ground speed, and wind correction angle from course/wind data\n\n- **True Airspeed** — TAS from calibrated airspeed, pressure altitude, and temperature\n\n- **Cloud Base** — Estimated ceiling height from temperature/dewpoint spread\n\n- **Pressure Altitude** — Altitude corrected from field elevation and current altimeter setting\n\n**DISCLAIMER:** These calculations are intended for PRE-FLIGHT planning purposes only and must not be used for in-flight navigation. Results are approximations based on the ICAO Standard Atmosphere (ISA) model, which assumes mid-latitude atmospheric conditions. The actual tropopause altitude varies from ~26,000 ft at the poles to ~55,000 ft at the equator. Always verify against certified instruments and official flight planning tools."},{"name":"Weather - G-AIRMETs","description":"Provides access to decoded G-AIRMETs (Graphical AIRMETs) for the contiguous United States — graphical weather advisories issued by the Aviation Weather Center. G-AIRMETs are organized by product type: SIERRA (IFR/mountain obscuration), TANGO (turbulence/wind shear/surface winds), and ZULU (icing/freezing level). They can also be queried by specific hazard type (e.g., ICE, TURB_LO, IFR). Each advisory includes the hazard, severity, altitude range, and geographic polygon of the affected area. G-AIRMETs are issued every 3 hours with forecasts at 0, 3, 6, 9, and 12 hour intervals."},{"name":"Weather - METARs","description":"Provides access to decoded METAR (Meteorological Aerodrome Report) aviation weather observations. METARs are routine weather observations from airport weather stations, updated approximately every hour. METAR data is also used by the E6B endpoints to automatically calculate crosswind and density altitude for airports."},{"name":"Navaids","description":"Provides access to FAA NASR navigation aid (NAVAID) data including VOR, VORTAC, NDB, DME, and TACAN facilities. Note: NavId is not globally unique — the same identifier can exist for different facility types. The identifier lookup endpoint returns all matches."},{"name":"Navigation Log","description":"Provides VFR cross-country flight planning tools.\n\nThis controller offers three capabilities:\n\n- **Navigation Log** — Full route calculation with per-leg course, heading, ground speed, time, fuel burn, and wind data. Automatically detects airspaces and obstacles along the route.\n\n- **Bearing and Distance** — Quick point-to-point great-circle bearing and distance between any two coordinates.\n\n- **Winds Aloft** — Raw winds aloft (FB) forecast data for all US reporting sites at standard altitude levels."},{"name":"NOTAMs","description":"Provides access to NOTAMs (Notices to Air Missions) from the FAA NOTAM Management System (NMS). NOTAMs contain time-critical aeronautical information about airport closures, airspace restrictions, runway conditions, navigation aid outages, and other flight safety hazards. Query by airport identifier, geographic radius, along a flight route, by NOTAM number, or search across all active NOTAMs. Each NOTAM is returned as a GeoJSON Feature with geographic geometry and detailed properties including effective dates, classification, text content, and plain-English translations.\n\nNOTAM data is synced from the FAA NMS system every 3 minutes via background delta sync, with a full refresh daily. Expired and cancelled NOTAMs are periodically purged from the database. Most endpoints automatically exclude expired and cancelled NOTAMs that have not yet been purged. The `GET id/{nmsId}` and `GET number/{notamNumber}` endpoints skip this filter, so they may return recently expired or cancelled NOTAMs that are still awaiting purge. Permanent NOTAMs (no expiration date) remain active indefinitely until manually cancelled."},{"name":"Obstacles","description":"Provides access to obstacle data from the FAA Digital Obstacle File (DOF). Obstacles include towers, buildings, smokestacks, and other structures that may affect flight safety. Each obstacle has an OAS (Obstacle Assessment Surface) number as its unique identifier. OAS numbers are returned by the navigation log endpoint for obstacles near a planned route — use the by-oas-numbers endpoint to retrieve full details for those obstacles."},{"name":"Weather - PIREPs","description":"Provides access to PIREPs (Pilot Reports) issued in PIREP or AIREP format — real-time weather observations reported by pilots in flight. PIREPs contain firsthand reports of turbulence, icing, sky conditions, visibility, and other flight conditions at specific altitudes and locations. Unlike METARs (ground-based), PIREPs describe conditions aloft. Report types are UA (routine) or UUA (urgent, indicating severe conditions)."},{"name":"Runways","description":"Provides access to FAA runway data with filtering, spatial search, and optional ArcGIS polygon geometry. Runways include dimensions, surface type, lighting, weight-bearing capacity, and detailed runway end information."},{"name":"Weather - Domestic SIGMETs","description":"Provides access to domestic SIGMET advisories for the contiguous United States. Does not include SIGMETs issued by the US in international format. SIGMETs warn of severe weather hazards significant to all aircraft (severe turbulence/icing, convective activity). Each advisory includes the hazard type, severity, altitude range, and geographic polygon defining the affected area."},{"name":"Weather - TAFs","description":"Provides access to decoded TAF (Terminal Aerodrome Forecast) products. TAFs are weather forecasts for airports, typically covering a 24-30 hour period with forecast periods describing expected wind, visibility, sky conditions, and weather phenomena. TAFs are issued approximately every 6 hours for airports with weather reporting capabilities."},{"name":"Terminal Procedures","description":"Provides access to FAA terminal procedure chart PDFs from the Digital Terminal Procedures Publication (d-TPP). Includes Instrument Approach Procedures (IAP), Departure Procedures (DP), Standard Terminal Arrivals (STAR), Airport Diagrams (APD), Minimums (MIN), Hot Spots (HOT), and more. Charts are returned as time-limited pre-signed URLs for PDF download."}]}