Summary

DoorBird D2109V is a video door station with LAN-2-LAN HTTP API control. Supports HTTP/HTTPS on ports 80/443, RTSP video streaming on 554/8557, SIP on 5060, and UDP event broadcasts on 6524/35344. Authentication via Basic/Digest auth or http-user/http-password parameters.

Transport

protocols:
  - http
  - tcp
addressing:
  port: 80
  base_url: http://<device-ip>/bha-api/
auth:
  type: basic  # stated: Basic or Digest auth per RFC 2617

HTTPS available on port 443 (self-signed certificate).

RTSP video:

protocols:
  - tcp
addressing:
  port: 554
  # RTSP-over-HTTP: 8557

SIP:

protocols:
  - tcp
addressing:
  port: 5060

UDP Event broadcasts:

protocols:
  - udp
addressing:
  port: 6524
  # Also: 35344

Traits

# Inferred from command examples:
powerable: true     # restart.cgi present
queryable: true     # info.cgi, sip.cgi?action=status, monitor.cgi
routable: true      # favorites.cgi, schedule.cgi for event-based actions
levelable: true     # mic_volume, spk_volume via sip.cgi settings

Actions

- id: get_live_video
  label: Get Live Video
  kind: action
  params:
    - name: path
      type: string
      description: "/bha-api/video.cgi or RTSP rtsp://<device-ip>/mpeg/media.amp"

- id: get_live_image
  label: Get Live Image
  kind: action
  params: []

- id: open_door
  label: Open Door
  kind: action
  params:
    - name: r
      type: string
      description: "Relay ID, e.g. '1' or 'gggaaa@1' (optional, defaults to relay1)"

- id: light_on
  label: Light On
  kind: action
  params: []

- id: get_history_image
  label: Get History Image
  kind: action
  params:
    - name: index
      type: integer
      description: "History index 1..50 (1 = latest)"
    - name: event
      type: string
      description: "doorbell or motionsensor (optional)"

- id: monitor_events
  label: Monitor Events
  kind: action
  params:
    - name: ring
      type: string
      description: "doorbell,motionsensor"

- id: get_audio
  label: Get Live Audio
  kind: action
  params: []

- id: transmit_audio
  label: Transmit Audio
  kind: action
  params: []

- id: get_info
  label: Get Device Info
  kind: action
  params: []

- id: list_favorites
  label: List Favorites
  kind: action
  params: []

- id: save_favorite
  label: Save Favorite
  kind: action
  params:
    - name: action
      type: string
      const: save
    - name: type
      type: string
      enum: [sip, http]
    - name: title
      type: string
    - name: value
      type: string
    - name: id
      type: integer
      description: "optional, omit for new"

- id: delete_favorite
  label: Delete Favorite
  kind: action
  params:
    - name: action
      type: string
      const: 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
    - name: output
      type: array

- id: delete_schedule
  label: Delete Schedule
  kind: action
  params:
    - name: action
      type: string
      const: remove
    - name: input
      type: string
      enum: [doorbell, motion, rfid]
    - name: param
      type: string

- id: restart
  label: Restart Device
  kind: action
  params: []

- id: sip_registration
  label: SIP Registration
  kind: action
  params:
    - name: action
      type: string
      const: registration
    - name: user
      type: string
    - name: password
      type: string
    - name: url
      type: string

- id: sip_makecall
  label: SIP Make Call
  kind: action
  params:
    - name: action
      type: string
      const: makecall
    - name: url
      type: string

- id: sip_hangup
  label: SIP Hangup
  kind: action
  params:
    - name: action
      type: string
      const: hangup

- id: sip_settings
  label: SIP Settings
  kind: action
  params:
    - name: action
      type: string
      const: settings
    - name: enable
      type: integer
    - name: mic_volume
      type: integer
    - name: spk_volume
      type: integer
    - name: dtmf
      type: integer
    - name: relay1_passcode
      type: integer
    - name: incoming_call_enable
      type: integer
    - name: anc
      type: integer
    - name: ring_time_limit
      type: integer
    - name: call_time_limit
      type: integer

- id: sip_status
  label: SIP Status
  kind: action
  params:
    - name: action
      type: string
      const: status

