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

# Estimated positions

> Aircraft the network stopped hearing while cruising, drawn where they most likely are: flown on from the last observed position toward the destination their callsign's route names, at the last observed speed (holding the last track 10 minutes, then turning toward the destination). Every entry is an estimate, never an observation: `estimated` is always true, `last_seen` is the last real position, `alt_baro` and `gs` are the last observed values. An aircraft appears 90 s after it was last heard and leaves when it is heard again, nears its destination, or its flight time runs out. Kept in memory, never archived or exported. Scored every night against the previous day's real coverage gaps; `accuracy` is the latest night's result for the method in use (median error by gap length), null before the first. Rate: 300 per 600 s (bucket `estimated`). Cache: 15 s edge, 10 s browser.



## OpenAPI

````yaml /openapi.json get /v1/estimated
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.** History is observation, never an official registry. Gaps
    mean the network's sources did not hear it, nothing more. Responses carry
    `coverage: "observed"` as a reminder. The one exception is the airport
    departures board, whose rows may be inferred from published timetables —
    each board row carries its own `source` (observed / published / both); a
    published row is not a receiver observation. Likewise a flight's
    `route_source`: `observed` when both ends were seen, `observed+catalog` when
    the community supplied the end coverage never reached, `catalog` when it
    supplied both. Catalog answers are checked against observation and reviewed
    before they are served, and observation outranks them whenever it speaks.
    This API is read-only; answers go to the contribution door at
    contribute.flightportrait.com.


    **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" and link the
    credits page, which lists every source the data draws on and the credit each
    one asks for; republishing carries them too.

    Credits: https://flightportrait.com/network/credits.html

    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: Contributions
    description: What observation could not settle, and the community answers to it.
  - name: Meta
    description: Index and health.
paths:
  /v1/estimated:
    get:
      tags:
        - Live
      summary: Estimated positions
      description: >-
        Aircraft the network stopped hearing while cruising, drawn where they
        most likely are: flown on from the last observed position toward the
        destination their callsign's route names, at the last observed speed
        (holding the last track 10 minutes, then turning toward the
        destination). Every entry is an estimate, never an observation:
        `estimated` is always true, `last_seen` is the last real position,
        `alt_baro` and `gs` are the last observed values. An aircraft appears 90
        s after it was last heard and leaves when it is heard again, nears its
        destination, or its flight time runs out. Kept in memory, never archived
        or exported. Scored every night against the previous day's real coverage
        gaps; `accuracy` is the latest night's result for the method in use
        (median error by gap length), null before the first. Rate: 300 per 600 s
        (bucket `estimated`). Cache: 15 s edge, 10 s browser.
      operationId: estimated
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                properties:
                  generated_at:
                    type: number
                    description: Unix seconds the estimates are for.
                  method:
                    type: string
                    description: How positions are estimated.
                  accuracy:
                    type:
                      - object
                      - 'null'
                    description: >-
                      The latest night's measured accuracy: day, n, median_km,
                      by_gap_min.
                  aircraft:
                    items:
                      type: object
                    type: array
                    description: >-
                      Estimated aircraft; every entry is an estimate, never an
                      observation.
                type: object
                required:
                  - generated_at
                  - method
                  - aircraft
              example:
                generated_at: 1790140000
                method: converge-to-destination
                accuracy:
                  day: '2026-09-22'
                  'n': 208
                  median_km: 2.3
                  by_gap_min:
                    5-15:
                      'n': 153
                      median_km: 1.4
                    60-120:
                      'n': 43
                      median_km: 76.9
                aircraft:
                  - hex: 4ca8e4
                    flight: RYR1153
                    t: B738
                    r: 9H-QDS
                    category: A3
                    lat: 43.1021
                    lon: 11.9403
                    track: 312.4
                    alt_baro: 36000
                    gs: 452
                    estimated: true
                    last_seen:
                      at: 1790139412
                      lat: 42.2
                      lon: 13.1
                    destination: PSA
                    eta: 1790140700
        '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

````