> 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/fotokite-api/models.md).

# Models

## The HealthResponse object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"HealthResponse":{"type":"object","description":"Health response","required":["status","api_version"],"properties":{"status":{"description":"Health status","type":"string"},"api_version":{"description":"SemVer version of the Fotokite API.","type":"string"}}}}}}
```

## The Error object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"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"}}}}}}
```

## The OnlineState object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"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"]}}}}
```

## The Scopes object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"Scopes":{"type":"string","description":"Available OAuth2 scopes. > - `read` - Grants access to retrieve system data and information. - `control` - Allows sending commands to control the system. - `can_override` - Allows to make `handoff/control/override` call to override current controlling client. - `experimental` - Enables access to experimental API features. - `internal` - Fotokite-internal functions. Not for third-party use."}}}}
```

## The TokenRequest object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"TokenRequest":{"type":"object","description":"Request to obtain a session token. Compatible with OAuth2 `client_credentials` flow.","required":["client_secret"],"properties":{"grant_type":{"type":"string","description":"OAuth2 flow type, only \"client_credentials\" is supported.\n"},"client_id":{"type":"string","description":"Ignored (For OAuth compatibility)\n"},"client_secret":{"type":"string","description":"Fotokite API key. Contact Fotokite support to get an API key assigned and activated for your systems.\n"},"scope":{"type":"string","description":"Which scopes to request access for. This must be a subset of the scopes enabled for the plugin. If more scopes are requested, the request will fail. Space separated list.\n","allOf":[{"$ref":"#/components/schemas/Scopes"}]},"token_name":{"type":"string","description":"Name of the token for display to the operator if there can be multiple sessions per plugin.\n"}}},"Scopes":{"type":"string","description":"Available OAuth2 scopes. > - `read` - Grants access to retrieve system data and information. - `control` - Allows sending commands to control the system. - `can_override` - Allows to make `handoff/control/override` call to override current controlling client. - `experimental` - Enables access to experimental API features. - `internal` - Fotokite-internal functions. Not for third-party use."}}}}
```

## The Session object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"Session":{"type":"object","description":"OAuth2 compatible access token response.","required":["id","plugin_id","scopes","access_token","created_at"],"properties":{"id":{"type":"string","description":"Unique ID of the session, used to identify the session in the system.\n"},"plugin_id":{"type":"string","description":"Unique ID of the plugin (API) key used to create this session.\n"},"plugin_name":{"type":"string","description":"Name of the plugin (API) key used to create this session.\n"},"scopes":{"type":"array","items":{"type":"string"},"description":"Scopes granted to this session token.\n"},"name":{"type":"string","description":"Name of the session for display to the operator.\n"},"valid_until":{"type":"string","format":"date-time","description":"Timestamp when this token expires and will no longer be valid.\n"},"created_at":{"type":"string","format":"date-time","description":"Timestamp when this token was created.\n"},"access_token":{"type":"string","description":"Token to use for future requests.\n"}}}}}}
```

## The PluginUpdatableFields object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"PluginUpdatableFields":{"type":"object","description":"Updatable fields of a plugin.","properties":{"plugin_id":{"description":"Unique ID","type":"string"},"state":{"description":"Current operating state of the plugin. * `Disabled` - Operator has not enabled this plugin yet. * `Enabled` - Operator has enabled the plugin, but there is no active session * `Active` - There is at least one session using the plugin key. * `Connected` - The plugin has reported that it is operational on any session. * `Error` - The plugin has reported an error on any session. The first three states are determined automatically by the API service. The `Connected` and `Error` must be set explicitly by the plugin code. Plugins that are not activated for the Fotokite system in Fleet Manager will not be displayed.\n","type":"string"}}}}}}
```

## The ApiKey object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"ApiKey":{"type":"object","description":"Hashed Fotokite API key used by this plugin","required":["key"],"properties":{"key":{"type":"string","description":"Hashed key\n"},"valid_from":{"type":"string"}}}}}}
```

## The StateUpdate object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"StateUpdate":{"type":"object","description":"Status update from a plugin or other customer integration.","properties":{"state":{"type":"string","description":"Current operating state of the plugin. * `Active` - The plugin has not yet connected to any back-end serivces. * `Connected` - The plugin has is connected to any external services and is fully operational. * `Error` - The plugin has encountered an error.\n"},"error":{"type":"string","description":"Free-form error message for logging or display to an operator.\n"}}}}}}
```

## The NotificationDictionaryItem object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"NotificationDictionaryItem":{"type":"object","description":"Notification dictionary item object","required":["code","severity","message"],"properties":{"code":{"description":"Notification code","type":"integer"},"severity":{"$ref":"#/components/schemas/NotificationSeverity","description":"Notification severity"},"message":{"description":"Description message","type":"string"},"system_reaction":{"description":"System reaction message\n","type":"string"},"instructions":{"description":"User instructions message\n","type":"string"}}},"NotificationSeverity":{"type":"string","description":"Notification severity enumeration. * `Info` - Something happened that is not an issue, but may be of interest * `Warning` - Something bad happened, but functionality is not affected * `Critical` - Something bad happened, some functionality is broken * `Fatal` - Something bad happened, system is not functional\n","enum":["Info","Warning","Critical","Fatal"]}}}}
```

