Skip to content

Instantly share code, notes, and snippets.

@gWOLF3
Created May 2, 2025 19:20
Show Gist options
  • Save gWOLF3/669289bd59e5590c9f3d944b8673bfef to your computer and use it in GitHub Desktop.
Save gWOLF3/669289bd59e5590c9f3d944b8673bfef to your computer and use it in GitHub Desktop.
reolink http api summary
Reolink Camera HTTP API (Condensed)
Protocol
HTTP/HTTPS: POST only, JSON payload, Content-Type: application/json or application/octet-stream (for uploads).
URL: https://<camera_ip>/api.cgi?cmd=<command>[&token=<token>]
Authentication:
Long Session: Login to get token (3600s lease), append &token=<token> to URLs.
Short Session: Append &user=<username>&password=<password> to URLs.
JSON Structure:[{"cmd": "<command>", "action": 0|1, "param": {...}}]
action: 0 (set), 1 (get initial/range).
Response: [{"cmd": "<command>", "code": 0, "value": {...}}] or "error": {"rspCode": <code>, "detail": "<msg>"}.
Core Commands
System
GetAbility: cmd=GetAbility, param: {"User": {"userName": "<name>"}}. Returns permissions (permit), versions (ver).
GetDevInfo: cmd=GetDevInfo. Returns model, firmware, channel count, etc.
Get/SetDevName: cmd=GetDevName/SetDevName, param: {"channel": 0, "DevName": {"name": "<name>"}}.
Get/SetTime: cmd=GetTime/SetTime, param: {"Dst": {"enable": 0|1, ...}, "Time": {"year": <int>, "timeFmt": "DD/MM/YYYY", "timeZone": <seconds>, "hourFmt": 0|1}}.
Get/SetAutoMaint: cmd=GetAutoMaint/SetAutoMaint, param: {"AutoMaint": {"enable": 0|1, "weekDay": "<day>", "hour": <int>, ...}}.
GetHddInfo: cmd=GetHddInfo. Returns storage capacity, format status.
Format: cmd=Format, param: {"HddInfo": {"id": [<int>]}}.
Upgrade: cmd=Upgrade&clearConfig=<0|1>, multipart upgrade-package (max 40K chunks). Precede with UpgradePrepare.
UpgradePrepare: cmd=UpgradePrepare, param: {"restoreCfg": 0|1, "fileName": "<name>.pak"}.
Restore/Reboot: cmd=Restore/Reboot.
Get/SetAutoUpgrade: cmd=GetAutoUpgrade/SetAutoUpgrade, param: {"AutoUpgrade": {"enable": 0|1}}.
CheckFirmware/UpgradeOnline/UpgradeStatus: cmd=CheckFirmware/UpgradeOnline/UpgradeStatus. Check/start/monitor online upgrades.
Getchannelstatus: cmd=Getchannelstatus. Returns NVR channel status.
Security
Login: cmd=Login, param: {"User": {"Version": "0", "userName": "<name>", "password": "<pass>"}}. Returns Token: {"name": "<token>", "leaseTime": 3600}.
Logout: cmd=Logout.
Get/Add/Del/ModifyUser: cmd=GetUser/AddUser/DelUser/ModifyUser, param: {"User": {"userName": "<name>", "password": "<pass>", "level": "admin|guest"}}. Max 20 users.
GetOnline/Disconnect: cmd=GetOnline/Disconnect, param: {"User": {"userName": "<name>", "sessionId": <int>}}.
Get/SetSysCfg: cmd=GetSysCfg/SetSysCfg, param: {"SysCfg": {"loginLock": 0|1}}.
Network
Get/SetLocalLink: cmd=GetLocalLink/SetLocalLink, param: {"LocalLink": {"type": "DHCP|Static", "static": {"ip": "<ip>", "mask": "<mask>", "gateway": "<gw>"}, "dns": {"auto": 0|1, "dns1": "<ip>", "dns2": "<ip>"}}}.
Get/SetDdns: cmd=GetDdns/SetDdns, param: {"Ddns": {"enable": 0|1, "type": "no-ip|Dyndns", "userName": "<name>", "password": "<pass>", "domain": "<domain>"}}.
Get/SetEmail(V20): cmd=GetEmail|GetEmailV20/SetEmail|SetEmailV20, param: {"Email": {"smtpServer": "<server>", "smtpPort": <int>, "userName": "<email>", "password": "<pass>", "ssl": 0|1, "interval": "<time>", "addr1|2|3": "<email>", "schedule": {"enable": 0|1, "table": {"MD": "<168-bit>"}}}}.
TestEmail: cmd=TestEmail, param: {"Email": {...}}.
Get/SetFtp(V20): cmd=GetFtp|GetFtpV20/SetFtp|SetFtpV20, param: {"Ftp": {"server": "<ip|domain>", "port": <int>, "anonymous": 0|1, "userName": "<name>", "password": "<pass>", "remoteDir": "<path>", "streamType": <0-6>, "interval": <int>, "maxSize": <10-1024>, "schedule": {"table": {"MD": "<168-bit>"}}}}.
TestFtp: cmd=TestFtp, param: {"Ftp": {...}}.
Get/SetNtp: cmd=GetNtp/SetNtp, param: {"Ntp": {"enable": 0|1, "server": "<server>", "port": <int>, "interval": <60-65535>}}.
Get/SetNetPort: cmd=GetNetPort/SetNetPort, param: {"NetPort": {"httpEnable": 0|1, "httpPort": <int>, "httpsEnable": 0|1, "rtspEnable": 0|1, ...}}.
Get/SetUpnp: cmd=GetUpnp/SetUpnp, param: {"Upnp": {"enable": 0|1}}.
Get/SetWifi/TestWifi/ScanWifi/GetWifiSignal: cmd=GetWifi/SetWifi/TestWifi/ScanWifi/GetWifiSignal, param: {"Wifi": {"ssid": "<name>", "password": "<pass>"}}.
Get/SetPush(V20)/PushCfg: cmd=GetPush|GetPushV20/SetPush|SetPushV20, param: {"Push": {"enable": 0|1, "schedule": {"table": {"MD": "<168-bit>"}}}}, PushCfg: {"pushInterval": <20|30|60|120>}.
Get/SetP2p: cmd=GetP2p/SetP2p, param: {"P2p": {"enable": 0|1}}.
GetCertificateInfo/CertificateClear: cmd=GetCertificateInfo/CertificateClear.
GetRtspUrl: cmd=GetRtspUrl, param: {"channel": <int>}. Returns mainStream, subStream URLs.
Video Input
Get/SetImage: cmd=GetImage/SetImage, param: {"Image": {"channel": 0, "bright": <0-255>, "contrast": <0-255>, "saturation": <0-255>, "hue": <0-255>, "sharpen": <0-255>}}.
Get/SetOsd: cmd=GetOsd/SetOsd, param: {"Osd": {"channel": 0, "osdChannel": {"enable": 0|1, "name": "<str>", "pos": "<position>"}, "osdTime": {"enable": 0|1, "pos": "<position>"}, "watermark": 0|1}}.
Get/SetIsp: cmd=GetIsp/SetIsp, param: {"Isp": {"channel": 0, "antiFlicker": "Off|50HZ|60HZ", "exposure": "Auto|Manual", "dayNight": "Auto|Color|Black&White", ...}}.
Get/SetMask: cmd=GetMask/SetMask, param: {"Mask": {"channel": 0, "enable": 0|1, "area": [{"screen": {"height": <int>, "width": <int>}, "block": {"x": <int>, "y": <int>, "width": <int>, "height": <int>}}]}}. Max 4 areas.
Get/SetCrop: cmd=GetCrop/SetCrop, param: {"Crop": {"channel": 0, "cropWidth": <int>, "cropHeight": <int>, "topLeftX": <int>, "topLeftY": <int>}}.
Get/SetStitch: cmd=GetStitch/SetStitch, param: {"stitch": {"distance": <2.0-20.0>, "stitchXMove": <-100-100>, "stitchYMove": <-100-100>}}.
Encoding
Get/SetEnc: cmd=GetEnc/SetEnc, param: {"Enc": {"channel": 0, "audio": 0|1, "mainStream": {"size": "<width>*<height>", "frameRate": <int>, "bitRate": <int>, "profile": "Base|Main|High"}, "subStream": {...}}}.
Record
Get/SetRec(V20): cmd=GetRec|GetRecV20/SetRec|SetRecV20, param: {"Rec": {"channel": 0, "overwrite": 0|1, "packTime": "<30|45|60 Minutes>", "postRec": "<time>", "preRec": 0|1, "saveDay": <int>, "schedule": {"table": {"MD": "<168-bit>"}}}}.
Search: cmd=Search, param: {"Search": {"channel": 0, "onlyStatus": 0|1, "streamType": "main|sub", "StartTime": {...}, "EndTime": {...}}}. Returns file list or date status.
Download: cmd=Download&source=<path>&output=<name>. Returns file stream.
Snap: cmd=Snap&channel=0&rs=<random>. Returns JPEG.
Playback: cmd=Playback&source=<path>&output=<name>. Returns video stream.
NvrDownload: cmd=NvrDownload, param: {"NvrDownload": {"channel": 0, "streamType": "main|sub", "StartTime": {...}, "EndTime": {...}}}.
PTZ
Get/SetPtzPreset: cmd=GetPtzPreset/SetPtzPreset, param: {"PtzPreset": {"channel": 0, "enable": 0|1, "id": <1-64>, "name": "<str>"}}. Max 64 presets.
Get/SetPtzPatrol: cmd=GetPtzPatrol/SetPtzPatrol, param: {"PtzPatrol": {"channel": 0, "enable": 0|1, "id": <1-6>, "name": "<str>", "preset": [{"id": <1-64>, "dwellTime": <1-30>, "speed": <1-64>}]}}. Max 16 presets.
PtzCtrl: cmd=PtzCtrl, param: {"channel": 0, "op": "Stop|Left|Right|Up|Down|Auto|ToPos|StartPatrol|StopPatrol", "speed": <int>, "id": <int>}.
Get/SetPtzSerial: cmd=GetPtzSerial/SetPtzSerial, param: {"PtzSerial": {"channel": 0, "baudRate": <1200|2400|4800|9600>, "ctrlProtocol": "PELCO_D|PELCO_P", ...}}.
Get/SetPtzTattern: cmd=GetPtzTattern/SetPtzTattern, param: {"PtzTattern": {"channel": 0, "track": [{"id": <1-6>, "enable": 0|1, "name": "<str>", "running": 0|1}]}}.
Get/SetAutoFocus: cmd=GetAutoFocus/SetAutoFocus, param: {"AutoFocus": {"channel": 0, "disable": 0|1}}.
Get/StartZoomFocus: cmd=GetZoomFocus/StartZoomFocus, param: {"ZoomFocus": {"channel": 0, "pos": <int>, "op": "ZoomPos|FocusPos"}}.
Get/SetPtzGuard: cmd=GetPtzGuard/SetPtzGuard, param: {"PtzGuard": {"channel": 0, "benable": 0|1, "timeout": 60, "cmdStr": "setPos|toPos", "bSaveCurrentPos": 0|1}}.
GetPtzCheckState/PtzCheck: cmd=GetPtzCheckState/PtzCheck, param: {"channel": 0}.
Alarm
Get/SetAlarm/GetMdAlarm/SetMdAlarm: cmd=GetAlarm|GetMdAlarm/SetAlarm|SetMdAlarm, param: {"Alarm|MdAlarm": {"channel": 0, "type": "md", "scope": {"cols": <int>, "rows": <int>, "table": "<bitstring>"}, "sens": [{"beginHour": <int>, "sensitivity": <1-50>, ...}]}}.
GetMdState: cmd=GetMdState&channel=0. Returns state: 0|1.
Get/SetAudioAlarm(V20): cmd=GetAudioAlarm|GetAudioAlarmV20/SetAudioAlarm|SetAudioAlarmV20, param: {"Audio": {"enable": 0|1, "schedule": {"table": {"MD": "<168-bit>"}}}}.
Get/SetBuzzerAlarmV20: cmd=GetBuzzerAlarmV20/SetBuzzerAlarmV20, param: {"Buzzer": {"enable": 0|1, "diskErrorAlert": 0|1, "schedule": {"table": {"MD": "<168-bit>"}}}}.
AudioAlarmPlay: cmd=AudioAlarmPlay, param: {"channel": 0, "alarm_mode": "times|manu", "times": <int>, "manual_switch": 0|1}.
Get/SetAiAlarm/SetAlarmArea: cmd=GetAiAlarm/SetAiAlarm/SetAlarmArea, param: {"AiAlarm": {"channel": 0, "ai_type": "people|vehicle|dog_cat|face", "sensitivity": <int>, "scope": {"area": "<bitstring>"}, ...}}.
LED
Get/SetIrLights: cmd=GetIrLights/SetIrLights, param: {"IrLights": {"channel": 0, "state": "Auto|On|Off"}}.
Get/SetPowerLed: cmd=GetPowerLed/SetPowerLed, param: {"PowerLed": {"channel": 0, "state": "On|Off"}}.
Get/SetWhiteLed: cmd=GetWhiteLed/SetWhiteLed, param: {"WhiteLed": {"channel": 0, "state": 0|1, "mode": <0-2>, "bright": <1-100>, "wlAiDetectType": {"dog_cat": 0|1, ...}, "LightingSchedule": {...}}}.
AI
Get/SetAiCfg: cmd=GetAiCfg/SetAiCfg, param: {"channel": 0, "AiDetectType": {"people": 0|1, ...}, "aiTrack": 0|1, "trackType": {...}}.
GetAiState: cmd=GetAiState, param: {"channel": 0}. Returns alarm_state and support per AI type.
Preview
RTSP: rtsp://<user>:<pass>@<ip>:<port>/Preview_<channel>_main|sub (H.264/H.265, port 554, must enable).
RTMP: rtmp://<ip>/bcs/channel<channel>_main|sub|ext.bcs?channel=<id>&stream=<0|1>&user=<user>&password=<pass> (H.264 only, port 1935).
FLV: https://<ip>/flv?port=1935&app=bcs&stream=channel<channel>_main|sub|ext.bcs&user=<user>&password=<pass> (H.264 only).
Error Codes
0: Success.
-1 to -507: Errors (e.g., -1: missing params, -6: login required, -100: test failed). See full list in original spec.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment