Ctrl K
ComunidadGuías…

docs/api/MilitaryService.openapi.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
openapi: 3.1.0
info:
    title: MilitaryService API
    version: 1.0.0
security:
    - WorldMonitorKey: []
    - ApiKeyHeader: []
servers:
    - url: https://api.worldmonitor.app
paths:
    /api/military/v1/list-military-flights:
        get:
            tags:
                - MilitaryService
            summary: ListMilitaryFlights
            description: ListMilitaryFlights returns paginated military aircraft observations within a bounding box, including callsign, position, altitude, operator, and source fields.
            operationId: ListMilitaryFlights
            parameters:
                - name: page_size
                  in: query
                  description: Maximum items per page (1-100). 0 or omitted uses the default of 100.
                  required: false
                  example: 25
                  schema:
                    type: integer
                    format: int32
                - name: cursor
                  in: query
                  description: |-
                    Cursor for the next page. Treat it as opaque: echo the next-cursor value
                     returned in the previous response's pagination metadata verbatim, and do
                     not construct or parse it. Empty (or any unrecognized value) requests the
                     first page.
                  required: false
                  example: "next-page-token"
                  schema:
                    type: string
                - name: ne_lat
                  in: query
                  description: North-east corner latitude of bounding box.
                  required: false
                  example: 40.7128
                  schema:
                    type: number
                    format: double
                - name: ne_lon
                  in: query
                  description: North-east corner longitude of bounding box.
                  required: false
                  example: -74.006
                  schema:
                    type: number
                    format: double
                - name: sw_lat
                  in: query
                  description: South-west corner latitude of bounding box.
                  required: false
                  example: 40.7128
                  schema:
                    type: number
                    format: double
                - name: sw_lon
                  in: query
                  description: South-west corner longitude of bounding box.
                  required: false
                  example: -74.006
                  schema:
                    type: number
                    format: double
                - name: operator
                  in: query
                  description: |-
                    Optional operator filter.
                     Accepted but currently ignored; no-op until this handler supports the parameter.
                  required: false
                  example: "MILITARY_OPERATOR_USAF"
                  schema:
                    type: string
                    enum:
                        - 'MILITARY_OPERATOR_USAF'
                        - 'MILITARY_OPERATOR_USN'
                        - 'MILITARY_OPERATOR_USMC'
                        - 'MILITARY_OPERATOR_USA'
                        - 'MILITARY_OPERATOR_RAF'
                        - 'MILITARY_OPERATOR_RN'
                        - 'MILITARY_OPERATOR_FAF'
                        - 'MILITARY_OPERATOR_GAF'
                        - 'MILITARY_OPERATOR_PLAAF'
                        - 'MILITARY_OPERATOR_PLAN'
                        - 'MILITARY_OPERATOR_VKS'
                        - 'MILITARY_OPERATOR_IAF'
                        - 'MILITARY_OPERATOR_NATO'
                        - 'MILITARY_OPERATOR_OTHER'
                - name: aircraft_type
                  in: query
                  description: |-
                    Optional aircraft type filter.
                     Accepted but currently ignored; no-op until this handler supports the parameter.
                  required: false
                  example: "MILITARY_AIRCRAFT_TYPE_FIGHTER"
                  schema:
                    type: string
                    enum:
                        - 'MILITARY_AIRCRAFT_TYPE_FIGHTER'
                        - 'MILITARY_AIRCRAFT_TYPE_BOMBER'
                        - 'MILITARY_AIRCRAFT_TYPE_TRANSPORT'
                        - 'MILITARY_AIRCRAFT_TYPE_TANKER'
                        - 'MILITARY_AIRCRAFT_TYPE_AWACS'
                        - 'MILITARY_AIRCRAFT_TYPE_RECONNAISSANCE'
                        - 'MILITARY_AIRCRAFT_TYPE_HELICOPTER'
                        - 'MILITARY_AIRCRAFT_TYPE_DRONE'
                        - 'MILITARY_AIRCRAFT_TYPE_PATROL'
                        - 'MILITARY_AIRCRAFT_TYPE_SPECIAL_OPS'
                        - 'MILITARY_AIRCRAFT_TYPE_VIP'
                        - 'MILITARY_AIRCRAFT_TYPE_UNKNOWN'
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "clusters":
                                    - "activityType": "MILITARY_ACTIVITY_TYPE_EXERCISE"
                                      "dominantOperator": "MILITARY_OPERATOR_USAF"
                                      "flightCount": 1
                                      "flights":
                                          - "aircraftModel": "example"
                                            "aircraftType": "MILITARY_AIRCRAFT_TYPE_FIGHTER"
                                            "altitude": 1.5
                                            "callsign": "example"
                                            "confidence": "MILITARY_CONFIDENCE_LOW"
                                            "id": "example-id"
                                      "id": "example-id"
                                "flights":
                                    - "aircraftModel": "example"
                                      "aircraftType": "MILITARY_AIRCRAFT_TYPE_FIGHTER"
                                      "altitude": 1.5
                                      "callsign": "example"
                                      "confidence": "MILITARY_CONFIDENCE_LOW"
                                      "id": "example-id"
                                "pagination":
                                    "nextCursor": "next-page-token"
                                    "totalCount": 1
                            schema:
                                $ref: '#/components/schemas/ListMilitaryFlightsResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: API access requires an active subscription (the API key's subscription is inactive or expired).
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/get-theater-posture:
        get:
            tags:
                - MilitaryService
            summary: GetTheaterPosture
            description: Retrieve military posture assessments for all cached theaters, including posture levels, active flights, operations and assessment times in regional monitoring.
            operationId: GetTheaterPosture
            parameters:
                - name: theater
                  in: query
                  description: |-
                    Theater name (e.g., "indo-pacific", "european", "middle-east"). Empty for all theaters.
                     Accepted but currently ignored; no-op until this handler supports the parameter.
                  required: false
                  example: "indo-pacific"
                  schema:
                    type: string
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "theaters":
                                    - "activeFlights": 1
                                      "activeOperations":
                                          - "example"
                                      "assessedAt": 1717200000000
                                      "postureLevel": "example"
                                      "theater": "indo-pacific"
                            schema:
                                $ref: '#/components/schemas/GetTheaterPostureResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: API access requires an active subscription (the API key's subscription is inactive or expired).
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/get-aircraft-details:
        get:
            tags:
                - MilitaryService
            summary: GetAircraftDetails
            description: Retrieve Wingbits aircraft enrichment by ICAO24 hex, including available aircraft type and build details. PRO-gated. Requires an active Pro subscription.
            operationId: GetAircraftDetails
            security:
                - WorldMonitorKey: []
                - ApiKeyHeader: []
                - BearerAuth: []
            parameters:
                - name: icao24
                  in: query
                  description: ICAO 24-bit hex address (lowercase).
                  required: true
                  example: "a835af"
                  schema:
                    type: string
                    pattern: '^[0-9a-fA-F]{6}$'
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "configured": true
                                "details":
                                    "built": "example"
                                    "categoryDescription": "cs.AI"
                                    "engines": "example"
                                    "icao24": "a835af"
                                    "icaoAircraftType": "all"
                            schema:
                                $ref: '#/components/schemas/GetAircraftDetailsResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: Pro subscription required.
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/get-aircraft-details-batch:
        post:
            parameters:
                - name: Idempotency-Key
                  in: header
                  description: Optional client-generated idempotency key. Retrying a POST with the same key and an identical request body replays the original response (only the status, body, and Content-Type are reproduced) instead of re-executing; reusing the key with a different body is rejected with 422. For mutations this avoids duplicating the side effect, while for batch-read POSTs it replays a cached snapshot that can be up to 24 hours stale. Keys are scoped per authenticated caller (falling back to the source IP for unauthenticated endpoints) and retained for 24 hours.
                  required: false
                  example: "4f8b9c2e-1a3d-4b6f-8e0a-2c5d7f9b1e34"
                  schema:
                    type: string
                    minLength: 1
                    maxLength: 255
                    pattern: "^[\\x21-\\x7E]{1,255}$"
            tags:
                - MilitaryService
            summary: GetAircraftDetailsBatch
            description: Retrieve Wingbits enrichment for multiple ICAO24 aircraft identifiers in one request, with aircraft details and requested versus fetched result counts.
            operationId: GetAircraftDetailsBatch
            requestBody:
                content:
                    application/json:
                        example:
                            "icao24s":
                                - "a835af"
                        schema:
                            $ref: '#/components/schemas/GetAircraftDetailsBatchRequest'
                required: true
            responses:
                "200":
                    description: Successful response
                    headers:
                        Idempotency-Key:
                            schema:
                                type: string
                            description: The idempotency key echoed from the request. Present only when the client opted into idempotency.
                        Idempotent-Replayed:
                            schema:
                                type: boolean
                            description: true when this response was replayed from an earlier request with the same key, false on the first (original) request. Present only when the client opted into idempotency.
                    content:
                        application/json:
                            example:
                                "configured": true
                                "fetched": 1
                                "requested": 1
                                "results":
                                    "exampleKey":
                                        "built": "example"
                                        "categoryDescription": "cs.AI"
                                        "engines": "example"
                                        "icao24": "a835af"
                                        "icaoAircraftType": "all"
                            schema:
                                $ref: '#/components/schemas/GetAircraftDetailsBatchResponse'
                "400":
                    description: Validation error, invalid Idempotency-Key header, or malformed JSON request body
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - type: object
                                      required:
                                        - error
                                        - message
                                      properties:
                                        error:
                                            type: string
                                        message:
                                            type: string
                                    - $ref: '#/components/schemas/InvalidRequestBodyError'
                "409":
                    description: A request with this Idempotency-Key is still being processed
                    headers:
                        Idempotency-Key:
                            schema:
                                type: string
                            description: The idempotency key supplied by the client.
                        Retry-After:
                            schema:
                                type: string
                            description: Seconds to wait before retrying the in-flight request.
                    content:
                        application/json:
                            schema:
                                type: object
                                required:
                                    - error
                                    - message
                                properties:
                                    error:
                                        type: string
                                    message:
                                        type: string
                "422":
                    description: The Idempotency-Key was already used with a different request body
                    headers:
                        Idempotency-Key:
                            schema:
                                type: string
                            description: The idempotency key supplied by the client.
                    content:
                        application/json:
                            schema:
                                type: object
                                required:
                                    - error
                                    - message
                                properties:
                                    error:
                                        type: string
                                    message:
                                        type: string
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: API access requires an active subscription (the API key's subscription is inactive or expired).
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/get-wingbits-status:
        get:
            tags:
                - MilitaryService
            summary: GetWingbitsStatus
            description: Check whether Wingbits aircraft enrichment is configured for World Monitor, using the configuration flag before requesting aircraft details or batch enrichment.
            operationId: GetWingbitsStatus
            parameters:
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "configured": true
                            schema:
                                $ref: '#/components/schemas/GetWingbitsStatusResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: API access requires an active subscription (the API key's subscription is inactive or expired).
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/get-usni-fleet-report:
        get:
            tags:
                - MilitaryService
            summary: GetUSNIFleetReport
            description: Retrieve the latest parsed USNI Fleet Tracker report, with article date, source link, fleet summary and cache status for understanding published naval activity.
            operationId: GetUSNIFleetReport
            parameters:
                - name: force_refresh
                  in: query
                  description: When true, bypass cache and fetch fresh data from USNI.
                  required: false
                  example: true
                  schema:
                    type: boolean
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "cached": true
                                "error": "example"
                                "report":
                                    "articleDate": "2026-01-15"
                                    "articleTitle": "example"
                                    "articleUrl": "https://example.com/worldmonitor"
                                    "battleForceSummary":
                                        "deployed": 1
                                        "totalShips": 1
                                        "underway": 1
                                    "parsingWarnings":
                                        - "example"
                                "stale": true
                            schema:
                                $ref: '#/components/schemas/GetUSNIFleetReportResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: API access requires an active subscription (the API key's subscription is inactive or expired).
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/list-military-bases:
        get:
            tags:
                - MilitaryService
            summary: ListMilitaryBases
            description: Explore military bases by country, type, map bounds and zoom level, with base details and server-side clusters for geographic military infrastructure analysis.
            operationId: ListMilitaryBases
            parameters:
                - name: ne_lat
                  in: query
                  description: North-east corner latitude of the map bounding box.
                  required: false
                  example: 40.7128
                  schema:
                    type: number
                    format: double
                - name: ne_lon
                  in: query
                  description: North-east corner longitude of the map bounding box.
                  required: false
                  example: -74.006
                  schema:
                    type: number
                    format: double
                - name: sw_lat
                  in: query
                  description: South-west corner latitude of the map bounding box.
                  required: false
                  example: 40.7128
                  schema:
                    type: number
                    format: double
                - name: sw_lon
                  in: query
                  description: South-west corner longitude of the map bounding box.
                  required: false
                  example: -74.006
                  schema:
                    type: number
                    format: double
                - name: zoom
                  in: query
                  description: Map zoom level used to decide whether to return bases or clusters.
                  required: false
                  example: 1
                  schema:
                    type: integer
                    format: int32
                - name: type
                  in: query
                  description: Optional military base type filter.
                  required: false
                  example: "us-nato"
                  schema:
                    type: string
                    enum:
                        - 'us-nato'
                        - 'china'
                        - 'russia'
                        - 'uk'
                        - 'france'
                        - 'india'
                        - 'italy'
                        - 'uae'
                        - 'turkey'
                        - 'japan'
                        - 'other'
                - name: kind
                  in: query
                  description: Optional military base kind filter.
                  required: false
                  example: "base"
                  schema:
                    type: string
                    enum:
                        - 'base'
                        - 'airfield'
                        - 'naval_base'
                        - 'military'
                        - 'barracks'
                        - 'bunker'
                        - 'trench'
                        - 'training_area'
                        - 'checkpoint'
                        - 'shelter'
                        - 'ammunition'
                        - 'office'
                        - 'obstacle_course'
                        - 'nuclear_explosion_site'
                        - 'range'
                - name: country
                  in: query
                  description: Optional country filter for military bases.
                  required: false
                  example: "US"
                  schema:
                    type: string
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "bases":
                                    - "branch": "example"
                                      "catAirforce": true
                                      "catNaval": true
                                      "catNuclear": true
                                      "catSpace": true
                                "clusters":
                                    - "count": 1
                                      "dominantType": "all"
                                      "expansionZoom": 1
                                      "latitude": 40.7128
                                      "longitude": -74.006
                                "totalInView": 1
                                "truncated": true
                            schema:
                                $ref: '#/components/schemas/ListMilitaryBasesResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: API access requires an active subscription (the API key's subscription is inactive or expired).
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/get-wingbits-live-flight:
        get:
            tags:
                - MilitaryService
            summary: GetWingbitsLiveFlight
            description: GetWingbitsLiveFlight returns one aircraft's live Wingbits ECS position by ICAO24 hex, with its schedule, delays and a Planespotters photo, cached 30 seconds.
            operationId: GetWingbitsLiveFlight
            parameters:
                - name: icao24
                  in: query
                  description: ICAO 24-bit hex address (lowercase, 6 characters).
                  required: true
                  example: "a835af"
                  schema:
                    type: string
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "flight":
                                    "airlineName": "WorldMonitor Analyst"
                                    "altitude": 1.5
                                    "arrDelayedMin": 1
                                    "arrEstimatedUtc": "example"
                                    "arrIata": "JFK"
                            schema:
                                $ref: '#/components/schemas/GetWingbitsLiveFlightResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: API access requires an active subscription (the API key's subscription is inactive or expired).
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/list-defense-patents:
        get:
            tags:
                - MilitaryService
            summary: ListDefensePatents
            description: ListDefensePatents returns weekly-seeded USPTO filings by key defense and dual-use assignees, filterable by CPC class and assignee, up to 100 rows.
            operationId: ListDefensePatents
            parameters:
                - name: cpc_code
                  in: query
                  description: CPC category filter (e.g. "H04B", "F42B"). Empty returns all categories.
                  required: false
                  example: "H04B"
                  schema:
                    type: string
                - name: assignee
                  in: query
                  description: Assignee keyword filter (case-insensitive substring match). Empty returns all.
                  required: false
                  example: "example"
                  schema:
                    type: string
                - name: limit
                  in: query
                  description: Maximum results to return (default 20, max 100).
                  required: false
                  example: 25
                  schema:
                    type: integer
                    format: int32
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "fetchedAt": "2026-01-15T12:00:00Z"
                                "patents":
                                    - "abstract": ""
                                      "assignee": "example"
                                      "cpcCode": "example"
                                      "cpcDesc": "example"
                                      "date": "2026-01-15"
                                "total": 1
                            schema:
                                $ref: '#/components/schemas/ListDefensePatentsResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: API access requires an active subscription (the API key's subscription is inactive or expired).
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
    /api/military/v1/get-defense-industrial-base:
        get:
            tags:
                - MilitaryService
            summary: GetDefenseIndustrialBase
            description: GetDefenseIndustrialBase returns annual military capacity and five-year arms-supplier dependency aggregates for one country. PRO-gated. Requires entitlement tier >= 1.
            operationId: GetDefenseIndustrialBase
            security:
                - WorldMonitorKey: []
                - ApiKeyHeader: []
                - BearerAuth: []
            parameters:
                - name: country_code
                  in: query
                  description: ISO 3166-1 alpha-2 country code.
                  required: true
                  example: "US"
                  schema:
                    type: string
                    pattern: '^[A-Z]{2}$'
                - name: jmespath
                  in: query
                  description: |-
                    Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
                  required: false
                  example: "keys(@)"
                  schema:
                    type: string
            responses:
                "200":
                    description: Successful response
                    content:
                        application/json:
                            example:
                                "armsExportsTiv":
                                    "available": true
                                    "previousValue": 1.5
                                    "previousYear": 1
                                    "source": "example"
                                    "value": 1.5
                                "armsImportsTiv":
                                    "available": true
                                    "previousValue": 1.5
                                    "previousYear": 1
                                    "source": "example"
                                    "value": 1.5
                                "available": true
                                "countryCode": "US"
                                "expenditurePctGdp":
                                    "available": true
                                    "previousValue": 1.5
                                    "previousYear": 1
                                    "source": "example"
                                    "value": 1.5
                            schema:
                                $ref: '#/components/schemas/GetDefenseIndustrialBaseResponse'
                "400":
                    description: Validation error
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ValidationError'
                                    - $ref: '#/components/schemas/JmespathProjectionError'
                "401":
                    description: Missing or invalid API key.
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/UnauthorizedError'
                "403":
                    description: PRO entitlement access denied.
                    headers:
                        X-Billing-Verification:
                            description: Present when the 403 is a billing-provider-confirmed subscription lapse (value subscription_lapsed, matching the body `code`).
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/ForbiddenError'
                "429":
                    description: Rate limit exceeded.
                    headers:
                        X-RateLimit-Limit:
                            description: Maximum requests allowed in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Remaining:
                            description: Requests remaining in the active rate-limit window.
                            schema:
                                type: string
                        X-RateLimit-Reset:
                            description: Unix epoch milliseconds when the active rate-limit window resets.
                            schema:
                                type: string
                        Retry-After:
                            description: Seconds to wait before retrying the request.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/RateLimitError'
                "503":
                    description: Service unavailable. Billing-verification responses include code and X-Billing-Verification; other gateway infrastructure failures use the generic GatewayError shape.
                    headers:
                        Retry-After:
                            description: Seconds to wait before retrying (1-60).
                            schema:
                                type: string
                        X-Billing-Verification:
                            description: Billing-verification state that produced this response (matches the body `code`).
                            schema:
                                type: string
                        X-Validation-Mode:
                            description: Present with value degraded when user API-key validation is temporarily unavailable.
                            schema:
                                type: string
                        X-RateLimit-Mode:
                            description: Present with value degraded when a fail-closed rate-limit dependency is unavailable.
                            schema:
                                type: string
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/BillingVerificationError'
                                    - $ref: '#/components/schemas/GatewayError'
                default:
                    description: Gateway or handler error response.
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/Error'
                                    - $ref: '#/components/schemas/GatewayError'
