> For the complete documentation index, see [llms.txt](https://developer.fotokite.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.fotokite.com/~/changes/46/fotokite-api/flight.md).

# Flight

## Get flight hard limits

> Returns flight hard limits. Hard limits contain properties that either do not change (ex. physical limitations) or change rarely (ex. legal restrictions).<br>

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["info"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"schemas":{"FlightHardLimits":{"type":"object","description":"Flight hard limits","required":["altitude_max","camera_pan_speed_min","camera_pan_speed_max","camera_tilt_speed_min","camera_tilt_speed_max"],"properties":{"altitude_max":{"description":"Maximum altitude of the Fotokite system (meters).\n","type":"number"},"camera_pan_speed_min":{"description":"Minimum absolute pan speed of the camera (degrees/sec)","type":"number"},"camera_pan_speed_max":{"description":"Maximum absolute pan speed of the camera (degrees/sec)","type":"number"},"camera_tilt_speed_min":{"description":"Minimum absolute tilt speed of the camera (degrees/sec)","type":"number"},"camera_tilt_speed_max":{"description":"Maximum absolute tilt speed of the camera (degrees/sec)","type":"number"}}}}},"paths":{"/v0/info/flight/hard_limits":{"get":{"tags":["Flight"],"summary":"Get flight hard limits","description":"Returns flight hard limits. Hard limits contain properties that either do not change (ex. physical limitations) or change rarely (ex. legal restrictions).\n","responses":{"200":{"description":"Success execution","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlightHardLimits"}}}}}}}}}
```

## Get takeoff altitude

> Returns the takeoff altitude. The takeoff altitude is the altitude to which the Kite rises after takeoff. Important: The Kite cannot fly lower than the takeoff altitude.<br>

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["info"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"schemas":{"TakeoffAltitude":{"type":"object","description":"Kite takeoff altitude","properties":{"altitude":{"description":"Kite takeoff altitude (meters). Property is not presented when the value is unknown.","type":"number"}}}}},"paths":{"/v0/info/flight/takeoff_altitude":{"get":{"tags":["Flight"],"summary":"Get takeoff altitude","description":"Returns the takeoff altitude. The takeoff altitude is the altitude to which the Kite rises after takeoff. Important: The Kite cannot fly lower than the takeoff altitude.\n","responses":{"200":{"description":"Request finished successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TakeoffAltitude"}}}}}}}}}
```

## Get flight telemetry

