Summary

This spec describes the LAN-2-LAN HTTP API for the DoorBird D2200EA video door station (rear mount variant). It covers HTTP-based control endpoints for live video, audio, relay triggering, favorites, schedules, SIP configuration, and encrypted UDP event broadcasts. All endpoints require Basic or Digest authentication per RFC 2617.

Transport

protocols:
  - http
  - udp
addressing:
  port: 80
auth:
  type: basic_or_digest  # per RFC 2617; alternatively plaintext http-user/http-password query params

Traits

# - powerable       # UNRESOLVED: explicit power on/off commands not present in source
- routable  # inferred from relay-triggering commands (open-door, light-on)
# - queryable       # UNRESOLVED: dedicated state-query endpoints not documented (info.cgi returns version info only)
# - levelable       # UNRESOLVED: no volume/brightness commands present

Actions

- id: get_session
  label: Get Session
  kind: query
  command: "GET /bha-api/getsession.cgi"
  params: []
- id: invalidate_session
  label: Invalidate Session
  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
  kind: query
  command: "GET /bha-api/video.cgi"
  params: []
- id: live_image_request
  label: Live Image Request
  kind: query
  command: "GET /bha-api/image.cgi"
  params: []
- id: open_door
  label: Open Door (Trigger 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 <doorcontrollerID>@<relay> for paired IP I/O DoorController. Defaults to physical relay 1 when omitted."
- id: light_on
  label: Light On (Trigger Light Relay)
  kind: action
  command: "GET /bha-api/light-on.cgi"
  params: []
- id: history_image_request
  label: History Image Request
  kind: query
  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, defaults to ring history)"
- id: monitor_request
  label: Monitor Request (Continuous Event Stream)
  kind: query
  command: "GET /bha-api/monitor.cgi?ring={ring}"
  params:
    - name: ring
      type: string
      description: "Comma-separated event types to monitor: doorbell, motionsensor"
- id: live_audio_receive
  label: Live Audio Receive
  kind: query
  command: "GET /bha-api/audio-receive.cgi?sessionid={session_id}"
  params:
    - name: session_id
      type: string
      description: Temporary session ID (valid for 10 minutes)
- id: live_audio_transmit
  label: Live Audio Transmit
  kind: action
  command: "POST /bha-api/audio-transmit.cgi"
  params: []
- id: info_request
  label: Device Info Request
  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: "sip or http"
    - name: title
      type: string
      description: Name or short description
    - name: value
      type: string
      description: "URL including protocol and credentials (HTTP(S) URL or SIP target)"
    - name: id
      type: integer
      description: "Optional: ID of existing favorite to change; omit for new"
- 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: "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
  label: Add or Update Schedule Entry
  kind: action
  command: "POST /bha-api/schedule.cgi"
  params: []
- id: delete_schedule
  label: Delete Schedule Entry
  kind: action
  command: "GET /bha-api/schedule.cgi?action=remove&input={input}&param={param}"
  params:
    - name: input
      type: string
      description: "Input event type: doorbell, motion, rfid"
    - name: param
      type: string
      description: "ID of schedule entry to delete (doorbell number, transponder id, etc.)"
- id: restart
  label: Restart Device
  kind: action
  command: "GET /bha-api/restart.cgi"
  params: []
- id: sip_register
  label: SIP Register
  kind: action
  command: "GET /bha-api/sip.cgi?action=registration&user={user}&password={password}&url={url}"
  params:
    - name: user
      type: string
      description: Authentication user for SIP Proxy
    - name: password
      type: string
      description: Authentication password for SIP Proxy
    - name: url
      type: string
      description: IP/Hostname of the SIP Proxy
- 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 - microphone volume (default 33)"
    - name: spk_volume
      type: integer
      description: "1..100 - speaker volume (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 to auto-call on doorbell event, or "none" (default "none")'
    - name: relay1_passcode
      type: integer
      description: "0..99999999 - PIN code for triggering door open relay via DTMF"
    - 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:10.0.0.1:5060"'
    - name: anc
      type: integer
      description: "0 or 1 - enable acoustic noise cancellation (default 1)"
    - name: ring_time_limit
      type: integer
      description: "10..300 - maximum ringing time in seconds (default 300)"
    - name: call_time_limit
      type: integer
      description: "30..300 - maximum call duration in 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: session_id
  type: string
  values: []
  description: Temporary session ID (valid 10 minutes), returned by get_session.
