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.

Revisions

  1. gWOLF3 created this gist May 2, 2025.
    125 changes: 125 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,125 @@
    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.