## The NotificationsObject object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"NotificationsObject":{"type":"object","description":"Notifications object","required":["notifications"],"properties":{"from_time":{"description":"The time from which notifications are sent (including the time point itself). In RFC3339 (section 5.6) format. This value typically comes from request query parameter. If request parameter is missed then only currently active notifications returned and `from_time` is missed. If too many notifications were requested then the value is set to the `end_time` of the first returned notification.\n","type":"string","format":"date-time"},"to_time":{"description":"Current system time up to which notifications were fetched (excluding the time point itself). In RFC3339 (section 5.6) format.","type":"string","format":"date-time"},"notifications":{"description":"Notifications array. If no notifications are registered in the time interval from `from_time` to `to_time` then the array is empty.","type":"array","items":{"$ref":"#/components/schemas/Notification"}}}},"Notification":{"type":"object","description":"One notification item","required":["severity","code","message","begin_time"],"properties":{"severity":{"$ref":"#/components/schemas/NotificationSeverity","description":"Notification severity"},"code":{"description":"Notification code. See the dictionary for all possible codes.","type":"integer"},"message":{"description":"Notification message. This is a human-readable message of the notification. It may contain parameters that are used in the notification texts.","type":"string"},"begin_time":{"description":"Notification begin time. This is the time point when the notification was initially detected. In RFC3339 (section 5.6) format.","type":"string","format":"date-time"},"end_time":{"description":"Notification end time. This is the time point when the notification was gone. In RFC3339 (section 5.6) format. If notification is still not gone then the property is absent.","type":"string","format":"date-time"},"parameters":{"description":"Notification parameters. This is a dictionary of key-value pairs that are used in the notification texts. The keys are defined in the notification code dictionary.\n","type":"object","additionalProperties":true}}},"NotificationSeverity":{"type":"string","description":"Notification severity enumeration. * `Info` - Something happened that is not an issue, but may be of interest * `Warning` - Something bad happened, but functionality is not affected * `Critical` - Something bad happened, some functionality is broken * `Fatal` - Something bad happened, system is not functional\n","enum":["Info","Warning","Critical","Fatal"]}}}}
```

## The Notification object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"Notification":{"type":"object","description":"One notification item","required":["severity","code","message","begin_time"],"properties":{"severity":{"$ref":"#/components/schemas/NotificationSeverity","description":"Notification severity"},"code":{"description":"Notification code. See the dictionary for all possible codes.","type":"integer"},"message":{"description":"Notification message. This is a human-readable message of the notification. It may contain parameters that are used in the notification texts.","type":"string"},"begin_time":{"description":"Notification begin time. This is the time point when the notification was initially detected. In RFC3339 (section 5.6) format.","type":"string","format":"date-time"},"end_time":{"description":"Notification end time. This is the time point when the notification was gone. In RFC3339 (section 5.6) format. If notification is still not gone then the property is absent.","type":"string","format":"date-time"},"parameters":{"description":"Notification parameters. This is a dictionary of key-value pairs that are used in the notification texts. The keys are defined in the notification code dictionary.\n","type":"object","additionalProperties":true}}},"NotificationSeverity":{"type":"string","description":"Notification severity enumeration. * `Info` - Something happened that is not an issue, but may be of interest * `Warning` - Something bad happened, but functionality is not affected * `Critical` - Something bad happened, some functionality is broken * `Fatal` - Something bad happened, system is not functional\n","enum":["Info","Warning","Critical","Fatal"]}}}}
```

## The NotificationSeverity object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"NotificationSeverity":{"type":"string","description":"Notification severity enumeration. * `Info` - Something happened that is not an issue, but may be of interest * `Warning` - Something bad happened, but functionality is not affected * `Critical` - Something bad happened, some functionality is broken * `Fatal` - Something bad happened, system is not functional\n","enum":["Info","Warning","Critical","Fatal"]}}}}
```

## The HandoffState object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"HandoffState":{"type":"object","description":"Information about connected and controlling entities.","required":["controlling_client","requesting_clients"],"properties":{"controlling_client":{"$ref":"#/components/schemas/ControllingClient","description":"Information about the entity currently controlling the system. If no entity is controlling the system, this field will be null.\n"},"requesting_clients":{"type":"array","items":{"$ref":"#/components/schemas/RequestingClient"}}}},"ControllingClient":{"nullable":true,"type":"object","description":"Information about controlling entity.","required":["session_id","operator_name"],"properties":{"plugin_id":{"type":"string","description":"Unique ID assigned by Fotokite assigned to this plugin.\n"},"plugin_name":{"type":"string","description":"Human readable name of the plugin. Has value of `Fotokite Live` for Fotokite Live application.\n"},"session_id":{"type":"string","description":"Unique ID of the session controlling control.\n"},"session_name":{"type":"string","description":"Name of the session for display to the operator if there can be multiple sessions per plugin.\n"},"operator_name":{"type":"string","description":"Operator name provided to `take_command` or `request_command` endpoint.\n"},"last_change":{"type":"string","format":"date-time","description":"Time when control was taken.\n"}}},"RequestingClient":{"type":"object","description":"Information about requested control client.","required":["session_id","operator_name"],"properties":{"plugin_id":{"type":"string","description":"Unique ID assigned by Fotokite assigned to this plugin.\n"},"plugin_name":{"type":"string","description":"Human readable name of the plugin. Has value of `Fotokite Live` for Fotokite Live application.\n"},"session_id":{"type":"string","description":"Unique ID of the session requested control.\n"},"session_name":{"type":"string","description":"Name of the session for display to the operator if there can be multiple sessions per plugin.\n"},"operator_name":{"type":"string","description":"Operator name provided to `take_command` or `request_command` endpoint.\n"},"last_change":{"type":"string","format":"date-time","description":"Time when the entity was added to the waiting queue.\n"}}}}}}
```

