Obstacles
Over 625,000 FAA-charted obstacles including towers, cranes, and other structures.
Endpoints
GET
/api/v1/obstacles/searchPrivate Pilot+Search Nearby
Returns paginated results of ObstacleDto
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| lat | query | number | Latitude in decimal degrees (-90 to 90) |
| lon | query | number | Longitude in decimal degrees (-180 to 180) |
| radiusNm | query | number | Search radius in nautical miles (default 5) |
| minHeightAgl | query | integer? | Optional minimum height AGL in feet to filter results |
| cursor | query | string? | Cursor from a previous response to fetch the next page. |
| limit | query | integer | Maximum number of items to return (default 100, max 500). |
Responses
200Returns the obstacles foundPaginatedResponseOfObstacleDto
dataObstacleDto[]The page of results.
oasNumberstringObstacle Assessment Surface number (unique identifier).
stateIdstringnullableTwo-letter state identifier.
cityNamestringnullableCity nearest to the obstacle.
latitudenumbernullableLatitude in decimal degrees.
longitudenumbernullableLongitude in decimal degrees.
obstacleTypestringnullableType of obstacle (e.g., TOWER, BLDG, STACK).
quantityintegernullableNumber of obstacles at this location.
heightAglintegernullableHeight above ground level in feet.
heightAmslintegernullableHeight above mean sea level in feet.
lightingObstacleLightingUnknown | Red | DualMediumWhiteStrobeRed | HighIntensityWhiteStrobeRed | MediumIntensityWhiteStrobe | HighIntensityWhiteStrobe | Flood | DualMediumCatenary | SynchronizedRedLighting | Lighted | None
horizontalAccuracyHorizontalAccuracyUnknown | Within20Feet | Within50Feet | Within100Feet | Within250Feet | Within500Feet | Within1000Feet | WithinHalfNauticalMile | Within1NauticalMile
verticalAccuracyVerticalAccuracyUnknown | Within3Feet | Within10Feet | Within20Feet | Within50Feet | Within125Feet | Within250Feet | Within500Feet | Within1000Feet
markingObstacleMarkingUnknown | OrangeOrOrangeWhitePaint | WhitePaintOnly | Marked | FlagMarker | SphericalMarker | None
verificationStatusVerificationStatusUnknown | Verified | Unverified
paginationPaginationMetadataMetadata for cursor-based pagination.
nextCursorstringnullableCursor value to pass for the next page of results (null if no more pages).
hasMorebooleanWhether more results are available beyond this page.
limitintegerMaximum number of items per page.
400If coordinates or radius are invalidApiErrorResponse
codestringMachine-readable error code (e.g., "AIRCRAFT_NOT_FOUND").
messagestringHuman-readable error message suitable for display.
detailsstringnullableAdditional error details (only included in development environment).
validationErrorsRecord<string, string[]>nullableField-level validation errors (only for validation failures).
timestampstringUTC timestamp when the error occurred.
traceIdstringnullableCorrelation ID for tracing the request.
pathstringnullableRequest path that generated the error.
Code Examples
curl \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://preflightapi-apim-service.azure-api.net/api/v1/obstacles/search?lat=40.6413&lon=-73.7781&radiusNm=10&minHeightAgl=25&limit=25"GET
/api/v1/obstacles/state/{stateCode}Private Pilot+Get By State
Returns paginated results of ObstacleDto
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| stateCode* | path | string | Two-letter state code (e.g., TX, CA) |
| minHeightAgl | query | integer? | Optional minimum height AGL in feet to filter results |
| cursor | query | string? | Cursor from a previous response to fetch the next page. |
| limit | query | integer | Maximum number of items to return (default 100, max 500). |
Responses
200Returns the obstaclesPaginatedResponseOfObstacleDto
dataObstacleDto[]The page of results.
oasNumberstringObstacle Assessment Surface number (unique identifier).
stateIdstringnullableTwo-letter state identifier.
cityNamestringnullableCity nearest to the obstacle.
latitudenumbernullableLatitude in decimal degrees.
longitudenumbernullableLongitude in decimal degrees.
obstacleTypestringnullableType of obstacle (e.g., TOWER, BLDG, STACK).
quantityintegernullableNumber of obstacles at this location.
heightAglintegernullableHeight above ground level in feet.
heightAmslintegernullableHeight above mean sea level in feet.
lightingObstacleLightingUnknown | Red | DualMediumWhiteStrobeRed | HighIntensityWhiteStrobeRed | MediumIntensityWhiteStrobe | HighIntensityWhiteStrobe | Flood | DualMediumCatenary | SynchronizedRedLighting | Lighted | None
horizontalAccuracyHorizontalAccuracyUnknown | Within20Feet | Within50Feet | Within100Feet | Within250Feet | Within500Feet | Within1000Feet | WithinHalfNauticalMile | Within1NauticalMile
verticalAccuracyVerticalAccuracyUnknown | Within3Feet | Within10Feet | Within20Feet | Within50Feet | Within125Feet | Within250Feet | Within500Feet | Within1000Feet
markingObstacleMarkingUnknown | OrangeOrOrangeWhitePaint | WhitePaintOnly | Marked | FlagMarker | SphericalMarker | None
verificationStatusVerificationStatusUnknown | Verified | Unverified
paginationPaginationMetadataMetadata for cursor-based pagination.
nextCursorstringnullableCursor value to pass for the next page of results (null if no more pages).
hasMorebooleanWhether more results are available beyond this page.
limitintegerMaximum number of items per page.
400If the state code is emptyApiErrorResponse
codestringMachine-readable error code (e.g., "AIRCRAFT_NOT_FOUND").
messagestringHuman-readable error message suitable for display.
detailsstringnullableAdditional error details (only included in development environment).
validationErrorsRecord<string, string[]>nullableField-level validation errors (only for validation failures).
timestampstringUTC timestamp when the error occurred.
traceIdstringnullableCorrelation ID for tracing the request.
pathstringnullableRequest path that generated the error.
Code Examples
curl \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://preflightapi-apim-service.azure-api.net/api/v1/obstacles/state/NY?minHeightAgl=25&limit=25"GET
/api/v1/obstacles/{oasNumber}Private Pilot+Get By Oas Number
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| oasNumber* | path | string | Obstacle Assessment Surface number |
Responses
200Returns the obstacleObstacleDto
oasNumberstringObstacle Assessment Surface number (unique identifier).
stateIdstringnullableTwo-letter state identifier.
cityNamestringnullableCity nearest to the obstacle.
latitudenumbernullableLatitude in decimal degrees.
longitudenumbernullableLongitude in decimal degrees.
obstacleTypestringnullableType of obstacle (e.g., TOWER, BLDG, STACK).
quantityintegernullableNumber of obstacles at this location.
heightAglintegernullableHeight above ground level in feet.
heightAmslintegernullableHeight above mean sea level in feet.
lightingObstacleLightingUnknown | Red | DualMediumWhiteStrobeRed | HighIntensityWhiteStrobeRed | MediumIntensityWhiteStrobe | HighIntensityWhiteStrobe | Flood | DualMediumCatenary | SynchronizedRedLighting | Lighted | None
horizontalAccuracyHorizontalAccuracyUnknown | Within20Feet | Within50Feet | Within100Feet | Within250Feet | Within500Feet | Within1000Feet | WithinHalfNauticalMile | Within1NauticalMile
verticalAccuracyVerticalAccuracyUnknown | Within3Feet | Within10Feet | Within20Feet | Within50Feet | Within125Feet | Within250Feet | Within500Feet | Within1000Feet
markingObstacleMarkingUnknown | OrangeOrOrangeWhitePaint | WhitePaintOnly | Marked | FlagMarker | SphericalMarker | None
verificationStatusVerificationStatusUnknown | Verified | Unverified
404If the obstacle is not foundApiErrorResponse
codestringMachine-readable error code (e.g., "AIRCRAFT_NOT_FOUND").
messagestringHuman-readable error message suitable for display.
detailsstringnullableAdditional error details (only included in development environment).
validationErrorsRecord<string, string[]>nullableField-level validation errors (only for validation failures).
timestampstringUTC timestamp when the error occurred.
traceIdstringnullableCorrelation ID for tracing the request.
pathstringnullableRequest path that generated the error.
Code Examples
curl \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://preflightapi-apim-service.azure-api.net/api/v1/obstacles/12-345678"POST
/api/v1/obstacles/by-oas-numbersPrivate Pilot+Get By Oas Numbers
Responses
200Returns the matching obstacles
oasNumberstringObstacle Assessment Surface number (unique identifier).
stateIdstringnullableTwo-letter state identifier.
cityNamestringnullableCity nearest to the obstacle.
latitudenumbernullableLatitude in decimal degrees.
longitudenumbernullableLongitude in decimal degrees.
obstacleTypestringnullableType of obstacle (e.g., TOWER, BLDG, STACK).
quantityintegernullableNumber of obstacles at this location.
heightAglintegernullableHeight above ground level in feet.
heightAmslintegernullableHeight above mean sea level in feet.
lightingObstacleLightingUnknown | Red | DualMediumWhiteStrobeRed | HighIntensityWhiteStrobeRed | MediumIntensityWhiteStrobe | HighIntensityWhiteStrobe | Flood | DualMediumCatenary | SynchronizedRedLighting | Lighted | None
horizontalAccuracyHorizontalAccuracyUnknown | Within20Feet | Within50Feet | Within100Feet | Within250Feet | Within500Feet | Within1000Feet | WithinHalfNauticalMile | Within1NauticalMile
verticalAccuracyVerticalAccuracyUnknown | Within3Feet | Within10Feet | Within20Feet | Within50Feet | Within125Feet | Within250Feet | Within500Feet | Within1000Feet
markingObstacleMarkingUnknown | OrangeOrOrangeWhitePaint | WhitePaintOnly | Marked | FlagMarker | SphericalMarker | None
verificationStatusVerificationStatusUnknown | Verified | Unverified
400If the list is empty or exceeds 1000 itemsApiErrorResponse
codestringMachine-readable error code (e.g., "AIRCRAFT_NOT_FOUND").
messagestringHuman-readable error message suitable for display.
detailsstringnullableAdditional error details (only included in development environment).
validationErrorsRecord<string, string[]>nullableField-level validation errors (only for validation failures).
timestampstringUTC timestamp when the error occurred.
traceIdstringnullableCorrelation ID for tracing the request.
pathstringnullableRequest path that generated the error.
Code Examples
curl \
-X POST \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '[
"12-345678",
"12-345679"
]' \
"https://preflightapi-apim-service.azure-api.net/api/v1/obstacles/by-oas-numbers"GET
/api/v1/obstacles/bboxPrivate Pilot+Get By Bounding Box
Returns paginated results of ObstacleDto
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| minLat | query | number | Minimum latitude (-90 to 90) |
| maxLat | query | number | Maximum latitude (-90 to 90) |
| minLon | query | number | Minimum longitude (-180 to 180) |
| maxLon | query | number | Maximum longitude (-180 to 180) |
| minHeightAgl | query | integer? | Optional minimum height AGL in feet to filter results |
| cursor | query | string? | Cursor from a previous response to fetch the next page. |
| limit | query | integer | Maximum number of items to return (default 100, max 500). |
Responses
200Returns the obstacles foundPaginatedResponseOfObstacleDto
dataObstacleDto[]The page of results.
oasNumberstringObstacle Assessment Surface number (unique identifier).
stateIdstringnullableTwo-letter state identifier.
cityNamestringnullableCity nearest to the obstacle.
latitudenumbernullableLatitude in decimal degrees.
longitudenumbernullableLongitude in decimal degrees.
obstacleTypestringnullableType of obstacle (e.g., TOWER, BLDG, STACK).
quantityintegernullableNumber of obstacles at this location.
heightAglintegernullableHeight above ground level in feet.
heightAmslintegernullableHeight above mean sea level in feet.
lightingObstacleLightingUnknown | Red | DualMediumWhiteStrobeRed | HighIntensityWhiteStrobeRed | MediumIntensityWhiteStrobe | HighIntensityWhiteStrobe | Flood | DualMediumCatenary | SynchronizedRedLighting | Lighted | None
horizontalAccuracyHorizontalAccuracyUnknown | Within20Feet | Within50Feet | Within100Feet | Within250Feet | Within500Feet | Within1000Feet | WithinHalfNauticalMile | Within1NauticalMile
verticalAccuracyVerticalAccuracyUnknown | Within3Feet | Within10Feet | Within20Feet | Within50Feet | Within125Feet | Within250Feet | Within500Feet | Within1000Feet
markingObstacleMarkingUnknown | OrangeOrOrangeWhitePaint | WhitePaintOnly | Marked | FlagMarker | SphericalMarker | None
verificationStatusVerificationStatusUnknown | Verified | Unverified
paginationPaginationMetadataMetadata for cursor-based pagination.
nextCursorstringnullableCursor value to pass for the next page of results (null if no more pages).
hasMorebooleanWhether more results are available beyond this page.
limitintegerMaximum number of items per page.
400If coordinates are invalid or minLat >= maxLatApiErrorResponse
codestringMachine-readable error code (e.g., "AIRCRAFT_NOT_FOUND").
messagestringHuman-readable error message suitable for display.
detailsstringnullableAdditional error details (only included in development environment).
validationErrorsRecord<string, string[]>nullableField-level validation errors (only for validation failures).
timestampstringUTC timestamp when the error occurred.
traceIdstringnullableCorrelation ID for tracing the request.
pathstringnullableRequest path that generated the error.
Code Examples
curl \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://preflightapi-apim-service.azure-api.net/api/v1/obstacles/bbox?minLat=40.0&maxLat=41.0&minLon=-74.5&maxLon=-73.0&minHeightAgl=25&limit=25"