The `/osc/commands/execute` API executes specified commands on the camera. The output is a command object.

## Input

| Name | Type | Description |
|---|---|---|
| `name` | String | The command to be executed. |
| `parameters` | Object | Command input parameters according to the command definitions specification. Please refer to [OSC API Specification](https://developers.google.com/streetview/open-spherical-camera/reference/camera) for examples. |

## Output

| Name | Type | Description |
|---|---|---|
| `name` | String | The command to be executed. |
| `state` | String | State of the command. Should be one of the following: - `done` - Complete, results have been returned in this response. - `inProgress` - Execution is still in progress. - `error` - Failed, see error in the response. |
| `id` | String (optional) | Command ID. This value is required for commands returning the status* *`inProgress`. For example, the `camera.takePicture` command takes a few seconds due to the need for stitching. See the "Status" section for more details. |
| `results` | Object (optional) | Command results. This value is required for commands returning state* *`done` if the command is expected to return results; for example, "results" : { "AAA": "BBB", ... } Please refer to [OSC API Specification](https://developers.google.com/streetview/open-spherical-camera/reference/camera) for examples. |
| `error` | Object (optional) | Command error description. This value is required for commands returning state `error;` for example, ``` “error”: { “code”: “missingParameter” } ``` |
| `progress` | Object (optional) | Command progress description. This value is required for commands returning state `inProgress`; for example, ``` “progress”: { “completion”: 0.8 } ``` |

## Error

| Error code | Description |
|---|---|
| `unknownCommand` | Requested command is unknown, e.g. if a v2 client (clientVersion is set to 2, see [Options](https://developers.google.com/streetview/open-spherical-camera/reference/options)) requests a deprecated command from API level 1, the request should fail with this error code. |
| `disabledCommand` | Command executed is currently disabled, e.g. \`takePicture\` command is disabled when camera is video mode, processPicture command is disabled when the camera doesn't support delayProcessing. **This error code was added in API level 2.** |
| `cameraInExclusiveUse` | Camera is already in exclusive use, new session can't be started. **This error code was deprecated in API level 2.** |
| `missingParameter` | One or more required parameters were not specified. |
| `invalidParameterName` | One or more input parameter or option name was unrecognized or unsupported. |
| `invalidParameterValue` | The parameter or option names were recognized, but one or more values is invalid; for example, the value is out of range. |

| ## Example ||
|---|---|
| **Request (API 1)** | ``` POST /osc/commands/execute HTTP/1.1 Host: [camera ip address]:[httpPort] Content-Type: application/json;charset=utf-8 Accept: application/json Content-Length: {CONTENT_LENGTH} X-XSRF-Protected: 1 { "name": "camera.setOptions", "parameters": { "sessionId": "12ABC3", "options": { "iso": 200, "exposureCompensation": -2 } } } ``` |
| **Request (API 2)** | ``` POST /osc/commands/execute HTTP/1.1 Host: [camera ip address]:[httpPort] Content-Type: application/json;charset=utf-8 Accept: application/json Content-Length: {CONTENT_LENGTH} X-XSRF-Protected: 1 { "name": "camera.setOptions", "parameters": { "options": { "iso": 200, "exposureCompensation": -2 } } } ``` |
| **Response** | ``` HTTP/1.1 200 OK Content-Type: application/json;charset=utf-8 Content-Length: {CONTENT_LENGTH} X-Content-Type-Options: nosniff { "name": "camera.setOptions", "state": "done" } ``` |
| **Request (API 1)** | ``` POST /osc/commands/execute HTTP/1.1 Host: [camera ip address]:[httpPort] Content-Type: application/json;charset=utf-8 Accept: application/json Content-Length: {CONTENT_LENGTH} X-XSRF-Protected: 1 { "name": "camera.takePicture", "parameters": { "sessionId": "12ABC3" } } ``` |
| **Request (API 2)** | ``` POST /osc/commands/execute HTTP/1.1 Host: [camera ip address]:[httpPort] Content-Type: application/json;charset=utf-8 Accept: application/json Content-Length: {CONTENT_LENGTH} X-XSRF-Protected: 1 { "name": "camera.takePicture" } ``` |
| **Response** | ``` HTTP/1.1 200 OK Content-Type: application/json;charset=utf-8 Content-Length: {CONTENT_LENGTH} X-Content-Type-Options: nosniff { "name": "camera.takePicture", "state": "inProgress", "id": "90ABCD", "progress": { "completion": 0 } } ``` |