## The ControllingClient object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"ControllingClient":{"nullable":true,"type":"object","description":"Information about controlling entity.","required":["session_id","operator_name"],"properties":{"plugin_id":{"type":"string","description":"Unique ID assigned by Fotokite assigned to this plugin.\n"},"plugin_name":{"type":"string","description":"Human readable name of the plugin. Has value of `Fotokite Live` for Fotokite Live application.\n"},"session_id":{"type":"string","description":"Unique ID of the session controlling control.\n"},"session_name":{"type":"string","description":"Name of the session for display to the operator if there can be multiple sessions per plugin.\n"},"operator_name":{"type":"string","description":"Operator name provided to `take_command` or `request_command` endpoint.\n"},"last_change":{"type":"string","format":"date-time","description":"Time when control was taken.\n"}}}}}}
```

## The RequestingClient object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"RequestingClient":{"type":"object","description":"Information about requested control client.","required":["session_id","operator_name"],"properties":{"plugin_id":{"type":"string","description":"Unique ID assigned by Fotokite assigned to this plugin.\n"},"plugin_name":{"type":"string","description":"Human readable name of the plugin. Has value of `Fotokite Live` for Fotokite Live application.\n"},"session_id":{"type":"string","description":"Unique ID of the session requested control.\n"},"session_name":{"type":"string","description":"Name of the session for display to the operator if there can be multiple sessions per plugin.\n"},"operator_name":{"type":"string","description":"Operator name provided to `take_command` or `request_command` endpoint.\n"},"last_change":{"type":"string","format":"date-time","description":"Time when the entity was added to the waiting queue.\n"}}}}}}
```

## The RequestHandoffControl object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"RequestHandoffControl":{"type":"object","description":"Request to take control","required":["operator_name"],"properties":{"operator_name":{"type":"string","description":"Name of the operator taking control for display in UI.\n"},"regulatory_mode":{"$ref":"#/components/schemas/OperatorRegulatoryMode"},"operator_gps_lat":{"description":"Latitude of the operator reported by GPS [-90..+90] (degrees)","type":"number","minimum":-90,"exclusiveMinimum":true,"maximum":90},"operator_gps_lon":{"description":"Longitude of the operator reported by GPS (-180..+180] (degrees)","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"operator_gps_elevation":{"description":"Elevation of the operator reported by GPS (meters)","type":"number"},"operator_gps_accuracy":{"description":"Operator GPS accuracy in meters","type":"number","minimum":0}}},"OperatorRegulatoryMode":{"type":"string","description":"DroneID regulation variant that the UI provided to the operator complies with.\n\nDroneID broadcasts such as those required for FAA RemoteID contain information about the UAS operator. This endpoint can be used to provide such information. An update must be provided regularly according to the applicable regulation to prevent entering a DroneID error state (this may require sending handoff requests more frequently than it is required normally).\n\nBy setting this value, you declare compliance with the relevant regulation.\n\nFor the US:\n*  An operator location of sufficient accuracy is required. A GPS receiver with SBAS augmentation is sufficient.\n* Any DroneID error reported by the `/system/state` endpoint must cause an audiovisual indicator to signal a Remote ID failure to the operator.\n\nPlease refer to FAA 14 CFR Part 89, ASTM F3411 and ASTM F3586 for details.\n\n**Possible values:**\n\n* `US_REMOTE_ID_STANDARD`\n* `unset`\n\nIf unset, this operator is not considered as a UAS operator, and a RemoteID error might occur if regulation requires an operator but no other operator is present.\n\nIf no location information is provided, it is assumed that the operator is in direct vincinity of the Ground Station and the Ground Station location is used as the operator location.\n"}}}}
```

## The OperatorRegulatoryMode object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"OperatorRegulatoryMode":{"type":"string","description":"DroneID regulation variant that the UI provided to the operator complies with.\n\nDroneID broadcasts such as those required for FAA RemoteID contain information about the UAS operator. This endpoint can be used to provide such information. An update must be provided regularly according to the applicable regulation to prevent entering a DroneID error state (this may require sending handoff requests more frequently than it is required normally).\n\nBy setting this value, you declare compliance with the relevant regulation.\n\nFor the US:\n*  An operator location of sufficient accuracy is required. A GPS receiver with SBAS augmentation is sufficient.\n* Any DroneID error reported by the `/system/state` endpoint must cause an audiovisual indicator to signal a Remote ID failure to the operator.\n\nPlease refer to FAA 14 CFR Part 89, ASTM F3411 and ASTM F3586 for details.\n\n**Possible values:**\n\n* `US_REMOTE_ID_STANDARD`\n* `unset`\n\nIf unset, this operator is not considered as a UAS operator, and a RemoteID error might occur if regulation requires an operator but no other operator is present.\n\nIf no location information is provided, it is assumed that the operator is in direct vincinity of the Ground Station and the Ground Station location is used as the operator location.\n"}}}}
```

