Flight sharing service for the Socialmesh mesh radio community. Share your Meshtastic flights so ground stations can try to receive your signal at altitude.
Share a flight. Returns a short ID and a shareable URL for the Aether web portal. Requires an API key when configured.
| Header | Status | Description |
|---|---|---|
Content-Type |
required | Must be application/json |
X-API-Key |
conditional | Required when AETHER_API_KEY is set on the server |
| Field | Type | Status | Description |
|---|---|---|---|
flight_number |
string |
required | Flight number, 2–10 alphanumeric chars (e.g. UA123) |
departure |
string |
required | Departure airport code, 3–4 letters (e.g. LAX) |
arrival |
string |
required | Arrival airport code, 3–4 letters (e.g. JFK) |
scheduled_departure |
string |
required | ISO 8601 departure date/time |
scheduled_arrival |
string |
optional | ISO 8601 arrival date/time |
airline |
string |
optional | Airline name (max 50 chars) |
node_id |
string |
optional | Meshtastic node hex ID (max 20 chars) |
node_name |
string |
optional | Node display name (max 39 chars) |
user_name |
string |
optional | User/operator name (max 39 chars) |
notes |
string |
optional | Free-text notes about the flight (max 500 chars) |
is_active |
boolean |
optional | Whether the flight is currently active |
altitude_ft |
number |
optional | Cruise altitude in feet (0–100,000) |
frequency |
string |
optional | LoRa frequency (max 20 chars, e.g. "915 MHz") |
reception_count |
number |
optional | Number of ground station receptions |
201 CreatedRetrieve a single shared flight by its ID.
| Param | Type | Description |
|---|---|---|
id |
string |
The flight ID (e.g. ae_1a2b3c4d5e6f7890) |
200 OKSearch, filter, and paginate through shared flights. Supports full-text search across all fields, airport filtering, active status, and sort ordering.
| Param | Type | Default | Description |
|---|---|---|---|
q |
string |
— | Full-text search across flight number, airports, airline, node name, user name, notes |
departure |
string |
— | Filter by departure airport code |
arrival |
string |
— | Filter by arrival airport code |
flight_number |
string |
— | Filter by exact flight number |
active |
boolean |
— | Filter by active status (true or false) |
sort |
string |
newest |
Sort order: newest, oldest, departure, receptions |
page |
integer |
1 |
Page number (1-based) |
limit |
integer |
20 |
Results per page (max 100) |
200 OKAggregate statistics across all shared flights.
200 OKLists unique departure and arrival airport codes with flight counts. Useful for populating filter dropdowns in client apps.
200 OKHealth check endpoint. Returns service status and timestamp.
200 OK| Code | Meaning |
|---|---|
400 | Invalid request body or missing required fields |
401 | Invalid or missing API key (when key auth is enabled) |
404 | Flight not found |
429 | Rate limit exceeded |
500 | Internal server error |
Requests are rate-limited per IP address within a 1-minute sliding window.
POST requests are limited to 20 per minute.
GET requests are limited to 120 per minute.
When the limit is exceeded, the API returns 429 Too Many Requests.
When the AETHER_API_KEY environment variable is configured on
the server, all POST requests must include a matching
X-API-Key header. GET requests are always public.
This allows a safe rollout: deploy the server first, then ship the app
update with the key header, then enable enforcement.
Cross-origin requests are allowed from socialmesh.app,
aether.socialmesh.app, map.socialmesh.app,
and localhost origins.
Supported methods: GET, POST, OPTIONS.
Aether is the flight-tracking feature in the Socialmesh app. Mesh radio operators share their upcoming and active flights so that ground station operators can attempt to receive LoRa signals from aircraft at altitude. Flights at 30,000–40,000 ft have line-of-sight to ground stations hundreds of kilometers away, making air-to-ground mesh contacts possible.
Browse shared flights at aether.socialmesh.app.