Summary
The Doorbird D2104V is a video door station controllable via HTTP LAN API on ports 80 (HTTP) and 443 (HTTPS), with secondary support for RTSP video streaming (port 554), RTSP-over-HTTP (port 8557), SIP calling (port 5060), and UDP event broadcasts (ports 6524/35344). Authentication is Basic/Digest HTTP or via plaintext http-user/http-password query parameters. Firmware 000110+ required for favorites and schedules.
Transport
protocols:
- http
- udp
- tcp # inferred: RTSP (554), SIP (5060), RTSP-over-HTTP (8557) are TCP
addressing:
port: 80
base_url: http://<device-ip>/bha-api
# Additional ports explicitly stated in source:
https_port: 443
rtsp_port: 554
rtsp_over_http_port: 8557
sip_port: 5060
udp_ports:
- 6524
- 35344
auth:
type: http_basic # source states Basic/Digest auth per RFC 2617
# UNRESOLVED: default credentials not stated; operator must configure via DoorBird App
Traits
- powerable # light-on.cgi and open-door.cgi (relay control) present
- queryable # info.cgi, sip.cgi?action=status, monitor.cgi present
- routable # audio-transmit.cgi, audio-receive.cgi, video.cgi present
- levelable # mic_volume (1-100), spk_volume (1-100) via sip.cgi settings
Actions
- id: open_door
label: Open Door
kind: action
params:
- name: r
type: string
description: "Relay ID (optional). Default: relay 1. Format: [doorcontrollerID]@[relay], e.g. '1' or 'gggaaa@1'"
source: /bha-api/open-door.cgi
- id: light_on
label: Light On
kind: action
params: []
source: /bha-api/light-on.cgi
- id: get_info
label: Get Device Info
kind: query
params: []
source: /bha-api/info.cgi
- id: get_session
label: Create Session
kind: query
params: []
source: /bha-api/getsession.cgi
- id: invalidate_session
label: Invalidate Session
kind: action
params:
- name: invalidate
type: string
description: Session ID to invalidate
source: /bha-api/getsession.cgi?invalidate=<session_id>
- id: list_favorites
label: List Favorites
kind: query
params: []
source: /bha-api/favorites.cgi
- id: save_favorite
label: Save Favorite
kind: action
params:
- name: action
type: string
description: Fixed value "save"
- name: type
type: string
description: "sip or http"
- name: title
type: string
description: Name/title of favorite
- name: value
type: string
description: URL or SIP target
- name: id
type: integer
description: Optional ID to update existing favorite
source: /bha-api/favorites.cgi
- id: delete_favorite
label: Delete Favorite
kind: action
params:
- name: action
type: string
description: Fixed value "remove"
- name: type
type: string
description: "sip or http"
- name: id
type: integer
description: ID of favorite to delete
source: /bha-api/favorites.cgi
- id: list_schedules
label: List Schedules
kind: query
params: []
source: /bha-api/schedule.cgi
- id: save_schedule
label: Save Schedule
kind: action
params:
- name: input
type: string
description: "doorbell, motion, rfid, or fingerprint"
- name: param
type: string
description: Doorbell number, transponder ID, or fingerprint ID
- name: output
type: object
description: JSON output action configuration (event, param, enabled, schedule)
source: /bha-api/schedule.cgi (POST)
- id: delete_schedule
label: Delete Schedule
kind: action
params:
- name: action
type: string
description: Fixed value "remove"
- name: input
type: string
description: "doorbell, motion, or rfid"
- name: param
type: string
description: Doorbell number or transponder ID
source: /bha-api/schedule.cgi?action=remove
- id: restart
label: Restart Device
kind: action
params: []
source: /bha-api/restart.cgi
- id: sip_registration
label: SIP Registration
kind: action
params:
- name: action
type: string
description: Fixed value "registration"
- name: user
type: string
description: SIP proxy authentication user
- name: password
type: string
description: SIP proxy authentication password
- name: url
type: string
description: SIP proxy IP/hostname
source: /bha-api/sip.cgi?action=registration
- id: sip_make_call
label: SIP Make Call
kind: action
params:
- name: action
type: string
description: Fixed value "makecall"
- name: url
type: string
description: SIP URL to call
source: /bha-api/sip.cgi?action=makecall
- id: sip_hangup
label: SIP Hangup
kind: action
params:
- name: action
type: string
description: Fixed value "hangup"
source: /bha-api/sip.cgi?action=hangup
- id: sip_settings
label: SIP Settings
kind: action
params:
- name: action
type: string
description: Fixed value "settings"
- name: enable
type: integer
description: 0..1, enable SIP after reboot
- name: mic_volume
type: integer
description: 1..100, microphone volume (default 33)
- name: spk_volume
type: integer
description: 1..100, speaker volume (default 70)
- name: dtmf
type: integer
description: 0..1, enable DTMF support
- name: autocall_doorbell_url
type: string
description: "DEPRECATED (use schedule.cgi). SIP URL to auto-call on doorbell event, or 'none' to disable. Default: none"
- name: relay1_passcode
type: integer
description: 0..99999999, pincode for door open relay
- name: incoming_call_enable
type: integer
description: 0..1, enable incoming calls
- name: incoming_call_user
type: string
description: Allowed SIP user (e.g. "sip:10.0.0.1:5060")
- name: anc
type: integer
description: 0..1, acoustic noise cancellation (default 1)
- name: ring_time_limit
type: integer
description: 10..300, ringing time limit in seconds
- name: call_time_limit
type: integer
description: 30..300, call duration limit in seconds
source: /bha-api/sip.cgi?action=settings
- id: sip_status
label: SIP Status
kind: query
params: []
source: /bha-api/sip.cgi?action=status
- id: sip_reset
label: SIP Settings Reset
kind: action
params:
- name: action
type: string
description: Fixed value "reset"
source: /bha-api/sip.cgi?action=reset
- id: get_live_video
label: Live Video Stream
kind: action
params:
- name: sessionid
type: string
description: "Optional session ID; required for streaming over HTTPS to avoid plaintext credentials"
source: /bha-api/video.cgi
- id: get_live_image
label: Live Image
kind: action
params: []
source: /bha-api/image.cgi
- id: get_history_image
label: History Image
kind: action
params:
- name: index
type: integer
description: "1..50, index of history image (1 = latest)"
- name: event
type: string
description: "Optional: doorbell or motionsensor. Default: ring history (DoorBird) / input trigger (BirdGuard)"
source: /bha-api/history.cgi
- id: audio_receive
label: Live Audio Receive
kind: action
params: []
source: /bha-api/audio-receive.cgi
- id: audio_transmit
label: Live Audio Transmit
kind: action
params: []
source: /bha-api/audio-transmit.cgi
- id: monitor
label: Monitor Event Stream
kind: action
params:
- name: ring
type: string
description: "Comma-separated event types: doorbell, motionsensor"
source: /bha-api/monitor.cgi?ring=doorbell,motionsensor
- id: rtsp_live_video
label: RTSP Live Video
kind: action
params: []
source: rtsp://<device-ip>:554/mpeg/media.amp
- id: rtsp_live_video_720p
label: RTSP Live Video 720p
kind: action
params: []
source: rtsp://<device-ip>:554/mpeg/720p/media.amp
- id: rtsp_live_video_1080p
label: RTSP Live Video 1080p
kind: action
params: []
source: rtsp://<device-ip>:554/mpeg/1080p/media.amp
- id: rtsp_over_http_video
label: RTSP-over-HTTP Video
kind: action
params: []
source: rtsp://<device-ip>:8557/mpeg/media.amp
Feedbacks
- id: http_json_response
label: Generic JSON Response
type: object
description: Most API calls return JSON with BHA.RETURNCODE ("1" = success)
- id: info_response
label: Device Info
type: object
properties:
- firmware
- build_number
- primary_mac_addr
- relays
- device_type
source: /bha-api/info.cgi
- id: session_response
label: Session Response
type: object
properties:
- SESSIONID
- NOTIFICATION_ENCRYPTION_KEY
source: /bha-api/getsession.cgi
- id: monitor_event
label: Monitor Event Stream
type: enum
values:
- doorbell:H # doorbell pressed (high)
- doorbell:L # doorbell idle (low)
- motionsensor:H # motion detected (high)
- motionsensor:L # motion idle (low)
source: /bha-api/monitor.cgi
- id: video_mjpeg_stream
label: Live Video MJPEG Stream
type: binary
description: multipart/x-mixed-replace;boundary stream of JPEG frames (~8 fps)
source: /bha-api/video.cgi
- id: live_image
label: Live JPEG Image
type: binary
description: Single JPEG frame (image/jpeg)
source: /bha-api/image.cgi
- id: history_image
label: History JPEG Image
type: binary
description: Cloud-stored JPEG history image (image/jpeg)
source: /bha-api/history.cgi
Variables
- id: mic_volume
label: Microphone Volume
type: integer
range: 1..100
default: 33
source: sip.cgi?action=settings
- id: spk_volume
label: Speaker Volume
type: integer
range: 1..100
default: 70
source: sip.cgi?action=settings
- id: sip_enable
label: SIP Enable
type: boolean
default: false
source: sip.cgi?action=settings
- id: sip_last_error
label: SIP Last Error
type: string
source: sip.cgi?action=status
- id: sip_registered
label: SIP Registered
type: boolean
description: True when LASTERRORCODE is "200"
source: sip.cgi?action=status
Events
# UDP event broadcasts on ports 6524 and 35344 (ChaCha20-Poly1305 encrypted)
- id: doorbell_event
label: Doorbell Event
type: string
description: Doorbell number or "motion", from UDP broadcast decryption
- id: motion_event
label: Motion Sensor Event
type: string
description: Motion detection event from UDP broadcast
# UNRESOLVED: rfid and keypad events mentioned as "coming soon"
# UNRESOLVED: SIP call state events (ringing, connected, ended) not explicitly documented
Macros
# Favorites and schedules together form event-driven automation macros
- id: notification_favorite
label: HTTP Notification Favorite
description: HTTP(S) URL saved as favorite, triggered by schedule on events
- id: sip_call_favorite
label: SIP Call Favorite
description: SIP target address saved as favorite, triggered by schedule
- id: doorbell_schedule
label: Doorbell Event Schedule
description: Configures output actions (notify, http, sip, relay) triggered by doorbell events with time windows
- id: motion_schedule
label: Motion Event Schedule
description: Configures output actions triggered by motion events with time windows
Safety
confirmation_required_for:
- open_door # Permission check required: user must have "watch always" or recent ring event
interlocks:
- description: "open_door and light_on require the requesting user to have 'watch always' permission or a ring event within the past 5 minutes"
source: "source explicitly states: 'We assume, that the API user watches the live image in order to open the door or trigger relays'"
# UNRESOLVED: emergency door override procedure not documented
# UNRESOLVED: fault/failure recovery sequences not stated
Notes
The device is a video door station with one simultaneous audio/video call limitation (returns HTTP 503 when busy). Video streaming (MJPEG over HTTP) is unencrypted and available only over HTTP for third-party integrations; video over HTTPS requires a session ID. RTSP video (H.264) is available on port 554 with standard RTSP authentication. SIP runs on port 5060 with peer-to-peer and proxy modes supported. UDP event broadcasts use ChaCha20-Poly1305 encryption (v2, since November 2023; v1 using Argon2i is deprecated). Audio uses G.711 μ-law codec at 8000 Hz sampling; AEC/ANR must be implemented client-side. The device blocks IP addresses for 1 minute after excessive wrong credentials (HTTP 423). Maximum 1 concurrent API connection per second; up to 8 concurrent monitor streams. SIP calls auto-hangup 180 seconds after initiation (security). Min 3 seconds between SIP requests.
Upgrade done. Added: 9 new actions (video/image/history/audio×2/monitor/RTSP×4), `autocall_doorbell_url` SIP param, 3 new feedbacks, transport ports 443/554/8557/5060/UDP 6524/35344. Existing IDs + shapes preserved.
## Provenance
```yaml
source_domains:
- doorbird.com
source_urls:
- https://www.doorbird.com/downloads/api_lan.pdf
retrieved_at: 2026-07-12T21:12:52.929Z
last_checked_at: 2026-07-21T22:27:52.550Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-07-21T22:27:52.550Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec actions matched literally against source endpoints; all transport parameters verified verbatim. (9 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "serial/RS-232 not mentioned in source"
- "power supply specifications not stated"
- "default credentials not stated; operator must configure via DoorBird App"
- "rfid and keypad events mentioned as \"coming soon\""
- "SIP call state events (ringing, connected, ended) not explicitly documented"
- "emergency door override procedure not documented"
- "fault/failure recovery sequences not stated"
- "RTSP-over-HTTP port 8557 not confirmed as user-facing control endpoint"
- "relay contact ratings (voltage/current) not stated"
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0