## The SystemInfo object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"SystemInfo":{"type":"object","description":"Represents system information","required":["gs_name","gs_mac","installation","model","timezone","timezone_name_short","timezone_offset","boards","software_channel","software_version"],"properties":{"gs_name":{"description":"Identity of the Ground Station","type":"string"},"gs_mac":{"description":"The MAC address of the router WAN port","type":"string"},"kite_name":{"description":"Name of the Kite","type":"string"},"rtb_name":{"description":"Name of the Rooftop Box (RTB)","type":"string"},"installation":{"description":"Type of installation (RTB, Transport Case, Tray Mount, DevKit)","type":"string"},"model":{"description":"Model/generation of the Fotokite system","type":"string"},"propeller_model":{"description":"Model of the propellers used in the system. Possible values: * `Propeller 1st Generation` * `Propeller 2nd Generation`\n","type":"string"},"timezone":{"description":"Timezone of the Fotokite system","type":"string"},"timezone_name_short":{"description":"Short name of the timezone","type":"string"},"timezone_offset":{"description":"Offset of the timezone","type":"string"},"boards":{"type":"array","description":"List of system boards","items":{"$ref":"#/components/schemas/SystemBoard"}},"software_channel":{"type":"string","description":"System software channel"},"software_version":{"type":"string","description":"System software release version number"},"drone_id":{"$ref":"#/components/schemas/DroneIdInfo"}}},"SystemBoard":{"type":"object","description":"Represents a system board","required":["board","id"],"properties":{"board":{"type":"string","description":"Available system board names"},"id":{"description":"Unique identifier of a system board (e.g. \"001111211136511134311FFF\")\n","type":"string"}}},"DroneIdInfo":{"type":"object","description":"Static, system-level DroneID information.\n","required":["regulatory_mode","serial"],"properties":{"regulatory_mode":{"$ref":"#/components/schemas/RegulatoryMode"},"serial":{"type":"string","description":"ANSI/CTA-2063-A compliant serial number used for DroneID purposes"}}},"RegulatoryMode":{"type":"string","description":"DroneID regulation variant that the system needs to comply with.\nThe possible values are:\n* `US_REMOTE_ID_STANDARD` * `UNKNOWN`\n"}}}}
```

## The SystemBoard object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"SystemBoard":{"type":"object","description":"Represents a system board","required":["board","id"],"properties":{"board":{"type":"string","description":"Available system board names"},"id":{"description":"Unique identifier of a system board (e.g. \"001111211136511134311FFF\")\n","type":"string"}}}}}}
```

## The SystemState object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"SystemState":{"type":"object","description":"Represents frequently changing system information\n","properties":{"kite_battery_level":{"description":"Kite backup battery charge level in percents [0..+100]","type":"number","minimum":0,"maximum":100},"gs_battery_level":{"description":"Ground Station backup battery charge level in percents [0..+100]","type":"number","minimum":0,"maximum":100},"gs_input_voltage":{"description":"Ground Station input voltage (volts)","type":"number"},"rtb_lids_state":{"$ref":"#/components/schemas/RTBLidsState"},"gs_gps_has_fix":{"description":"Whether the data reported by the Ground Station GPS is useable","type":"boolean"},"gs_gps_lat":{"description":"Latitude reported by Ground Station GPS [-90..+90] (degrees)","type":"number","minimum":-90,"exclusiveMinimum":true,"maximum":90},"gs_gps_lon":{"description":"Longitude reported by Ground Station GPS (-180..+180] (degrees)","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"gs_gps_elevation":{"description":"Elevation reported by Ground Station GPS (meters)","type":"number"},"gs_gps_accuracy":{"description":"Ground Station GPS accuracy in meters","type":"number","minimum":0},"drone_id":{"$ref":"#/components/schemas/DroneIdStatus"}}},"RTBLidsState":{"type":"string","description":"Rooftop Box (RTB) lids state\n","enum":["Closed","Opening","Opened","Closing"]},"DroneIdStatus":{"type":"object","description":"The current status of the system","required":["status","error_codes"],"properties":{"status":{"$ref":"#/components/schemas/DroneIdCheckStatus"},"error_codes":{"type":"array","items":{"$ref":"#/components/schemas/CurrentDroneIDErrorCode"},"description":"List of error codes that are currently applicable."}}},"DroneIdCheckStatus":{"type":"string","description":"Status of the DroneID check.\n* `CHECKING` - The check is currently running. * `OK` - The check completed successfully. * `FAILED` - The check failed. * `EMERGENCY` - The system is in an emergency state.\n"},"CurrentDroneIDErrorCode":{"description":"Code that describes what is wrong with DroneID. Values prefixed with `ERROR_` are hard errors that prevent the preflight check and cause DroneID to be non-compliant, while values prefixed with `WARNING_` indicate potential issues (data stale, no gps fix).\nThe non-compliant state should be indicated in the monitoring application.\nThe possible values are:\n* `ERROR_UNKNOWN_REGULATORY_MODE` - Unknown regulatory mode (needs\n  config change or sw update to fix).\n* `ERROR_HARDWARE_VARIANT_UNSUITABLE` - Hardware variant and regulatory\n  mode configured are incompatible (needs hardware changes to\n  fix).\n* `ERROR_TX_FAILED` - Tx reports failure, maybe HW/SW defect (restart\n  might fix it).\n* `ERROR_TX_WRONG_WIFI_REGION` - Transmission is happening, but with the\n  wrong region settings (fix by changing wifi region).\n* `ERROR_TX_WRONG_TRANSMISSION_POWER` - Transmission is happening, but\n  with higher or lower power than allowed (fix by changing wifi\n  settings/region).\n* `ERROR_TX_NOT_TRANSMITTING` - Tx(s) that should be transmitting, are\n  not (probably hardware malfunction if this persists).\n* `ERROR_TX_TRANSMITTING` - At least one Tx is transmitting even though\n  it should not be (bug in tx software, try restarting).\n* `ERROR_TX_STALE` - Tx is transmitting old data (might be\n  intermittent).\n* `ERROR_FW_INCOMPATIBLE` - The installed firmware doesn't support the\n  DroneID preflight check.\n* `ERROR_NO_OPERATOR` - No operator connected that is compatible with\n  DroneID.\n* `ERROR_DATA_STALE` - We recently didn't receive required data (from\n  the kite, or, in the future, tablet). In this case we pretend that the\n  data is recent but put this alert here.\n* `WARNING_DATA_INACCURATE` - No GPS fix, this is not a failure\n  condition.\n","type":"string"}}}}
```

## The RTBLidsState object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"RTBLidsState":{"type":"string","description":"Rooftop Box (RTB) lids state\n","enum":["Closed","Opening","Opened","Closing"]}}}}
```

## The DroneIdInfo object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"DroneIdInfo":{"type":"object","description":"Static, system-level DroneID information.\n","required":["regulatory_mode","serial"],"properties":{"regulatory_mode":{"$ref":"#/components/schemas/RegulatoryMode"},"serial":{"type":"string","description":"ANSI/CTA-2063-A compliant serial number used for DroneID purposes"}}},"RegulatoryMode":{"type":"string","description":"DroneID regulation variant that the system needs to comply with.\nThe possible values are:\n* `US_REMOTE_ID_STANDARD` * `UNKNOWN`\n"}}}}
```

## The DroneIdStatus object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"DroneIdStatus":{"type":"object","description":"The current status of the system","required":["status","error_codes"],"properties":{"status":{"$ref":"#/components/schemas/DroneIdCheckStatus"},"error_codes":{"type":"array","items":{"$ref":"#/components/schemas/CurrentDroneIDErrorCode"},"description":"List of error codes that are currently applicable."}}},"DroneIdCheckStatus":{"type":"string","description":"Status of the DroneID check.\n* `CHECKING` - The check is currently running. * `OK` - The check completed successfully. * `FAILED` - The check failed. * `EMERGENCY` - The system is in an emergency state.\n"},"CurrentDroneIDErrorCode":{"description":"Code that describes what is wrong with DroneID. Values prefixed with `ERROR_` are hard errors that prevent the preflight check and cause DroneID to be non-compliant, while values prefixed with `WARNING_` indicate potential issues (data stale, no gps fix).\nThe non-compliant state should be indicated in the monitoring application.\nThe possible values are:\n* `ERROR_UNKNOWN_REGULATORY_MODE` - Unknown regulatory mode (needs\n  config change or sw update to fix).\n* `ERROR_HARDWARE_VARIANT_UNSUITABLE` - Hardware variant and regulatory\n  mode configured are incompatible (needs hardware changes to\n  fix).\n* `ERROR_TX_FAILED` - Tx reports failure, maybe HW/SW defect (restart\n  might fix it).\n* `ERROR_TX_WRONG_WIFI_REGION` - Transmission is happening, but with the\n  wrong region settings (fix by changing wifi region).\n* `ERROR_TX_WRONG_TRANSMISSION_POWER` - Transmission is happening, but\n  with higher or lower power than allowed (fix by changing wifi\n  settings/region).\n* `ERROR_TX_NOT_TRANSMITTING` - Tx(s) that should be transmitting, are\n  not (probably hardware malfunction if this persists).\n* `ERROR_TX_TRANSMITTING` - At least one Tx is transmitting even though\n  it should not be (bug in tx software, try restarting).\n* `ERROR_TX_STALE` - Tx is transmitting old data (might be\n  intermittent).\n* `ERROR_FW_INCOMPATIBLE` - The installed firmware doesn't support the\n  DroneID preflight check.\n* `ERROR_NO_OPERATOR` - No operator connected that is compatible with\n  DroneID.\n* `ERROR_DATA_STALE` - We recently didn't receive required data (from\n  the kite, or, in the future, tablet). In this case we pretend that the\n  data is recent but put this alert here.\n* `WARNING_DATA_INACCURATE` - No GPS fix, this is not a failure\n  condition.\n","type":"string"}}}}
```