- id: sip_reset
  label: SIP Reset
  kind: action
  params:
    - name: action
      type: string
      const: reset

- id: get_session
  label: Get Session
  kind: action
  params: []

- id: invalidate_session
  label: Invalidate Session
  kind: action
  params:
    - name: invalidate
      type: string

Feedbacks

- id: video_stream
  type: binary
  description: "Multipart JPEG video stream (video.cgi) or MPEG4 H.264 via RTSP"

- id: live_image
  type: binary
  description: "JPEG image from image.cgi"

- id: history_image
  type: binary
  description: "JPEG image from history.cgi"

- id: audio_stream
  type: binary
  description: "G.711 μ-law audio from audio-receive.cgi"

- id: open_door_response
  type: object
  description: "JSON with RETURNCODE"

- id: device_info
  type: object
  description: "JSON with FIRMWARE, BUILD_NUMBER, PRIMARY_MAC_ADDR, RELAYS, DEVICE-TYPE"

- id: favorites_list
  type: object
  description: "JSON with sip and http favorites"

- id: schedule_list
  type: object
  description: "JSON array of schedule entries"

- id: monitor_event
  type: string
  description: "doorbell:H/L or motionsensor:H/L events"

- id: sip_status
  type: object
  description: "JSON with LASTERRORCODE and LASTERRORTEXT"

- id: session_response
  type: object
  description: "JSON with SESSIONID and NOTIFICATION_ENCRYPTION_KEY"

- id: udp_event
  type: object
  description: "Decrypted UDP broadcast: INTERCOM_ID, EVENT, TIMESTAMP"

Variables

# SIP settings (set via sip.cgi?action=settings):
- id: sip_enabled
  type: boolean
- id: mic_volume
  type: integer
  range: [1, 100]
  default: 33
- id: spk_volume
  type: integer
  range: [1, 100]
  default: 70
- id: dtmf_enabled
  type: boolean
- id: relay1_passcode
  type: integer
  range: [0, 99999999]
- id: incoming_call_enable
  type: boolean
- id: anc_enabled
  type: boolean
  default: true
- id: ring_time_limit
  type: integer
  range: [10, 300]
  default: 300
- id: call_time_limit
  type: integer
  range: [30, 300]
  default: 300

Events

# UDP event broadcasts (ports 6524, 35344) - ChaCha20-Poly1305 encrypted v2:
- id: doorbell_event
  description: "Doorbell ring event"
- id: motion_event
  description: "Motion sensor event"
- id: rfid_event
  type: string
  description: "RFID event (future)"
- id: keypad_event
  type: string
  description: "Keypad event (future)"

Macros

# Session-based video/audio auth:
# 1. GET /bha-api/getsession.cgi → store SESSIONID and NOTIFICATION_ENCRYPTION_KEY
# 2. Use sessionid param for video/audio requests to avoid plaintext credentials

Safety

confirmation_required_for:
  - open_door  # door opener relay
interlocks: []
# UNRESOLVED: explicit safety interlock procedures not stated in source

Notes

  • Rate limit: 1 concurrent API connection per second; 423 response after wrong auth (1 min block)
  • Video/audio stream precedence: official DoorBird App takes priority over LAN API
  • Session ID valid 10 minutes; NOTIFICATION_ENCRYPTION_KEY valid until password change
  • SIP call auto-terminates after 180 seconds
  • Audio requires G.711 μ-law codec (8000 Hz); client must implement AEC/ANR
  • RTSP authentication: standard RTSP auth (no parameter auth for RTSP)

Provenance

source_domains:
  - doorbird.com
source_urls:
  - https://www.doorbird.com/downloads/api_lan.pdf
retrieved_at: 2026-04-30T04:32:24.390Z
last_checked_at: 2026-06-03T06:39:17.363Z

Verification Summary

verdict: verified
checked_at: 2026-06-03T06:39:17.363Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 actions and transport values verified (4 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "serial/RS-232 not mentioned in source — no direct physical control port documented"
- "explicit safety interlock procedures not stated in source"
- "voltage/current/power specifications not in source"
- "RS-232 serial control not documented for D2109V specifically"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0