Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/adsbexchange-geospatial-filtering-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: ADSB Exchange Geopolitical Filtering Geospatial Filtering API
description: "The ADSB Exchange API provides real-time access to live global flight data,\nenabling retrieval of detailed information on aircraft positions, flight events, historical trace files,\nand many more aviation metrics. <br /><br />\nKnown for its accurate data, ADSB Exchange API is ideal\nfor aviation tracking applications, research, and analytics, offering extensive coverage powered by a\nglobal network of ADS-B and MLAT receivers. <br /><br />\nThis documentation is available in <a href=\"/api/aircraft/v2/docs\">ReDoc</a> and <a href=\"/api/aircraft/v2/docs/swagger\">Swagger</a> formats.\n<p>\n<b>Important developer notes:</b><br />\n<ul>\n <li>When designing API client, please ensure that all requests include the 'Accept-Encoding' header with 'gzip' value.</li>\n <li>When property values are not available, they will be omitted from the response object overall.</li>\n <li>When parsing JSON response do not hard-code the order of properties. Use property names to access values.</li>\n <li>We will never remove or rename properties. However, we may add new properties. Please ensure your code is resilient to new additive properties on the response objects.</li>\n</ul>\n</p>"
termsOfService: https://www.adsbexchange.com/terms-of-use/
contact:
name: Contact ADSB Exchange
url: https://www.adsbexchange.com/products/enterprise-api/
version: v2
x-logo:
url: https://adsbexchange.com/wp-content/uploads/ax_logo_background_api-scaled.avif
href: '#'
servers:
- url: https://gateway.adsbexchange.com/api/aircraft/v2
tags:
- name: Geospatial Filtering
description: 'Endpoints allow filtering live data based on geospatial boundaries, such as latitude, longitude, altitudes, or even custom GeoJSON shapes.
Use these endpoints to get information about aircraft within a specific radius from a given point, within a polygon, or within a custom shape.
<br /><br />
<b>Note</b>: When using GeoJSON shape files, only Polygon and MultiPolygon shapes are supported. Any other shapes will be ignored.'
paths:
/lat/{lat}/lon/{lon}/dist/{dist}:
get:
tags:
- Geospatial Filtering
summary: Get aircraft in radius
description: 'This endpoint will return aircraft data within the given radius (NM) of the provided coordinates.
Get aircraft within 50 nautical miles of San Francisco:
```
GET /api/aircraft/v2/lat/37.7749/lon/-122.4194/dist/50
```'
operationId: GetApiAircraftV2LatLonDist
parameters:
- name: lat
in: path
required: true
description: Latitude of the center point.
schema:
type: number
format: double
x-position: 1
- name: lon
in: path
required: true
description: Longitude of the center point.
schema:
type: number
format: double
x-position: 2
- name: dist
in: path
required: true
description: Radius in nautical miles.
schema:
type: number
format: double
x-position: 3
- type: string
name: Accept-Encoding
in: header
required: true
description: The encoding type the client will accept in the response. API call must use compression.
default: gzip
example: gzip
responses:
'200':
description: Response containing a collection of aircraft models within the given radius.
content:
application/json:
schema:
$ref: '#/components/schemas/AircraftCollectionResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ApiUnauthorizedResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiForbiddenResponse'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiTooManyRequestsResponse'
'500':
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
security:
- X-Api-Key: []
/proximity/radius:
post:
tags:
- Geospatial Filtering
summary: Get aircraft in radius
description: "This endpoint will return aircraft data within the given radius (NM) of the provided points.\n\nGet aircraft within 50 nautical miles of San Francisco, and within 20 nautical miles from New York (KJFK) at altitudes between 5000 and 30000 feet:\n```\nPOST /api/aircraft/v2/proximity/radius\n{\n \"filters\": [\n {\n \"latitude\": 37.7749,\n \"longitude\": -122.4194,\n \"radius\": 50\n },\n {\n \"latitude\": 40.641,\n \"longitude\": -73.775,\n \"radius\": 20,\n \"altitude_min\": 5000,\n \"altitude_max\": 30000\n },\n ...\n ]\n}\n```"
operationId: PostApiAircraftV2ProximityRadius
parameters:
- type: string
name: Accept-Encoding
in: header
required: true
description: The encoding type the client will accept in the response. API call must use compression.
default: gzip
example: gzip
requestBody:
x-name: request
description: JSON request model containing a list of distance filters (points).
content:
application/json:
schema:
$ref: '#/components/schemas/ProximityRequest'
required: true
x-position: 1
responses:
'200':
description: Response containing a collection of aircraft models within the given radius.
content:
application/json:
schema:
$ref: '#/components/schemas/AircraftCollectionResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ApiUnauthorizedResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiForbiddenResponse'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiTooManyRequestsResponse'
'500':
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
security:
- X-Api-Key: []
/minimal/lat/{lat}/lon/{lon}/dist/{dist}:
get:
tags:
- Geospatial Filtering
summary: Get aircraft in radius (minimal)
description: This endpoint will return aircraft data within the given radius (NM) of the provided coordinates. The data will be returned in a minimal representation.
operationId: GetApiAircraftV2MinimalLatLonDist
parameters:
- name: lat
in: path
required: true
description: Latitude of the center point.
schema:
type: number
format: double
x-position: 1
- name: lon
in: path
required: true
description: Longitude of the center point.
schema:
type: number
format: double
x-position: 2
- name: dist
in: path
required: true
description: Radius in nautical miles.
schema:
type: number
format: double
x-position: 3
- type: string
name: Accept-Encoding
in: header
required: true
description: The encoding type the client will accept in the response. API call must use compression.
default: gzip
example: gzip
responses:
'200':
description: Response containing a collection of aircraft models within the given radius.
content:
application/json:
schema:
$ref: '#/components/schemas/AircraftCollectionMinimalResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ApiUnauthorizedResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiForbiddenResponse'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiTooManyRequestsResponse'
'500':
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
security:
- X-Api-Key: []
/nohex/dist/{dist}/above/{alt}/lat/{lat}/lon/{lon}:
get:
tags:
- Geospatial Filtering
summary: Get aircraft in radius (above altitude)
description: 'This endpoint will return aircraft data within the given radius (NM) of the provided coordinates, and above the provided altitude (ft).
Get aircraft within 50 nautical miles of San Francisco, above 5000 feet (sea level):
```
GET /nohex/dist/50/above/5000/lat/37.7749/lon/-122.4194
```'
operationId: GetApiAircraftV2NohexDistAboveLatLon
parameters:
- name: lat
in: path
required: true
description: Latitude of the center point.
schema:
type: number
format: double
x-position: 1
- name: lon
in: path
required: true
description: Longitude of the center point.
schema:
type: number
format: double
x-position: 2
- name: dist
in: path
required: true
description: Radius in nautical miles.
schema:
type: number
format: double
x-position: 3
- name: alt
in: path
required: true
description: Altitude in feet above sea level.
schema:
type: integer
format: int32
x-position: 4
- type: string
name: Accept-Encoding
in: header
required: true
description: The encoding type the client will accept in the response. API call must use compression.
default: gzip
example: gzip
responses:
'200':
description: Response containing a collection of aircraft models within the given radius.
content:
application/json:
schema:
$ref: '#/components/schemas/AircraftCollectionResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ApiUnauthorizedResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiForbiddenResponse'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiTooManyRequestsResponse'
'500':
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
security:
- X-Api-Key: []
/airport/{airport}:
get:
tags:
- Geospatial Filtering
summary: Get aircraft near the airport
description: 'This endpoint will return aircraft data within 5 nautical miles of the provided airport ICAO code.
Get aircraft within 5 nautical miles of San Francisco airport:
```
GET /api/aircraft/v2/airport/KSFO
```
Use https://www.world-airport-codes.com/ to find ICAO codes for airports.'
operationId: GetApiAircraftV2Airport
parameters:
- name: airport
in: path
required: true
description: ICAO code of the airport.
schema:
type: string
x-position: 1
- type: string
name: Accept-Encoding
in: header
required: true
description: The encoding type the client will accept in the response. API call must use compression.
default: gzip
example: gzip
responses:
'200':
description: Response containing a collection of aircraft models within the given radius.
content:
application/json:
schema:
$ref: '#/components/schemas/AircraftCollectionResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ApiUnauthorizedResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiForbiddenResponse'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiTooManyRequestsResponse'
'500':
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
security:
- X-Api-Key: []
/airport:
post:
tags:
- Geospatial Filtering
summary: Get aircraft near airports
description: "This endpoint will return aircraft data within 5 nautical miles of the provided airport ICAO code(s).\n\nGet aircraft within 5 nautical miles of San Francisco and Calgary airports:\n```\nPOST /api/aircraft/v2/airport\n{\n \"airports\": [\"KSFO\", \"CYYC\"]\n}\n```\nUse https://www.world-airport-codes.com/ to find ICAO codes for airports."
operationId: PostApiAircraftV2Airport
parameters:
- type: string
name: Accept-Encoding
in: header
required: true
description: The encoding type the client will accept in the response. API call must use compression.
default: gzip
example: gzip
requestBody:
x-name: request
description: JSON request model containing airport ICAO code.
content:
application/json:
schema:
$ref: '#/components/schemas/AirportRequest'
required: true
x-position: 1
responses:
'200':
description: Response containing a collection of aircraft models within the given radius.
content:
application/json:
schema:
$ref: '#/components/schemas/AircraftCollectionResponse'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ApiUnauthorizedResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiForbiddenResponse'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiTooManyRequestsResponse'
'500':
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
security:
- X-Api-Key: []
/geospatial/boundary:
post:
tags:
- Geospatial Filtering
summary: Get aircraft within boundary
description: "Returns all aircraft within the given geospatial boundary(ies) described by GeoJSON Features.\n\n\nThe boundary is defined as a GeoJSON \"FeatureCollection\" object that contains multiple \"Feature\" objects.\nOnly \"Polygon\" and \"MultiPolygon\" feature types are supported.\n\nWhen feature object in the request contains \"properties\" dictionary,\neach aircraft matched by the boundaries of the geometry in the response will inherit those.\nThis allows sending single request with multiple geometries. API supports having up to 5 properties per feature.\n**Important**: When overlapping geometries are provided, the aircraft will be returned only once.\nAircraft will inherit all properties from all geometries it falls into.\n\nTypical use-cases include:\n* Monitoring boundaries of multiple locations (e.g. airports, cities, regions)\n* Monitoring approaching certain airspace boundaries (defining multiple overlapping geometries)\n\nThe more geometries supplied in a single request, the slower the response becomes.\nWe recommended making more requests with fewer geometries to ensure faster response times.\n\nGet aircraft in the San Francisco Bay Area:\n```\nPOST /api/aircraft/v2/geospatial/boundary\n{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"id\": \"usa-san-francisco-bay-area\",\n \"name\": \"San Francisco Bay Area\"\n },\n \"geometry\": {\n \"coordinates\": [\n [\n [\n -122.44631395117611,\n 37.83516640724265\n ],\n [\n -122.5693889887842,\n 37.75095177721121\n ],\n [\n -122.43882801189045,\n 37.67277406071676\n ],\n [\n -122.29229571649552,\n 37.749864464293466\n ],\n [\n -122.44631395117611,\n 37.83516640724265\n ]\n ]\n ],\n \"type\": \"Polygon\"\n }\n }\n ]\n}\n```\n\n\nThe GeoJSON Specification can be found at https://geojson.org/.\n\nUsing https://geojson.io/ simplifies creating GeoJSON boundaries."
operationId: PostApiAircraftV2GeospatialBoundary
parameters:
- type: string
name: Accept-Encoding
in: header
required: true
description: The encoding type the client will accept in the response. API call must use compression.
default: gzip
example: gzip
requestBody:
x-name: FeatureCollectionRequest
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/FeatureCollectionRequest'
required: true
x-position: 1
responses:
'200':
description: Response containing a collection of aircraft models within the given boundaries.
content:
application/json:
schema:
$ref: '#/components/schemas/AircraftCollectionResponse'
'400':
description: When the request is malformed or the GeoJSON is invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'402':
description: Payment Required
content:
application/json:
schema:
$ref: '#/components/schemas/ApiUnauthorizedResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ApiForbiddenResponse'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ApiTooManyRequestsResponse'
'500':
description: Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
security:
- X-Api-Key: []
components:
schemas:
AcasResolutionAdvisoryResponse:
type: object
description: ACAS Resolution Advisory Class
additionalProperties: false
properties:
utc:
type:
- string
- 'null'
description: UTC timestamp of the advisory.
unix_timestamp:
type:
- number
- 'null'
description: Unix timestamp.
format: double
bytes:
type:
- string
- 'null'
description: Advisory bytes as a string.
ARA:
type:
- string
- 'null'
description: Advisory ARA field.
RAT:
type:
- string
- 'null'
description: Advisory RAT field.
MTE:
type:
- string
- 'null'
description: Advisory MTE field.
RAC:
type:
- string
- 'null'
description: Advisory RAC field.
advisory_complement:
type:
- string
- 'null'
description: Advisory complement description.
advisory:
type:
- string
- 'null'
description: Advisory description.
TTI:
type:
- string
- 'null'
description: TTI field.
threat_id_hex:
type:
- string
- 'null'
description: Threat ID in hexadecimal.
ProblemDetails:
type: object
additionalProperties: {}
properties:
type:
type:
- string
- 'null'
title:
type:
- string
- 'null'
status:
type:
- integer
- 'null'
format: int32
detail:
type:
- string
- 'null'
instance:
type:
- string
- 'null'
LastPositionDataResponse:
type: object
description: 'When the regular lat and lon are older than 60 seconds
they are no longer considered valid, this will provide
the last position and show the age for the last position.
Aircraft will only be in the aircraft json if a position
has been received in the last 60 seconds or if any message
has been received in the last 30 seconds.'
additionalProperties: false
properties:
lat:
type:
- number
- 'null'
format: float
lon:
type:
- number
- 'null'
format: float
nic:
type:
- integer
- 'null'
description: Navigation Integrity Category (2.2.3.2.7.2.6)
format: int32
rc:
type:
- integer
- 'null'
description: 'Radius of Containment, meters; a measure of position integrity
derived from NIC and supplementary bits. (2.2.3.2.7.2.6, Table 2-69)'
format: int32
seen_pos:
type:
- number
- 'null'
description: How long ago (in seconds before “now”) the position was last updated
format: double
AircraftSingleMinimalResponse:
type: object
description: Contains the minimal information about an aircraft.
additionalProperties: false
properties:
hex:
type: string
description: The ICAO 24-bit address (hex) of the aircraft.
type:
type:
- string
- 'null'
description: The type of message (e.g., adsb_icao, tisb_icao, etc.).
flight:
type:
- string
- 'null'
description: The flight number or callsign.
r:
type:
- string
- 'null'
description: Registration or tail number.
t:
type:
- string
- 'null'
description: Aircraft type (e.g., B38M for Boeing 737 MAX 8).
alt_baro:
description: Barometric altitude in feet.
alt_geom:
type:
- number
- 'null'
description: Geometric altitude in feet.
format: float
gs:
type:
- number
- 'null'
description: Ground speed in knots.
format: float
ias:
type:
- number
- 'null'
description: Indicated airspeed in knots
format: float
tas:
type:
- number
- 'null'
description: True airspeed in knots.
format: float
mach:
type:
- number
- 'null'
description: Mach number (speed as a fraction of the speed of sound).
format: float
wd:
type:
- integer
- 'null'
description: Wind direction in degrees.
ws:
type:
- integer
- 'null'
description: Wind speed in knots.
oat:
type:
- integer
- 'null'
description: Outer/Static air temperature (OAT), typically somewhat inaccurate at lower altitudes.
tat:
type:
- integer
- 'null'
description: Total air temperature (TAT), typically somewhat inaccurate at lower altitudes.
track:
type:
- number
- 'null'
description: Aircraft track over the ground in degrees.
format: float
track_rate:
type:
- number
- 'null'
description: Rate of change of the track in degrees per second.
format: float
roll:
type:
- number
- 'null'
description: Aircraft roll angle in degrees.
format: float
mag_heading:
type:
- number
- 'null'
description: Magnetic heading in degrees.
format: float
true_heading:
type:
- number
- 'null'
description: True heading in degrees.
format: float
baro_rate:
type:
- integer
- 'null'
description: Barometric vertical rate (climb or descent) in feet per minute.
format: int32
geom_rate:
type:
- integer
- 'null'
description: Geometric vertical rate (climb or descent) in feet per minute.
format: int32
squawk:
type:
- string
- 'null'
description: Transponder squawk code.
category:
type:
- string
- 'null'
description: Aircraft category based on size and weight.
nav_qnh:
type:
- number
- 'null'
description: QNH setting (altimeter pressure setting) in hPa.
format: float
nav_altitude_mcp:
type:
- integer
- 'null'
description: MCP (Mode Control Panel) altitude setting in feet.
nav_altitude_fms:
type:
- integer
- 'null'
description: Selected altitude from the Flight Management System (FMS) in feet.
nav_heading:
type:
- number
- 'null'
description: MCP heading setting in degrees.
format: float
nav_modes:
type:
- array
- 'null'
description: 'Navigation modes: autopilot, vnav, althold, approach, lnav, tcas'
items:
type: string
lat:
type:
- number
- 'null'
description: Latitude of the aircraft.
format: float
lon:
type:
- number
- 'null'
description: Longitude of the aircraft.
format: float
seen_pos:
type:
- number
- 'null'
description: Time since the last positional update in seconds.
format: float
seen:
type:
- number
- 'null'
description: Time since the last message was received, in seconds.
format: float
ApiUnauthorizedResponse:
type: object
additionalProperties: false
properties:
msg:
type: string
reason:
type:
- string
- 'null'
AirportRequest:
type: object
description: Model representing a request for obtaining aircraft in proximity to an airport(s)
additionalProperties: false
properties:
airports:
type: array
items:
type: string
FeatureRequest:
type: object
description: Describes single feature in the GeoJSON feature collection
additionalProperties: false
properties:
type:
type: string
description: Type of the GeoJSON object. Should be "Feature"
properties:
type: object
description: 'Collection of properties associated with the geometry.
Properties with will propagated to each aircraft object in "properties" field.
**IMPORTANT**: Only 5 properties supported. Each key and value must not exceed 128 characters.'
additionalProperties:
type: string
geometry:
description: Geometry of the feature. Must be a Polygon or MultiPolygon.
oneOf:
- $ref: '#/components/schemas/FeatureGeometryRequest'
BadRequest:
type: object
additionalProperties: false
properties:
statusCode:
type: integer
format: int32
ProximityPointFilter:
type: object
description: Describes a point in proximity to which aircraft should be queried
additionalProperties: false
properties:
latitude:
type: number
description: Latitude of the coordinate
format: double
longitude:
type: number
description: Longitude of the coordinate
format: double
radius:
type: number
description: Radius in Nautical Miles from the coordinate specified via Latitude and Longitude
format: double
altitude_min:
type:
- integer
- 'null'
description: Altitude in feet to filter aircraft by (lower boundary)
format: int32
altitude_max:
type:
- integer
- 'null'
description: Altitude in feet to filter aircraft by (upper boundary)
format: int32
AircraftCollectionMinimalResponse:
type: object
description: Response envelope for the multiple aircraft endpoint.
additionalProperties: false
properties:
ac:
type: array
description: List of aircraft with all available information.
items:
$ref: '#/components/schemas/AircraftSingleMinimalResponse'
msg:
type: string
description: Message indicating the status of the request overall.
now:
type: integer
description: Unix timestamp of the current UTC time on the server (ms).
format: int64
total:
type: integer
description: The number of aircraft in the response.
format: int32
ctime:
type: integer
description: Unix timestamp (ms) of when the underlying data was last updated.
format: int64
ptime:
type: integer
description: Time taken on server to process the request (ms).
format: int64
ProximityRequest:
type: object
description: Model for querying api for multiple aircraft by proximity
additionalProperties: false
properties:
filters:
type: array
items:
$ref: '#/components/schemas/ProximityPointFilter'
ApiForbiddenResponse:
type: object
additionalProperties: false
properties:
msg:
type: string
reason:
type:
- string
- 'null'
ApiTooManyRequestsResponse:
type: object
additionalProperties: false
properties:
messa
# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/adsbexchange/refs/heads/main/openapi/adsbexchange-geospatial-filtering-api-openapi.yml