## The RegulatoryMode object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"RegulatoryMode":{"type":"string","description":"DroneID regulation variant that the system needs to comply with.\nThe possible values are:\n* `US_REMOTE_ID_STANDARD` * `UNKNOWN`\n"}}}}
```

## The CurrentDroneIDErrorCode object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"CurrentDroneIDErrorCode":{"description":"Code that describes what is wrong with DroneID. Values prefixed with `ERROR_` are hard errors that prevent the preflight check and cause DroneID to be non-compliant, while values prefixed with `WARNING_` indicate potential issues (data stale, no gps fix).\nThe non-compliant state should be indicated in the monitoring application.\nThe possible values are:\n* `ERROR_UNKNOWN_REGULATORY_MODE` - Unknown regulatory mode (needs\n  config change or sw update to fix).\n* `ERROR_HARDWARE_VARIANT_UNSUITABLE` - Hardware variant and regulatory\n  mode configured are incompatible (needs hardware changes to\n  fix).\n* `ERROR_TX_FAILED` - Tx reports failure, maybe HW/SW defect (restart\n  might fix it).\n* `ERROR_TX_WRONG_WIFI_REGION` - Transmission is happening, but with the\n  wrong region settings (fix by changing wifi region).\n* `ERROR_TX_WRONG_TRANSMISSION_POWER` - Transmission is happening, but\n  with higher or lower power than allowed (fix by changing wifi\n  settings/region).\n* `ERROR_TX_NOT_TRANSMITTING` - Tx(s) that should be transmitting, are\n  not (probably hardware malfunction if this persists).\n* `ERROR_TX_TRANSMITTING` - At least one Tx is transmitting even though\n  it should not be (bug in tx software, try restarting).\n* `ERROR_TX_STALE` - Tx is transmitting old data (might be\n  intermittent).\n* `ERROR_FW_INCOMPATIBLE` - The installed firmware doesn't support the\n  DroneID preflight check.\n* `ERROR_NO_OPERATOR` - No operator connected that is compatible with\n  DroneID.\n* `ERROR_DATA_STALE` - We recently didn't receive required data (from\n  the kite, or, in the future, tablet). In this case we pretend that the\n  data is recent but put this alert here.\n* `WARNING_DATA_INACCURATE` - No GPS fix, this is not a failure\n  condition.\n","type":"string"}}}}
```

## The DroneIdCheckStatus object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"DroneIdCheckStatus":{"type":"string","description":"Status of the DroneID check.\n* `CHECKING` - The check is currently running. * `OK` - The check completed successfully. * `FAILED` - The check failed. * `EMERGENCY` - The system is in an emergency state.\n"}}}}
```

## The FlightInfo object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"FlightInfo":{"type":"object","description":"Flight information","required":["altitude_hard_max","altitude_soft_max"],"properties":{"altitude_takeoff":{"description":"Kite takeoff altitude (meters). The takeoff altitude is the altitude to which the Kite rises after takeoff. Important: The Kite cannot fly lower than the takeoff altitude.\n","type":"number"},"altitude_hard_max":{"description":"Maximum altitude (hard limit) of the Fotokite system (meters). Hard limit dictated by system capabilities or legal restrictions. The Kite cannot fly higher than this altitude.\n","type":"number"},"altitude_soft_max":{"description":"Maximum altitude (soft limit) of the Fotokite system (meters). This value can be set by an operator or API client to limit the maximum altitude of the Kite (ex. for safety reasons). This value resets on system reboot. The Kite cannot fly higher than this altitude.\n","type":"number"}}}}}}
```

## The FlightState object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"FlightState":{"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/FlightStateEnum"},"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) (ex. as a result of the rotation command). True - Kite is rotating\n","type":"boolean"},"is_changing_altitude":{"description":"Whether Kite is changing altitude (ex. 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}}},"FlightStateEnum":{"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"]}}}}
```

## The FlightStateEnum object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"FlightStateEnum":{"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"]}}}}
```

