Operation v2
DeprecatedPOST
/v2/operationScope: operation:create
DEPRECATED - This route is deprecated and will be removed September 1, 2025. Please use Create Ephemeral Operations instead.
To support LAANC authorization workflows within 3rd-party applications, the API allows the creation of basic operation definitions. Each operation may include information such as operation start time, duration, requested altitude, and boundary (shape). For approved vendors, other details such as pilot personal contact details may be included.
Definitions:
- Operation: Describes the mission parameters. The umbrella to
1:n
authorizations. - Authorization: Describes all or a portion of the operational area to be authorized for flight. Due to airspace dynamics, an operation may be dividied across space or time for seperate and distinct authorizations.
LAANC Deeplinking
Successfully creating an operation will return a URL that may be used to access the operation within the AirHub Portal application. Following is a sample url after the operation has been successfully created:
https://portal.airspacelink.com/plan/operations/{id}/claim
:information_source: Important: Operations will be created in the environment respective to the API with which they were created.
- Operations created via the Sandbox API to the Sandbox Portal environment
- Operations created via the Production API to the Production Portal environment
Callback URL
You may supply an optional callbackUrl
during operation creation. Airspace Link will dispatch a call to the url when changes occur to the status of any authorization associated with the operation. In order to distinguish between different operations, your callbackUrl
may include a unique ID which represents your system's internal identifier. Common patterns may include https://myapp.com/aslCallback/{ID}
or https://myapp.com/aslCallback?id={ID}
. The url may be structured in any way meaningful to your organization.
Sample callback response (only if authorized):
{
authId: string,
authStatus: string,
authStatusDate: string,
startTime: string,
duration: number,
altitude: number,
atc: string
}
JSON POST Body
The POST body is expected to be a GeoJSON Feature. The feature's geometry must be a GeoJSON Polygon or LineString.
A request where geometry
is a valid GeoJSON LineString will result in a buffered Polygon. FAA requires input geometries for an operation be a valid GeoJSON Polygon. Validation checks are applied to the input LineString/resulting Polygon/or input Polygon:
- LineString must have an array of positions (float64) in accordance with the RFC7946 spec
- LineString resulting in a buffered Polygon must not have interior rings (doughnut shape)
- LineString resulting a buffered Polygon must not have an area greater than 10 square miles or a side length greater than 10 nautical miles
- Polygon must be closed; the first coordinates match the last in the array
Request
Authorization bearer accessToken
generated in Authorization step
Always Feature
Operation properties. See child items for more detail.
Name of the operation.
Rule Category
FAA rules are categorized into the following:
Category | Description |
---|---|
faa_107 | FAA Commercial UAS Flight. |
faa_44809 | FAA Recreational UAS Flight. |
ISO 8601 compliant start timestamp of the operation.
Operation timezone. Value should match the Time Zone
column of the table located here.
Duration of the operation from 1 - 720 minutes.
Maximum requested altitude of the operation from 5 - 400' Above Ground Level.
A POST request will be made to this URL when authorization status updates occur. See Callback URL section above for more details.
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-81.38980504483482,
30.29395983352252
],
[
-81.38980504483482,
30.29293179807891
],
[
-81.38530643599411,
30.29293179807891
],
[
-81.38530643599411,
30.29395983352252
],
[
-81.38980504483482,
30.29395983352252
]
]
]
},
"properties": {
"operationName": "Test Operation",
"category": "faa_107",
"timezoneName": "America/New_York",
"duration": 55,
"maxAltitude": 100,
"startTime": "2023-01-05T12:00:00.0000000+00:00"
}
}
Request samples
Responses
{
"statusCode": 200,
"message": "success",
"data": {
"url": "<url>"
}
}