> 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/camera.md).

# Camera

## Get camera information

> Returns camera information.

```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":{"CameraInfo":{"type":"object","description":"Camera information","required":["online_state"],"properties":{"online_state":{"description":"If Online then the camera is powered on and can be used. This also means that the data about camera is up-to-date. If Offline then the camera is powered off or not connected to the system. In this case the data about the last online camera is provided. And this information may be inaccurate due to payload swap.\n","$ref":"#/components/schemas/OnlineState"},"model":{"description":"Camera model. Allows to identify the camera type. Possible values:\n* `SigCam1` - Sigma camera 1. It has one color and one thermal module.\n* `SigCam2` - Sigma camera 2. It has two color and one thermal module. One color video stream has 32x zoom capabilities. Thermal module has resolution of 320x240.\n* `SigCam2+` - Sigma camera 2+. It has two color and one thermal module. Thermal module is upgraded to a resolution of 640x512.\n","type":"string"},"video_streams":{"description":"List of video streams available on the camera.","type":"array","items":{"$ref":"#/components/schemas/VideoStreamStaticInfo"}}}},"OnlineState":{"type":"string","description":"Online state of the payload.\n  * `Online` - payload is on and available to the system.\n  * `Offline` - payload is not available for some reason.\n","enum":["Online","Offline"]},"VideoStreamStaticInfo":{"type":"object","description":"Information about video stream","required":["id","type","sensor_width","sensor_height","lens_focal_length","zoom_min","zoom_max","can_do_snapshot"],"properties":{"id":{"description":"Unique video stream identifier.","type":"string"},"type":{"$ref":"#/components/schemas/VideoStreamType"},"sensor_width":{"description":"Sensor width in mm.","type":"number"},"sensor_height":{"description":"Sensor height in mm.","type":"number"},"lens_focal_length":{"description":"Lens focal length in mm. This value is constant and is not affected by zoom. This value corresponds to the `zoom_min` value.\n","type":"number"},"zoom_min":{"description":"Minimum zoom level.","type":"number"},"zoom_max":{"description":"Maximum zoom level.","type":"number"},"can_do_snapshot":{"description":"If true then the video stream supports snapshot functionality. This means that the video stream can provide a snapshot image.\n","type":"boolean"}}},"VideoStreamType":{"type":"string","description":"Video stream type. Possible values:\n* `Color` - regular color video stream.\n* `Thermal` - thermal video stream.\n"},"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":{"CameraNotFound":{"description":"The operation requires a camera payload, but a different type of payload is currently installed. Please install a compatible camera payload to proceed.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v0/info/camera":{"get":{"tags":["Camera"],"summary":"Get camera information","description":"Returns camera information.","responses":{"200":{"description":"Camera information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CameraInfo"}}}},"404":{"$ref":"#/components/responses/CameraNotFound"}}}}}}
```

## Rotate by angle

