Summary
LAN-2-LAN HTTP and RTSP API for the DoorBird D2208V DNP Surface-mount video door station. Spec covers HTTP CGI endpoints (live video/image, door open, light, history, monitor, session, info, favorites, schedules, restart), RTSP live video, and encrypted UDP broadcast event monitoring. Authentication is HTTP Basic/Digest or session-id via /bha-api/getsession.cgi.
Transport
protocols:
- http
- tcp
- udp
addressing:
port: 80
port_https: 443 # UNRESOLVED: standard HTTPS port mentioned; not an AI4AV field but noted
port_rtsp: 554
port_rtsp_http: 8557
port_event_udp: 6524
port_event_udp_alt: 35344
port_sip: 5060
auth:
type: basic # inferred: Basic or Digest per RFC 2617 required for every HTTP request
scheme: basic_or_digest
alternatives:
- session # via getsession.cgi SESSIONID (10 min TTL) for video/audio streaming
Traits
# - queryable (info.cgi, sip.cgi?action=status, monitor.cgi return state)
# - routable (no input routing; this is a door station not a switcher)
Actions
- id: get_session
label: Get Session ID
kind: action
command: "GET /bha-api/getsession.cgi"
params: []
- id: invalidate_session
label: Invalidate Session ID
kind: action
command: "GET /bha-api/getsession.cgi?invalidate={session_id}"
params:
- name: session_id
type: string
description: Session ID to invalidate
- id: live_video_request
label: Live Video Request (multipart MJPEG)
kind: action
command: "GET /bha-api/video.cgi"
params: []
- id: live_image_request
label: Live Image Request
kind: action
command: "GET /bha-api/image.cgi"
params: []
- id: open_door
label: Open Door (energize relay)
kind: action
command: "GET /bha-api/open-door.cgi?r={relay}"
params:
- name: relay
type: string
description: Relay identifier; e.g. "1", "2", or "<paired-door-controller>@<relay>". Omit for default physical relay 1.
- id: light_on
label: Light On (energize light relay)
kind: action
command: "GET /bha-api/light-on.cgi"
params: []
- id: history_image_request
label: History Image Request
kind: action
command: "GET /bha-api/history.cgi?index={index}&event={event}"
params:
- name: index
type: integer
description: History image index, 1..50 (1 = latest)
- name: event
type: string
description: "Event type filter: 'doorbell' or 'motionsensor'. Optional."
- id: monitor_request
label: Monitor Request (event stream)
kind: action
command: "GET /bha-api/monitor.cgi?ring={events}"
params:
- name: events
type: string
description: "Comma-separated event types: 'doorbell', 'motionsensor'"
- id: live_audio_receive
label: Live Audio Receive (G.711 μ-law)
kind: action
command: "GET /bha-api/audio-receive.cgi"
params: []
- id: live_audio_transmit
label: Live Audio Transmit (G.711 μ-law)
kind: action
command: "POST /bha-api/audio-transmit.cgi"
params: []
- id: info_request
label: Info Request (version, relays, device type)
kind: query
command: "GET /bha-api/info.cgi"
params: []
- id: list_favorites
label: List Favorites
kind: query
command: "GET /bha-api/favorites.cgi"
params: []
- id: add_or_change_favorite
label: Add or Change Favorite
kind: action
command: "GET /bha-api/favorites.cgi?action=save&type={type}&title={title}&value={value}&id={id}"
params:
- name: type
type: string
description: "Favorite type: 'sip' or 'http'"
- name: title
type: string
description: Name or short description
- name: value
type: string
description: URL/address (HTTP(S) URL or SIP target)
- name: id
type: integer
description: Optional favorite ID for updating existing favorite
- id: delete_favorite
label: Delete Favorite
kind: action
command: "GET /bha-api/favorites.cgi?action=remove&type={type}&id={id}"
params:
- name: type
type: string
description: "Favorite type: 'sip' or 'http'"
- name: id
type: integer
description: ID of the favorite to delete
- id: list_schedules
label: List Schedules
kind: query
command: "GET /bha-api/schedule.cgi"
params: []
- id: add_or_update_schedule_entry
label: Add or Update Schedule Entry
kind: action
command: "POST /bha-api/schedule.cgi"
params: []
- id: delete_schedule_entry
label: Delete Schedule Entry
kind: action
command: "GET /bha-api/schedule.cgi?action=remove&input={input}¶m={param}"
params:
- name: input
type: string
description: "Input event type: 'doorbell', 'motion', 'rfid'"
- name: param
type: string
description: ID of schedule entry (e.g. doorbell number, transponder id)
- id: restart
label: Restart Device
kind: action
command: "GET /bha-api/restart.cgi"
params: []
- id: rtsp_live_video
label: RTSP Live Video (H.264)
kind: action
command: "rtsp://<device-ip>:554/mpeg/media.amp"
params: []
- id: rtsp_live_video_default
label: RTSP Live Video (default via 8557/HTTP)
kind: action
command: "rtsp://<device-ip>:8557/mpeg/media.amp"
params: []
- id: rtsp_720p
label: RTSP Live Video 720p
kind: action
command: "rtsp://<device-ip>:554/mpeg/720p/media.amp"
params: []
- id: rtsp_1080p
label: RTSP Live Video 1080p (D11x only)
kind: action
command: "rtsp://<device-ip>:554/mpeg/1080p/media.amp"
params: []
- id: sip_registration
label: SIP Registration
kind: action
command: "GET /bha-api/sip.cgi?action=registration&user={user}&password={password}&url={url}"
params:
- name: user
type: string
description: SIP proxy auth user
- name: password
type: string
description: SIP proxy auth password
- name: url
type: string
description: SIP proxy IP/hostname
- id: sip_makecall
label: SIP Make Call
kind: action
command: "GET /bha-api/sip.cgi?action=makecall&url={url}"
params:
- name: url
type: string
description: SIP URL to call
- id: sip_hangup
label: SIP Hangup
kind: action
command: "GET /bha-api/sip.cgi?action=hangup"
params: []
- id: sip_settings
label: SIP Settings
kind: action
command: "GET /bha-api/sip.cgi?action=settings&enable={enable}&mic_volume={mic_volume}&spk_volume={spk_volume}&dtmf={dtmf}&autocall_doorbell_url={autocall_doorbell_url}&relay1_passcode={relay1_passcode}&incoming_call_enable={incoming_call_enable}&incoming_call_user={incoming_call_user}&anc={anc}&ring_time_limit={ring_time_limit}&call_time_limit={call_time_limit}"
params:
- name: enable
type: integer
description: "0 or 1; enable SIP registration after reboot. Default 0."
- name: mic_volume
type: integer
description: "1..100. Default 33."
- name: spk_volume
type: integer
description: "1..100. Default 70."
- name: dtmf
type: integer
description: "0 or 1; enable DTMF support. Default 0."
- name: autocall_doorbell_url
type: string
description: "DEPRECATED. SIP URL or 'none'. Default 'none'."
- name: relay1_passcode
type: integer
description: "0..99999999; pincode for triggering door open relay."
- name: incoming_call_enable
type: integer
description: "0 or 1; enable incoming calls. Default 0."
- name: incoming_call_user
type: string
description: "Allowed SIP user, e.g. sip:user@10.0.0.2:5060."
- name: anc
type: integer
description: "0 or 1; acoustic noise cancellation. Default 1."
- name: ring_time_limit
type: integer
description: "10..300 seconds. Default 300."
- name: call_time_limit
type: integer
description: "30..300 seconds. Default 300."
- id: sip_status
label: SIP Status
kind: query
command: "GET /bha-api/sip.cgi?action=status"
params: []
- id: sip_reset
label: SIP Settings Reset
kind: action
command: "GET /bha-api/sip.cgi?action=reset"
params: []
Feedbacks
- id: info_version
type: object
description: "Firmware version, build number, MAC, relays list, device-type from info.cgi"
- id: info_firmware
type: string
description: "Firmware version string from BHA.VERSION[].FIRMWARE"
- id: info_relays
type: array
description: "Array of relay IDs (physical and paired IP I/O DoorController relays)"
- id: monitor_doorbell
type: string
description: "Doorbell event from monitor stream: 'H' (high/pressed) or 'L' (low/released)"
- id: monitor_motionsensor
type: string
description: "Motion sensor state from monitor stream: 'H' or 'L'"
- id: sip_last_error_code
type: string
description: "Most recent SIP status code from sip.cgi?action=status. '200' = registered."
- id: sip_last_error_text
type: string
description: "Most recent SIP error text from sip.cgi?action=status"
- id: favorites_list
type: object
description: "JSON object with 'sip' and 'http' sub-objects, each keyed by favorite id with 'title' and 'value' fields"
- id: schedules_list
type: array
description: "JSON array of schedule entries with input/param/output/event/schedule structure"
Variables
# UNRESOLVED: settable non-discrete parameters all live inside sip.cgi?action=settings; already enumerated as a single multi-param action above. No separate Variables section applies.
Events
- id: udp_event_v2
type: binary
description: |
UDP broadcast event on ports 6524 and 35344. v2 (current) packet layout:
IDENT (3 bytes) = 0xDE 0xAD 0xBE; VERSION (1 byte) = 0x02 for ChaCha20-Poly1305;
NONCE (8 bytes); CIPHERTEXT (34 bytes). Decrypt with NOTIFICATION_ENCRYPTION_KEY
from getsession.cgi (first 32 bytes used by ChaCha20). After decryption:
INTERCOM_ID (6 bytes ASCII), EVENT (8 bytes ASCII, e.g. "doorbell" or "motion",
space-padded), TIMESTAMP (4 bytes Unix timestamp). Keep-alive broadcasts every
7s on the same ports are not relevant.
- id: udp_keepalive
type: binary
description: "UDP keep-alive broadcast every 7s on ports 6524 and 35344; skip for event decoding"
Macros
# UNRESOLVED: no multi-step sequences described in source
Safety
confirmation_required_for:
- restart
- sip_reset
- sip_settings # global SIP reconfiguration
interlocks: []
# UNRESOLVED: SIP auto-hangup at 180s; ring_time_limit 10..300s; call_time_limit 30..300s; rate-limit 1 connection/sec; HTTP 423 lockout after extensive wrong auth (1 min block).
Notes
- Rate limit: max 1 concurrent API connection per second; HTTP 423 returned after extensive wrong-auth attempts (1-minute IP/user block).
- HTTP port 80 unencrypted, 443 HTTPS with pre-installed self-signed certificate (CAs do not issue for IP).
- HTTPS not available for video/audio streaming — must obtain SESSIONID via
/bha-api/getsession.cgi(10-min TTL) and append as?sessionid=parameter. - Video stream: multipart MJPEG ~8 fps; RTSP H.264 ~12 fps; live video/audio can be interrupted at any time when official DoorBird App requests (App has precedence).
- SIP supports only one simultaneous call; auto-hangup at 180s; minimum 3s between SIP requests; device closes SIP if official App starts listen/talk.
- Required permissions vary: "valid user" baseline, "watch always" or recent ring event for live streams, "API-Operator" for favorites/schedules/SIP settings.
- Bonjour used for LAN device discovery (
_http._tcp). - RTSP URL 1080p variant is D11x-only; 720p requires D10x/D21x from firmware 129.
Provenance
source_domains:
- doorbird.com
source_urls:
- "https://www.doorbird.com/downloads/api_lan.pdf?rev=0.36"
- https://www.doorbird.com/en/api
retrieved_at: 2026-08-15T06:16:48.332Z
last_checked_at: 2026-08-19T09:21:38.711Z
Verification Summary
verdict: verified
checked_at: 2026-08-19T09:21:38.711Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec actions map to documented CGI/RTSP/SIP endpoints with matching parameter shapes; transport ports verified. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "D2208V-specific firmware feature matrix not stated; some CGI endpoints are firmware-gated (e.g. favorites.cgi/schedule.cgi require firmware 000110+, info relays require 000108+)."
- "standard HTTPS port mentioned; not an AI4AV field but noted"
- "settable non-discrete parameters all live inside sip.cgi?action=settings; already enumerated as a single multi-param action above. No separate Variables section applies."
- "no multi-step sequences described in source"
- "SIP auto-hangup at 180s; ring_time_limit 10..300s; call_time_limit 30..300s; rate-limit 1 connection/sec; HTTP 423 lockout after extensive wrong auth (1 min block)."
- "firmware version not stated in source; spec assumes firmware 000110+ for favorites.cgi and schedule.cgi access, and 000108+ for info.cgi relays field."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0