HTTP Specification v2.0
Overview
The GoPro API allows developers to create apps and utilities that interact with and control a GoPro camera.
What can you do with the GoPro API?
The GoPro API allows you to control and query the camera:
- Capture photo/video media
- Get media list
- Change settings
- Get and set the date/time
- Get camera status
- Get media metadata (file size, width, height, duration, tags, etc)
- and more!
Supported Cameras
Below is a table of cameras that support GoPro's public HTTP API:
Model ID | Model Code | Marketing Name | Minimal Firmware Version |
62 | H23.01 | HERO12 Black | v01.10.00 |
60 | H22.03 | HERO11 Black Mini | v01.10.00 |
58 | H22.01 | HERO11 Black | v01.10.00 |
57 | H21.01 | HERO10 Black | v01.10.00 |
55 | HD9.01 | HERO9 Black | v01.70.00 |
The Basics
Connection
WiFi
Connection to the camera via WiFi requires that the camera's WiFi Access Point be enabled. This can be done by connecting to the camera via Bluetooth Low Energy (BLE) and sending a command to enable AP Mode.
USB
OpenGoPro systems that utilize USB must support the Network Control Model (NCM) protocol. Connecting via USB requires the following steps:
- Physically connect the camera's USB-C port to your system
- Send HTTP command to enable wired USB control
Authentication
WiFi
Once the WiFi Access Point has been turned on, authentication with the camera simply requires connecting with the correct SSID and password. This information can be obtained in two ways:
- Put the camera into pairing mode and tap the info button in the top-right corner of the screen.
- Read the SSID/password directly via Bluetooth Low Energy. See Services and Characteristics section in BLE Specification for details.
USB
No authentication is necessary.
Socket Address
WiFi
The socket address for WiFi connections is 10.5.5.9:8080.
USB
The socket address for USB connections is 172.2X.1YZ.51:8080 where:
- X is the 100's digit from the camera serial number
- Y is the 10's digit from the camera serial number
- Z is the 1's digit from the camera serial number
The camera's serial number can be obtained in any of the following ways:
- Reading the sticker inside the camera's battery enclosure
- Camera UI: Preferences >> About >> Camera Info
- Bluetooth Low Energy: By reading directly from Hardware Info
For example, if the camera's serial number is C0000123456789, the IP address for USB connections would be 172.27.189.51.
Alternatively, the IP address can be discovered via mDNS as the camera registers the _gopro-web service.
Request and Response Formats
Most commands are sent via HTTP/GET and require no special headers. Responses come in two parts: The standard HTTP return codes and JSON containing any additional information.
The typical use case is that the camera accepts a valid command, returns HTTP/200 (OK) and empty JSON (i.e. { }) and begins asynchronously working on the command. If an error occurs, the camera will return a standard HTTP error code and JSON with helpful error/debug information.
Depending on the command sent, the camera can return JSON, binary, or Protobuf data. Some examples are listed below:
Command | Return Type |
Get Camera State | JSON |
Get Media Info | JSON |
Get Media GPMF | Binary |
Get Media List | JSON |
Get Media Screennail (JPEG) | Binary |
Get Media Thumbnail (JPEG) | Binary |
Get Presets | JSON |
Sending Commands
Depending on the camera's state, it may not be ready to accept specific commands. This ready state is dependent on the System Busy and the Encoding Active status flags. For example:
- System Busy flag is set while loading presets, changing settings, formatting sdcard, ...
- Encoding Active flag is set while capturing photo/video media
If the system is not ready, it should reject an incoming command; however, best practice is to always wait for the System Busy and Encode Active flags to be unset before sending messages other than camera status queries. For details regarding camera state, see Status Codes.
Keep Alive
In order to maximize battery life, GoPro cameras automatically go to sleep after some time. This logic is handled by a combination of an Auto Power Down setting which most (but not all) cameras support and a Keep Alive message that the user can regularly send to the camera. The camera will automatically go to sleep if both timers reach zero.
The Auto Power Down timer is reset when the user taps the LCD screen, presses a button on the camera or programmatically (un)sets the shutter, sets a setting, or loads a Preset.
The Keep Alive timer is reset when the user sends a keep alive message.
The best practice to prevent the camera from inadvertently going to sleep is to start sending Keep Alive messages every 3.0 seconds after a connection is established.
Command
HTTP/GET | Description |
/gopro/camera/keep_alive | Send keep-alive |
Commands
Using the Open GoPro API, a client can perform various command, control, and query operations!
Commands Quick Reference
Below is a table of commands that can be sent to the camera and how to send them.
* Indicates that item is experimental
✔ Indicates support for all Open GoPro firmware versions.
❌ Indicates a lack of support for all Open GoPro firmware versions.
>= vXX.YY.ZZ indicates support for firmware versions equal to or newer than vXX.YY.ZZ
Command | Description | HTTP Method | Endpoint | HERO12 Black | HERO11 Black Mini | HERO11 Black | HERO10 Black | HERO9 Black |
Analytics | Set third party client | GET | /gopro/camera/analytics/set_client_info | ✔ | ✔ | ✔ | >= v01.30.00 | >= v01.70.00 |
COHN: Get cert | Get cohn cert | GET | /GoProRootCA.crt | ✔ | ❌ | ❌ | ❌ | ❌ |
COHN: Get status | Get cohn status | POST | /gopro/cohn/status | ✔ | ❌ | ❌ | ❌ | ❌ |
COHN: Get status | Get cohn status | POST | /gopro/cohn/status | ✔ | ❌ | ❌ | ❌ | ❌ |
Camera: Get State | Get camera state (status + settings) | GET | /gopro/camera/state | ✔ | ✔ | ✔ | ✔ | ✔ |
Digital Zoom | Digital zoom 50% | GET | /gopro/camera/digital_zoom?percent=50 | ✔ | ✔ | ✔ | ✔ | ✔ |
Get Date/Time | Get date/time | GET | /gopro/camera/get_date_time | ✔ | ✔ | ✔ | >= v01.30.00 | >= v01.70.00 |
Get Hardware Info | Get camera hardware info | GET | /gopro/camera/info | ✔ | ❌ | ❌ | ❌ | ❌ |
Keep-alive | Send keep-alive | GET | /gopro/camera/keep_alive | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: GPMF | Get GPMF data (JPG) | GET | /gopro/media/gpmf?path=100GOPRO/XXX.JPG | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: GPMF | Get GPMF data (MP4) | GET | /gopro/media/gpmf?path=100GOPRO/XXX.MP4 | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: HiLight (Add) | Add hilight to 100GOPRO/xxx.JPG | GET | /gopro/media/hilight/file?path=100GOPRO/XXX.JPG | ✔ | ✔ | ✔ | >= v01.30.00 | >= v01.70.00 |
Media: HiLight (Add) | Add hilight to 100GOPRO/xxx.MP4 at offset 2500 ms | GET | /gopro/media/hilight/file?path=100GOPRO/XXX.MP4&ms=2500 | ✔ | ✔ | ✔ | >= v01.30.00 | >= v01.70.00 |
Media: HiLight (Remove) | Remove hilight from 100GOPRO/xxx.JPG | GET | /gopro/media/hilight/remove?path=100GOPRO/XXX.JPG | ✔ | ✔ | ✔ | >= v01.30.00 | >= v01.70.00 |
Media: HiLight (Remove) | Remove hilight from 100GOPRO/xxx.MP4 at offset 2500ms | GET | /gopro/media/hilight/remove?path=100GOPRO/XXX.MP4&ms=2500 | ✔ | ✔ | ✔ | >= v01.30.00 | >= v01.70.00 |
Media: HiLight Moment | Hilight moment during encoding | GET | /gopro/media/hilight/moment | ✔ | ✔ | ✔ | >= v01.30.00 | ❌ |
Media: Info | Get media info (JPG) | GET | /gopro/media/info?path=100GOPRO/XXX.JPG | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Info | Get media info (MP4) | GET | /gopro/media/info?path=100GOPRO/XXX.MP4 | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: List | Get media list | GET | /gopro/media/list | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Screennail | Get screennail for “100GOPRO/xxx.JPG” | GET | /gopro/media/screennail?path=100GOPRO/XXX.JPG | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Screennail | Get screennail for “100GOPRO/xxx.MP4” | GET | /gopro/media/screennail?path=100GOPRO/XXX.MP4 | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Telemetry | Get telemetry track data (JPG) | GET | /gopro/media/telemetry?path=100GOPRO/XXX.JPG | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Telemetry | Get telemetry track data (MP4) | GET | /gopro/media/telemetry?path=100GOPRO/XXX.MP4 | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Thumbnail | Get thumbnail for “100GOPRO/xxx.JPG” | GET | /gopro/media/thumbnail?path=100GOPRO/XXX.JPG | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Thumbnail | Get thumbnail for “100GOPRO/xxx.MP4” | GET | /gopro/media/thumbnail?path=100GOPRO/XXX.MP4 | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Turbo Transfer | Turbo transfer: off | GET | /gopro/media/turbo_transfer?p=0 | ✔ | ✔ | ✔ | ✔ | ✔ |
Media: Turbo Transfer | Turbo transfer: on | GET | /gopro/media/turbo_transfer?p=1 | ✔ | ✔ | ✔ | ✔ | ✔ |
OTA Update | Soft update: upload 12345 bytes starting at offset 67890 | POST | /gp/gpSoftUpdate (plus data) | ✔ | ✔ | ✔ | ✔ | ✔ |
OTA Update | Soft update: mark upload complete | POST | /gp/gpSoftUpdate (plus data) | ✔ | ✔ | ✔ | ✔ | ✔ |
Open GoPro | Get version | GET | /gopro/version | ✔ | ✔ | ✔ | ✔ | ✔ |
Presets: Get Status | Get preset status | GET | /gopro/camera/presets/get | ✔ | ✔ | ✔ | ✔ | ✔ |
Presets: Load | Example preset id: 0x1234ABCD | GET | /gopro/camera/presets/load?id=305441741 | ✔ | ✔ | ✔ | ✔ | ✔ |
Presets: Load Group | Video | GET | /gopro/camera/presets/set_group?id=1000 | ✔ | ✔ | ✔ | ✔ | ✔ |
Presets: Load Group | Photo | GET | /gopro/camera/presets/set_group?id=1001 | ✔ | ❌ | ✔ | ✔ | ✔ |
Presets: Load Group | Timelapse | GET | /gopro/camera/presets/set_group?id=1002 | ✔ | ❌ | ✔ | ✔ | ✔ |
Set Camera Control Status | Set camera control status to idle | GET | /gopro/camera/control/set_ui_controller?p=0 | ✔ | ✔ | ✔ | >= v01.20.00 | ❌ |
Set Camera Control Status | Set camera control status to external_control | GET | /gopro/camera/control/set_ui_controller?p=2 | ✔ | ✔ | ✔ | >= v01.20.00 | ❌ |
Set Date/Time | Set date/time to 2023-01-31 03:04:05 | GET | /gopro/camera/set_date_time?date=2023_1_31&time=3_4_5 | ✔ | ✔ | ✔ | >= v01.30.00 | >= v01.70.00 |
Set Local Date/Time | Set local date/time to: 2023-01-31 03:04:05 (utc-02:00) (dst: on) | GET | /gopro/camera/set_date_time?date=2023_1_31&time=3_4_5&tzone=-120&dst=1 | ✔ | ✔ | ✔ | ❌ | ❌ |
Set shutter | Shutter: on | GET | /gopro/camera/shutter/start | ✔ | ✔ | ✔ | ✔ | ❌ |
Set shutter | Shutter: off | GET | /gopro/camera/shutter/stop | ✔ | ✔ | ✔ | ✔ | ❌ |
Simple OTA Update | Simple ota update with file: update.zip | POST | /gp/gpUpdate (plus data) | ✔ | ✔ | ✔ | ✔ | ✔ |
Soft Update | Soft update: show canceled/failed ui on the camera | GET | /gp/gpSoftUpdate?request=canceled | ✔ | ✔ | ✔ | ✔ | ✔ |
Soft Update | Soft update: delete cached update files | GET | /gp/gpSoftUpdate?request=delete | ✔ | ✔ | ✔ | ✔ | ✔ |
Soft Update | Soft update: get current update state | GET | /gp/gpSoftUpdate?request=progress | ✔ | ✔ | ✔ | ✔ | ✔ |
Soft Update | Soft update: display update ui on camera | GET | /gp/gpSoftUpdate?request=showui | ✔ | ✔ | ✔ | ✔ | ✔ |
Soft Update | Soft update: initiate firmware update | GET | /gp/gpSoftUpdate?request=start | ✔ | ✔ | ✔ | ✔ | ✔ |
Stream: Start | Start preview stream | GET | /gopro/camera/stream/start | ✔ | ✔ | ✔ | ✔ | ✔ |
Stream: Stop | Stop preview stream | GET | /gopro/camera/stream/stop | ✔ | ✔ | ✔ | ✔ | ✔ |
Webcam: Exit | Exit webcam mode | GET | /gopro/webcam/exit | ✔ | ❌ | ✔ | ✔ | ❌ |
Webcam: Preview | Start preview stream | GET | /gopro/webcam/preview | ✔ | ❌ | ✔ | ✔ | ❌ |
Webcam: Start | Start webcam | GET | /gopro/webcam/start | ✔ | ❌ | ✔ | >= v01.40.00 | ❌ |
Webcam: Start | Start webcam (port: 12345) | GET | /gopro/webcam/start?port=12345 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
Webcam: Start | Start webcam (port: 12345, protocol: rtsp) | GET | /gopro/webcam/start?port=12345&protocol=RTSP | ✔ | ❌ | ✔ | ✔ | ❌ |
Webcam: Start | Start webcam (port: 12345, protocol: ts) | GET | /gopro/webcam/start?port=12345&protocol=TS | ✔ | ❌ | ✔ | ✔ | ❌ |
Webcam: Start | Start webcam (res: resolution_1080, fov: wide) | GET | /gopro/webcam/start?res=12&fov=0 | ✔ | ❌ | ✔ | ✔ | ❌ |
Webcam: Status | Get webcam status | GET | /gopro/webcam/status | ✔ | ❌ | ✔ | ✔ | ❌ |
Webcam: Stop | Stop webcam | GET | /gopro/webcam/stop | ✔ | ❌ | ✔ | ✔ | ❌ |
Webcam: Version | Get webcam api version | GET | /gopro/webcam/version | ✔ | ❌ | ✔ | ✔ | ❌ |
Wired USB Control | Disable wired usb control | GET | /gopro/camera/control/wired_usb?p=0 | ✔ | ✔ | ✔ | >= v01.30.00 | ❌ |
Wired USB Control | Enable wired usb control | GET | /gopro/camera/control/wired_usb?p=1 | ✔ | ✔ | ✔ | >= v01.30.00 | ❌ |
Settings
GoPro cameras have hundreds of setting options to choose from, all of which can be set using a single endpoint. The endpoint is configured with a setting id and an option value. Note that setting option values are not globally unique. While most option values are enumerated values, some are complex bitmasked values.
Settings Quick Reference
Below is a table of setting options detailing how to set every option supported by Open GoPro cameras.
* Indicates that item is experimental
✔ Indicates support for all Open GoPro firmware versions.
❌ Indicates a lack of support for all Open GoPro firmware versions.
>= vXX.YY.ZZ indicates support for firmware versions equal to or newer than vXX.YY.ZZ
Setting ID | Setting | Option | HTTP Method | Endpoint | HERO12 Black | HERO11 Black Mini | HERO11 Black | HERO10 Black | HERO9 Black |
2 | Resolution | Set video resolution (id: 2) to 4k (id: 1) | GET | /gopro/camera/setting?setting=2&option=1 | ❌ | ✔ | ✔ | ✔ | ✔ |
2 | Resolution | Set video resolution (id: 2) to 2.7k (id: 4) | GET | /gopro/camera/setting?setting=2&option=4 | ❌ | ✔ | ✔ | ✔ | ✔ |
2 | Resolution | Set video resolution (id: 2) to 2.7k 4:3 (id: 6) | GET | /gopro/camera/setting?setting=2&option=6 | ❌ | ✔ | ✔ | ✔ | ✔ |
2 | Resolution | Set video resolution (id: 2) to 1440 (id: 7) | GET | /gopro/camera/setting?setting=2&option=7 | ❌ | ❌ | ❌ | ❌ | ✔ |
2 | Resolution | Set video resolution (id: 2) to 1080 (id: 9) | GET | /gopro/camera/setting?setting=2&option=9 | ❌ | ✔ | ✔ | ✔ | ✔ |
2 | Resolution | Set video resolution (id: 2) to 4k 4:3 (id: 18) | GET | /gopro/camera/setting?setting=2&option=18 | ❌ | ✔ | ✔ | ✔ | ✔ |
2 | Resolution | Set video resolution (id: 2) to 5k (id: 24) | GET | /gopro/camera/setting?setting=2&option=24 | ❌ | ❌ | ❌ | ❌ | ✔ |
2 | Resolution | Set video resolution (id: 2) to 5k 4:3 (id: 25) | GET | /gopro/camera/setting?setting=2&option=25 | ❌ | ❌ | ❌ | ✔ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 5.3k 8:7 (id: 26) | GET | /gopro/camera/setting?setting=2&option=26 | ✔ | ✔ | ✔ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 5.3k 4:3 (id: 27) | GET | /gopro/camera/setting?setting=2&option=27 | ❌ | ✔ | ✔ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 4k 8:7 (id: 28) | GET | /gopro/camera/setting?setting=2&option=28 | ✔ | ✔ | ✔ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 4k 9:16 (id: 29) | GET | /gopro/camera/setting?setting=2&option=29 | ✔ | ❌ | ❌ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 1080 9:16 (id: 30) | GET | /gopro/camera/setting?setting=2&option=30 | ✔ | ❌ | ❌ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 5.3k (id: 100) | GET | /gopro/camera/setting?setting=2&option=100 | ❌ | ✔ | ✔ | ✔ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 5.3k 16:9 (id: 101) | GET | /gopro/camera/setting?setting=2&option=101 | ✔ | ❌ | ❌ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 4k 16:9 (id: 102) | GET | /gopro/camera/setting?setting=2&option=102 | ✔ | ❌ | ❌ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 4k 4:3 (id: 103) | GET | /gopro/camera/setting?setting=2&option=103 | ✔ | ❌ | ❌ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 2.7k 16:9 (id: 104) | GET | /gopro/camera/setting?setting=2&option=104 | ✔ | ❌ | ❌ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 2.7k 4:3 (id: 105) | GET | /gopro/camera/setting?setting=2&option=105 | ✔ | ❌ | ❌ | ❌ | ❌ |
2 | Resolution | Set video resolution (id: 2) to 1080 16:9 (id: 106) | GET | /gopro/camera/setting?setting=2&option=106 | ✔ | ❌ | ❌ | ❌ | ❌ |
3 | Frames Per Second | Set video fps (id: 3) to 240 (id: 0) | GET | /gopro/camera/setting?setting=3&option=0 | ✔ | ✔ | ✔ | ✔ | ✔ |
3 | Frames Per Second | Set video fps (id: 3) to 120 (id: 1) | GET | /gopro/camera/setting?setting=3&option=1 | ✔ | ✔ | ✔ | ✔ | ✔ |
3 | Frames Per Second | Set video fps (id: 3) to 100 (id: 2) | GET | /gopro/camera/setting?setting=3&option=2 | ✔ | ✔ | ✔ | ✔ | ✔ |
3 | Frames Per Second | Set video fps (id: 3) to 60 (id: 5) | GET | /gopro/camera/setting?setting=3&option=5 | ✔ | ✔ | ✔ | ✔ | ✔ |
3 | Frames Per Second | Set video fps (id: 3) to 50 (id: 6) | GET | /gopro/camera/setting?setting=3&option=6 | ✔ | ✔ | ✔ | ✔ | ✔ |
3 | Frames Per Second | Set video fps (id: 3) to 30 (id: 8) | GET | /gopro/camera/setting?setting=3&option=8 | ✔ | ✔ | ✔ | ✔ | ✔ |
3 | Frames Per Second | Set video fps (id: 3) to 25 (id: 9) | GET | /gopro/camera/setting?setting=3&option=9 | ✔ | ✔ | ✔ | ✔ | ✔ |
3 | Frames Per Second | Set video fps (id: 3) to 24 (id: 10) | GET | /gopro/camera/setting?setting=3&option=10 | ✔ | ✔ | ✔ | ✔ | ✔ |
3 | Frames Per Second | Set video fps (id: 3) to 200 (id: 13) | GET | /gopro/camera/setting?setting=3&option=13 | ✔ | ✔ | ✔ | ✔ | ✔ |
43 | Webcam Digital Lenses | Set webcam digital lenses (id: 43) to wide (id: 0) | GET | /gopro/camera/setting?setting=43&option=0 | ✔ | ✔ | ✔ | ✔ | ✔ |
43 | Webcam Digital Lenses | Set webcam digital lenses (id: 43) to narrow (id: 2) | GET | /gopro/camera/setting?setting=43&option=2 | ✔ | ✔ | ✔ | ✔ | ✔ |
43 | Webcam Digital Lenses | Set webcam digital lenses (id: 43) to superview (id: 3) | GET | /gopro/camera/setting?setting=43&option=3 | ✔ | ✔ | ✔ | ✔ | ✔ |
43 | Webcam Digital Lenses | Set webcam digital lenses (id: 43) to linear (id: 4) | GET | /gopro/camera/setting?setting=43&option=4 | ✔ | ✔ | ✔ | ✔ | ✔ |
59 | Auto Power Down | Set auto power down (id: 59) to never (id: 0) | GET | /gopro/camera/setting?setting=59&option=0 | ✔ | >= v02.10.00 | ✔ | ✔ | ✔ |
59 | Auto Power Down | Set auto power down (id: 59) to 1 min (id: 1) | GET | /gopro/camera/setting?setting=59&option=1 | ✔ | >= v02.10.00 | >= v02.01.00 | ❌ | ❌ |
59 | Auto Power Down | Set auto power down (id: 59) to 5 min (id: 4) | GET | /gopro/camera/setting?setting=59&option=4 | ✔ | >= v02.10.00 | ✔ | ✔ | ✔ |
59 | Auto Power Down | Set auto power down (id: 59) to 15 min (id: 6) | GET | /gopro/camera/setting?setting=59&option=6 | ✔ | ❌ | ✔ | ✔ | ✔ |
59 | Auto Power Down | Set auto power down (id: 59) to 30 min (id: 7) | GET | /gopro/camera/setting?setting=59&option=7 | ✔ | ❌ | ✔ | ✔ | ✔ |
59 | Auto Power Down | Set auto power down (id: 59) to 8 seconds (id: 11) | GET | /gopro/camera/setting?setting=59&option=11 | ❌ | >= v02.10.00 | ❌ | ❌ | ❌ |
59 | Auto Power Down | Set auto power down (id: 59) to 30 seconds (id: 12) | GET | /gopro/camera/setting?setting=59&option=12 | ❌ | >= v02.10.00 | ❌ | ❌ | ❌ |
108 | Aspect Ratio | Set video aspect ratio (id: 108) to 4:3 (id: 0) | GET | /gopro/camera/setting?setting=108&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
108 | Aspect Ratio | Set video aspect ratio (id: 108) to 16:9 (id: 1) | GET | /gopro/camera/setting?setting=108&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
108 | Aspect Ratio | Set video aspect ratio (id: 108) to 8:7 (id: 3) | GET | /gopro/camera/setting?setting=108&option=3 | ✔ | ❌ | ❌ | ❌ | ❌ |
108 | Aspect Ratio | Set video aspect ratio (id: 108) to 9:16 (id: 4) | GET | /gopro/camera/setting?setting=108&option=4 | ✔ | ❌ | ❌ | ❌ | ❌ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to wide (id: 0) | GET | /gopro/camera/setting?setting=121&option=0 | ✔ | ✔ | ✔ | ✔ | ✔ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to narrow (id: 2) | GET | /gopro/camera/setting?setting=121&option=2 | ❌ | ❌ | ❌ | ✔ | ✔ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to superview (id: 3) | GET | /gopro/camera/setting?setting=121&option=3 | ✔ | ✔ | ✔ | ✔ | ✔ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to linear (id: 4) | GET | /gopro/camera/setting?setting=121&option=4 | ✔ | ✔ | ✔ | ✔ | ✔ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to max superview (id: 7) | GET | /gopro/camera/setting?setting=121&option=7 | ✔ | >= v02.00.00 | ✔ | ✔ | ✔ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to linear + horizon leveling (id: 8) | GET | /gopro/camera/setting?setting=121&option=8 | ✔ | ✔ | ✔ | ✔ | ✔ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to hyperview (id: 9) | GET | /gopro/camera/setting?setting=121&option=9 | ✔ | ✔ | ✔ | ❌ | ❌ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to linear + horizon lock (id: 10) | GET | /gopro/camera/setting?setting=121&option=10 | ✔ | ✔ | ✔ | ❌ | ❌ |
121 | Video Digital Lenses | Set video digital lenses (id: 121) to max hyperview (id: 11) | GET | /gopro/camera/setting?setting=121&option=11 | ✔ | ❌ | ❌ | ❌ | ❌ |
122 | Photo Digital Lenses | Set photo digital lenses (id: 122) to narrow (id: 19) | GET | /gopro/camera/setting?setting=122&option=19 | ❌ | ❌ | ❌ | ✔ | ✔ |
122 | Photo Digital Lenses | Set photo digital lenses (id: 122) to max superview (id: 100) | GET | /gopro/camera/setting?setting=122&option=100 | ✔ | ❌ | ✔ | ✔ | ✔ |
122 | Photo Digital Lenses | Set photo digital lenses (id: 122) to wide (id: 101) | GET | /gopro/camera/setting?setting=122&option=101 | ✔ | ❌ | ✔ | ✔ | ✔ |
122 | Photo Digital Lenses | Set photo digital lenses (id: 122) to linear (id: 102) | GET | /gopro/camera/setting?setting=122&option=102 | ✔ | ❌ | ✔ | ✔ | ✔ |
123 | Time Lapse Digital Lenses | Set time lapse digital lenses (id: 123) to narrow (id: 19) | GET | /gopro/camera/setting?setting=123&option=19 | ❌ | ❌ | ❌ | ✔ | ✔ |
123 | Time Lapse Digital Lenses | Set time lapse digital lenses (id: 123) to max superview (id: 100) | GET | /gopro/camera/setting?setting=123&option=100 | ❌ | ❌ | ✔ | ✔ | ❌ |
123 | Time Lapse Digital Lenses | Set time lapse digital lenses (id: 123) to wide (id: 101) | GET | /gopro/camera/setting?setting=123&option=101 | ✔ | ❌ | ✔ | ✔ | ✔ |
123 | Time Lapse Digital Lenses | Set time lapse digital lenses (id: 123) to linear (id: 102) | GET | /gopro/camera/setting?setting=123&option=102 | ✔ | ❌ | ✔ | ✔ | ✔ |
128 | Media Format | Set media format (id: 128) to time lapse video (id: 13) | GET | /gopro/camera/setting?setting=128&option=13 | ✔ | ❌ | ✔ | ✔ | ✔ |
128 | Media Format | Set media format (id: 128) to time lapse photo (id: 20) | GET | /gopro/camera/setting?setting=128&option=20 | ✔ | ❌ | ✔ | ✔ | ✔ |
128 | Media Format | Set media format (id: 128) to night lapse photo (id: 21) | GET | /gopro/camera/setting?setting=128&option=21 | ✔ | ❌ | ✔ | ✔ | ✔ |
128 | Media Format | Set media format (id: 128) to night lapse video (id: 26) | GET | /gopro/camera/setting?setting=128&option=26 | ✔ | ❌ | ✔ | ✔ | ✔ |
134 | Anti-Flicker | Set setup anti flicker (id: 134) to 60hz (id: 2) | GET | /gopro/camera/setting?setting=134&option=2 | ✔ | ✔ | ✔ | ✔ | ✔ |
134 | Anti-Flicker | Set setup anti flicker (id: 134) to 50hz (id: 3) | GET | /gopro/camera/setting?setting=134&option=3 | ✔ | ✔ | ✔ | ✔ | ✔ |
135 | Hypersmooth | Set video hypersmooth (id: 135) to off (id: 0) | GET | /gopro/camera/setting?setting=135&option=0 | ✔ | ✔ | ✔ | ✔ | ✔ |
135 | Hypersmooth | Set video hypersmooth (id: 135) to low (id: 1) | GET | /gopro/camera/setting?setting=135&option=1 | ✔ | ✔ | ✔ | ❌ | ✔ |
135 | Hypersmooth | Set video hypersmooth (id: 135) to high (id: 2) | GET | /gopro/camera/setting?setting=135&option=2 | ❌ | ❌ | ❌ | ✔ | ✔ |
135 | Hypersmooth | Set video hypersmooth (id: 135) to boost (id: 3) | GET | /gopro/camera/setting?setting=135&option=3 | ❌ | ✔ | ✔ | ✔ | ✔ |
135 | Hypersmooth | Set video hypersmooth (id: 135) to auto boost (id: 4) | GET | /gopro/camera/setting?setting=135&option=4 | ✔ | ✔ | ✔ | ❌ | ❌ |
135 | Hypersmooth | Set video hypersmooth (id: 135) to standard (id: 100) | GET | /gopro/camera/setting?setting=135&option=100 | ❌ | ❌ | ❌ | ✔ | ❌ |
150 | Horizon Leveling | Set video horizon levelling (id: 150) to off (id: 0) | GET | /gopro/camera/setting?setting=150&option=0 | ❌ | >= v02.00.00 | ✔ | ❌ | ❌ |
150 | Horizon Leveling | Set video horizon levelling (id: 150) to on (id: 1) | GET | /gopro/camera/setting?setting=150&option=1 | ❌ | >= v02.00.00 | ❌ | ❌ | ❌ |
150 | Horizon Leveling | Set video horizon levelling (id: 150) to locked (id: 2) | GET | /gopro/camera/setting?setting=150&option=2 | ❌ | ❌ | ✔ | ❌ | ❌ |
151 | Horizon Leveling | Set photo horizon levelling (id: 151) to off (id: 0) | GET | /gopro/camera/setting?setting=151&option=0 | ❌ | ❌ | ✔ | ❌ | ❌ |
151 | Horizon Leveling | Set photo horizon levelling (id: 151) to locked (id: 2) | GET | /gopro/camera/setting?setting=151&option=2 | ❌ | ❌ | ✔ | ❌ | ❌ |
162 | Max Lens | Set max lens (id: 162) to off (id: 0) | GET | /gopro/camera/setting?setting=162&option=0 | ❌ | ❌ | ✔ | >= v01.20.00 | ✔ |
162 | Max Lens | Set max lens (id: 162) to on (id: 1) | GET | /gopro/camera/setting?setting=162&option=1 | ❌ | ❌ | ✔ | >= v01.20.00 | ✔ |
167 | Hindsight* | Set hindsight (id: 167) to 15 seconds (id: 2) | GET | /gopro/camera/setting?setting=167&option=2 | ✔ | ❌ | ✔ | ✔ | ✔ |
167 | Hindsight* | Set hindsight (id: 167) to 30 seconds (id: 3) | GET | /gopro/camera/setting?setting=167&option=3 | ✔ | ❌ | ✔ | ✔ | ✔ |
167 | Hindsight* | Set hindsight (id: 167) to off (id: 4) | GET | /gopro/camera/setting?setting=167&option=4 | ✔ | ❌ | ✔ | ✔ | ✔ |
171 | Interval | Set photo single interval (id: 171) to off (id: 0) | GET | /gopro/camera/setting?setting=171&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 0.5s (id: 2) | GET | /gopro/camera/setting?setting=171&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 1s (id: 3) | GET | /gopro/camera/setting?setting=171&option=3 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 2s (id: 4) | GET | /gopro/camera/setting?setting=171&option=4 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 5s (id: 5) | GET | /gopro/camera/setting?setting=171&option=5 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 10s (id: 6) | GET | /gopro/camera/setting?setting=171&option=6 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 30s (id: 7) | GET | /gopro/camera/setting?setting=171&option=7 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 60s (id: 8) | GET | /gopro/camera/setting?setting=171&option=8 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 120s (id: 9) | GET | /gopro/camera/setting?setting=171&option=9 | ✔ | ❌ | ❌ | ❌ | ❌ |
171 | Interval | Set photo single interval (id: 171) to 3s (id: 10) | GET | /gopro/camera/setting?setting=171&option=10 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to off (id: 0) | GET | /gopro/camera/setting?setting=172&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 15 seconds (id: 1) | GET | /gopro/camera/setting?setting=172&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 30 seconds (id: 2) | GET | /gopro/camera/setting?setting=172&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 1 minute (id: 3) | GET | /gopro/camera/setting?setting=172&option=3 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 5 minutes (id: 4) | GET | /gopro/camera/setting?setting=172&option=4 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 15 minutes (id: 5) | GET | /gopro/camera/setting?setting=172&option=5 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 30 minutes (id: 6) | GET | /gopro/camera/setting?setting=172&option=6 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 1 hour (id: 7) | GET | /gopro/camera/setting?setting=172&option=7 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 2 hours (id: 8) | GET | /gopro/camera/setting?setting=172&option=8 | ✔ | ❌ | ❌ | ❌ | ❌ |
172 | Duration | Set photo interval duration (id: 172) to 3 hours (id: 9) | GET | /gopro/camera/setting?setting=172&option=9 | ✔ | ❌ | ❌ | ❌ | ❌ |
173 | Video Performance Mode | Set video performance mode (id: 173) to maximum video performance (id: 0) | GET | /gopro/camera/setting?setting=173&option=0 | ❌ | ❌ | ❌ | >= v01.16.00 | ❌ |
173 | Video Performance Mode | Set video performance mode (id: 173) to extended battery (id: 1) | GET | /gopro/camera/setting?setting=173&option=1 | ❌ | ❌ | ❌ | >= v01.16.00 | ❌ |
173 | Video Performance Mode | Set video performance mode (id: 173) to tripod / stationary video (id: 2) | GET | /gopro/camera/setting?setting=173&option=2 | ❌ | ❌ | ❌ | >= v01.16.00 | ❌ |
175 | Controls | Set controls (id: 175) to easy (id: 0) | GET | /gopro/camera/setting?setting=175&option=0 | ✔ | ✔ | ✔ | ❌ | ❌ |
175 | Controls | Set controls (id: 175) to pro (id: 1) | GET | /gopro/camera/setting?setting=175&option=1 | ✔ | ✔ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 8x ultra slo-mo (id: 0) | GET | /gopro/camera/setting?setting=176&option=0 | ✔ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 4x super slo-mo (id: 1) | GET | /gopro/camera/setting?setting=176&option=1 | ✔ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 2) | GET | /gopro/camera/setting?setting=176&option=2 | ✔ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x (low light) (id: 3) | GET | /gopro/camera/setting?setting=176&option=3 | ✔ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 4x super slo-mo (ext. batt) (id: 4) | GET | /gopro/camera/setting?setting=176&option=4 | ❌ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (ext. batt) (id: 5) | GET | /gopro/camera/setting?setting=176&option=5 | ❌ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x (ext. batt, low light) (id: 6) | GET | /gopro/camera/setting?setting=176&option=6 | ❌ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 8x ultra slo-mo (50hz) (id: 7) | GET | /gopro/camera/setting?setting=176&option=7 | ✔ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 4x super slo-mo (50hz) (id: 8) | GET | /gopro/camera/setting?setting=176&option=8 | ✔ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (50hz) (id: 9) | GET | /gopro/camera/setting?setting=176&option=9 | ✔ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x (low light, 50hz) (id: 10) | GET | /gopro/camera/setting?setting=176&option=10 | ✔ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 4x super slo-mo (ext. batt, 50hz) (id: 11) | GET | /gopro/camera/setting?setting=176&option=11 | ❌ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (ext. batt, 50hz) (id: 12) | GET | /gopro/camera/setting?setting=176&option=12 | ❌ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x (ext. batt, low light, 50hz) (id: 13) | GET | /gopro/camera/setting?setting=176&option=13 | ❌ | ❌ | ✔ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 8x ultra slo-mo (ext. batt) (id: 14) | GET | /gopro/camera/setting?setting=176&option=14 | ❌ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 8x ultra slo-mo (ext. batt, 50hz) (id: 15) | GET | /gopro/camera/setting?setting=176&option=15 | ❌ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 8x ultra slo-mo (long. batt) (id: 16) | GET | /gopro/camera/setting?setting=176&option=16 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 4x super slo-mo (long. batt) (id: 17) | GET | /gopro/camera/setting?setting=176&option=17 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (long. batt) (id: 18) | GET | /gopro/camera/setting?setting=176&option=18 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x (long. batt, low light) (id: 19) | GET | /gopro/camera/setting?setting=176&option=19 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 8x ultra slo-mo (long. batt, 50hz) (id: 20) | GET | /gopro/camera/setting?setting=176&option=20 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 4x super slo-mo (long. batt, 50hz) (id: 21) | GET | /gopro/camera/setting?setting=176&option=21 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (long. batt, 50hz) (id: 22) | GET | /gopro/camera/setting?setting=176&option=22 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x (long. batt, low light, 50hz) (id: 23) | GET | /gopro/camera/setting?setting=176&option=23 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (4k) (id: 24) | GET | /gopro/camera/setting?setting=176&option=24 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 4x super slo-mo (2.7k) (id: 25) | GET | /gopro/camera/setting?setting=176&option=25 | ❌ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (4k, 50hz) (id: 26) | GET | /gopro/camera/setting?setting=176&option=26 | ✔ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 4x super slo-mo (2.7k, 50hz) (id: 27) | GET | /gopro/camera/setting?setting=176&option=27 | ❌ | ❌ | >= v02.01.00 | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 28) | GET | /gopro/camera/setting?setting=176&option=28 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 29) | GET | /gopro/camera/setting?setting=176&option=29 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 30) | GET | /gopro/camera/setting?setting=176&option=30 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 31) | GET | /gopro/camera/setting?setting=176&option=31 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 32) | GET | /gopro/camera/setting?setting=176&option=32 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 33) | GET | /gopro/camera/setting?setting=176&option=33 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 34) | GET | /gopro/camera/setting?setting=176&option=34 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 35) | GET | /gopro/camera/setting?setting=176&option=35 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 36) | GET | /gopro/camera/setting?setting=176&option=36 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 37) | GET | /gopro/camera/setting?setting=176&option=37 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 38) | GET | /gopro/camera/setting?setting=176&option=38 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 39) | GET | /gopro/camera/setting?setting=176&option=39 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 40) | GET | /gopro/camera/setting?setting=176&option=40 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 41) | GET | /gopro/camera/setting?setting=176&option=41 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 42) | GET | /gopro/camera/setting?setting=176&option=42 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 2x slo-mo (id: 43) | GET | /gopro/camera/setting?setting=176&option=43 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 44) | GET | /gopro/camera/setting?setting=176&option=44 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 45) | GET | /gopro/camera/setting?setting=176&option=45 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 46) | GET | /gopro/camera/setting?setting=176&option=46 | ✔ | ❌ | ❌ | ❌ | ❌ |
176 | Speed | Set speed (id: 176) to 1x speed / low light (id: 47) | GET | /gopro/camera/setting?setting=176&option=47 | ✔ | ❌ | ❌ | ❌ | ❌ |
177 | Enable Night Photo | Set enable night photo (id: 177) to off (id: 0) | GET | /gopro/camera/setting?setting=177&option=0 | ❌ | ❌ | ✔ | ❌ | ❌ |
177 | Enable Night Photo | Set enable night photo (id: 177) to on (id: 1) | GET | /gopro/camera/setting?setting=177&option=1 | ❌ | ❌ | ✔ | ❌ | ❌ |
178 | Wireless Band | Set wireless band (id: 178) to 2.4ghz (id: 0) | GET | /gopro/camera/setting?setting=178&option=0 | ✔ | ✔ | ✔ | ❌ | ❌ |
178 | Wireless Band | Set wireless band (id: 178) to 5ghz (id: 1) | GET | /gopro/camera/setting?setting=178&option=1 | ✔ | ✔ | ✔ | ❌ | ❌ |
179 | Trail Length | Set trail length (id: 179) to short (id: 1) | GET | /gopro/camera/setting?setting=179&option=1 | ✔ | ✔ | ✔ | ❌ | ❌ |
179 | Trail Length | Set trail length (id: 179) to long (id: 2) | GET | /gopro/camera/setting?setting=179&option=2 | ✔ | ✔ | ✔ | ❌ | ❌ |
179 | Trail Length | Set trail length (id: 179) to max (id: 3) | GET | /gopro/camera/setting?setting=179&option=3 | ✔ | ✔ | ✔ | ❌ | ❌ |
180 | Video Mode | Set video mode (id: 180) to highest quality (id: 0) | GET | /gopro/camera/setting?setting=180&option=0 | ❌ | ❌ | ✔ | ❌ | ❌ |
180 | Video Mode | Set video mode (id: 180) to extended battery (id: 1) | GET | /gopro/camera/setting?setting=180&option=1 | ❌ | ❌ | ✔ | ❌ | ❌ |
180 | Video Mode | Set video mode (id: 180) to extended battery (green icon) (id: 101) | GET | /gopro/camera/setting?setting=180&option=101 | ❌ | ❌ | >= v02.01.00 | ❌ | ❌ |
180 | Video Mode | Set video mode (id: 180) to longest battery (green icon) (id: 102) | GET | /gopro/camera/setting?setting=180&option=102 | ❌ | ❌ | >= v02.01.00 | ❌ | ❌ |
182 | Bit Rate | Set system video bit rate (id: 182) to standard (id: 0) | GET | /gopro/camera/setting?setting=182&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
182 | Bit Rate | Set system video bit rate (id: 182) to high (id: 1) | GET | /gopro/camera/setting?setting=182&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
183 | Bit Depth | Set system video bit depth (id: 183) to 8-bit (id: 0) | GET | /gopro/camera/setting?setting=183&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
183 | Bit Depth | Set system video bit depth (id: 183) to 10-bit (id: 2) | GET | /gopro/camera/setting?setting=183&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
184 | Profiles | Set video profile (id: 184) to standard (id: 0) | GET | /gopro/camera/setting?setting=184&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
184 | Profiles | Set video profile (id: 184) to hdr (id: 1) | GET | /gopro/camera/setting?setting=184&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
184 | Profiles | Set video profile (id: 184) to log (id: 2) | GET | /gopro/camera/setting?setting=184&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
185 | Aspect Ratio | Set video easy aspect ratio (id: 185) to widescreen (id: 0) | GET | /gopro/camera/setting?setting=185&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
185 | Aspect Ratio | Set video easy aspect ratio (id: 185) to mobile (id: 1) | GET | /gopro/camera/setting?setting=185&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
185 | Aspect Ratio | Set video easy aspect ratio (id: 185) to universal (id: 2) | GET | /gopro/camera/setting?setting=185&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
186 | Video Mode | Set video easy presets (id: 186) to highest quality (id: 0) | GET | /gopro/camera/setting?setting=186&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
186 | Video Mode | Set video easy presets (id: 186) to standard quality (id: 1) | GET | /gopro/camera/setting?setting=186&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
186 | Video Mode | Set video easy presets (id: 186) to basic quality (id: 2) | GET | /gopro/camera/setting?setting=186&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
187 | Lapse Mode | Set multi shot easy presets (id: 187) to timewarp (id: 0) | GET | /gopro/camera/setting?setting=187&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
187 | Lapse Mode | Set multi shot easy presets (id: 187) to star trails (id: 1) | GET | /gopro/camera/setting?setting=187&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
187 | Lapse Mode | Set multi shot easy presets (id: 187) to light painting (id: 2) | GET | /gopro/camera/setting?setting=187&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
187 | Lapse Mode | Set multi shot easy presets (id: 187) to vehicle lights (id: 3) | GET | /gopro/camera/setting?setting=187&option=3 | ✔ | ❌ | ❌ | ❌ | ❌ |
187 | Lapse Mode | Set multi shot easy presets (id: 187) to max timewarp (id: 4) | GET | /gopro/camera/setting?setting=187&option=4 | ✔ | ❌ | ❌ | ❌ | ❌ |
187 | Lapse Mode | Set multi shot easy presets (id: 187) to max star trails (id: 5) | GET | /gopro/camera/setting?setting=187&option=5 | ✔ | ❌ | ❌ | ❌ | ❌ |
187 | Lapse Mode | Set multi shot easy presets (id: 187) to max light painting (id: 6) | GET | /gopro/camera/setting?setting=187&option=6 | ✔ | ❌ | ❌ | ❌ | ❌ |
187 | Lapse Mode | Set multi shot easy presets (id: 187) to max vehicle lights (id: 7) | GET | /gopro/camera/setting?setting=187&option=7 | ✔ | ❌ | ❌ | ❌ | ❌ |
188 | Aspect Ratio | Set multi shot easy aspect ratio (id: 188) to widescreen (id: 0) | GET | /gopro/camera/setting?setting=188&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
188 | Aspect Ratio | Set multi shot easy aspect ratio (id: 188) to mobile (id: 1) | GET | /gopro/camera/setting?setting=188&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
188 | Aspect Ratio | Set multi shot easy aspect ratio (id: 188) to universal (id: 2) | GET | /gopro/camera/setting?setting=188&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
189 | Max Lens Mod | Set system addon lens active (id: 189) to none (id: 0) | GET | /gopro/camera/setting?setting=189&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
189 | Max Lens Mod | Set system addon lens active (id: 189) to max lens 1.0 (id: 1) | GET | /gopro/camera/setting?setting=189&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
189 | Max Lens Mod | Set system addon lens active (id: 189) to max lens 2.0 (id: 2) | GET | /gopro/camera/setting?setting=189&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
190 | Max Lens Mod Enable | Set system addon lens status (id: 190) to off (id: 0) | GET | /gopro/camera/setting?setting=190&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
190 | Max Lens Mod Enable | Set system addon lens status (id: 190) to on (id: 1) | GET | /gopro/camera/setting?setting=190&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
191 | Photo Mode | Set photo easy presets (id: 191) to super photo (id: 0) | GET | /gopro/camera/setting?setting=191&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
191 | Photo Mode | Set photo easy presets (id: 191) to night photo (id: 1) | GET | /gopro/camera/setting?setting=191&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
192 | Aspect Ratio | Set multi shot nlv aspect ratio (id: 192) to 4:3 (id: 0) | GET | /gopro/camera/setting?setting=192&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
192 | Aspect Ratio | Set multi shot nlv aspect ratio (id: 192) to 16:9 (id: 1) | GET | /gopro/camera/setting?setting=192&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
192 | Aspect Ratio | Set multi shot nlv aspect ratio (id: 192) to 8:7 (id: 3) | GET | /gopro/camera/setting?setting=192&option=3 | ✔ | ❌ | ❌ | ❌ | ❌ |
193 | Framing | Set video easy framing (id: 193) to widescreen (id: 0) | GET | /gopro/camera/setting?setting=193&option=0 | ✔ | ❌ | ❌ | ❌ | ❌ |
193 | Framing | Set video easy framing (id: 193) to vertical (id: 1) | GET | /gopro/camera/setting?setting=193&option=1 | ✔ | ❌ | ❌ | ❌ | ❌ |
193 | Framing | Set video easy framing (id: 193) to full frame (id: 2) | GET | /gopro/camera/setting?setting=193&option=2 | ✔ | ❌ | ❌ | ❌ | ❌ |
Camera Capabilities
Camera capabilities usually change from one camera to another and often change from one release to the next. Below are documents that detail whitelists for basic video settings for every supported camera release.
Note about Dependency Ordering and Blacklisting
Capability documents define supported camera states. Each state is comprised of a set of setting options that are presented in dependency order. This means each state is guaranteed to be attainable if and only if the setting options are set in the order presented. Failure to adhere to dependency ordering may result in the camera's blacklist rules rejecting a set-setting command.
Example
Camera | Command 1 | Command 2 | Command 3 | Command 4 | Command 5 | Guaranteed Valid? |
HERO10 Black | Res: 1080 | Anti-Flicker: 60Hz (NTSC) | FPS: 240 | FOV: Wide | Hypersmooth: OFF | ✔ |
HERO10 Black | FPS: 240 | Anti-Flicker: 60Hz (NTSC) | Res: 1080 | FOV: Wide | Hypersmooth: OFF | ❌ |
In the example above, the first set of commands will always work for basic video presets such as Standard.
In the second example, suppose the camera's Video Resolution was previously set to 4K. If the user tries to set Video FPS to 240, it will fail because 4K/240fps is not supported.
Capability Documents
Documents | Product | Release |
capabilities.xlsx capabilities.json |
HERO12 Black | v01.30.00 |
v01.20.00 | ||
v01.10.00 | ||
HERO11 Black Mini | v02.30.00 | |
v02.20.00 | ||
v02.10.00 | ||
v02.00.00 | ||
v01.10.00 | ||
HERO11 Black | v02.12.00 | |
v02.10.00 | ||
v02.01.00 | ||
v01.20.00 | ||
v01.12.00 | ||
v01.10.00 | ||
HERO10 Black | v01.50.00 | |
v01.46.00 | ||
v01.42.00 | ||
v01.40.00 | ||
v01.30.00 | ||
v01.20.00 | ||
v01.16.00 | ||
v01.10.00 | ||
HERO9 Black | v01.72.00 | |
v01.70.00 |
Spreadsheet Format
The capabilities spreadsheet contains worksheets for every supported release. Each row in a worksheet represents a whitelisted state and is presented in dependency order as outlined above.
JSON Format
The capabilities JSON contains a set of whitelist states for every supported release. Each state is comprised of a list of objects that contain setting and option IDs necessary to construct set-setting commands and are given in dependency order as outlined above.
Below is a simplified example of the capabilities JSON file; a formal schema is also available here: capabilities_schema.json
{
"(PRODUCT_NAME)": {
"(RELEASE_VERSION)": {
"states": [
[
{"setting_name": "(str)", "setting_id": (int), "option_name": "(str)", "option_id": (int)},
...
],
...
],
},
...
},
...
}
Media
The camera provides an endpoint to query basic details about media captured on the sdcard.
Chapters
All GoPro cameras break longer videos into chapters. GoPro cameras currently limit file sizes on sdcards to 4GB for both FAT32 and exFAT file systems. This limitation is most commonly seen when recording longer (10+ minute) videos. In practice, the camera will split video media into chapters named Gqccmmmm.MP4 (and ones for THM/LRV) such that:
- q: Quality Level (X: Extreme, H: High, M: Medium, L: Low)
- cc: Chapter Number (01-99)
- mmmm: Media ID (0001-9999)
When media becomes chaptered, the camera increments subsequent Chapter Numbers while leaving the Media ID unchanged. For example, if the user records a long High-quality video that results in 4 chapters, the files on the sdcard may look like the following:
-rwxrwxrwx@ 1 gopro 123456789 4006413091 Jan 1 00:00 GH010078.MP4
-rwxrwxrwx@ 1 gopro 123456789 17663 Jan 1 00:00 GH010078.THM
-rwxrwxrwx@ 1 gopro 123456789 4006001541 Jan 1 00:00 GH020078.MP4
-rwxrwxrwx@ 1 gopro 123456789 17357 Jan 1 00:00 GH020078.THM
-rwxrwxrwx@ 1 gopro 123456789 4006041985 Jan 1 00:00 GH030078.MP4
-rwxrwxrwx@ 1 gopro 123456789 17204 Jan 1 00:00 GH030078.THM
-rwxrwxrwx@ 1 gopro 123456789 756706872 Jan 1 00:00 GH040078.MP4
-rwxrwxrwx@ 1 gopro 123456789 17420 Jan 1 00:00 GH040078.THM
-rwxrwxrwx@ 1 gopro 123456789 184526939 Jan 1 00:00 GL010078.LRV
-rwxrwxrwx@ 1 gopro 123456789 184519787 Jan 1 00:00 GL020078.LRV
-rwxrwxrwx@ 1 gopro 123456789 184517614 Jan 1 00:00 GL030078.LRV
-rwxrwxrwx@ 1 gopro 123456789 34877660 Jan 1 00:00 GL040078.LRV
Media Info Format
The Media: Info command provides additional details about a media above and beyond its counterpart, the Media: List command. Such information includes resolution, frame rate, duration, hilight info, etc.
Example Video Info:
{
"cre": "1613676644",
"s": "11305367",
"mahs": "1",
"us": "0",
"mos": [],
"eis": "0",
"pta": "1",
"ao": "stereo",
"tr": "0",
"mp": "0",
"ct": "0",
"rot": "0",
"fov": "4",
"lc": "0",
"prjn": "6",
"gumi": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"ls": "1072714",
"cl": "0",
"avc_profile": "4",
"profile": "42",
"hc": "0",
"hi": [],
"dur": "2",
"w": "1920",
"h": "1080",
"fps": "60000",
"fps_denom": "1001",
"prog": "1",
"subsample": "0"
}
Common Keys (Video / Photo)
Key | Type | Description | Examples |
ao | string | Audio Option | off, stereo, wind, auto |
avc_profile | uint8 | Advanced Video Codec Profile | 0..255 |
cl | bool | File clipped from another source? | 0:false, 1:true |
cre | uint32 | File creation timestamp (sec since epoch) | 1692992748 |
ct | uint32 | Content type | 0..12 |
dur | uint32 | Duration of video in seconds | 42 |
eis | bool | File made with Electronic Image Stabilization | 0:false, 1:true |
fps | uint32 | Frame rate (numerator) | 1001 |
fps_denom | uint32 | Frme rate (denominator) | 30000 |
gumi | string | Globally Unique Media ID | “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” |
h | uint32 | Video height in pixels | 1080 |
hc | uint32 | Hilight count | video:0..99, photo:0..1 |
hdr | bool | Photo taken with High Dynamic Range? | 0:false, 1:true |
hi | Array of uint32 | Offset to hilights in media in milliseconds | [1500, 4700] |
lc | uint32 | Spherical Lens Config | 0:front, 1:rear |
ls | int32 | Low Resolution Video file size in bytes (or -1 if no LRV file) | -1, 1234567890 |
mos | Array of string | Mobile Offload State | “app”, “pc”, “other” |
mp | bool | Metadata Present? | 0:no metadata, 1:metadata exists |
profile | uint8 | Advanced Video Codec Level | 0..255 |
prog | bool | Is video progressive? | 0:interlaced, 1:progressive |
pta | bool | Media has Protune audio file? | 0:false, 1:true |
raw | bool | Photo has raw version? | 0:false, 1:true |
s | uint64 | File size in bytes | 1234567890 |
subsample | bool | Is video subsampled? | 0:false, 1:true |
tr | bool | Is file transcoded? | 0:false, 1:true |
w | uint32 | Width of media in pixels | 1920 |
wdr | bool | Photo taken with Wide Dynamic Range? | 0:false, 1:true |
Video Keys
Key | Type | Description | Examples |
ao | string | Audio Option | off, stereo, wind, auto |
avc_profile | uint8 | Advanced Video Codec Profile | 0..255 |
cl | bool | File clipped from another source? | 0:false, 1:true |
dur | uint32 | Duration of video in seconds | 42 |
fps | uint32 | Frame rate (numerator) | 1001 |
fps_denom | uint32 | Frme rate (denominator) | 30000 |
hi | Array of uint32 | Offset to hilights in media in milliseconds | [1500, 4700] |
ls | int32 | Low Resolution Video file size in bytes (or -1 if no LRV file) | -1, 1234567890 |
profile | uint8 | Advanced Video Codec Level | 0..255 |
prog | bool | Is video progressive? | 0:interlaced, 1:progressive |
pta | bool | Media has Protune audio file? | 0:false, 1:true |
subsample | bool | Is video subsampled? | 0:false, 1:true |
Photo Keys
Key | Type | Description | Examples |
hdr | bool | Photo taken with High Dynamic Range? | 0:false, 1:true |
raw | bool | Photo has raw version? | 0:false, 1:true |
wdr | bool | Photo taken with Wide Dynamic Range? | 0:false, 1:true |
Media Info: Content Type
The "ct" (Content Type) metadata indicates what mode (or group) the media was captured in.
Note: All Time Lapse modes that result in MPEG media use the same content type ID.
ID | Mode |
Video | 0 |
Looping | 1 |
Chaptered Video | 2 |
Time Lapse | 3 |
Single Photo | 4 |
Burst Photo | 5 |
Time Lapse Photo | 6 |
Night Lapse Photo | 8 |
Night Photo | 9 |
Continuous Photo | 10 |
Raw Photo | 11 |
Live Burst | 12 |
Media List Format
The format of the media list is given below.
{
"id": "<MEDIA SESSION ID>",
"media": [
{
"d": "<DIRECTORY NAME>",
"fs": [
{<MEDIA ITEM INFO>},
...
]
},
...
]
}
Media List Keys
The outer structure of the media list and the inner structure of individual media items use the keys in the table below.
Key | Description |
b | ID of first member of a group (for grouped media items) |
cre | Creation timestamp (seconds since epoch) |
d | Directory name |
fs | File system. Contains listing of media items in directory |
g | Group ID (if grouped media item) |
glrv | Low resolution video file size |
id | Media list session identifier |
l | ID of last member of a group (for grouped media items) |
m | List of missing/deleted group member IDs (for grouped media items) |
media | Contains media info for for each directory (e.g. 100GOPRO/, 101GOPRO/, …) |
mod | Last modified time (seconds since epoch) |
n | Media filename |
s | Size of (group) media in bytes |
t | Group type (for grouped media items) (b -> burst, c -> continuous shot, n -> night lapse, t -> time lapse) |
Grouped Media Items
To minimize the size of the JSON transmitted by the camera, grouped media items such as Burst Photos, Time Lapse Photos, Night Lapse Photos, etc are represented with a single item in the media list with additional keys that allow the user to extrapolate individual filenames for each member of the group.
Filenames for group media items have the form "GXXXYYYY.ZZZ" where XXX is the group ID, YYY is the group member ID and ZZZ is the file extension.
For example, take the media list below, which contains a Time Lapse Photo group media item:
{
"id": "2530266050123724003",
"media": [
{
"d": "100GOPRO",
"fs": [
{
"b": "8",
"cre": "1613669353",
"g": "1",
"l": "396",
"m": ['75', '139'],
"mod": "1613669353",
"n": "G0010008.JPG",
"s": "773977407",
"t": "t"
}
]
}
]
}
The first filename in the group is "G0010008.JPG" (key: "n").
The ID of the first group member in this case is "008" (key: "b").
The ID of the last group member in this case is "396" (key: "l").
The IDs of deleted members in this case are "75" and "139" (key: "m")
Given this information, the user can extrapolate that the group currently contains
G0010008.JPG, G0010009.JPG, G0010010.JPG,
...,
G0010074.JPG, G0010076.JPG,
...,
G0010138.JPG, G0010140.JPG,
...,
G0010394.JPG, G0010395.JPG. G0010396.JPG
Media HiLights
The HiLight Tags feature allows the user to tag moments of interest either during video capture or on existing media.
Add/Remove HiLights
Below is a table of all HiLight commands. For details on how to send HiLight commands, see Commands Quick Reference.
Command | Description |
Media: HiLight (Add) | Video: Add a tag at a specific time offset (ms) Photo: Add a tag |
Media: HiLight (Remove) | Video: Remove a tag at a specific time offset (ms) Photo: Remove tag |
Media: HiLight Moment | Add a tag to the current time offset (ms) while encoding video |
Note: Attempting to add a HiLight tag at a time offset that exceeds the duration of the video or removing a non-existent HiLight tag will result in an HTTP/500 error.
Get HiLights
Once HiLight tags have been added, they can be queried by calling the Media: Info command; the response content will be JSON that contains HiLight information:
Media Type | Key | Value |
Photo | hc | HiLight Count |
Video | hc | HiLight Count |
Video | hi | HiLights (list of time offsets in ms) |
Example
The JSON sample below shows media that contains three HiLights at time offsets 2502ms, 5839ms, and 11478ms. Note: Photo info will not have an "hi":[...] key-value pair.
{
...,
"hc":"3",
"hi":[2502,5839,11478],
...,
}
Downloading Media
The URL to download/stream media from the DCIM/ directory on the sdcard is the Base URL plus /videos/DCIM/XXX/YYY where XXX is the directory name within DCIM/ given by the media list and YYY is the target media filename.
For example: Given the following media list:
{
"id": "3586667939918700960",
"media": [
{
"d": "100GOPRO",
"fs": [
{
"n": "GH010397.MP4",
"cre": "1613672729",
"mod": "1613672729",
"glrv": "1895626",
"ls": "-1",
"s": "19917136"
},
{
"cre": "1614340213",
"mod": "1614340213",
"n": "GOPR0001.JPG",
"s": "6961371"
}
]
}
]
}
The URL to download GH010397.MP4 over WiFi would be http://10.5.5.9:8080/videos/DCIM/100GOPRO/GH010397.MP4
The URL to download GOPR0001.JPG over WiFi would be http://10.5.5.9:8080/videos/DCIM/100GOPRO/GOPR0001.JPG
Turbo Transfer
Some cameras support Turbo Transfer mode, which allows media to be downloaded over WiFi more rapidly. This special mode should only be used during media offload. It is recommended that the user check for and--if necessary--disable Turbo Transfer on connect. For details on which cameras are supported and how to enable and disable Turbo Transfer, see Commands Quick Reference.
Downloading Preview Stream
When the preview stream is started, the camera starts up a UDP client and begins writing MPEG Transport Stream data to the client on port 8554. In order to stream this data, the client must implement a UDP connection that binds to the same port and decode the data.
Camera State
The camera provides multiple types of state, all of which can be queried:
- Camera state: Contains information about camera status (photos taken, date, is-camera-encoding, etc) and settings (current video resolution, current frame rate, etc)
- Preset State: How presets are arranged into preset groups, their titles, icons, settings closely associated with each preset, etc
Camera State Format
Camera state is given in the following form:
{
"status": {
"1": <status 1 value>,
"2": <status 2 value>,
...
},
"settings: {
"2": <setting 2 value>,
"3": <setting 3 value>,
...
}
}
Where status X value and setting X value are almost always integer values. See Status Codes table in this document for exceptions.
For status, keys are status codes and values are status values.
For settings, keys are setting IDs, and values are option values
Status IDs
Below is a table of supported status IDs.
* Indicates that item is experimental
✔ Indicates support for all Open GoPro firmware versions.
❌ Indicates a lack of support for all Open GoPro firmware versions.
>= vXX.YY.ZZ indicates support for firmware versions equal to or newer than vXX.YY.ZZ
Status ID | Name | Description | Type | Values | HERO12 Black | HERO11 Black Mini | HERO11 Black | HERO10 Black | HERO9 Black |
1 | Internal battery present | Is the system’s internal battery present? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
2 | Internal battery level | Rough approximation of internal battery level in bars | integer | 0: Zero 1: One 2: Two 3: Three |
✔ | ✔ | ✔ | ✔ | ✔ |
6 | System hot | Is the system currently overheating? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
8 | System busy | Is the camera busy? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
9 | Quick capture active | Is Quick Capture feature enabled? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
10 | Encoding active | Is the system encoding right now? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
11 | Lcd lock active | Is LCD lock active? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
13 | Video progress counter | When encoding video, this is the duration (seconds) of the video so far; 0 otherwise | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
17 | Enable | Are Wireless Connections enabled? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
19 | State | The pairing state of the camera | integer | 0: Never Started 1: Started 2: Aborted 3: Cancelled 4: Completed |
✔ | ✔ | ✔ | ✔ | ✔ |
20 | Type | The last type of pairing that the camera was engaged in | integer | 0: Not Pairing 1: Pairing App 2: Pairing Remote Control 3: Pairing Bluetooth Device |
✔ | ✔ | ✔ | ✔ | ✔ |
21 | Pair time | Time (milliseconds) since boot of last successful pairing complete action | integer | * | ❌ | ✔ | ✔ | ✔ | ✔ |
22 | State | State of current scan for WiFi Access Points. Appears to only change for CAH-related scans | integer | 0: Never started 1: Started 2: Aborted 3: Canceled 4: Completed |
✔ | ✔ | ✔ | ✔ | ✔ |
23 | Scan time msec | The time, in milliseconds since boot that the WiFi Access Point scan completed | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
24 | Provision status | WiFi AP provisioning state | integer | 0: Never started 1: Started 2: Aborted 3: Canceled 4: Completed |
✔ | ✔ | ✔ | ✔ | ✔ |
26 | Remote control version | Wireless remote control version | integer | * | ❌ | ✔ | ✔ | ✔ | ✔ |
27 | Remote control connected | Is a wireless remote control connected? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
28 | Pairing | Wireless Pairing State | integer | * | ❌ | ✔ | ✔ | ✔ | ✔ |
29 | Wlan ssid | Provisioned WIFI AP SSID. On BLE connection, value is big-endian byte-encoded int | string | * | ✔ | ✔ | ✔ | ✔ | ✔ |
30 | Ap ssid | Camera’s WIFI SSID. On BLE connection, value is big-endian byte-encoded int | string | * | ✔ | ✔ | ✔ | ✔ | ✔ |
31 | App count | The number of wireless devices connected to the camera | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
32 | Enable | Is Preview Stream enabled? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
33 | Sd status | Primary Storage Status | integer | -1: Unknown 0: OK 1: SD Card Full 2: SD Card Removed 3: SD Card Format Error 4: SD Card Busy 8: SD Card Swapped |
✔ | ✔ | ✔ | ✔ | ✔ |
34 | Remaining photos | How many photos can be taken before sdcard is full | integer | * | ✔ | ❌ | ✔ | ✔ | ✔ |
35 | Remaining video time | How many minutes of video can be captured with current settings before sdcard is full | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
36 | Num group photos | Total number of group photos on sdcard | integer | * | ✔ | ❌ | ✔ | ✔ | ✔ |
37 | Num group videos | Total number of group videos on sdcard | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
38 | Num total photos | Total number of photos on sdcard | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
39 | Num total videos | Total number of videos on sdcard | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
41 | Ota status | The current status of Over The Air (OTA) update | integer | 0: Idle 1: Downloading 2: Verifying 3: Download Failed 4: Verify Failed 5: Ready 6: GoPro App: Downloading 7: GoPro App: Verifying 8: GoPro App: Download Failed 9: GoPro App: Verify Failed 10: GoPro App: Ready |
✔ | ✔ | ✔ | ✔ | ✔ |
42 | Download cancel request pending | Is there a pending request to cancel a firmware update download? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
45 | Camera locate active | Is locate camera feature active? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
49 | Multi shot count down | The current timelapse interval countdown value (e.g. 5…4…3…2…1…) | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
54 | Remaining space | Remaining space on the sdcard in Kilobytes | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
55 | Supported | Is preview stream supported in current recording/mode/secondary-stream? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
56 | Wifi bars | WiFi signal strength in bars | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
58 | Num hilights | The number of hilights in encoding video (set to 0 when encoding stops) | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
59 | Last hilight time msec | Time since boot (msec) of most recent hilight in encoding video (set to 0 when encoding stops) | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
60 | Next poll msec | The min time between camera status updates (msec). Do not poll for status more often than this | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
64 | Remaining timelapse time | How many min of Timelapse video can be captured with current settings before sdcard is full | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
65 | Exposure select type | Liveview Exposure Select Mode | integer | 0: Disabled 1: Auto 2: ISO Lock 3: Hemisphere |
✔ | ❌ | ✔ | ✔ | ✔ |
66 | Exposure select x | Liveview Exposure Select: y-coordinate (percent) | percent | 0-100 | ✔ | ❌ | ✔ | ✔ | ✔ |
67 | Exposure select y | Liveview Exposure Select: y-coordinate (percent) | percent | 0-100 | ✔ | ❌ | ✔ | ✔ | ✔ |
68 | Gps status | Does the camera currently have a GPS lock? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
69 | Ap state | Is the camera in AP Mode? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
70 | Internal battery percentage | Internal battery level (percent) | percent | 0-100 | ✔ | ✔ | ✔ | ✔ | ✔ |
74 | Acc mic status | Microphone Accesstory status | integer | 0: Microphone mod not connected 1: Microphone mod connected 2: Microphone mod connected and microphone plugged into Microphone mod |
✔ | ✔ | ✔ | ✔ | ✔ |
75 | Digital zoom | Digital Zoom level (percent) | percent | 0-100 | ✔ | ✔ | ✔ | ✔ | ✔ |
76 | Wireless band | Wireless Band | integer | 0: 2.4 GHz 1: 5 GHz 2: Max |
✔ | ✔ | ✔ | ✔ | ✔ |
77 | Digital zoom active | Is Digital Zoom feature available? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
78 | Mobile friendly video | Are current video settings mobile friendly? (related to video compression and frame rate) | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
79 | First time use | Is the camera currently in First Time Use (FTU) UI flow? | boolean | 0: False 1: True |
❌ | ❌ | ❌ | ✔ | ✔ |
81 | Band 5ghz avail | Is 5GHz wireless band available? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
82 | System ready | Is the system ready to accept commands? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
83 | Batt okay for ota | Is the internal battery charged sufficiently to start Over The Air (OTA) update? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
85 | Video low temp alert | Is the camera getting too cold to continue recording? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
86 | Actual orientation | The rotational orientation of the camera | integer | 0: 0 degrees (upright) 1: 180 degrees (upside down) 2: 90 degrees (laying on right side) 3: 270 degrees (laying on left side) |
✔ | ✔ | ✔ | ✔ | ✔ |
88 | Zoom while encoding | Is this camera capable of zooming while encoding (static value based on model, not settings) | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
89 | Current mode | Current flatmode ID | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
93 | Active video presets | Current Video Preset (ID) | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
94 | Active photo presets | Current Photo Preset (ID) | integer | * | ✔ | ❌ | ✔ | ✔ | ✔ |
95 | Active timelapse presets | Current Timelapse Preset (ID) | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
96 | Active presets group | Current Preset Group (ID) | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
97 | Active preset | Current Preset (ID) | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
98 | Preset modified | Preset Modified Status, which contains an event ID and a preset (group) ID | integer | * | ✔ | ✔ | ✔ | ✔ | ✔ |
99 | Remaining live bursts | How many Live Bursts can be captured before sdcard is full | integer | * | ❌ | ❌ | ✔ | ✔ | ✔ |
100 | Num total live bursts | Total number of Live Bursts on sdcard | integer | * | ❌ | ❌ | ✔ | ✔ | ✔ |
101 | Capture delay active | Is Capture Delay currently active (i.e. counting down)? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
102 | Media mod mic status | Media mod State | integer | 0: Media mod microphone removed 2: Media mod microphone only 3: Media mod microphone with external microphone |
✔ | ✔ | ✔ | ✔ | ✔ |
103 | Timewarp speed ramp active | Time Warp Speed | integer | 0: 15x 1: 30x 2: 60x 3: 150x 4: 300x 5: 900x 6: 1800x 7: 2x 8: 5x 9: 10x 10: Auto 11: 1x (realtime) 12: 1/2x (slow-motion) |
✔ | ✔ | ✔ | ✔ | ✔ |
104 | Linux core active | Is the system’s Linux core active? | boolean | 0: False 1: True |
❌ | ❌ | ❌ | ✔ | ✔ |
105 | Camera lens type | Camera lens type (reflects changes to setting 162 or setting 189) | integer | 0: Default 1: Max Lens 2: Max Lens 2.0 |
✔ | ✔ | ✔ | ✔ | ✔ |
106 | Video hindsight capture active | Is Video Hindsight Capture Active? | boolean | 0: False 1: True |
✔ | ❌ | ✔ | ✔ | ✔ |
107 | Scheduled preset | Scheduled Capture Preset ID | integer | * | ✔ | ❌ | ✔ | ✔ | ✔ |
108 | Scheduled enabled | Is Scheduled Capture set? | boolean | 0: False 1: True |
✔ | ❌ | ✔ | ✔ | ✔ |
110 | Media mod status | Media Mode Status (bitmasked) | integer | 0: 000 = Selfie mod: 0, HDMI: 0, Media Mod Connected: False 1: 001 = Selfie mod: 0, HDMI: 0, Media Mod Connected: True 2: 010 = Selfie mod: 0, HDMI: 1, Media Mod Connected: False 3: 011 = Selfie mod: 0, HDMI: 1, Media Mod Connected: True 4: 100 = Selfie mod: 1, HDMI: 0, Media Mod Connected: False 5: 101 = Selfie mod: 1, HDMI: 0, Media Mod Connected: True 6: 110 = Selfie mod: 1, HDMI: 1, Media Mod Connected: False 7: 111 = Selfie mod: 1, HDMI: 1, Media Mod Connected: True |
✔ | ❌ | ✔ | ✔ | ✔ |
111 | Sd rating check error | Does sdcard meet specified minimum write speed? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ❌ |
112 | Sd write speed error | Number of sdcard write speed errors since device booted | integer | * | ✔ | ✔ | ✔ | ✔ | ❌ |
113 | Turbo transfer | Is Turbo Transfer active? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ✔ |
114 | Camera control status | Camera control status ID | integer | 0: Camera Idle: No one is attempting to change camera settings 1: Camera Control: Camera is in a menu or changing settings. To intervene, app must request control 2: Camera External Control: An outside entity (app) has control and is in a menu or modifying settings |
✔ | ✔ | ✔ | ✔ | ❌ |
115 | Usb connected | Is the camera connected to a PC via USB? | boolean | 0: False 1: True |
✔ | ✔ | ✔ | ✔ | ❌ |
116 | Allow control over usb | Camera control over USB state | integer | 0: Disabled 1: Enabled |
✔ | ✔ | ✔ | >= v01.30.00 | ❌ |
117 | Total sd space kb | Total SD card capacity in Kilobytes | integer | * | ✔ | ✔ | ✔ | ❌ | ❌ |
Preset Status Format
Preset Status is returned as JSON, whose content is the serialization of the protobuf message: NotifyPresetStatus. Using Google protobuf APIs, the JSON can be converted back into a programmatic object in the user's language of choice.
Features
Presets
The camera organizes modes of operation into presets. A preset is a logical wrapper around a specific camera mode, title, icon, and a set of settings that enhance different styles of capturing media.
Depending on the camera's state, different collections of presets will be available for immediate loading and use. Below is a table of settings that affect the current preset collection and thereby which presets can be loaded:
ID | Setting |
162 | Max Lens |
173 | Video Performance Mode |
175 | Controls |
177 | Enable Night Photo |
180 | Video Mode |
186 | Video Mode |
187 | Lapse Mode |
189 | Max Lens Mod |
190 | Max Lens Mod Enable |
191 | Photo Mode |
To determine which presets are available for immediate use, get Preset Status.
Preset Status
All cameras support basic query and subscription mechanics that allow the user to:
- Get hierarchical data describing the Preset Groups, Presets, and Settings that are available in the camera's current state
Preset Status should not be confused with camera status:
- Preset Status contains information about current preset groups and presets
- Camera status contains numerous statuses about current settings and camera system state
Preset Groups
Each Preset Group contains an ID, whether additional presets can be added, and an array of existing Presets.
Presets
Each Preset contains information about its ID, associated core mode, title, icon, whether it's a user-defined preset, whether the preset has been modified from its factory-default state (for factory-default presets only) and an array of Settings associated with the Preset.
Important Note: The Preset ID is required to load a Preset via the Presets: Load command.
Global Behaviors
In order to prevent undefined behavior between the camera and a connected app, simultaneous use of the camera and a connected app is discouraged.
Best practice for synchronizing user/app control is to use the Set Camera Control Status command and corresponding Camera Control Status (CCS) camera statuses in alignment with the finite state machine below:
Control Status | ID |
IDLE | 0 |
CONTROL | 1 |
EXTERNAL_CONTROL | 2 |
Set Camera Control Status
This command is used to tell the camera that the app (i.e. External Control) wishes to claim control of the camera. This causes the camera to immediately exit any contextual menus and return to the idle screen. Any interaction with the camera's physical buttons will cause the camera to reclaim control and update control status accordingly. If the user returns the camera UI to the idle screen, the camera updates control status to Idle.
Note:
- The entity currently claiming control of the camera is advertised in camera status 114
- Information about whether the camera is in a contextual menu or not is advertised in camera status 63.
OTA Update
The Over The Air (OTA) update feature allows the user to update the camera's firmware via HTTP connection. There are two ways to perform OTA updates: Simple OTA Update and Resumable OTA Update.
Firmware update files can be obtained from GoPro's update page or programmatically using the firmware catalog.
Note: In order to complete the firmware update process, the camera will reboot one or more times. This will cause any existing HTTP connections to be lost.
Simple OTA Update
The simple OTA update process is done by sending an entire update file to the camera in a single HTTP/POST. Details can be found in the diagram below.
Resumable OTA Update
The resumable OTA update process involves uploading chunks (or all) of a file, marking the file complete and then telling the camera to begin the update process. Chunks are stored until they are explicitly deleted, allowing the client to stop and resume as needed. Details can be found in the diagram below.
OTA Update Status Codes
ID | Status | Description |
0 | Ok | No errors occurred |
1 | Unknown Request | Server did not recognize the request |
2 | Bad Params | Parameter values not recognized |
3 | SHA1 Send Mismatch | SHA1 for chunk did not match SHA1 of previous chunk(s) |
4 | SHA1 Calculates Mismatch | Calculated SHA1 did not match user-specified SHA1 |
5 | HTTP Boundary Error | HTTP Post malformed |
6 | HTTP Post Error | Unexpected HTTP/POST Content Type |
7 | Server Busy | HTTP server is busy |
8 | Offset Mismatch | Tried to upload chunk with offset that did not align with previous chunk |
9 | Bad Post Data | Server failed to parse POST data |
10 | File Incomplete | Tried to start update before server finished validating .zip file |
11 | Update in Progress | Firmware update in progress |
12 | Insufficient Space | Insufficient space on the sdcard to hold (decompressed) update file |
Webcam
The webcam feature enables developers who are interested in writing custom drivers to broadcast the camera's video preview with a limited set of resolution, field of view, port, and protocol options.
While active, the webcam feature sends raw data to the connected client using a supported protocol. To enable multi-cam support, some cameras support running on a user-specified port. Protocol and port details are provided in a table below.
To test basic functionality, start the webcam, and use an application such as VLC to open a network stream:
Protocol | VLC Network URL |
TS | udp://@:{PORT} |
RTSP | rtsp://{CAMERA_IP}:554/live |
For readers interested in using a GoPro camera as a webcam with preexisting tools, please see How to use GoPro as a Webcam.
Webcam Finite State Machine
Webcam Commands
Note: For USB connections, prior to issuing webcam commands, Wired USB Control should be disabled. For details about how to send this and webcam commands, see Commands Quick Reference.
Command | Connections | Description |
Webcam: Start | USB, WIFI* | Enters webcam mode, uses default resolution and last-used fov, starts high-res stream to the IP address of caller |
Webcam: Start (with args) | USB, WIFI* | Enters webcam mode, uses specified res/fov/protocol/port, starts streaming to the IP address of caller |
Webcam: Preview | USB, WIFI* | Enters webcam mode, sets stream resolution and bitrate, starts low-res stream to the IP address of caller. Can set Webcam Digital Lenses and Digital Zoom levels while streaming |
Webcam: Stop | USB, WIFI* | Stops the webcam stream |
Webcam: Exit | USB, WIFI* | Stops the webcam stream and exits webcam mode |
Webcam: Status | USB, WIFI | Returns the current state of the webcam endpoint, including status and error codes (see tables below) |
Webcam: Version | USB, WIFI | Provides version information about webcam implementation in JSON format |
* Indicates that connection is supported in HERO12 Black v01.10.00 and newer versions/models
Status Codes
Status | Code |
OFF | 0 |
IDLE | 1 |
HIGH_POWER_PREVIEW | 2 |
LOW_POWER_PREVIEW | 3 |
Error Codes
Status | Code |
NONE | 0 |
SET_PRESET | 1 |
SET_WINDOW_SIZE | 2 |
EXEC_STREAM | 3 |
SHUTTER | 4 |
COM_TIMEOUT | 5 |
INVALID_PARAM | 6 |
UNAVAILABLE | 7 |
EXIT | 8 |
Webcam Capabilities
Webcam supports setting resolution and field of view. Changing other settings while in IDLE state such as Hypersmooth may succeed but are not officially supported.
There is a known issue on some cameras in which the webcam status will be wrongly reported as IDLE instead of OFF after a new USB connection. The best workaround for this is to call Webcam: Start followed by the Webcam: Stop after connecting USB in order to attain the true IDLE state.
Default Parameter Values
Parameter | Default Value |
res | 12 (1080p) |
fov | Last-used or 0 (Wide) if FOV not previously set |
protocol | “TS” |
Webcam Capabilities
Camera | Resolution | FOV |
HERO12 Black | 720p (id: 7) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) |
1080p (id: 12) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) | |
HERO11 Black | 720p (id: 7) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) |
1080p (id: 12) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) | |
HERO10 Black | 480p (id: 4) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) |
720p (id: 7) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) | |
1080p (id: 12) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) | |
HERO9 Black | 480p (id: 4) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) |
720p (id: 7) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) | |
1080p (id: 12) | Wide (id: 0), Narrow (id: 2), Superview (id: 3), Linear (id: 4) |
Supported Protocols
Camera | Protocol | Default Port | Supports User-Defined Port? |
HERO12 Black | TS | 8554 | ✔ |
RTSP | 554 | ❌ | |
HERO11 Black | TS | 8554 | ✔ |
HERO10 Black | TS | 8554 | ❌ |
HERO9 Black | TS | 8554 | ❌ |
Webcam Stabilization
Should the client require stabilization, the Hypersmooth setting can be used while in the state: READY (Status: OFF). This setting can only be set while webcam is disabled, which requires either sending the Webcam: Exit command or reseating the USB-C connection to the camera.
Note: The Low Hypersmooth option provides lower/lighter stabilization when used in Webcam mode vs other camera modes.
Camera | Version | Supported Hypersmooth Options |
HERO12 Black | v01.10.00+ | Off (id: 0), Low (id: 1), Auto Boost (id: 4) |
HERO11 Black Mini | v01.10.00+ | Off (id: 0), Low (id: 1), Boost (id: 3), Auto Boost (id: 4) |
HERO11 Black | v01.10.00+ | Off (id: 0), Low (id: 1), Boost (id: 3), Auto Boost (id: 4) |
HERO10 Black | v01.10.00+ | Off (id: 0), High (id: 2), Boost (id: 3), Standard (id: 100) |
HERO9 Black | v01.70.00+ | Off (id: 0), Low (id: 1), High (id: 2), Boost (id: 3) |
Camera On the Home Network (COHN)
Some cameras support Camera On the Home Network (COHN). This capability allows the client to perform command and control with the camera indirectly through an access point such as a router at home. For security purposes, all communications are performed over HTTPS.
Camera | Supported |
HERO12 Black | ✔ |
HERO11 Black Mini | ❌ |
HERO11 Black | ❌ |
HERO10 Black | ❌ |
HERO9 Black | ❌ |
Provisioning COHN
In order to use the COHN capability, the camera must first be provisioned for COHN. For instructions on how to do this, see Open GoPro BLE spec.
Send Messages via HTTPS
Once the camera is provisioned, the client can issue commands and set settings via HTTPS using the COHN certificate and Basic authorization (username/password) credentials obtained during provisioning or subsequently by querying for COHN status.
HTTPS Headers
All HTTPS messages must contain Basic access authentication headers, using the username and password from the COHN status obtained during or after provisioning.
COHN Commands
Command
Command | Response Format | Description |
/GoProRootCA.crt | Text | Get COHN cert |
/gopro/cohn/status | JSON | Get current COHN status |
Get COHN Cert
The /GoProRootCA.crt endpoint provides a way to obtain the COHN cert via HTTP(S). The response content is in plain text. For example:
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----
Get COHN Status
The /gopro/cohn/status endpoint provides a way to get the current status of COHN. The status's format is NotifyCOHNStatus (a Google Procol Buffer v2 message) converted into JSON.
Example:
{
"status": "COHN_PROVISIONED",
"state": "COHN_STATE_NetworkConnected",
"username": "gopro",
"password": "xxxxxxxxxxxx",
"ipaddress": "xxx.xxx.xxx.xxx",
"enabled": true
}
Limitations
HERO12 Black
- The camera will reject requests to change settings while encoding; for example, if Hindsight feature is active, the user cannot change settings
- HTTP command arguments must be given in the order outlined in Commands Quick Reference
HERO11 Black Mini
- The camera will reject requests to change settings while encoding; for example, if Hindsight feature is active, the user cannot change settings
- HTTP command arguments must be given in the order outlined in Commands Quick Reference
HERO11 Black
- The camera will reject requests to change settings while encoding; for example, if Hindsight feature is active, the user cannot change settings
- HTTP command arguments must be given in the order outlined in Commands Quick Reference
HERO10 Black
- The camera will reject requests to change settings while encoding; for example, if Hindsight feature is active, the user cannot change settings
- HTTP command arguments must be given in the order outlined in Commands Quick Reference
HERO9 Black
- The HTTP server is not available while the camera is encoding, which means shutter controls are not supported over WiFi. This limitation can be overcome by using Bluetooth Low Energy for command and control and HTTP/REST for querying media content such as media list, media info, preview stream, etc.
- USB command and control is not supported on HERO9 Black.
- HTTP command arguments must be given in the order outlined in Commands Quick Reference
General
- Unless changed by the user, GoPro cameras will automatically power off after some time (e.g. 5min, 15min, 30min). The Auto Power Down watchdog timer can be reset by sending periodic keep-alive messages to the camera. It is recommended to send a keep-alive at least once every 120 seconds.
- In general, querying the value for a setting that is not associated with the current preset/core mode results in an undefined value. For example, the user should not try to query the current Photo Digital Lenses (FOV) value while in Standard preset (Video mode).