## The ControlAltitudeRequest object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"ControlAltitudeRequest":{"type":"object","description":"Control altitude request 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"}}}}}}
```

## The ControlSoftAltitudeMaxRequest object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"ControlSoftAltitudeMaxRequest":{"type":"object","description":"Control altitude soft limit request data","required":["altitude"],"properties":{"altitude":{"description":"Maximum altitude (soft limit)\n","type":"number"}}}}}}
```

## The CameraInfo object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"CameraInfo":{"type":"object","description":"Camera information","properties":{"model":{"description":"Camera model. Allows to identify the camera type. Possible values:\n* `Camera 1st Generation`. It has one color and one thermal module.\n* `Camera 2nd Generation`. It has two color and one thermal module. One color video stream has 32x zoom capabilities. Thermal module has resolution of 320x240.\n* `Camera 2nd Generation IR Plus`. It has two color and one thermal module. Thermal module is upgraded to a resolution of 640x512.\n","type":"string"},"pan_speed_min":{"description":"Minimum absolute pan speed of the camera (degrees/sec)","type":"number"},"pan_speed_max":{"description":"Maximum absolute pan speed of the camera (degrees/sec)","type":"number"},"tilt_speed_min":{"description":"Minimum absolute tilt speed of the camera (degrees/sec)","type":"number"},"tilt_speed_max":{"description":"Maximum absolute tilt speed of the camera (degrees/sec)","type":"number"},"tilt_min":{"description":"Minimum tilt angle of the camera relative to the kite (degrees)","type":"number","minimum":-90,"maximum":0},"tilt_max":{"description":"Maximum tilt angle of the camera relative to the kite (degrees)","type":"number","minimum":0,"maximum":90},"roll_min":{"description":"Minimum roll angle of the camera relative to the kite (degrees)","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":0},"roll_max":{"description":"Maximum roll angle of the camera relative to the kite (degrees)","type":"number","minimum":0,"maximum":180}}}}}}
```

## The CameraState object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"CameraState":{"type":"object","description":"Camera state","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"},"pan_ned":{"description":"Camera pan angle in degrees in NED coordinates. 0 - The camera is looking North. +90 - The camera is looking East. +180 - The camera is looking South. -90 - The camera is looking West.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"tilt_ned":{"description":"Camera tilt angle in degrees in NED coordinates. 0 - The camera is level, looking straight ahead. -90 - The camera is looking straight up. +90 - The camera is looking straight down towards gravity vector.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"roll_ned":{"description":"Camera roll angle in degrees in NED coordinates. 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 (the same direction as gravity vector). -90 - The top of the camera is rotated to the left.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180}}},"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"]}}}}
```

## The RotateCameraByAngle object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"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 down.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180}}}}}}
```

## The RotateCameraToAngle object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"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":{"pan_ned":{"description":"Rotate the camera to the pan specified (in NED coordinates) [0..+360) (degrees). 0 - North, 90 - East, 180 - South, 270 - West.\n","type":"number","minimum":0,"maximum":360,"exclusiveMaximum":true},"tilt_ned":{"description":"Tilt (in NED coordinates) to rotate to in degrees. 0 - means that the camera is looking straight forward. -90 - means that the camera is looking straight up. +90 - means that the camera is looking straight down. +180 - means that the camera is looking backward and upside down.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180}}}}}}
```

## The RotateCameraWithSpeed object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"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). Negative value - rotate counter-clockwise (degrees/sec). 0 - stop any previously commanded pan movement. If parameter missed then pan speed is considered to be 0 (no pan). Minimum absolute speed is `camera_pan_speed_min` (degrees/sec). Maximum absolute speed is `camera_pan_speed_max` (degrees/sec).\n","type":"number"},"tilt_speed":{"description":"Change the camera tilt with the angle speed specified. Positive value - rotate down (degrees/sec). Negative value - rotate up (degrees/sec). 0 - stop any previously commanded tilt movement. If parameter missed then tilt speed is considered to be 0 (no tilt). Minimum absolute speed is `camera_tilt_speed_min` (degrees/sec). Maximum absolute speed is `camera_tilt_speed_max` (degrees/sec).\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}}}}}}
```

## The VideoStreamInfo object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"VideoStreamInfo":{"type":"object","description":"Information about video stream. This information is mostly static but may change based on a user request.","required":["stream_id","type","codec","sensor_width","sensor_height","lens_focal_length","zoom_min","zoom_max","can_do_snapshot"],"properties":{"stream_id":{"description":"Unique video stream identifier.","type":"string"},"type":{"$ref":"#/components/schemas/VideoStreamType"},"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"},"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"},"codec":{"description":"Video codec. Possible values: - `H.264`\n","type":"string"},"rtsp_url":{"description":"RTSP video stream url.","type":"string"},"rtsps_url":{"description":"RTSPS encoded video stream url.","type":"string"},"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: * `Color` - regular color video stream. * `Thermal` - thermal video stream.\n"}}}}
```