components:
    securitySchemes:
        WorldMonitorKey:
            type: apiKey
            in: header
            name: X-WorldMonitor-Key
            description: User-issued WorldMonitor API key.
        ApiKeyHeader:
            type: apiKey
            in: header
            name: X-Api-Key
            description: Alias header for the WorldMonitor API key (X-WorldMonitor-Key).
        BearerAuth:
            type: http
            scheme: bearer
            description: 'Bearer token: a Clerk-issued JWT for browser session flows, passed as Authorization: Bearer <token>.'
    schemas:
        JmespathProjectionError:
            description: Returned when a REST jmespath projection is invalid or exceeds the expression/output byte limits.
            properties:
                _jmespath_error:
                    description: Projection error discriminator and details.
                    type: string
                original_keys:
                    description: Top-level keys or shape of the unprojected response.
                    items:
                        type: string
                    type: array
            required:
                - _jmespath_error
                - original_keys
            type: object
        UnauthorizedError:
            type: object
            properties:
                error:
                    type: string
                    description: Human-readable error message.
            required:
                - error
            description: Returned when the API key is missing, malformed, or lacks current API access.
        Error:
            type: object
            properties:
                message:
                    type: string
                    description: Error message (e.g., 'user not found', 'database connection failed')
            description: Error is returned when a handler encounters an error. It contains a simple error message that the developer can customize.
        BillingVerificationError:
            type: object
            description: "Returned with HTTP 503 when paid access cannot be confirmed right now: the billing provider is re-verifying a recently expired subscription, or the entitlement backend is unreachable. Retryable — honor Retry-After."
            properties:
                error:
                    type: string
                    description: Human-readable billing-verification failure reason.
                code:
                    type: string
                    enum:
                        - renewal_verification_pending
                        - renewal_verification_failed
                        - entitlement_verification_unavailable
                    description: Machine-readable billing-verification state, mirrored in the X-Billing-Verification response header.
                requiredTier:
                    type: integer
                    format: int32
                    description: Minimum entitlement tier required for this endpoint, when the denial came from a tier gate.
            required:
                - error
                - code
        InvalidRequestBodyError:
            type: object
            description: Returned when a JSON POST request body is empty or malformed.
            properties:
                message:
                    type: string
                    description: Invalid request body
            required:
                - message
        GatewayError:
            type: object
            description: Returned by gateway infrastructure errors before an RPC handler runs, such as origin, routing, method, authentication, or quota checks.
            properties:
                error:
                    oneOf:
                        - type: string
                        - type: object
                          additionalProperties: true
                    description: Gateway error reason or structured gateway failure details.
            required:
                - error
        RateLimitError:
            type: object
            description: Returned when a gateway or handler rate limit rejects the request.
            properties:
                error:
                    type: string
                    description: Human-readable rate-limit failure reason.
            required:
                - error
        ForbiddenError:
            type: object
            properties:
                error:
                    type: string
                    description: Human-readable entitlement failure reason.
                code:
                    type: string
                    enum:
                        - subscription_lapsed
                    description: Machine-readable denial code, present when the 403 is a billing-provider-confirmed subscription lapse (mirrored in the X-Billing-Verification response header).
                requiredTier:
                    type: integer
                    format: int32
                    description: Minimum entitlement tier required for this endpoint.
                currentTier:
                    type: integer
                    format: int32
                    description: Caller entitlement tier when known.
                planKey:
                    type: string
                    description: Caller plan key when known.
            required:
                - error
            description: Returned when a PRO-gated endpoint denies access because the caller has no resolved authenticated user, entitlements cannot be verified, or the caller lacks the required entitlement tier.
        FieldViolation:
            type: object
            properties:
                field:
                    type: string
                    description: The field path that failed validation (e.g., 'user.email' for nested fields). For header validation, this will be the header name (e.g., 'X-API-Key')
                description:
                    type: string
                    description: Human-readable description of the validation violation (e.g., 'must be a valid email address', 'required field missing')
            required:
                - field
                - description
            description: FieldViolation describes a single validation error for a specific field.
        ValidationError:
            type: object
            properties:
                violations:
                    type: array
                    items:
                        $ref: '#/components/schemas/FieldViolation'
                    description: List of validation violations
            required:
                - violations
            description: ValidationError is returned when request validation fails. It contains a list of field violations describing what went wrong.
        ListMilitaryFlightsRequest:
            type: object
            properties:
                pageSize:
                    type: integer
                    format: int32
                    description: Maximum items per page (1-100). 0 or omitted uses the default of 100.
                cursor:
                    type: string
                    description: |-
                        Cursor for the next page. Treat it as opaque: echo the next-cursor value
                         returned in the previous response's pagination metadata verbatim, and do
                         not construct or parse it. Empty (or any unrecognized value) requests the
                         first page.
                neLat:
                    type: number
                    format: double
                    description: North-east corner latitude of bounding box.
                neLon:
                    type: number
                    format: double
                    description: North-east corner longitude of bounding box.
                swLat:
                    type: number
                    format: double
                    description: South-west corner latitude of bounding box.
                swLon:
                    type: number
                    format: double
                    description: South-west corner longitude of bounding box.
                operator:
                    type: string
                    enum:
                        - MILITARY_OPERATOR_UNSPECIFIED
                        - MILITARY_OPERATOR_USAF
                        - MILITARY_OPERATOR_USN
                        - MILITARY_OPERATOR_USMC
                        - MILITARY_OPERATOR_USA
                        - MILITARY_OPERATOR_RAF
                        - MILITARY_OPERATOR_RN
                        - MILITARY_OPERATOR_FAF
                        - MILITARY_OPERATOR_GAF
                        - MILITARY_OPERATOR_PLAAF
                        - MILITARY_OPERATOR_PLAN
                        - MILITARY_OPERATOR_VKS
                        - MILITARY_OPERATOR_IAF
                        - MILITARY_OPERATOR_NATO
                        - MILITARY_OPERATOR_OTHER
                    description: MilitaryOperator represents the military branch or force operating an asset.
                aircraftType:
                    type: string
                    enum:
                        - MILITARY_AIRCRAFT_TYPE_UNSPECIFIED
                        - MILITARY_AIRCRAFT_TYPE_FIGHTER
                        - MILITARY_AIRCRAFT_TYPE_BOMBER
                        - MILITARY_AIRCRAFT_TYPE_TRANSPORT
                        - MILITARY_AIRCRAFT_TYPE_TANKER
                        - MILITARY_AIRCRAFT_TYPE_AWACS
                        - MILITARY_AIRCRAFT_TYPE_RECONNAISSANCE
                        - MILITARY_AIRCRAFT_TYPE_HELICOPTER
                        - MILITARY_AIRCRAFT_TYPE_DRONE
                        - MILITARY_AIRCRAFT_TYPE_PATROL
                        - MILITARY_AIRCRAFT_TYPE_SPECIAL_OPS
                        - MILITARY_AIRCRAFT_TYPE_VIP
                        - MILITARY_AIRCRAFT_TYPE_UNKNOWN
                    description: MilitaryAircraftType represents the classification of a military aircraft.
            description: ListMilitaryFlightsRequest specifies filters for retrieving military flight data.
        ListMilitaryFlightsResponse:
            type: object
            properties:
                flights:
                    type: array
                    items:
                        $ref: '#/components/schemas/MilitaryFlight'
                clusters:
                    type: array
                    items:
                        $ref: '#/components/schemas/MilitaryFlightCluster'
                pagination:
                    $ref: '#/components/schemas/PaginationResponse'
            description: ListMilitaryFlightsResponse contains military flights and clusters.
        MilitaryFlight:
            type: object
            properties:
                id:
                    type: string
                    minLength: 1
                    description: Unique flight identifier.
                callsign:
                    type: string
                    description: Aircraft callsign.
                hexCode:
                    type: string
                    description: ICAO 24-bit hex address, uppercase.
                registration:
                    type: string
                    description: Aircraft registration number.
                aircraftType:
                    type: string
                    enum:
                        - MILITARY_AIRCRAFT_TYPE_UNSPECIFIED
                        - MILITARY_AIRCRAFT_TYPE_FIGHTER
                        - MILITARY_AIRCRAFT_TYPE_BOMBER
                        - MILITARY_AIRCRAFT_TYPE_TRANSPORT
                        - MILITARY_AIRCRAFT_TYPE_TANKER
                        - MILITARY_AIRCRAFT_TYPE_AWACS
                        - MILITARY_AIRCRAFT_TYPE_RECONNAISSANCE
                        - MILITARY_AIRCRAFT_TYPE_HELICOPTER
                        - MILITARY_AIRCRAFT_TYPE_DRONE
                        - MILITARY_AIRCRAFT_TYPE_PATROL
                        - MILITARY_AIRCRAFT_TYPE_SPECIAL_OPS
                        - MILITARY_AIRCRAFT_TYPE_VIP
                        - MILITARY_AIRCRAFT_TYPE_UNKNOWN
                    description: MilitaryAircraftType represents the classification of a military aircraft.
                aircraftModel:
                    type: string
                    description: Specific aircraft model (e.g., "F-35A", "C-17A").
                operator:
                    type: string
                    enum:
                        - MILITARY_OPERATOR_UNSPECIFIED
                        - MILITARY_OPERATOR_USAF
                        - MILITARY_OPERATOR_USN
                        - MILITARY_OPERATOR_USMC
                        - MILITARY_OPERATOR_USA
                        - MILITARY_OPERATOR_RAF
                        - MILITARY_OPERATOR_RN
                        - MILITARY_OPERATOR_FAF
                        - MILITARY_OPERATOR_GAF
                        - MILITARY_OPERATOR_PLAAF
                        - MILITARY_OPERATOR_PLAN
                        - MILITARY_OPERATOR_VKS
                        - MILITARY_OPERATOR_IAF
                        - MILITARY_OPERATOR_NATO
                        - MILITARY_OPERATOR_OTHER
                    description: MilitaryOperator represents the military branch or force operating an asset.
                operatorCountry:
                    type: string
                    description: Country operating the aircraft (ISO 3166-1 alpha-2).
                location:
                    $ref: '#/components/schemas/GeoCoordinates'
                altitude:
                    type: number
                    format: double
                    description: Altitude in feet.
                heading:
                    type: number
                    format: double
                    description: Heading in degrees.
                speed:
                    type: number
                    format: double
                    description: Speed in knots.
                verticalRate:
                    type: number
                    format: double
                    description: Vertical rate in feet per minute.
                onGround:
                    type: boolean
                    description: Whether the aircraft is on the ground.
                squawk:
                    type: string
                    description: Transponder squawk code.
                origin:
                    type: string
                    description: ICAO code of the origin airport.
                destination:
                    type: string
                    description: ICAO code of the destination airport.
                lastSeenAt:
                    type: integer
                    format: int64
                    description: 'Last seen time, as Unix epoch milliseconds.. Warning: Values > 2^53 may lose precision in JavaScript'
                firstSeenAt:
                    type: integer
                    format: int64
                    description: 'First seen time, as Unix epoch milliseconds.. Warning: Values > 2^53 may lose precision in JavaScript'
                confidence:
                    type: string
                    enum:
                        - MILITARY_CONFIDENCE_UNSPECIFIED
                        - MILITARY_CONFIDENCE_LOW
                        - MILITARY_CONFIDENCE_MEDIUM
                        - MILITARY_CONFIDENCE_HIGH
                    description: MilitaryConfidence represents confidence in asset identification.
                isInteresting:
                    type: boolean
                    description: Whether flagged for unusual activity.
                note:
                    type: string
                    description: Analyst note.
                enrichment:
                    $ref: '#/components/schemas/FlightEnrichment'
                source:
                    type: string
                    description: Provider that supplied this observation (for example, "adsb.lol" or "wingbits").
            required:
                - id
            description: MilitaryFlight represents a tracked military aircraft from the configured ADS-B providers.
        GeoCoordinates:
            type: object
            properties:
                latitude:
                    type: number
                    maximum: 90
                    minimum: -90
                    format: double
                    description: Latitude in decimal degrees (-90 to 90).
                longitude:
                    type: number
                    maximum: 180
                    minimum: -180
                    format: double
                    description: Longitude in decimal degrees (-180 to 180).
            description: GeoCoordinates represents a geographic location using WGS84 coordinates.
        FlightEnrichment:
            type: object
            properties:
                manufacturer:
                    type: string
                    description: Aircraft manufacturer.
                owner:
                    type: string
                    description: Registered owner.
                operatorName:
                    type: string
                    description: Operator name.
                typeCode:
                    type: string
                    description: ICAO type code.
                builtYear:
                    type: string
                    description: Year the aircraft was built.
                confirmedMilitary:
                    type: boolean
                    description: Whether confirmed as military.
                militaryBranch:
                    type: string
                    description: Military branch designation.
            description: FlightEnrichment contains additional data from Wingbits aircraft database.
        MilitaryFlightCluster:
            type: object
            properties:
                id:
                    type: string
                    description: Unique cluster identifier.
                name:
                    type: string
                    description: Descriptive name of the cluster.
                location:
                    $ref: '#/components/schemas/GeoCoordinates'
                flightCount:
                    type: integer
                    format: int32
                    description: Number of flights in the cluster.
                flights:
                    type: array
                    items:
                        $ref: '#/components/schemas/MilitaryFlight'
                dominantOperator:
                    type: string
                    enum:
                        - MILITARY_OPERATOR_UNSPECIFIED
                        - MILITARY_OPERATOR_USAF
                        - MILITARY_OPERATOR_USN
                        - MILITARY_OPERATOR_USMC
                        - MILITARY_OPERATOR_USA
                        - MILITARY_OPERATOR_RAF
                        - MILITARY_OPERATOR_RN
                        - MILITARY_OPERATOR_FAF
                        - MILITARY_OPERATOR_GAF
                        - MILITARY_OPERATOR_PLAAF
                        - MILITARY_OPERATOR_PLAN
                        - MILITARY_OPERATOR_VKS
                        - MILITARY_OPERATOR_IAF
                        - MILITARY_OPERATOR_NATO
                        - MILITARY_OPERATOR_OTHER
                    description: MilitaryOperator represents the military branch or force operating an asset.
                activityType:
                    type: string
                    enum:
                        - MILITARY_ACTIVITY_TYPE_UNSPECIFIED
                        - MILITARY_ACTIVITY_TYPE_EXERCISE
                        - MILITARY_ACTIVITY_TYPE_PATROL
                        - MILITARY_ACTIVITY_TYPE_TRANSPORT
                        - MILITARY_ACTIVITY_TYPE_DEPLOYMENT
                        - MILITARY_ACTIVITY_TYPE_TRANSIT
                        - MILITARY_ACTIVITY_TYPE_UNKNOWN
                    description: MilitaryActivityType represents the assessed type of military activity.
            description: MilitaryFlightCluster represents a geographic cluster of military flights.
        PaginationResponse:
            type: object
            properties:
                nextCursor:
                    type: string
                    description: Cursor for fetching the next page. Empty string indicates no more pages.
                totalCount:
                    type: integer
                    format: int32
                    description: Total count of items matching the query, if known. Zero if the total is unknown.
            description: PaginationResponse contains pagination metadata returned alongside list results.
        GetTheaterPostureRequest:
            type: object
            properties:
                theater:
                    type: string
                    description: |-
                        Theater name (e.g., "indo-pacific", "european", "middle-east"). Empty for all theaters.
                         Accepted but currently ignored; no-op until this handler supports the parameter.
            description: GetTheaterPostureRequest specifies the theater to assess.
        GetTheaterPostureResponse:
            type: object
            properties:
                theaters:
                    type: array
                    items:
                        $ref: '#/components/schemas/TheaterPosture'
            description: GetTheaterPostureResponse contains theater posture assessments.
        TheaterPosture:
            type: object
            properties:
                theater:
                    type: string
                    description: Theater name (e.g., "Indo-Pacific", "European", "Middle East").
                postureLevel:
                    type: string
                    description: Overall posture assessment.
                activeFlights:
                    type: integer
                    format: int32
                    description: Number of active flights in the theater.
                trackedVessels:
                    type: integer
                    format: int32
                    description: Number of tracked vessels in the theater.
                activeOperations:
                    type: array
                    items:
                        type: string
                        description: Notable ongoing operations.
                assessedAt:
                    type: integer
                    format: int64
                    description: 'Assessment timestamp, as Unix epoch milliseconds.. Warning: Values > 2^53 may lose precision in JavaScript'
            description: TheaterPosture represents an assessed military posture for a geographic theater.
        GetAircraftDetailsRequest:
            type: object
            properties:
                icao24:
                    type: string
                    pattern: ^[0-9a-fA-F]{6}$
                    description: ICAO 24-bit hex address (lowercase).
            required:
                - icao24
            description: GetAircraftDetailsRequest looks up a single aircraft by ICAO 24-bit hex.
        GetAircraftDetailsResponse:
            type: object
            properties:
                details:
                    $ref: '#/components/schemas/AircraftDetails'
                configured:
                    type: boolean
                    description: Whether the Wingbits API is configured.
            description: GetAircraftDetailsResponse contains the aircraft enrichment data.
        AircraftDetails:
            type: object
            properties:
                icao24:
                    type: string
                    description: ICAO 24-bit hex address.
                registration:
                    type: string
                    description: Aircraft registration number.
                manufacturerIcao:
                    type: string
                    description: ICAO manufacturer code.
                manufacturerName:
                    type: string
                    description: Full manufacturer name.
                model:
                    type: string
                    description: Aircraft model.
                typecode:
                    type: string
                    description: ICAO type designator code.
                serialNumber:
                    type: string
                    description: Manufacturer serial number.
                icaoAircraftType:
                    type: string
                    description: ICAO aircraft type designator.
                operator:
                    type: string
                    description: Operator name.
                operatorCallsign:
                    type: string
                    description: Operator callsign.
                operatorIcao:
                    type: string
                    description: Operator ICAO code.
                owner:
                    type: string
                    description: Registered owner.
                built:
                    type: string
                    description: Build date.
                engines:
                    type: string
                    description: Engine description.
                categoryDescription:
                    type: string
                    description: ICAO category description.
            description: AircraftDetails contains Wingbits aircraft enrichment data.
        GetAircraftDetailsBatchRequest:
            type: object
            properties:
                icao24s:
                    type: array
                    items:
                        type: string
                        maxItems: 20
                        minItems: 1
                        description: |-
                            ICAO 24-bit hex addresses (lowercase). Validation accepts up to 20, but the handler
                             de-duplicates, sorts, and processes at most the first 10 addresses -- anything beyond
                             that is silently discarded, so send at most 10 per call. The official browser client
                             caps its own requests at the same bound.
                    maxItems: 20
                    minItems: 1
            description: GetAircraftDetailsBatchRequest looks up multiple aircraft by ICAO 24-bit hex.
        GetAircraftDetailsBatchResponse:
            type: object
            properties:
                results:
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/AircraftDetails'
                    description: Map of icao24 -> aircraft details for found aircraft.
                fetched:
                    type: integer
                    format: int32
                    description: Number of aircraft successfully fetched from upstream.
                requested:
                    type: integer
                    format: int32
                    description: Number of aircraft requested.
                configured:
                    type: boolean
                    description: Whether the Wingbits API is configured.
            description: GetAircraftDetailsBatchResponse contains the batch lookup results.
        ResultsEntry:
            type: object
            properties:
                key:
                    type: string
                value:
                    $ref: '#/components/schemas/AircraftDetails'
        GetWingbitsStatusRequest:
            type: object
            description: GetWingbitsStatusRequest checks whether the Wingbits enrichment API is configured.
        GetWingbitsStatusResponse:
            type: object
            properties:
                configured:
                    type: boolean
                    description: Whether the Wingbits API key is configured on the server.
            description: GetWingbitsStatusResponse indicates whether Wingbits is available.
        GetUSNIFleetReportRequest:
            type: object
            properties:
                forceRefresh:
                    type: boolean
                    description: When true, bypass cache and fetch fresh data from USNI.
            description: GetUSNIFleetReportRequest requests the latest USNI Fleet Tracker report.
        GetUSNIFleetReportResponse:
            type: object
            properties:
                report:
                    $ref: '#/components/schemas/USNIFleetReport'
                cached:
                    type: boolean
                    description: Whether the response was served from cache.
                stale:
                    type: boolean
                    description: Whether the cached data is stale (served after a fetch failure).
                error:
                    type: string
                    description: Error message, if any.
            description: GetUSNIFleetReportResponse returns the parsed USNI Fleet Tracker report.
        USNIFleetReport:
            type: object
            properties:
                articleUrl:
                    type: string
                    description: URL of the source article.
                articleDate:
                    type: string
                    description: Publication date of the article.
                articleTitle:
                    type: string
                    description: Title of the article.
                battleForceSummary:
                    $ref: '#/components/schemas/BattleForceSummary'
                vessels:
                    type: array
                    items:
                        $ref: '#/components/schemas/USNIVessel'
                strikeGroups:
                    type: array
                    items:
                        $ref: '#/components/schemas/USNIStrikeGroup'
                regions:
                    type: array
                    items:
                        type: string
                        description: Unique region names mentioned in the article.
                parsingWarnings:
                    type: array
                    items:
                        type: string
                        description: Warnings generated during parsing.
                timestamp:
                    type: integer
                    format: int64
                    description: 'Time the report was generated, as Unix epoch milliseconds.. Warning: Values > 2^53 may lose precision in JavaScript'
            description: USNIFleetReport is the full parsed output of a USNI Fleet Tracker article.
        BattleForceSummary:
            type: object
            properties:
                totalShips:
                    type: integer
                    minimum: 0
                    format: int32
                    description: Total ships in the battle force.
                deployed:
                    type: integer
                    minimum: 0
                    format: int32
                    description: Number of ships currently deployed.
                underway:
                    type: integer
                    minimum: 0
                    format: int32
                    description: Number of ships currently underway.
            description: BattleForceSummary contains fleet-wide ship count statistics.
        USNIVessel:
            type: object
            properties:
                name:
                    type: string
                    minLength: 1
                    description: Vessel name (e.g., "USS Abraham Lincoln").
                hullNumber:
                    type: string
                    minLength: 1
                    description: Hull designation (e.g., "CVN-72", "DDG-51").
                vesselType:
                    type: string
                    description: Vessel type classification (e.g., "carrier", "destroyer", "submarine").
                region:
                    type: string
                    description: Region name where the vessel is operating.
                regionLat:
                    type: number
                    format: double
                    description: Approximate latitude for the region.
                regionLon:
                    type: number
                    format: double
                    description: Approximate longitude for the region.
                deploymentStatus:
                    type: string
                    description: Deployment status (e.g., "deployed", "underway", "in-port", "unknown").
                homePort:
                    type: string
                    description: Home port, if identified from the article text.
                strikeGroup:
                    type: string
                    description: Strike group assignment, if any.
                activityDescription:
                    type: string
                    description: Brief activity description parsed from article prose.
                articleUrl:
                    type: string
                    description: URL of the USNI article this vessel was parsed from.
                articleDate:
                    type: string
                    description: Publication date of the USNI article.
            required:
                - name
                - hullNumber
            description: USNIVessel represents a single vessel parsed from a USNI Fleet Tracker article.
        USNIStrikeGroup:
            type: object
            properties:
                name:
                    type: string
                    description: Strike group name (e.g., "Abraham Lincoln Carrier Strike Group").
                carrier:
                    type: string
                    description: Carrier name and hull (e.g., "USS Abraham Lincoln (CVN-72)").
                airWing:
                    type: string
                    description: Assigned air wing (e.g., "Carrier Air Wing Nine").
                destroyerSquadron:
                    type: string
                    description: Assigned destroyer squadron.
                escorts:
                    type: array
                    items:
                        type: string
                        description: Escort vessels in the strike group.
            description: USNIStrikeGroup represents a carrier strike group parsed from the article.
        ListMilitaryBasesRequest:
            type: object
            properties:
                neLat:
                    type: number
                    format: double
                    description: North-east corner latitude of the map bounding box.
                neLon:
                    type: number
                    format: double
                    description: North-east corner longitude of the map bounding box.
                swLat:
                    type: number
                    format: double
                    description: South-west corner latitude of the map bounding box.
                swLon:
                    type: number
                    format: double
                    description: South-west corner longitude of the map bounding box.
                zoom:
                    type: integer
                    format: int32
                    description: Map zoom level used to decide whether to return bases or clusters.
                type:
                    type: string
                    description: Optional military base type filter.
                kind:
                    type: string
                    description: Optional military base kind filter.
                country:
                    type: string
                    description: Optional country filter for military bases.
        ListMilitaryBasesResponse:
            type: object
            properties:
                bases:
                    type: array
                    items:
                        $ref: '#/components/schemas/MilitaryBaseEntry'
                clusters:
                    type: array
                    items:
                        $ref: '#/components/schemas/MilitaryBaseCluster'
                totalInView:
                    type: integer
                    format: int32
                truncated:
                    type: boolean
        MilitaryBaseEntry:
            type: object
            properties:
                id:
                    type: string
                name:
                    type: string
                latitude:
                    type: number
                    format: double
                longitude:
                    type: number
                    format: double
                kind:
                    type: string
                countryIso2:
                    type: string
                type:
                    type: string
                tier:
                    type: integer
                    format: int32
                catAirforce:
                    type: boolean
                catNaval:
                    type: boolean
                catNuclear:
                    type: boolean
                catSpace:
                    type: boolean
                catTraining:
                    type: boolean
                branch:
                    type: string
                status:
                    type: string
        MilitaryBaseCluster:
            type: object
            properties:
                latitude:
                    type: number
                    format: double
                longitude:
                    type: number
                    format: double
                count:
                    type: integer
                    format: int32
                dominantType:
                    type: string
                expansionZoom:
                    type: integer
                    format: int32
        GetWingbitsLiveFlightRequest:
            type: object
            properties:
                icao24:
                    type: string
                    minLength: 1
                    description: ICAO 24-bit hex address (lowercase, 6 characters).
            required:
                - icao24
            description: GetWingbitsLiveFlightRequest fetches live Wingbits ECS data for a single aircraft.
        GetWingbitsLiveFlightResponse:
            type: object
            properties:
                flight:
                    $ref: '#/components/schemas/WingbitsLiveFlight'
            description: GetWingbitsLiveFlightResponse contains the live flight data, if available.
        WingbitsLiveFlight:
            type: object
            properties:
                icao24:
                    type: string
                    description: ICAO 24-bit hex address.
                callsign:
                    type: string
                    description: Live callsign.
                lat:
                    type: number
                    format: double
                    description: Latitude in decimal degrees.
                lon:
                    type: number
                    format: double
                    description: Longitude in decimal degrees.
                altitude:
                    type: number
                    format: double
                    description: Altitude in feet.
                speed:
                    type: number
                    format: double
                    description: Ground speed in knots.
                heading:
                    type: number
                    format: double
                    description: Track/heading in degrees.
                verticalRate:
                    type: number
                    format: double
                    description: Vertical rate in feet per minute (positive = climb, negative = descent).
                registration:
                    type: string
                    description: Aircraft registration number.
                model:
                    type: string
                    description: Aircraft model (e.g. "PC-12/45").
                operator:
                    type: string
                    description: Operator name.
                onGround:
                    type: boolean
                    description: True if the aircraft is on the ground.
                lastSeen:
                    type: string
                    format: int64
                    description: Unix timestamp of the last position update.
                depIata:
                    type: string
                    description: |-
                        Schedule — from ecs-api.wingbits.com/v1/flights/schedule/{callsign}
                         Departure airport IATA code (e.g. "FJR").
                arrIata:
                    type: string
                    description: Arrival airport IATA code (e.g. "BOM").
                depTimeUtc:
                    type: string
                    description: Scheduled departure time UTC (ISO 8601).
                arrTimeUtc:
                    type: string
                    description: Scheduled arrival time UTC (ISO 8601).
                depEstimatedUtc:
                    type: string
                    description: Estimated departure time UTC (ISO 8601).
                arrEstimatedUtc:
                    type: string
                    description: Estimated arrival time UTC (ISO 8601).
                depDelayedMin:
                    type: integer
                    format: int32
                    description: Departure delay in minutes (negative = early).
                arrDelayedMin:
                    type: integer
                    format: int32
                    description: Arrival delay in minutes (negative = early).
                flightStatus:
                    type: string
                    description: Flight status string (e.g. "en-route", "landed", "scheduled").
                flightDurationMin:
                    type: integer
                    format: int32
                    description: Scheduled flight duration in minutes.
                arrTerminal:
                    type: string
                    description: Arrival terminal (e.g. "2").
                photoUrl:
                    type: string
                    description: |-
                        Photo — from api.planespotters.net/pub/photos/hex/{icao24}
                         Aircraft photo URL (large thumbnail ~497x280).
                photoLink:
                    type: string
                    description: Permalink to the photo page on planespotters.net.
                photoCredit:
                    type: string
                    description: Photographer credit name.
                callsignIata:
                    type: string
                    description: |-
                        Airline — resolved server-side from the ICAO callsign prefix.
                         IATA-equivalent callsign (e.g. "EK528" for ICAO "UAE528"). Empty if no mapping.
                airlineName:
                    type: string
                    description: Airline name (e.g. "Emirates"). Empty if no mapping.
            description: WingbitsLiveFlight contains real-time flight position data from the Wingbits ECS network.
        ListDefensePatentsRequest:
            type: object
            properties:
                cpcCode:
                    type: string
                    description: CPC category filter (e.g. "H04B", "F42B"). Empty returns all categories.
                assignee:
                    type: string
                    description: Assignee keyword filter (case-insensitive substring match). Empty returns all.
                limit:
                    type: integer
                    format: int32
                    description: Maximum results to return (default 20, max 100).
            description: ListDefensePatentsRequest filters defense/dual-use patent filings.
        ListDefensePatentsResponse:
            type: object
            properties:
                patents:
                    type: array
                    items:
                        $ref: '#/components/schemas/DefensePatentFiling'
                total:
                    type: integer
                    format: int32
                    description: Total number of filings in the seeded dataset.
                fetchedAt:
                    type: string
                    description: ISO 8601 timestamp when data was seeded.
            description: ListDefensePatentsResponse contains recent defense/dual-use patent filings.
        DefensePatentFiling:
            type: object
            properties:
                patentId:
                    type: string
                    description: USPTO patent ID.
                title:
                    type: string
                    description: Patent title.
                date:
                    type: string
                    description: Filing date (YYYY-MM-DD).
                assignee:
                    type: string
                    description: Primary assignee organization name.
                cpcCode:
                    type: string
                    description: CPC classification code (e.g. "H04B", "F42B").
                cpcDesc:
                    type: string
                    description: CPC class description.
                abstract:
                    type: string
                    description: |-
                        Compatibility field retained for existing clients. Always empty because
                         USPTO Open Data Portal Patent File Wrapper records do not include abstracts.
                url:
                    type: string
                    description: USPTO patent URL.
            description: DefensePatentFiling is a single patent filing from a defense/dual-use organization.
        GetDefenseIndustrialBaseRequest:
            type: object
            properties:
                countryCode:
                    type: string
                    pattern: ^[A-Z]{2}$
                    description: ISO 3166-1 alpha-2 country code.
            required:
                - countryCode
        GetDefenseIndustrialBaseResponse:
            type: object
            properties:
                countryCode:
                    type: string
                available:
                    type: boolean
                expenditurePctGdp:
                    $ref: '#/components/schemas/DefenseIndustrialMetric'
                expenditureUsd:
                    $ref: '#/components/schemas/DefenseIndustrialMetric'
                personnel:
                    $ref: '#/components/schemas/DefenseIndustrialMetric'
                armsExportsTiv:
                    $ref: '#/components/schemas/DefenseIndustrialMetric'
                armsImportsTiv:
                    $ref: '#/components/schemas/DefenseIndustrialMetric'
                suppliers:
                    type: array
                    items:
                        $ref: '#/components/schemas/ArmsSupplierDependency'
                supplierHhi:
                    type: number
                    format: double
                windowStartYear:
                    type: integer
                    format: int32
                windowEndYear:
                    type: integer
                    format: int32
                supplierSource:
                    type: string
                fetchedAt:
                    type: string
                    description: Oldest timestamp among the source values served. Kept for compatibility.
                industrialFetchedAt:
                    type: string
                supplierFetchedAt:
                    type: string
                supplierRetained:
                    type: boolean
                supplierMappingCoverage:
                    type: number
                    format: double
        DefenseIndustrialMetric:
            type: object
            properties:
                available:
                    type: boolean
                value:
                    type: number
                    format: double
                year:
                    type: integer
                    format: int32
                previousValue:
                    type: number
                    format: double
                previousYear:
                    type: integer
                    format: int32
                source:
                    type: string
        ArmsSupplierDependency:
            type: object
            properties:
                supplierIso2:
                    type: string
                tivShare:
                    type: number
                    format: double