> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flightportrait.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Airframe

> One aircraft: registry identity and the observed flight log, newest first. legs is null when the log artifact is not loaded, empty when the aircraft was not seen in the window. Observation, not a registry of record. 404 if nothing is known. Rate: 300 per 600 s (bucket `airframe`). Cache: 1 h edge.



## OpenAPI

````yaml /openapi.json get /v1/airframes/{hex}
openapi: 3.1.0
info:
  title: FlightPortrait network API
  description: >-
    Open data from the FlightPortrait receiver network. No API key.


    **Stability.** Operations marked `x-stability: stable` only ever gain
    fields; names and types are frozen. Operations marked `x-stability: map`
    exist for the first-party map and can change with it.


    **Field dialects.** `/v1/aircraft` and `/v2/point` pass readsb's wire fields
    through unchanged (`hex`, `t`, `r`, `gs`, ...) so ecosystem tooling works
    as-is. Every other resource uses full words: `reg`, `type`, `org`, `dst`.
    Airport codes in history resources are IATA; `/v1/airports/{code}` accepts
    IATA or ICAO. Event times are unix seconds UTC; registry timestamps are ISO
    8601 UTC; board and schedule times are HH:MM in the origin airport's local
    time.


    **Data honesty.** Everything here is observation, never a published schedule
    or an official registry. Gaps mean the network's sources did not hear it,
    nothing more. History responses carry `coverage: "observed"` as a reminder.


    **Errors.** Every non-200 body is `{"error": <code>, "detail": <human
    text>}` with `Cache-Control: no-store`. 404 `not_found` / `not_observed`,
    422 `invalid_request`, 429 `rate_limited` (with `Retry-After` and
    `RateLimit-*` headers), 503 `stale_snapshot` (live snapshot older than 60 s)
    or `artifact_unavailable` (a history artifact is not loaded).


    **Rate limits.** Per IP, per bucket, over a 600 second window; each
    operation notes its bucket and default limit. 429 means wait for
    `Retry-After` seconds.


    Data is ODbL 1.0. Credit "FlightPortrait network feeders".

    Terms: https://flightportrait.com/network/terms
  version: 1.0.0
servers:
  - url: https://data.flightportrait.com
security: []
tags:
  - name: Live
    description: What the network hears now.
  - name: History
    description: Observed airframes, flights, airports.
  - name: Stations
    description: Feeder roster.
  - name: Reference
    description: Airlines, alliances, types.
  - name: Meta
    description: Index and health.
paths:
  /v1/airframes/{hex}:
    get:
      tags:
        - History
        - History
      summary: Airframe
      description: >-
        One aircraft: registry identity and the observed flight log, newest
        first. legs is null when the log artifact is not loaded, empty when the
        aircraft was not seen in the window. Observation, not a registry of
        record. 404 if nothing is known. Rate: 300 per 600 s (bucket
        `airframe`). Cache: 1 h edge.
      operationId: airframe
      parameters:
        - name: hex
          in: path
          required: true
          schema:
            type: string
            description: ICAO 24-bit address, 6 hex chars. Case-insensitive.
            title: Hex
          description: ICAO 24-bit address, 6 hex chars. Case-insensitive.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  hex:
                    type: string
                  reg:
                    type:
                      - string
                      - 'null'
                    description: Registration.
                  type:
                    type:
                      - string
                      - 'null'
                    description: ICAO type designator.
                  type_name:
                    type:
                      - string
                      - 'null'
                  category:
                    type:
                      - string
                      - 'null'
                    description: Type category (narrow, wide, ...).
                  operator:
                    type:
                      - string
                      - 'null'
                    description: Operator name.
                  operator_icao:
                    type:
                      - string
                      - 'null'
                    description: 'Observed operator: majority callsign prefix.'
                  year:
                    type:
                      - integer
                      - 'null'
                    description: Build year.
                  source:
                    type:
                      - string
                      - 'null'
                    description: Registry row provenance.
                  airline:
                    type:
                      - object
                      - 'null'
                    description: Operator airline when resolved.
                  legs:
                    description: >-
                      Observed legs, newest first. Empty array = not seen in the
                      window; null = the log artifact is not loaded.
                    oneOf:
                      - type: array
                        items:
                          type: object
                          properties:
                            date:
                              type: string
                              description: YYYY-MM-DD, UTC.
                            org:
                              type:
                                - string
                                - 'null'
                              description: Origin, IATA.
                            dst:
                              type:
                                - string
                                - 'null'
                              description: Destination, IATA.
                            dep_ts:
                              type:
                                - integer
                                - 'null'
                              description: First-seen time, unix seconds UTC.
                            arr_ts:
                              type:
                                - integer
                                - 'null'
                              description: Last-seen time, unix seconds UTC.
                            max_alt:
                              type:
                                - integer
                                - 'null'
                              description: Max observed barometric altitude, feet.
                            callsign:
                              type:
                                - string
                                - 'null'
                      - type: 'null'
                  window_days:
                    type:
                      - integer
                      - 'null'
                    description: >-
                      Days of history the log covers. Null when the log artifact
                      is not loaded.
                  coverage:
                    type: string
                    description: >-
                      Always "observed": evidence from our receivers and open
                      trace archives, never a published schedule or registry.
                    const: observed
                required:
                  - hex
                  - legs
                  - window_days
                  - coverage
              example:
                hex: 76cd06
                reg: 9V-SHF
                type: A359
                type_name: Airbus A350-900
                category: wide
                operator: Singapore Airlines
                operator_icao: SIA
                year: 2019
                source: tar1090
                airline:
                  icao: SIA
                  iata: SQ
                  name: Singapore Airlines
                  palette:
                    - '#1D4886'
                    - '#FCB130'
                  alliances: []
                legs:
                  - date: '2026-08-27'
                    org: SIN
                    dst: LHR
                    dep_ts: 1787800000
                    arr_ts: 1787845000
                    max_alt: 41000
                    callsign: SQ322
                window_days: 60
                coverage: observed
        '404':
          description: Not found or not observed.
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                    description: >-
                      Machine code: not_found, not_observed, invalid_request,
                      rate_limited, stale_snapshot, artifact_unavailable,
                      upstream_unavailable.
                  detail:
                    type: string
                    description: Human-readable explanation.
                type: object
                required:
                  - error
                  - detail
        '422':
          description: Malformed input.
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                    description: >-
                      Machine code: not_found, not_observed, invalid_request,
                      rate_limited, stale_snapshot, artifact_unavailable,
                      upstream_unavailable.
                  detail:
                    type: string
                    description: Human-readable explanation.
                type: object
                required:
                  - error
                  - detail
        '429':
          description: >-
            Rate limited. Wait Retry-After seconds. Headers: Retry-After,
            RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset.
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                    description: >-
                      Machine code: not_found, not_observed, invalid_request,
                      rate_limited, stale_snapshot, artifact_unavailable,
                      upstream_unavailable.
                  detail:
                    type: string
                    description: Human-readable explanation.
                type: object
                required:
                  - error
                  - detail
              example:
                error: rate_limited
                detail: slow down

````