## The VideoStreamType object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"VideoStreamType":{"type":"string","description":"Video stream type. Possible values: * `Color` - regular color video stream. * `Thermal` - thermal video stream.\n"}}}}
```

## The VideoStreamState object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"VideoStreamState":{"type":"object","description":"Frequently changing information about video stream","required":["stream_id","is_streaming"],"properties":{"stream_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"},"pan_ned":{"description":"Camera pan angle in degrees in NED coordinates. 0 - The camera is looking North. +90 - The camera is looking East. +180 - The camera is looking South. -90 - The camera is looking West.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"tilt_ned":{"description":"Camera tilt angle in degrees in NED coordinates. 0 - The camera is level, looking straight ahead. -90 - The camera is looking straight up. +90 - The camera is looking straight down towards gravity vector.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"roll_ned":{"description":"Camera roll angle in degrees in NED coordinates. 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 (the same direction as gravity vector). -90 - The top of the camera is rotated to the left.\n","type":"number","minimum":-180,"exclusiveMinimum":true,"maximum":180},"zoom_level":{"description":"Current zoom level.","type":"number"},"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","$ref":"#/components/schemas/ThermalColorPalette"}}},"ThermalColorPalette":{"type":"string","description":"Thermal color palette. Possible values: - `WhiteHot` - `BlackHot` - `Rainbow` - `RainbowHighContrast` - `Ironbow` - `Lava` - `Arctic` - `Glowbow` - `GradedFire` - `Hottest`\n"}}}}
```

## The ThermalColorPalette object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"ThermalColorPalette":{"type":"string","description":"Thermal color palette. Possible values: - `WhiteHot` - `BlackHot` - `Rainbow` - `RainbowHighContrast` - `Ironbow` - `Lava` - `Arctic` - `Glowbow` - `GradedFire` - `Hottest`\n"}}}}
```

## The ControlZoomRequest object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"ControlZoomRequest":{"type":"object","description":"Request to set zoom level.","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"}}}}}}
```

## The ControlThermalPaletteRequest object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"ControlThermalPaletteRequest":{"type":"object","description":"Request to set thermal color palette.","required":["thermal_color_palette"],"properties":{"thermal_color_palette":{"description":"New thermal color palette to set.","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"}}}}
```

## The RecordingsState object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"RecordingsState":{"type":"object","description":"Current state of the video recorder.","required":["available_space","total_space","is_recording"],"properties":{"recording_id":{"type":"string","description":"ID of the recording."},"started_recording_timestamp":{"type":"string","format":"date-time","description":"Last time a recording was started since boot, or zero otherwise."},"stopped_recording_timestamp":{"type":"string","format":"date-time","description":"Last time a recording was stopped, or current time if recording."},"is_recording":{"type":"boolean","description":"Whether the recorder is currently running."},"recording_seconds":{"type":"integer","format":"int32","description":"Number of seconds the current recording has been running."},"available_space":{"type":"integer","description":"Bytes available to store video recordings","format":"int64","minimum":0},"occupied_space":{"type":"integer","description":"Bytes currently occupied by video recordings","format":"int64","minimum":0},"total_space":{"type":"integer","description":"Total bytes available for video recordings","format":"int64","minimum":0}}}}}}
```

## The Recording object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"Recording":{"type":"object","description":"Represents a video recording, including video files and metadata.","required":["recording_id","is_being_recorded","videos"],"properties":{"recording_id":{"type":"string","description":"Identifier of the recording."},"is_being_recorded":{"type":"boolean","description":"Whether this recording is currently being recorded."},"videos":{"type":"array","items":{"$ref":"#/components/schemas/VideoFile"}}}},"VideoFile":{"description":"Represents a video file in a recording, including metadata.","type":"object","required":["type","recording_id","file_id","size","is_recording"],"properties":{"type":{"$ref":"#/components/schemas/VideoStreamType"},"recording_id":{"type":"string","description":"ID of the video recording"},"file_id":{"type":"string","description":"Identifier of the video file. Used for downloading."},"size":{"type":"integer","format":"int64"},"is_recording":{"type":"boolean"}}},"VideoStreamType":{"type":"string","description":"Video stream type. Possible values: * `Color` - regular color video stream. * `Thermal` - thermal video stream.\n"}}}}
```

## The VideoFile object

```json
{"openapi":"3.0.4","info":{"title":"Fotokite API","version":"1.0.0"},"components":{"schemas":{"VideoFile":{"description":"Represents a video file in a recording, including metadata.","type":"object","required":["type","recording_id","file_id","size","is_recording"],"properties":{"type":{"$ref":"#/components/schemas/VideoStreamType"},"recording_id":{"type":"string","description":"ID of the video recording"},"file_id":{"type":"string","description":"Identifier of the video file. Used for downloading."},"size":{"type":"integer","format":"int64"},"is_recording":{"type":"boolean"}}},"VideoStreamType":{"type":"string","description":"Video stream type. Possible values: * `Color` - regular color video stream. * `Thermal` - thermal video stream.\n"}}}}
```


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developer.fotokite.com/fotokite-api/models.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