> Rotates the camera by a given angle. Optionally sets the tilt (applies only to the gimbal). For Fotokite Sigma, rotation is achieved through a combination of camera gimbal and kite movement.<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":{"RotateCameraByAngle":{"type":"object","description":"Pan Kite and tilt camera by angle command arguments. If a property is missed then the Kite or camera will not be rotated in this direction.\n","properties":{"pan":{"description":"Change camera pan by this angle in degrees. Positive value means that the camera is rotated to the right.\n","type":"number","minimum":-180,"maximum":180},"tilt":{"description":"Change camera tilt by this angle in degrees. Positive value means that the camera is rotated up.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180}}},"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"}}}},"CameraNotFound":{"description":"The operation requires a camera payload, but a different type of payload is currently installed. Please install a compatible camera payload to proceed.\n","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"}}}}}},"paths":{"/v0/commands/camera/rotate_by_angle":{"post":{"tags":["Camera"],"summary":"Rotate by angle","description":"Rotates the camera by a given angle. Optionally sets the tilt (applies only to the gimbal). For Fotokite Sigma, rotation is achieved through a combination of camera gimbal and kite movement.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateCameraByAngle"}}}},"responses":{"202":{"$ref":"#/components/responses/CommandSuccess"},"400":{"$ref":"#/components/responses/WrongInput"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"404":{"$ref":"#/components/responses/CameraNotFound"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```

## Rotate to angle

> Rotates the camera to a given angle. Optionally sets the tilt (applies only to the gimbal). For Fotokite Sigma, rotation is achieved through a combination of camera gimbal and kite movement.<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":{"RotateCameraToAngle":{"type":"object","description":"Pan Kite and tilt camera to angle command arguments. If a property is missed then the Kite or camera will not be rotated in this direction.\n","properties":{"heading":{"description":"Rotate the camera (set its heading) to the heading specified [0..+360) (degrees). 0 - North, 90 - East, 180 - South, 270 - West.\n","type":"number","minimum":0,"maximum":360,"exclusiveMaximum":true},"tilt":{"description":"Tilt to rotate to in degrees. 0 - means that the camera is looking straight forward. -90 - means that the camera is looking straight down. +90 - means that the camera is looking straight up. +180 - means that the camera is looking backward and upside down.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180}}},"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"}}}},"CameraNotFound":{"description":"The operation requires a camera payload, but a different type of payload is currently installed. Please install a compatible camera payload to proceed.\n","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"}}}}}},"paths":{"/v0/commands/camera/rotate_to_angle":{"post":{"tags":["Camera"],"summary":"Rotate to angle","description":"Rotates the camera to a given angle. Optionally sets the tilt (applies only to the gimbal). For Fotokite Sigma, rotation is achieved through a combination of camera gimbal and kite movement.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","$ref":"#/components/schemas/RotateCameraToAngle"}}}},"responses":{"202":{"$ref":"#/components/responses/CommandSuccess"},"400":{"$ref":"#/components/responses/WrongInput"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"404":{"$ref":"#/components/responses/CameraNotFound"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```

## Rotate with speed

> Rotates the camera at a given speed over a duration. To stop rotation immediately, set speed to 0. The Fotokite Sigma is not designed for constant unidirectional rotation, as this may twist and damage the tether cable. We recommend counteracting rotations (e.g., perform 10 rotations in one direction, then 10 in the opposite).<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":{"RotateCameraWithSpeed":{"type":"object","description":"Rotate camera with speed command data","required":["duration"],"properties":{"pan_speed":{"description":"Change the camera pan with the angle speed specified. Positive value - rotate clockwise (degrees/sec). Minimum absolute speed is `camera_pan_speed_min` (degrees/sec). Maximum absolute speed is `camera_pan_speed_max` (degrees/sec). If parameter missed then pan speed is considered to be 0 (no pan).\n","type":"number"},"tilt_speed":{"description":"Change the camera tilt with the angle speed specified. Positive value - rotate up (degrees/sec). Minimum absolute speed is `camera_tilt_speed_min` (degrees/sec). Maximum absolute speed is `camera_tilt_speed_max` (degrees/sec). If parameter missed then tilt speed is considered to be 0 (no tilt).\n","type":"number"},"duration":{"description":"Duration of the command in seconds. The camera will rotate with the speed specified for the time specified.\n","type":"number","minimum":0.1,"maximum":10}}},"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"}}}},"CameraNotFound":{"description":"The operation requires a camera payload, but a different type of payload is currently installed. Please install a compatible camera payload to proceed.\n","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"}}}}}},"paths":{"/v0/commands/camera/rotate_with_speed":{"post":{"tags":["Camera"],"summary":"Rotate with speed","description":"Rotates the camera at a given speed over a duration. To stop rotation immediately, set speed to 0. The Fotokite Sigma is not designed for constant unidirectional rotation, as this may twist and damage the tether cable. We recommend counteracting rotations (e.g., perform 10 rotations in one direction, then 10 in the opposite).\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","$ref":"#/components/schemas/RotateCameraWithSpeed"}}}},"responses":{"202":{"$ref":"#/components/responses/CommandSuccess"},"400":{"$ref":"#/components/responses/WrongInput"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"404":{"$ref":"#/components/responses/CameraNotFound"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```

## Get video stream settings

> Returns video stream information.

```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":{"VideoStreamInfo":{"type":"object","description":"Information about video stream. This information is mostly static but may change based on a user request.","required":["id","protocol","codec","url"],"properties":{"id":{"description":"Unique video stream identifier.","type":"string"},"protocol":{"description":"Video stream protocol. Possible values:\n- `RTP`\n","type":"string"},"frame_width":{"description":"Video frames width. Presented for fixed resolution encoders.","type":"integer"},"frame_height":{"description":"Video frames height. Presented for fixed resolution encoders.","type":"integer"},"codec":{"description":"Video codec. Possible values:\n- `H.264`\n","type":"string"},"url":{"description":"Video stream url.","type":"string"}}}}},"paths":{"/v0/info/videostreams":{"get":{"tags":["Camera"],"summary":"Get video stream settings","description":"Returns video stream information.","responses":{"200":{"description":"Video stream settings","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VideoStreamInfo"}}}}}}}}}}
```

## Get video stream telemetry

> Returns frequently changing video stream information.

```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":{"VideoStreamTelemetry":{"type":"object","description":"Dynamic (frequently changing) information about video stream","required":["id","is_streaming"],"properties":{"id":{"description":"Unique video stream identifier.","type":"string"},"is_streaming":{"description":"If true then the video stream is currently streaming.\n","type":"boolean"},"timestamp":{"description":"Video timestamp of the last video frame. For RTP video streams this is the RTP timestamp.\n","type":"number"},"fov_horizontal":{"description":"Horizontal field of view in degrees.","type":"number"},"fov_vertical":{"description":"Vertical field of view in degrees.","type":"number"},"zoom_level":{"description":"Current zoom level.","type":"number"},"camera_pan":{"description":"Camera pan angle in degrees. 0 - The camera is facing directly forward relative to the Kite. +90 - The camera is facing directly to the right side of the Kite. +180 - The camera is facing directly backward relative to the Kite. -90 - The camera is facing directly to the left side of the Kite.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"camera_tilt":{"description":"Camera tilt angle in degrees. 0 - The camera is level, looking straight ahead relative to the Kite. -90 - The camera is pointing straight down relative to the Kite. +90 - The camera is pointing straight up relative to the Kite.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"camera_roll":{"description":"Camera roll angle in degrees. 0 - The camera is level, with the top facing upward. +90 - The top of the camera is rotated to the right. +180 - The top of the camera is facing downward. -90 - The top of the camera is rotated to the left.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"thermal_color_palette":{"description":"Thermal color palette. This property is present only for thermal video streams. If the video stream is not thermal then this property is absent.\n","allOf":[{"$ref":"#/components/schemas/ThermalColorPalette"}]}}},"ThermalColorPalette":{"type":"string","description":"Thermal color palette. Possible values: - `WhiteHot` - `BlackHot` - `Rainbow` - `RainbowHighContrast` - `Ironbow` - `Lava` - `Arctic` - `Glowbow` - `GradedFire` - `Hottest`\n"}}},"paths":{"/v0/telemetry/videostreams":{"get":{"tags":["Camera"],"summary":"Get video stream telemetry","description":"Returns frequently changing video stream information.","responses":{"200":{"description":"Video streams dynamic information","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VideoStreamTelemetry"}}}}}}}}}}
```

## Get video stream telemetry (single video stream)

> Returns frequently changing video stream information for a single video stream.

```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":{"VideoStreamTelemetry":{"type":"object","description":"Dynamic (frequently changing) information about video stream","required":["id","is_streaming"],"properties":{"id":{"description":"Unique video stream identifier.","type":"string"},"is_streaming":{"description":"If true then the video stream is currently streaming.\n","type":"boolean"},"timestamp":{"description":"Video timestamp of the last video frame. For RTP video streams this is the RTP timestamp.\n","type":"number"},"fov_horizontal":{"description":"Horizontal field of view in degrees.","type":"number"},"fov_vertical":{"description":"Vertical field of view in degrees.","type":"number"},"zoom_level":{"description":"Current zoom level.","type":"number"},"camera_pan":{"description":"Camera pan angle in degrees. 0 - The camera is facing directly forward relative to the Kite. +90 - The camera is facing directly to the right side of the Kite. +180 - The camera is facing directly backward relative to the Kite. -90 - The camera is facing directly to the left side of the Kite.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"camera_tilt":{"description":"Camera tilt angle in degrees. 0 - The camera is level, looking straight ahead relative to the Kite. -90 - The camera is pointing straight down relative to the Kite. +90 - The camera is pointing straight up relative to the Kite.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"camera_roll":{"description":"Camera roll angle in degrees. 0 - The camera is level, with the top facing upward. +90 - The top of the camera is rotated to the right. +180 - The top of the camera is facing downward. -90 - The top of the camera is rotated to the left.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"thermal_color_palette":{"description":"Thermal color palette. This property is present only for thermal video streams. If the video stream is not thermal then this property is absent.\n","allOf":[{"$ref":"#/components/schemas/ThermalColorPalette"}]}}},"ThermalColorPalette":{"type":"string","description":"Thermal color palette. Possible values: - `WhiteHot` - `BlackHot` - `Rainbow` - `RainbowHighContrast` - `Ironbow` - `Lava` - `Arctic` - `Glowbow` - `GradedFire` - `Hottest`\n"},"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":{"VideostreamOrCameraNotFound":{"description":"The operation requires a camera payload, but either a different type of payload is currently installed, or the requested video stream does not exist for the installed camera.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v0/telemetry/videostreams/{stream_id}":{"get":{"tags":["Camera"],"summary":"Get video stream telemetry (single video stream)","description":"Returns frequently changing video stream information for a single video stream.","parameters":[{"in":"path","name":"stream_id","description":"Unique stream identifier.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Video streams dynamic information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoStreamTelemetry"}}}},"404":{"$ref":"#/components/responses/VideostreamOrCameraNotFound"}}}}}}
```

## Set zoom

> Sets the zoom level for a specific video stream.

```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"}}}},"VideostreamOrCameraNotFound":{"description":"The operation requires a camera payload, but either a different type of payload is currently installed, or the requested video stream does not exist for the installed camera.\n","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"}}}},"BadGateway":{"description":"Bad Gateway. The service is not able to communicate with an upstream service it depends on.","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/videostreams/{stream_id}/zoom":{"post":{"tags":["Camera"],"summary":"Set zoom","description":"Sets the zoom level for a specific video stream.","parameters":[{"in":"path","name":"stream_id","description":"Unique stream identifier.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["zoom_level"],"properties":{"zoom_level":{"description":"New zoom level to set. Must be in the range from `zoom_min` to `zoom_max`.","type":"number"}}}}}},"responses":{"202":{"$ref":"#/components/responses/CommandSuccess"},"400":{"$ref":"#/components/responses/WrongInput"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"404":{"$ref":"#/components/responses/VideostreamOrCameraNotFound"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"},"502":{"$ref":"#/components/responses/BadGateway"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}}}
```

## Set thermal color palette

> Sets the thermal color palette for a specific video stream.

```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":{"ThermalColorPalette":{"type":"string","description":"Thermal color palette. Possible values: - `WhiteHot` - `BlackHot` - `Rainbow` - `RainbowHighContrast` - `Ironbow` - `Lava` - `Arctic` - `Glowbow` - `GradedFire` - `Hottest`\n"},"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"}}}},"VideostreamOrCameraNotFound":{"description":"The operation requires a camera payload, but either a different type of payload is currently installed, or the requested video stream does not exist for the installed camera.\n","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"}}}},"BadGateway":{"description":"Bad Gateway. The service is not able to communicate with an upstream service it depends on.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v0/commands/videostreams/{stream_id}/palette":{"post":{"tags":["Camera"],"summary":"Set thermal color palette","description":"Sets the thermal color palette for a specific video stream.","parameters":[{"in":"path","name":"stream_id","description":"Unique stream identifier.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["thermal_color_palette"],"properties":{"thermal_color_palette":{"description":"New thermal color palette to set.","allOf":[{"$ref":"#/components/schemas/ThermalColorPalette"}]}}}}}},"responses":{"202":{"$ref":"#/components/responses/CommandSuccess"},"400":{"$ref":"#/components/responses/WrongInput"},"403":{"$ref":"#/components/responses/ControlCommandBlocked"},"404":{"$ref":"#/components/responses/VideostreamOrCameraNotFound"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"},"502":{"$ref":"#/components/responses/BadGateway"}}}}}}
```

## Get snapshot

> Returns a snapshot from a specific video stream.

```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":{"WrongInput":{"description":"Request parameter doesn't meet criteria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"VideostreamOrCameraNotFound":{"description":"The operation requires a camera payload, but either a different type of payload is currently installed, or the requested video stream does not exist for the installed camera.\n","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"}}}},"BadGateway":{"description":"Bad Gateway. The service is not able to communicate with an upstream service it depends on.","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/videostreams/{stream_id}/snapshot":{"get":{"tags":["Camera"],"summary":"Get snapshot","description":"Returns a snapshot from a specific video stream.","parameters":[{"in":"path","name":"stream_id","description":"Unique stream identifier.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Snapshot image","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/WrongInput"},"404":{"$ref":"#/components/responses/VideostreamOrCameraNotFound"},"409":{"$ref":"#/components/responses/NotAllowedInCurrentState"},"502":{"$ref":"#/components/responses/BadGateway"}}}}}}
```


---

# 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/camera.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.