> Returns frequently changing flight information.<br>

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["telemetry"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"schemas":{"FlightDynamicInfo":{"type":"object","description":"Represents frequently changing flight information. A property is not presented if it could not be gathered (for example due to a magnetometer or a GPS issue). Note: there is always a margin of error between the altitude_target and the altitude the Kite will take. And this error is not a constant.\n","required":["flight_state"],"properties":{"flight_state":{"$ref":"#/components/schemas/FlightState"},"altitude":{"description":"Current Kite altitude above the Ground Station (meters)","type":"number","minimum":0},"altitude_target":{"description":"Target Kite altitude set by the user (meters)","type":"number","minimum":0},"kite_heading":{"description":"Kite heading [0..+360) (degrees)","type":"number","minimum":0,"maximum":360,"exclusiveMaximum":true},"is_rotating":{"description":"Whether Kite is rotating (changing heading) as a result of the rotation command. True - Kite is rotating\n","type":"boolean"},"is_changing_altitude":{"description":"Whether Kite is changing altitude as a result of the set altitude command. True - Kite is changing altitude\n","type":"boolean"},"kite_gps_has_fix":{"description":"Whether the data reported by the Kite GPS is useable","type":"boolean"},"kite_gps_lat":{"description":"Latitude reported by Kite GPS [-90..+90] (degrees)","type":"number","minimum":-90,"maximum":90},"kite_gps_lon":{"description":"Longitude reported by Kite GPS (-180..+180] (degrees)","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"kite_gps_elevation":{"description":"Elevation reported by Kite GPS (meters)","type":"number"},"kite_gps_accuracy":{"description":"Kite GPS accuracy in meters","type":"number","minimum":0}}},"FlightState":{"type":"string","description":"Flight state enumeration\n  * `Unknown` - We couldn't get required data to conclude flight sate. This may happen due to numerous reasons:\n    Kite detached, Kite power is off, etc. More information can be found in notifications.\n  * `StandBy` - Kite is on the Ground Station\n  * `TakingOff` - Kite is doing preflight checks or taking off\n  * `Flying` - Kite is flying\n  * `Landing` - Kite is landing\n  * `SafetyLanding` - Kite is landing due to a critical issue happened during the flight.\n    More information can be found in notifications.\n  * `SafetyDescending` - Kite is descending for safety reasons (due to strong wind or weak GPS signal).\n    More information can be found in notifications.\n","enum":["Unknown","StandBy","TakingOff","Flying","Landing","SafetyLanding","SafetyDescending"]}}},"paths":{"/v0/telemetry/flight":{"get":{"tags":["Flight"],"summary":"Get flight telemetry","description":"Returns frequently changing flight information.\n","responses":{"200":{"description":"Success execution","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlightDynamicInfo"}}}}}}}}}
```

## Get flight soft limits

> Returns Kite flight soft limits. Soft limits can either be set in Fotokite Live or via the API.

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["telemetry"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"schemas":{"FlightSoftLimits":{"type":"object","description":"Kite flight soft limits set by an operator.","required":["altitude_max"],"properties":{"altitude_max":{"description":"Maximum altitude the Kite can fly if soft limit has been set in Fotokite Live by the user or the API (meters). This value resets on system reboot.\n","type":"number"}}}}},"paths":{"/v0/telemetry/flight/soft_limits":{"get":{"tags":["Flight"],"summary":"Get flight soft limits","description":"Returns Kite flight soft limits. Soft limits can either be set in Fotokite Live or via the API.","responses":{"200":{"description":"Request finished successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlightSoftLimits"}}}}}}}}}
```

## POST /v0/commands/flight/take\_off

> Take off

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["command"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"responses":{"CommandSuccess":{"description":"The command was sent successfully"},"ControlCommandBlocked":{"description":"Control is not allowed because somebody else is controlling the System.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotAllowedInCurrentState":{"description":"The operation is not allowed in current state. Example: Rotation is not allowed during landing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"A generic error object.","required":["code","message"],"properties":{"code":{"description":"Unique error code.","type":"string"},"message":{"description":"User readable message of the error","type":"string"}}}}},"paths":{"/v0/commands/flight/take_off":{"post":{"tags":["Flight"],"summary":"Take off","responses":{"200":{"$ref":"#/components/responses/CommandSuccess"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"}}}}}}
```

## POST /v0/commands/flight/land

> Land

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["command"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"responses":{"CommandSuccess":{"description":"The command was sent successfully"},"ControlCommandBlocked":{"description":"Control is not allowed because somebody else is controlling the System.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotAllowedInCurrentState":{"description":"The operation is not allowed in current state. Example: Rotation is not allowed during landing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"A generic error object.","required":["code","message"],"properties":{"code":{"description":"Unique error code.","type":"string"},"message":{"description":"User readable message of the error","type":"string"}}}}},"paths":{"/v0/commands/flight/land":{"post":{"tags":["Flight"],"summary":"Land","responses":{"200":{"$ref":"#/components/responses/CommandSuccess"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"}}}}}}
```

## POST /v0/commands/flight/abort

> Abort take off or landing

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["command"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"responses":{"CommandSuccess":{"description":"The command was sent successfully"},"ControlCommandBlocked":{"description":"Control is not allowed because somebody else is controlling the System.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotAllowedInCurrentState":{"description":"The operation is not allowed in current state. Example: Rotation is not allowed during landing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"A generic error object.","required":["code","message"],"properties":{"code":{"description":"Unique error code.","type":"string"},"message":{"description":"User readable message of the error","type":"string"}}}}},"paths":{"/v0/commands/flight/abort":{"post":{"tags":["Flight"],"summary":"Abort take off or landing","responses":{"200":{"$ref":"#/components/responses/CommandSuccess"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"}}}}}}
```

## POST /v0/commands/flight/set\_altitude

> Set target altitude

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["command"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"responses":{"CommandSuccess":{"description":"The command was sent successfully"},"WrongInput":{"description":"Request parameter doesn't meet criteria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ControlCommandBlocked":{"description":"Control is not allowed because somebody else is controlling the System.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotAllowedInCurrentState":{"description":"The operation is not allowed in current state. Example: Rotation is not allowed during landing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ServiceUnavailable":{"description":"The service is not ready yet. Usually this means that service didn't gather all the necessary information from subsystems.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"A generic error object.","required":["code","message"],"properties":{"code":{"description":"Unique error code.","type":"string"},"message":{"description":"User readable message of the error","type":"string"}}}}},"paths":{"/v0/commands/flight/set_altitude":{"post":{"tags":["Flight"],"summary":"Set target altitude","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Set Kite target altitude data","required":["altitude"],"properties":{"altitude":{"description":"Sets target Kite altitude above the Ground Station (meters). Must not be lower than Kite takeoff altitude + 1 meter. But lower than both altitude_hard_limit and altitude_soft_limit. Note: there is always a margin of error between the altitude_target and the altitude the Kite will take. And this error is not a constant.\n","type":"number"}}}}}},"responses":{"200":{"$ref":"#/components/responses/CommandSuccess"},"400":{"$ref":"#/components/responses/WrongInput"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```

## Set flight soft limits

> Sets or updates the Kite flight soft limits. If the Kite is airborne at an altitude above the new soft limit, it will automatically descend to comply with the new limit. Note: this value resets on system reboot.<br>

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"0.2.0"},"servers":[{"url":"http://192.168.2.100:3128/api","description":"API service running on the system"},{"url":"http://{hostname}:3128/api","description":"API service visible through NAT","variables":{"hostname":{"default":"sigma.local"}}}],"security":[{"TokenAuth":["command"]}],"components":{"securitySchemes":{"TokenAuth":{"description":"Plugin authentication using Bearer token. For more details, see [Fotokite API Documentation](https://developer.fotokite.com/~/changes/46/getting-started#authentication).\n","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"http://192.168.2.100:3128/api/v0/authentication/tokens/request","scopes":{"info":"Read static information about the system.","telemetry":"Read dynamic information about the system.","command":"Send commands to the system.","media":"Interaction with the media library.","internal":"Fotokite-internal APIs."}}}}},"schemas":{"FlightSoftLimits":{"type":"object","description":"Kite flight soft limits set by an operator.","required":["altitude_max"],"properties":{"altitude_max":{"description":"Maximum altitude the Kite can fly if soft limit has been set in Fotokite Live by the user or the API (meters). This value resets on system reboot.\n","type":"number"}}},"Error":{"type":"object","description":"A generic error object.","required":["code","message"],"properties":{"code":{"description":"Unique error code.","type":"string"},"message":{"description":"User readable message of the error","type":"string"}}}},"responses":{"CommandSuccess":{"description":"The command was sent successfully"},"WrongInput":{"description":"Request parameter doesn't meet criteria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ControlCommandBlocked":{"description":"Control is not allowed because somebody else is controlling the System.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ServiceUnavailable":{"description":"The service is not ready yet. Usually this means that service didn't gather all the necessary information from subsystems.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v0/commands/flight/set_soft_limits":{"post":{"tags":["Flight"],"summary":"Set flight soft limits","description":"Sets or updates the Kite flight soft limits. If the Kite is airborne at an altitude above the new soft limit, it will automatically descend to comply with the new limit. Note: this value resets on system reboot.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlightSoftLimits"}}}},"responses":{"200":{"$ref":"#/components/responses/CommandSuccess"},"400":{"$ref":"#/components/responses/WrongInput"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developer.fotokite.com/~/changes/46/fotokite-api/flight.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
