Summary
DoorBird D2102FV video door station. HTTP-based control API on TCP 80/443 + RTSP on 554/8557 + UDP broadcast events on 6524/35344. Auth = Basic/Digest (RFC 2617). Covers session, live video/image, door open, light, history, monitor, audio I/O, info, favorites, schedules, SIP, and restart.
Transport
protocols:
- http
- tcp
addressing:
port: 80
auth:
type: basic # Basic or Digest (RFC 2617); same creds as DoorBird App
Traits
- routable # inferred: input/output routing via favorites/schedules, SIP, relays
- queryable # inferred: info.cgi, sip.cgi?action=status, monitor.cgi return state
Actions
- id: get_session
label: Get Session ID
kind: action
command: "GET /bha-api/getsession.cgi"
params: []
notes: Returns SESSIONID (10 min) and NOTIFICATION_ENCRYPTION_KEY
- id: invalidate_session
label: Invalidate Session ID
kind: action
command: "GET /bha-api/getsession.cgi?invalidate=<old_session_id>"
params:
- name: old_session_id
type: string
- id: live_video
label: Live Video Stream
kind: action
command: "GET /bha-api/video.cgi"
params: []
notes: multipart/x-mixed-replace JPEG up to 8 fps
- id: live_image
label: Live Image
kind: action
command: "GET /bha-api/image.cgi"
params: []
notes: single JPEG
- 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: "1|2|<doorcontrollerID>@<relay>; omit for physical relay1"
- id: light_on
label: Light On
kind: action
command: "GET /bha-api/light-on.cgi"
params: []
- id: history_image
label: History Image
kind: action
command: "GET /bha-api/history.cgi?index=<index>&event=<event>"
params:
- name: index
type: integer
description: 1..50
- name: event
type: string
description: doorbell|motionsensor
- id: monitor_events
label: Monitor Doorbell/Motion Stream
kind: action
command: "GET /bha-api/monitor.cgi?ring=<events>"
params:
- name: events
type: string
description: "doorbell,motionsensor comma-list"
- id: live_audio_receive
label: Live Audio Receive
kind: action
command: "GET /bha-api/audio-receive.cgi"
params: []
notes: G.711 mu-law 8000 Hz
- id: live_audio_transmit
label: Live Audio Transmit
kind: action
command: "POST /bha-api/audio-transmit.cgi"
params: []
notes: Content-Type audio/basic, G.711 mu-law 8000 Hz; one consumer at a time
- id: info
label: Device Info
kind: query
command: "GET /bha-api/info.cgi"
params: []
- id: favorites_list
label: List Favorites
kind: query
command: "GET /bha-api/favorites.cgi"
params: []
notes: Requires API-Operator permission, firmware 000110+
- id: favorites_save
label: Add/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: sip|http
- name: title
type: string
- name: value
type: string
description: URL or address
- name: id
type: integer
description: optional, for changing existing
- id: favorites_delete
label: Delete Favorite
kind: action
command: "GET /bha-api/favorites.cgi?action=remove&type=<type>&id=<id>"
params:
- name: type
type: string
description: sip|http
- name: id
type: integer
- id: schedule_list
label: List Schedules
kind: query
command: "GET /bha-api/schedule.cgi"
params: []
notes: Requires API-Operator, firmware 000110+
- id: schedule_add_update
label: Add/Update Schedule Entry
kind: action
command: "POST /bha-api/schedule.cgi"
params: []
notes: JSON body; one request per input type (doorbell/motion/rfid/fingerprint)
- id: schedule_delete
label: Delete Schedule Entry
kind: action
command: "GET /bha-api/schedule.cgi?action=remove&input=<input>¶m=<param>"
params:
- name: input
type: string
description: doorbell|motion|rfid
- name: param
type: string
- id: restart
label: Restart Device
kind: action
command: "GET /bha-api/restart.cgi"
params: []
- id: sip_registration
label: SIP Register
kind: action
command: "GET /bha-api/sip.cgi?action=registration&user=<user>&password=<password>&url=<url>"
params:
- name: user
type: string
- name: password
type: string
- name: url
type: string
- 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
- 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&<parameter>=<value>"
params:
- name: parameter
type: string
description: enable|mic_volume|spk_volume|dtmf|autocall_doorbell_url|relay1_passcode|incoming_call_enable|incoming_call_user|anc|ring_time_limit|call_time_limit
- id: sip_status
label: SIP Status
kind: query
command: "GET /bha-api/sip.cgi?action=status"
params: []
- id: sip_reset
label: SIP Reset
kind: action
command: "GET /bha-api/sip.cgi?action=reset"
params: []
- id: rtsp_live_video
label: RTSP Live Video
kind: action
command: "rtsp://<device-ip>:554/mpeg/media.amp"
params: []
notes: H.264 up to 12 fps; RTSP-over-HTTP on 8557; standard RTSP auth
Feedbacks
- id: doorbell_state
type: enum
values: [H, L]
notes: from monitor.cgi multipart stream (H=high/pressed, L=low/idle)
- id: motion_state
type: enum
values: [H, L]
notes: from monitor.cgi multipart stream
- id: sip_status
type: object
notes: JSON with LASTERRORCODE / LASTERRORTEXT
- id: favorites
type: object
notes: JSON {sip: {...}, http: {...}}
- id: schedules
type: object
notes: JSON array of input/param/output entries
- id: device_info
type: object
notes: VERSION[], RELAYS[], DEVICE-TYPE etc. from info.cgi
Variables
- name: sip_mic_volume
type: integer
range: 1..100
default: 33
- name: sip_spk_volume
type: integer
range: 1..100
default: 70
- name: sip_dtmf
type: integer
range: 0..1
default: 0
- name: sip_relay1_passcode
type: integer
range: 0..99999999
- name: sip_ring_time_limit
type: integer
range: 10..300
default: 300
- name: sip_call_time_limit
type: integer
range: 30..300
default: 300
- name: sip_incoming_call_enable
type: integer
range: 0..1
default: 0
- name: sip_anc
type: integer
range: 0..1
default: 1
Events
- id: doorbell_event
protocol: udp
ports: [6524, 35344]
notes: UDP broadcast after doorbell; IDENT 0xDE 0xAD 0xBE, VERSION 0x02, ChaCha20-Poly1305 encrypted; decrypted payload = INTERCOM_ID(6) + EVENT(8, "doorbell"|"motion") + TIMESTAMP(4 unix)
- id: motion_event
protocol: udp
ports: [6524, 35344]
notes: same structure as doorbell_event, EVENT="motion"
- id: keepalive_event
protocol: udp
ports: [6524, 35344]
notes: every 7 seconds, can be skipped without decryption
Macros
# UNRESOLVED: source describes no multi-step sequences
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no explicit safety warnings or interlock procedures
Notes
- HTTP unauthenticated on TCP 80, HTTPS w/ self-signed cert on TCP 443. Video/audio streams NOT available over HTTPS — obtain session ID first, append as
sessionid=param. - Session ID valid 10 min. NOTIFICATION_ENCRYPTION_KEY (32-64 bytes) returned alongside; only first 32 bytes used for ChaCha20. Request once, not per packet.
- Max 1 concurrent API call/sec. Excessive wrong auth = IP blocked 60s (HTTP 423). SIP supports only 1 simultaneous call (HTTP 503 if busy). monitor.cgi max 8 concurrent streams (509 when full).
- RTSP auth is standard RTSP, not HTTP parameter auth.
- SIP auto-hangs up 180s after initiation; device will close SIP if DoorBird App takes call.
- Restart.cgi no diagnostic sound; 503 if firmware update in progress.
Spec written. 24 actions, 6 feedbacks, 8 variables, 3 events. All payloads verbatim from source. RTSP/UDP/HTTPS left as notes since protocol list only models HTTP.
## Provenance
```yaml
source_domains:
- doorbird.com
source_urls:
- "https://www.doorbird.com/downloads/api_lan.pdf?rev=0.36"
retrieved_at: 2026-05-12T17:53:19.025Z
last_checked_at: 2026-09-03T22:21:20.252Z
Verification Summary
verdict: verified
checked_at: 2026-09-03T22:21:20.252Z
matched_actions: 25
action_count: 25
confidence: medium
summary: "All 25 spec actions map verbatim to source endpoints; transport port 80 + Basic/Digest auth confirmed in source; ratio 25/25 = 1.00. (4 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware version compatibility not stated in source for D2102FV specifically"
- "HTTPS port 443 also available but auth scheme same; RTSP on 554/8557 with std RTSP auth; UDP event broadcasts on 6524/35344 not modelled in protocols list above"
- "source describes no multi-step sequences"
- "source contains no explicit safety warnings or interlock procedures"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0