# adsblol/api architecture

> Architecture diagram of the GitHub repository adsblol/api, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/adsblol/api
- Repository: https://github.com/adsblol/api

## Overview

This is the adsb.lol HTTP API, a Rapid API-compatible service for aircraft data and related receiver/network information. Clients call the FastAPI application; aircraft-filter requests are translated to ReAPI queries, while route and airport requests use VRS data and route plausibility checks. Other documented or sampled capabilities include network metrics, receiver-based map redirects, and map screenshots. Background providers gather ingest and MLAT data into Redis for API reads. The excerpts are partial, so links for unsampled route wiring and provider integrations are limited to directly supported behavior.

Main entry points: [`src/adsb_api/app.py`](https://github.com/adsblol/api/blob/main/src/adsb_api/app.py) (API Application), [`src/adsb_api/utils/api_routes.py`](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/api_routes.py) (V0 Routes), [`src/adsb_api/utils/provider.py`](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/provider.py) (Network Provider), [`src/adsb_api/utils/api_tar.py`](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/api_tar.py) (Screenshot API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_app["API Application<br/>[app.py]"]
end

subgraph group_aircraft["Aircraft Data"]
  node_routes["V0 Routes<br/>[api_routes.py]"]
  node_v2["V2 Filters<br/>[api_v2.py]"]
  node_routecheck["Route Plausibility<br/>[plausible.py]"]
  node_redisvrs["VRS Data Access<br/>[provider.py]"]
  node_reapi["ReAPI Client<br/>[reapi.py]"]
end

subgraph group_network["Receiver Network"]
  node_provider["Network Provider<br/>[provider.py]"]
  node_feeder["Feeder Data<br/>[provider.py]"]
end

subgraph group_render["Map Rendering"]
  node_screenshot["Screenshot API<br/>[api_tar.py]"]
  node_browser["Browser Pool<br/>[browser2.py]"]
end

node_client(("API Client"))
node_reapisvc{{"ReAPI Service"}}
node_redis[("Redis")]
node_ingest{{"Ingest Services"}}
node_mlat{{"MLAT Servers"}}
node_chromium{{"Chromium"}}
node_photoapi{{"Planespotters API"}}

node_client -->|"sends requests"| node_app
node_app -->|"dispatches v0"| node_routes
node_app -->|"dispatches v2"| node_v2
node_routes -->|"reads route data"| node_redisvrs
node_routes -->|"checks plausibility"| node_routecheck
node_routes -->|"caches routes"| node_redisvrs
node_v2 -->|"queries aircraft"| node_reapi
node_reapi -->|"fetches data"| node_reapisvc
node_app -->|"reads network data"| node_provider
node_provider -->|"fetches receiver stats"| node_ingest
node_provider -->|"fetches sync data"| node_mlat
node_provider -->|"writes network snapshots"| node_redis
node_app -->|"reads receiver data"| node_feeder
node_feeder -->|"reads and writes"| node_redis
node_redisvrs -->|"reads and writes"| node_redis
node_app -->|"dispatches screenshot"| node_screenshot
node_screenshot -->|"looks up aircraft"| node_reapisvc
node_screenshot -->|"reads and caches images"| node_redis
node_screenshot -->|"renders map"| node_browser
node_browser -->|"controls browser"| node_chromium
node_app -.->|"requests aircraft photos"| node_photoapi
node_app -->|"caches photo responses"| node_redis

click node_app "https://github.com/adsblol/api/blob/main/src/adsb_api/app.py"
click node_routes "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/api_routes.py"
click node_v2 "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/api_v2.py"
click node_routecheck "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/plausible.py"
click node_redisvrs "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/provider.py"
click node_reapi "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/reapi.py"
click node_provider "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/provider.py"
click node_feeder "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/provider.py"
click node_screenshot "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/api_tar.py"
click node_browser "https://github.com/adsblol/api/blob/main/src/adsb_api/utils/browser2.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_client toneBlue
class node_routes,node_v2,node_routecheck,node_redisvrs,node_reapi,node_redis toneAmber
class node_provider,node_feeder,node_reapisvc,node_mlat,node_photoapi toneMint
class node_screenshot,node_browser toneRose
class node_ingest,node_chromium toneIndigo
```

## Components

### HTTP API

- [API Application](https://github.com/adsblol/api/blob/main/src/adsb_api/app.py): `src/adsb_api/app.py`

### Aircraft Data

- [V0 Routes](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/api_routes.py): `src/adsb_api/utils/api_routes.py`
- [V2 Filters](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/api_v2.py): `src/adsb_api/utils/api_v2.py`
- [Route Plausibility](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/plausible.py): `src/adsb_api/utils/plausible.py`
- [VRS Data Access](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/provider.py): `src/adsb_api/utils/provider.py`
- [ReAPI Client](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/reapi.py): `src/adsb_api/utils/reapi.py`

### Receiver Network

- [Network Provider](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/provider.py): `src/adsb_api/utils/provider.py`
- [Feeder Data](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/provider.py): `src/adsb_api/utils/provider.py`

### Map Rendering

- [Screenshot API](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/api_tar.py): `src/adsb_api/utils/api_tar.py`
- [Browser Pool](https://github.com/adsblol/api/blob/main/src/adsb_api/utils/browser2.py): `src/adsb_api/utils/browser2.py`

### Other components

- **API Client**
- **ReAPI Service**
- **Redis**
- **Ingest Services**
- **MLAT Servers**
- **Chromium**
- **Planespotters API**

## Connections

- API Client → API Application: sends requests
- API Application → V0 Routes: dispatches v0
- API Application → V2 Filters: dispatches v2
- V0 Routes → VRS Data Access: reads route data
- V0 Routes → Route Plausibility: checks plausibility
- V0 Routes → VRS Data Access: caches routes
- V2 Filters → ReAPI Client: queries aircraft
- ReAPI Client → ReAPI Service: fetches data
- API Application → Network Provider: reads network data
- Network Provider → Ingest Services: fetches receiver stats
- Network Provider → MLAT Servers: fetches sync data
- Network Provider → Redis: writes network snapshots
- API Application → Feeder Data: reads receiver data
- Feeder Data → Redis: reads and writes
- VRS Data Access → Redis: reads and writes
- API Application → Screenshot API: dispatches screenshot
- Screenshot API → ReAPI Service: looks up aircraft
- Screenshot API → Redis: reads and caches images
- Screenshot API → Browser Pool: renders map
- Browser Pool → Chromium: controls browser
- API Application → Planespotters API: requests aircraft photos
- API Application → Redis: caches photo responses
