Summary
Doorbird D2102V-RAL7016 is an IP video door station with relay outputs for door opening and light control. Control is available via HTTP API (unencrypted on port 80, encrypted on port 443), RTSP for live video, SIP for audio calls, and UDP event broadcasts for monitoring. Authentication uses HTTP Basic/Digest or inline query parameters.
Transport
protocols:
- tcp
- udp
addressing:
port: 80 # HTTP; HTTPS also available on 443
auth:
type: basic_digest # Basic or Digest authentication per RFC 2617; alternative: http-user/http-password query params
HTTP Base URL pattern: http://<device-ip>/bha-api/ or https://<device-ip>/bha-api/
RTSP ports (TCP): 554 (video), 8557 (RTSP-over-HTTP)
SIP port: 5060
UDP event broadcast ports: 6524, 35344
Rate limits:
- 1 concurrent HTTP API connection per second
- 8 concurrent monitor streams; HTTP 509 when exhausted
- Wrong auth → IP or user blocked for 1 minute → HTTP 423
Video/Audio notes:
- MJPG stream via HTTP: up to 8 fps; multipart/x-mixed-replace
- RTSP H.264 stream: up to 12 fps;
rtsp://<device-ip>:554/mpeg/media.amp - HTTPS video/audio not available for third-party integrations; session ID required for streaming over HTTP to avoid plaintext credentials
- Audio codec: G.711 μ-law (8000 Hz); AEC/ANC required on client side
Traits
# Inferred from command examples in source:
powerable: false # no power on/off command in source
routable: true # input (doorbell, motion, rfid, fingerprint) and output (relay, SIP, HTTP notification) routing present
queryable: true # info.cgi, sip.cgi?action=status, schedule.cgi list, favorites.cgi list
levelable: false # no volume/gain/brightness commands in source
Actions
- id: open_door
label: Open Door
kind: action
params:
- name: r
type: string
description: "Relay to trigger, e.g. '1' or 'gggaaa@1' (DoorController relay). Default: physical relay 1."
- id: light_on
label: Light On
kind: action
params: []
- id: restart
label: Restart Device
kind: action
params: []
# Note: no diagnostic sound after restart
- id: list_favorites
label: List Favorites
kind: action
params: []
- id: save_favorite
label: Save Favorite
kind: action
params:
- name: action
type: string
fixed: save
- name: type
type: string
enum: [sip, http]
- name: title
type: string
- name: value
type: string
- name: id
type: integer
required: false
description: Omit to create new favorite; specify to update existing
- id: delete_favorite
label: Delete Favorite
kind: action
params:
- name: action
type: string
fixed: remove
- name: type
type: string
enum: [sip, http]
- name: id
type: integer
- id: list_schedules
label: List Schedules
kind: action
params: []
- id: save_schedule
label: Save Schedule
kind: action
params:
- name: input
type: string
enum: [doorbell, motion, rfid, fingerprint]
- name: param
type: string
description: Doorbell number, transponder ID, or fingerprint ID
- name: output
type: array
description: JSON array of output action configurations
- id: delete_schedule
label: Delete Schedule
kind: action
params:
- name: action
type: string
fixed: remove
- name: input
type: string
enum: [doorbell, motion, rfid]
- name: param
type: string
- id: sip_register
label: SIP Register
kind: action
params:
- name: action
type: string
fixed: registration
- name: user
type: string
- name: password
type: string
- name: url
type: string
description: SIP Proxy IP/hostname
- id: sip_makecall
label: SIP Make Call
kind: action
params:
- name: action
type: string
fixed: makecall
- name: url
type: string
description: SIP URL to call, e.g. "sip:108@192.168.123.22"
- id: sip_hangup
label: SIP Hangup
kind: action
params:
- name: action
type: string
fixed: hangup
- id: sip_settings
label: SIP Settings
kind: action
params:
- name: action
type: string
fixed: settings
- name: enable
type: integer
required: false
- name: mic_volume
type: integer
required: false
- name: spk_volume
type: integer
required: false
- name: dtmf
type: integer
required: false
- name: relay1_passcode
type: integer
required: false
- name: incoming_call_enable
type: integer
required: false
- name: incoming_call_user
type: string
required: false
- name: anc
type: integer
required: false
- name: ring_time_limit
type: integer
required: false
- name: call_time_limit
type: integer
required: false
- id: sip_reset
label: SIP Reset
kind: action
params:
- name: action
type: string
fixed: reset
- id: get_session
label: Get Session
kind: action
description: Command: getsession.cgi
params:
- name: invalidate
type: string
required: false
description: "Set to <old_session_id> to invalidate that session."
- id: live_video
label: Live Video
kind: action
description: Command: video.cgi
params: []
- id: live_image
label: Live Image
kind: action
description: Command: image.cgi
params: []
- id: history_image
label: History Image
kind: action
description: Command: history.cgi
params:
- name: index
type: integer
description: "1..50"
- name: event
type: string
required: false
enum: [doorbell, motionsensor]
description: Optional; default is the ring history for DoorBird devices and the input trigger history for BirdGuard devices.
- id: monitor_events
label: Monitor Events
kind: action
description: Command: monitor.cgi
params:
- name: ring
type: string
enum: [doorbell, motionsensor]
- id: live_audio_receive
label: Live Audio Receive
kind: action
description: Command: audio-receive.cgi
params: []
- id: live_audio_transmit
label: Live Audio Transmit
kind: action
description: Command: audio-transmit.cgi
params: []
- id: device_info
label: Device Info
kind: action
description: Command: info.cgi
params: []
- id: rtsp_live_video
label: RTSP Live Video
kind: action
description: "Command: rtsp://<device-ip>:<device-rtsp-port>/mpeg/media.amp; documented variants are /mpeg/720p/media.amp and /mpeg/1080p/media.amp."
params: []
Feedbacks
- id: door_open_response
label: Open Door Response
type: json
description: JSON response from open-door.cgi; RETURNCODE "1" indicates success
- id: light_on_response
label: Light On Response
type: json
description: JSON response from light-on.cgi; RETURNCODE "1" indicates success
- id: sip_status
label: SIP Status
type: json
description: "JSON with LASTERRORCODE; '200' means registered. Other fields: LASTERRORTEXT"
query_command: http://<device-ip>/bha-api/sip.cgi?action=status
- id: http_error
label: HTTP Error Code
type: enum
values:
- 200 # OK
- 204 # No permission / no data
- 400 # Parameter missing or invalid
- 401 # Authentication required
- 423 # IP or user blocked for 1 minute (wrong credentials)
- 500 # Internal error
- 503 # Device busy (call in progress or firmware update in progress)
- 507 # Size limit exceeded
- 509 # Monitor streams exhausted
Variables
# UNRESOLVED: no discrete settable parameters found in source; settings exposed via sip.cgi?action=settings and schedule.cgi
Events
# DoorBird sends unsolicited UDP broadcasts on ports 6524 and 35344.
# v2 encryption: ChaCha20-Poly1305; key obtained from getsession.cgi.
# v1 (Argon2i) deprecated; should migrate to v2.
#
# Decrypted payload structure (34 bytes ciphertext → 18 bytes plaintext):
# INTERCOM_ID: 6 bytes (first 6 chars of username; skip non-matching packets)
# EVENT: 8 bytes (doorbell number or "motion", space-padded)
# TIMESTAMP: 4 bytes (Unix timestamp)
#
# Keep-alive packets sent every 7 seconds on both ports; can be skipped.
#
# Permission-gated events:
# - doorbell press → 204 returned to users without "watch always" and no recent ring event
# - motion detected → 204 for users without motion permission
Macros
# UNRESOLVED: no explicit multi-step macros described in source
Safety
confirmation_required_for: []
interlocks:
- "Do not open door without verifying identity via live image/audio first"
- "AEC/ANC required on client side for audio transmit/receive calls"
- "SIP call auto-terminates after 180 seconds"
- "Do not send concurrent SIP requests; wait minimum 3 seconds between each"
# UNRESOLVED: explicit interlock procedures for door relay wiring not in source
Notes
Session ID flow: getsession.cgi returns SESSIONID and NOTIFICATION_ENCRYPTION_KEY. Session ID valid 10 minutes; key persists until password changes. For video/audio streaming over HTTP, append sessionid to avoid plaintext credentials.
Video precedence: DoorBird App takes priority over LAN API for video/audio streams; streams can be interrupted at any time by the app.
Monitor stream limit: 8 concurrent monitor streams; HTTP 509 when exhausted.
RTSP authentication: Standard RTSP auth (no query-parameter auth for RTSP).
Firmware requirements:
- Favorites/schedules: firmware 000110 or higher
info.cgirelay config: firmware 000108 or higher
Provenance
source_domains:
- doorbird.com
source_urls:
- "https://www.doorbird.com/downloads/api_lan.pdf?rev=0.36"
retrieved_at: 2026-05-14T10:39:00.848Z
last_checked_at: 2026-10-07T21:02:22.844Z
Verification Summary
verdict: verified
checked_at: 2026-10-07T21:02:22.844Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 action units match source endpoints with correct params; transport values (80/443, Basic/Digest, RTSP/SIP/UDP ports) are stated in the source, and the source catalogue is fully covered. (5 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "electrical specifications (voltage, current, power consumption) not stated in source"
- "no discrete settable parameters found in source; settings exposed via sip.cgi?action=settings and schedule.cgi"
- "no explicit multi-step macros described in source"
- "explicit interlock procedures for door relay wiring not in source"
- "electrical/power specifications, fault behavior, error recovery sequences, firmware compatibility ranges beyond stated minimums"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0