- id: notification_encryption_key
  type: string
  values: []
  description: ChaCha20 key for decrypting UDP event broadcasts; returned by get_session.
- id: device_info
  type: object
  values: []
  description: JSON object with FIRMWARE, BUILD_NUMBER, PRIMARY_MAC_ADDR, RELAYS, DEVICE-TYPE - returned by info_request.
- id: doorbell_state
  type: enum
  values: [high, low]
  description: Reported by monitor stream; H = doorbell pressed, L = idle.
- id: motion_state
  type: enum
  values: [high, low]
  description: Reported by monitor stream; H = motion detected, L = idle.
- id: sip_status
  type: object
  values: []
  description: JSON with LASTERRORCODE and LASTERRORTEXT; 200 means successfully registered.

Variables

# UNRESOLVED: no discrete settable parameter endpoints documented outside SIP settings (which are captured as Actions).

Events

- id: doorbell_event
  label: Doorbell Event
  description: ChaCha20-Poly1305 encrypted UDP broadcast on ports 6524 and 35344. Plaintext fields: INTERCOM_ID (6 bytes), EVENT ("doorbell" + doorbell number, 8 bytes space-padded), TIMESTAMP (4-byte Unix timestamp).
- id: motion_event
  label: Motion Event
  description: Same UDP broadcast format as doorbell_event; EVENT field = "motion".
- id: keepalive_broadcast
  label: UDP Keepalive
  description: Sent every 7 seconds on ports 6524 and 35344; not relevant for event decryption.

Macros

# UNRESOLVED: no explicit multi-step macros documented in source.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no explicit safety warnings, interlocks, or power-on sequencing requirements stated in source.
# Note: SIP calls auto-terminate after 180 seconds; calls drop when the official DoorBird App takes over audio/video.

Notes

The HTTP interface supports both port 80 (HTTP) and port 443 (HTTPS). HTTPS uses a self-signed certificate; clients must accept it. The device limits API access to 1 concurrent connection per second. Repeated authentication failures result in IP/user block for 1 minute (HTTP 423). Video door station supports only one simultaneous audio/video call — other callers receive HTTP 503.

Audio streaming requires a temporary Session ID (10-minute validity) appended as query parameter rather than credentials in plaintext. Audio codec is G.711 µ-law at 8000 Hz; clients must implement their own AEC/ANR.

Event broadcasts (UDP on ports 6524 and 35344) use IDENT 0xDE 0xAD 0xBE and VERSION 0x02 for ChaCha20-Poly1305 encryption. Deprecated VERSION 0x01 (Argon2i) remains supported but should be migrated. The NOTIFICATION_ENCRYPTION_KEY from get_session.cgi is used as the decryption key (first 32 bytes for ChaCha20).

Favorites and schedules require firmware 000110 or higher and the "API operator" user permission. The legacy autocall_doorbell_url SIP setting is deprecated in favor of schedule.cgi entries.

RTSP video interface exists on port 554 (RTSP) and port 8557 (RTSP-over-HTTP) but is not enumerated as Actions in this spec — see vendor docs for rtsp:///mpeg/media.amp and resolution variants.

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:23:39.101Z
last_checked_at: 2026-10-01T12:50:34.807Z

Verification Summary

verdict: verified
checked_at: 2026-10-01T12:50:34.807Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 spec action units map literally to documented DoorBird LAN-2-LAN CGI endpoints; transport port 80 and RFC 2617 auth are sourced verbatim. (8 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "RTSP video interface is documented but RTSP is not declared as a primary control transport; not enumerated as Actions."
- "explicit power on/off commands not present in source"
- "dedicated state-query endpoints not documented (info.cgi returns version info only)"
- "no volume/brightness commands present"
- "no discrete settable parameter endpoints documented outside SIP settings (which are captured as Actions)."
- "no explicit multi-step macros documented in source."
- "no explicit safety warnings, interlocks, or power-on sequencing requirements stated in source."
- "SIP listen port (5060) mentioned but device also listens on standard SIP port for incoming P2P calls — incoming-call port not separately enumerated as an Action."

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