Summary

HTTP API control surface for the 2N 2N-IP-SAFETY intercom (and other 2N IP intercom models in the same family). Commands sent as HTTP/HTTPS requests with absolute paths under the /api prefix; replies in JSON or XML per endpoint. Optional per-service authentication (None / Basic / Digest).

Transport

protocols:
  - http
addressing:
  base_url: /api
auth:
  type: digest  # inferred from source documenting Digest as default auth method
  notes: Per-service configuration: None, Basic, Digest. Recommended HTTPS+Digest.

Traits

# - powerable       not supported (no dedicated power command; system restart only)
# - routable        not supported
# - queryable       supported
# - levelable       not supported

Actions

- id: system_info
  label: System Info
  kind: query
  command: "GET /api/system/info"
  params: []

- id: system_status
  label: System Status
  kind: query
  command: "GET /api/system/status"
  params: []

- id: system_restart
  label: System Restart
  kind: action
  command: "GET /api/system/restart"
  params: []

- id: system_caps
  label: System Capabilities
  kind: query
  command: "GET /api/system/caps"
  params: []

- id: system_time_get
  label: Get System Time
  kind: query
  command: "GET /api/system/time"
  params: []

- id: system_time_set
  label: Set System Time
  kind: action
  command: "PUT /api/system/time"
  params:
    - name: automatic
      type: integer
      description: "0 or 1. If true, no more parameters required."
    - name: utcTime
      type: integer
      description: "Unix time (seconds since 1970-01-01), range min BuildTime..2147483647."
    - name: server
      type: string
      description: "NTP server IPv4 address or domain."

- id: system_timezone_get
  label: Get Timezone
  kind: query
  command: "GET /api/system/timezone"
  params: []

- id: system_timezone_set
  label: Set Timezone
  kind: action
  command: "PUT /api/system/timezone"
  params:
    - name: automatic
      type: integer
      description: "0 or 1."
    - name: zone
      type: string
      description: "Timezone name (see /api/system/timezone/caps) or 'custom'."
    - name: custom
      type: string
      description: "UTC offset string, e.g. UTC-08:00. Available when zone='custom'."

- id: system_timezone_caps
  label: List Available Timezones
  kind: query
  command: "GET /api/system/timezone/caps"
  params: []

- id: firmware_upload
  label: Upload Firmware
  kind: action
  command: "PUT /api/firmware"
  params:
    - name: blob-fw
      type: file
      description: "Firmware binary file (multipart/form-data)."

- id: firmware_apply
  label: Apply Uploaded Firmware
  kind: action
  command: "GET /api/firmware/apply"
  params:
    - name: fileid
      type: string
      description: "Firmware file identifier (8 HEX characters)."

- id: firmware_reject
  label: Reject Uploaded Firmware
  kind: action
  command: "GET /api/firmware/reject"
  params:
    - name: fileId
      type: string
      description: "Firmware file identifier."

- id: config_get
  label: Get Device Configuration
  kind: query
  command: "GET /api/config"
  params: []

- id: config_put
  label: Upload Device Configuration
  kind: action
  command: "PUT /api/config"
  params:
    - name: blob-cfg
      type: file
      description: "Device configuration file (XML)."

- id: config_factoryreset
  label: Factory Reset
  kind: action
  command: "GET /api/config/factoryreset"
  params:
    - name: section
      type: string
      description: "Optional 'network' resets network settings too (incl. certificates)."

- id: config_holidays_get
  label: Get Bank Holidays
  kind: query
  command: "GET /api/config/holidays"
  params: []

- id: config_holidays_set
  label: Set Bank Holidays
  kind: action
  command: "PUT /api/config/holidays"
  params:
    - name: blob-json
      type: json
      description: "Bank holidays definition JSON: {\"dates\": [\"01/01\", \"24/12\"]}."

- id: switch_caps
  label: Switch Capabilities
  kind: query
  command: "GET /api/switch/caps"
  params:
    - name: switch
      type: integer
      description: "Optional switch id (typically 1..4)."

- id: switch_status
  label: Switch Status
  kind: query
  command: "GET /api/switch/status"
  params:
    - name: switch
      type: integer
      description: "Optional switch id (typically 1..4). Returns all if omitted."

- id: switch_ctrl
  label: Switch Control
  kind: action
  command: "GET /api/switch/ctrl"
  params:
    - name: switch
      type: integer
      description: "Switch id (typically 1..4). Required."
    - name: action
      type: string
      description: "One of: on, off, trigger, lock, unlock, hold, release."
    - name: response
      type: string
      description: "Optional text to return instead of standard JSON."
    - name: timeout
      type: integer
      description: "1..86400 seconds, applies when action=hold."

- id: io_caps
  label: I/O Capabilities
  kind: query
  command: "GET /api/io/caps"
  params:
    - name: port
      type: string
      description: "Optional I/O identifier."

- id: io_status
  label: I/O Status
  kind: query
  command: "GET /api/io/status"
  params:
    - name: port
      type: string
      description: "Optional I/O identifier."

- id: io_ctrl
  label: I/O Control
  kind: action
  command: "GET /api/io/ctrl"
  params:
    - name: port
      type: string
      description: "I/O identifier (see /api/io/caps). Required."
    - name: action
      type: string
      description: "on or off."
    - name: response
      type: string
      description: "Optional text to return instead of standard JSON."

- id: phone_status
  label: Phone Status
  kind: query
  command: "GET /api/phone/status"
  params:
    - name: account
      type: integer
      description: "Optional SIP account (1..4). All accounts if omitted."

- id: phone_calllog_get
  label: Get Call Log
  kind: query
  command: "GET /api/phone/calllog"
  params: []

- id: phone_calllog_delete
  label: Delete Call Log Records
  kind: action
  command: "DELETE /api/phone/calllog"
  params:
    - name: id
      type: string
      description: "Unique identifier of the record to delete."

- id: phone_config_get
  label: Get SIP Account Configuration
  kind: query
  command: "GET /api/phone/config"
  params:
    - name: account
      type: integer
      description: "Optional SIP account id (1..2)."

- id: phone_config_set
  label: Set SIP Account Configuration
  kind: action
  command: "PUT /api/phone/config"
  params:
    - name: blob-json
      type: json
      description: "SIP account configuration JSON object (see source for field map)."

- id: call_status
  label: Active Call Status
  kind: query
  command: "GET /api/call/status"
  params:
    - name: session
      type: integer
      description: "Optional call session id."

- id: call_dial
  label: Initiate Call
  kind: action
  command: "GET /api/call/dial"
  params:
    - name: number
      type: string
      description: "Destination phone number or sip uri. Mutually exclusive with users."
    - name: users
      type: string
      description: "Comma-separated user uuids. Mutually exclusive with number."

- id: call_answer
  label: Answer Call
  kind: action
  command: "GET /api/call/answer"
  params:
    - name: session
      type: integer
      description: "Active incoming call session id."

- id: call_hangup
  label: Hangup Call
  kind: action
  command: "GET /api/call/hangup"
  params:
    - name: session
      type: integer
      description: "Active call session id."
    - name: reason
      type: string
      description: "normal (default) | rejected | busy."

- id: camera_caps
  label: Camera Capabilities
  kind: query
  command: "GET /api/camera/caps"
  params: []

- id: camera_snapshot
  label: Camera Snapshot
  kind: action
  command: "GET /api/camera/snapshot"
  params:
    - name: width
      type: integer
      description: "Horizontal JPEG resolution in pixels (must match /api/camera/caps)."
    - name: height
      type: integer
      description: "Vertical JPEG resolution in pixels (must match /api/camera/caps)."
    - name: source
      type: string
      description: "internal | external."
    - name: fps
      type: integer
      description: "Optional frame rate; ≥1 enables push mode."
    - name: time
      type: integer
      description: "Snapshot time offset <-30,0> seconds. Max resolution 1280x960."

- id: display_caps
  label: Display Capabilities
  kind: query
  command: "GET /api/display/caps"
  params: []

- id: display_image_put
  label: Upload Display Image/Video
  kind: action
  command: "PUT /api/display/image"
  params:
    - name: display
      type: string
      description: "Display identifier (e.g. internal, ext1)."
    - name: blob-image
      type: file
      description: "JPEG/BMP/PNG image. 2N IP Style: 1280x800; Verso: 320x214; Vario: 320x240."
    - name: blob-video
      type: file
      description: "MPEG4/H264 video (Verso), 320x214, max 60s, 15fps."
    - name: duration
      type: integer
      description: "Display time in milliseconds."
    - name: repeat
      type: integer
      description: "Video repeat count (Verso only)."
    - name: displayLayer
      type: string
      description: "top | popup | main | default."

- id: display_image_delete
  label: Delete Display Image
  kind: action
  command: "DELETE /api/display/image"
  params:
    - name: display
      type: string
      description: "Display identifier."
    - name: displayLayer
      type: string
      description: "top | popup | main | default | all."

- id: display_language
  label: Display Language Info
  kind: query
  command: "GET /api/display/language"
  params: []

- id: display_text_set
  label: Set Display Message
  kind: action
  command: "GET /api/display/text"
  params:
    - name: uid
      type: string
      description: "Optional 3rd-party message id, max 40 chars."
    - name: message
      type: array
      description: "Array of {language, text} objects (ISO 639 language codes)."
    - name: text
      type: string
      description: "Freetext alternative, max 1024 chars."
    - name: response
      type: boolean
      description: "Whether message requires response."
    - name: timeout
      type: integer
      description: "Seconds. Max 3600 (response=true) or 1209600 (response=false)."
    - name: icon
      type: string
      description: "none | operator | technician."

- id: display_text_delete
  label: Delete Display Message
  kind: action
  command: "DELETE /api/display/text"
  params: []

- id: log_caps
  label: Log Capabilities
  kind: query
  command: "GET /api/log/caps"
  params: []

- id: log_subscribe
  label: Subscribe to Event Log
  kind: action
  command: "GET /api/log/subscribe"
  params:
    - name: include
      type: string
      description: "new | all | -t (last t seconds)."
    - name: filter
      type: string
      description: "Comma-separated event types."
    - name: duration
      type: integer
      description: "Channel duration in seconds, max 3600."

- id: log_unsubscribe
  label: Unsubscribe Event Log
  kind: action
  command: "GET /api/log/unsubscribe"
  params:
    - name: id
      type: integer
      description: "Subscription channel id."

- id: log_pull
  label: Pull Events from Log
  kind: query
  command: "GET /api/log/pull"
  params:
    - name: id
      type: integer
      description: "Subscription channel id."
    - name: timeout
      type: integer
      description: "Reply delay in seconds if queue empty (default 0)."

- id: audio_test
  label: Audio Loop Test
  kind: action
  command: "GET /api/audio/test"
  params: []

- id: email_send
  label: Send Email
  kind: action
  command: "GET /api/email/send"
  params:
    - name: to
      type: string
      description: "Delivery address. Required."
    - name: subject
      type: string
      description: "Message subject. Required."
    - name: body
      type: string
      description: "Message body, may include HTML."
    - name: pictureCount
      type: integer
      description: "0 or 5 camera snapshots to enclose."
    - name: timeSpan
      type: integer
      description: "Snapshot timespan seconds, default 0."
    - name: width
      type: integer
      description: "Snapshot width in pixels."
    - name: height
      type: integer
      description: "Snapshot height in pixels."

- id: pcap_get
  label: Download Pcap
  kind: action
  command: "GET /api/pcap"
  params: []

- id: pcap_restart
  label: Restart Pcap Recording
  kind: action
  command: "GET /api/pcap/restart"
  params: []

- id: pcap_stop
  label: Stop Pcap Recording
  kind: action
  command: "GET /api/pcap/stop"
  params: []

- id: pcap_live
  label: Start Chunked Pcap
  kind: action
  command: "GET /api/pcap/live"
  params:
    - name: duration
      type: integer
      description: "Capture duration seconds; 0/omitted = indefinite."

- id: pcap_live_stop
  label: Stop Chunked Pcap
  kind: action
  command: "GET /api/pcap/live/stop"
  params: []

- id: pcap_live_stats
  label: Chunked Pcap Stats
  kind: query
  command: "GET /api/pcap/live/stats"
  params: []

- id: dir_template
  label: Directory Entry Template
  kind: query
  command: "GET /api/dir/template"
  params: []

- id: dir_create
  label: Create Directory Entries
  kind: action
  command: "PUT /api/dir/create"
  params:
    - name: force
      type: integer
      description: "Query param: 1 to overwrite existing uuid entry, 0 to error."
    - name: users
      type: array
      description: "JSON array of directory entry objects (see /api/dir/template)."

- id: dir_update
  label: Update Directory Entries
  kind: action
  command: "PUT /api/dir/update"
  params:
    - name: users
      type: array
      description: "JSON array, each object must include uuid."

- id: dir_delete
  label: Delete Directory Entries
  kind: action
  command: "PUT /api/dir/delete"
  params:
    - name: owner
      type: string
      description: "Owner string; deletes all entries with that owner."
    - name: users
      type: array
      description: "JSON array of {uuid} objects."

- id: dir_get
  label: Get Directory Entries
  kind: query
  command: "POST /api/dir/get"
  params:
    - name: fields
      type: array
      description: "JSON array of field names."
    - name: users
      type: array
      description: "JSON array of {uuid} objects."

- id: dir_query
  label: Query Directory by Timestamp
  kind: query
  command: "POST /api/dir/query"
  params:
    - name: series
      type: string
      description: "Optional series token."
    - name: fields
      type: array
      description: "JSON array of field names."
    - name: iterator
      type: object
      description: "{\"timestamp\": int} iterator."

- id: mobilekey_config_get
  label: Get Mobile Key Config
  kind: query
  command: "GET /api/mobilekey/config"
  params: []

- id: mobilekey_config_set
  label: Set Mobile Key Config
  kind: action
  command: "PUT /api/mobilekey/config"
  params:
    - name: location
      type: string
      description: "Location ID, max 127 chars."
    - name: key
      type: object
      description: "Primary encryption key {type, key, ctime}."
    - name: keys
      type: array
      description: "Array of encryption key objects; max 4."

- id: mobilekey_compatibility_get
  label: Get WaveKey Compatibility
  kind: query
  command: "GET /api/mobilekey/compatibility"
  params: []

- id: mobilekey_compatibility_set
  label: Set WaveKey Compatibility
  kind: action
  command: "PUT /api/mobilekey/compatibility"
  params:
    - name: compatibilityMode
      type: boolean
      description: "true or false."

- id: lpr_licenseplate
  label: Submit LPR Event
  kind: action
  command: "POST /api/lpr/licenseplate"
  params:
    - name: lprUuid
      type: string
      description: "Uuid of the LPR event."
    - name: lprID
      type: integer
      description: "Unique ID within one arrival."
    - name: accessPoint
      type: integer
      description: "0 = entry, 1 = exit."
    - name: plateText
      type: string
      description: "License plate, 1..12 chars."
    - name: lprDir
      type: integer
      description: "0..3 motion direction."
    - name: plateImage
      type: string
      description: "Base64-encoded image, max 256 kB."

- id: lpr_image
  label: Get LPR Image
  kind: action
  command: "GET /api/lpr/image"
  params:
    - name: plateText
      type: string
      description: "License plate text."

- id: accesspoint_blocking_ctrl
  label: Access Point Blocking Control
  kind: action
  command: "GET /api/accesspoint/blocking/ctrl"
  params:
    - name: id
      type: integer
      description: "0 = Entry, 1 = Exit."
    - name: action
      type: string
      description: "on | off."

- id: accesspoint_blocking_status
  label: Access Point Blocking Status
  kind: query
  command: "GET /api/accesspoint/blocking/status"
  params:
    - name: id
      type: integer
      description: "Optional 0 or 1. All access points if omitted."

- id: accesspoint_grantaccess
  label: Grant Remote Access
  kind: action
  command: "GET /api/accesspoint/grantaccess"
  params:
    - name: id
      type: integer
      description: "0 = Entry, 1 = Exit."
    - name: user
      type: string
      description: "User uuid."

- id: lift_grantaccess
  label: Lift Floor Access
  kind: action
  command: "GET /api/lift/grantaccess"
  params:
    - name: uuid
      type: string
      description: "User uuid."
    - name: duration
      type: integer
      description: "1..600 seconds; default per device config."

- id: automation_trigger
  label: Trigger Automation
  kind: action
  command: "GET /api/automation/trigger"
  params:
    - name: triggerId
      type: string
      description: "HttpTrigger block name (user defined)."

- id: cert_ca_get
  label: List CA Certificates
  kind: query
  command: "GET /api/cert/ca"
  params:
    - name: id
      type: string
      description: "Optional certificate id (user defined, internal, or fingerprint)."

- id: cert_ca_put
  label: Upload CA Certificate
  kind: action
  command: "PUT /api/cert/ca"
  params:
    - name: blob-cert
      type: file
      description: "Certificate DER or PEM."
    - name: id
      type: string
      description: "Optional user defined id starting with '@', 1..40 chars."

- id: cert_ca_delete
  label: Delete CA Certificate
  kind: action
  command: "DELETE /api/cert/ca"
  params:
    - name: id
      type: string
      description: "Certificate id or fingerprint. Required."

- id: cert_user_get
  label: List User Certificates
  kind: query
  command: "GET /api/cert/user"
  params:
    - name: id
      type: string
      description: "Optional certificate id."

- id: cert_user_put
  label: Upload User Certificate
  kind: action
  command: "PUT /api/cert/user"
  params:
    - name: blob-cert
      type: file
      description: "Certificate DER or PEM."
    - name: blob-pk
      type: file
      description: "Private key DER or PEM."
    - name: password
      type: string
      description: "Optional private key password."
    - name: id
      type: string
      description: "Optional user defined id starting with '@'."

- id: cert_user_delete
  label: Delete User Certificate
  kind: action
  command: "DELETE /api/cert/user"
  params:
    - name: id
      type: string
      description: "Certificate id or fingerprint. Required."

- id: cert_csr_post
  label: Create CSR
  kind: action
  command: "POST /api/cert/csr"
  params:
    - name: commonName
      type: string
      description: "FQDN of device. Required."
    - name: sanMdns
      type: integer
      description: "0|1, include mDNS SAN, default 1."
    - name: sanIp
      type: integer
      description: "0|1, include IPv4 SAN, default 1."
    - name: algorithm
      type: string
      description: "P-256 | P-384 | RSA-2048 | RSA-3072."
    - name: id
      type: string
      description: "Optional user id '@' + 1..40 chars."
    - name: country
      type: string
      description: "ISO 3166 Alpha-2."
    - name: state
      type: string
      description: "1..128 chars."
    - name: locality
      type: string
      description: "1..128 chars."
    - name: organization
      type: string
      description: "1..64 chars."
    - name: organizationalUnit
      type: string
      description: "1..64 chars."
    - name: email
      type: string
      description: "1..254 chars, valid email format."

- id: cert_csr_get
  label: List CSRs
  kind: query
  command: "GET /api/cert/csr"
  params:
    - name: id
      type: string
      description: "Optional CSR id or fingerprint."

- id: cert_csr_put
  label: Upload Certificate to CSR
  kind: action
  command: "PUT /api/cert/csr"
  params:
    - name: id
      type: string
      description: "CSR id or fingerprint. Required."
    - name: blob-cert
      type: file
      description: "Certificate PEM, must match CSR private key."

- id: cert_csr_delete
  label: Delete CSR
  kind: action
  command: "DELETE /api/cert/csr"
  params:
    - name: id
      type: string
      description: "CSR id or fingerprint. Required."

- id: system_user_get
  label: List System Users
  kind: query
  command: "GET /api/system/user"
  params: []

- id: system_user_put
  label: Update System User
  kind: action
  command: "PUT /api/system/user"
  params: []

- id: system_user_delete
  label: Delete System User
  kind: action
  command: "DELETE /api/system/user"
  params: []

- id: system_ca_get
  label: List System CAs
  kind: query
  command: "GET /api/system/ca"
  params: []

- id: system_ca_put
  label: Update System CA
  kind: action
  command: "PUT /api/system/ca"
  params: []

- id: system_ca_delete
  label: Delete System CA
  kind: action
  command: "DELETE /api/system/ca"
  params: []

Feedbacks

- id: system_info
  type: object
  description: "Device identification block (devType, variant, variantId, serialNumber, hwVersion, swVersion, buildType, firmwarePackage, deviceName, macAddr)."

- id: system_status
  type: object
  description: "systemTime (Unix seconds), upTime (seconds since last restart)."

- id: switch_state
  type: object
  description: "Per-switch {switch, active, locked, held}."

- id: io_state
  type: object
  description: "Per-port {port, state (0|1)}."

- id: sip_account_status
  type: object
  description: "Per-account {account, enabled, sipNumber, registered}."

- id: call_session
  type: object
  description: "Active call session info (session, direction, state, calls[])."

- id: camera_caps
  type: object
  description: "Available jpegResolution[] and sources[]."

- id: display_caps
  type: object
  description: "Available displays[] with resolution."

- id: display_language
  type: object
  description: "sessionCurrently, default, supported {system, custom}, enabled[]."

- id: success_flag
  type: boolean
  description: "Standard JSON reply {\"success\": true|false}."

- id: error_object
  type: object
  description: "Standard error {\"code\", \"param\", \"description\", \"data?\"}."

Variables

# UNRESOLVED: most variable fields are returned in /api/dir/template responses;
# this spec treats them as opaque action payloads rather than typed variables.

Events

- id: DeviceState
  payload: {state: "startup"}

- id: AudioLoopTest
  payload: {result: "passed|failed"}

- id: MotionDetected
  payload: {state: "in|out", id: integer}

- id: NoiseDetected
  payload: {state: "in|out"}

- id: KeyPressed
  payload: {key: "0-9|%1-%150|*|#"}

- id: KeyReleased
  payload: {key: "0-9|%1-%150|*|#"}

- id: CodeEntered
  payload: {ap: "0|1", session: int, direction: "in|out|any", code: string, type: string, uuid: string, valid: boolean}

- id: CardEntered
  payload: {ap: "0|1", session: int, direction: "in|out|any", reader: string, uid: string, uuid: string, valid: boolean}

- id: InputChanged
  payload: {port: string, state: boolean}

- id: OutputChanged
  payload: {port: string, state: boolean}

- id: SwitchStateChanged
  payload: {switch: "1-4", state: boolean, originator: "profile|api|ap|rex|idt|dtmf|auth|uni|zone|automation"}

- id: CallStateChanged
  payload: {direction: "incoming|outgoing", state: "connecting|ringing|connected|terminated", peer: string, session: int, call: int}

- id: RegistrationStateChanged
  payload: {sipAccount: "1|2", state: "registered|unregistered|registering|unregistering"}

- id: TamperSwitchActivated
  payload: {state: "in|out"}

- id: UnauthorizedDoorOpen
  payload: {state: "in|out"}

- id: DoorOpenTooLong
  payload: {state: "in|out"}

- id: LoginBlocked
  payload: {address: string}

- id: UserAuthenticated
  payload: {ap: "0|1", session: int, name: string, uuid: string, apbBroken: boolean}

- id: CardHeld
  payload: {ap: "0|1", session: int, direction: "in|out|any", reader: string, uid: string, valid: boolean}

- id: SilentAlarm
  payload: {ap: "0|1", session: int, name: string, uuid: string}

- id: AccessLimited
  payload: {ap: "0|1", type: "card|code|finger", state: "in|out"}

- id: PairingStateChanged
  payload: {state: "pending|inactive|pending_blocked|expired|paired", authId: string}

- id: SwitchesBlocked
  payload: {state: "in|out"}

- id: FingerEntered
  payload: {ap: "0|1", session: int, direction: "in|out|any", uuid: string, valid: boolean}

- id: MobKeyEntered
  payload: {ap: "0|1", session: int, direction: "in|out|any", authid: string, uuid: string, valid: boolean}

- id: DoorStateChanged
  payload: {state: "opened|closed"}

- id: UserRejected
  payload: {ap: "0|1", session: int, name: string, uuid: string, reason: "accessBlocked|switchLocked|invalidTime|invalidProfile|invalidSequence|invalidCredential|authInterrupted|timeout|switchDisabled"}

- id: DisplayTouched
  payload: {x: int, y: int, dx: int, dy: int}

- id: DtmfEntered
  payload: {code: string, type: "uni|user", call: string, valid: boolean}

- id: AccessTaken
  payload: {}

- id: ApLockStateChanged
  payload: {ap: "0|1", state: "in|out"}

- id: RexActivated
  payload: {ap: "0|1", session: int}

- id: LiftStatusChanged
  payload: {module: int, ready: boolean}

- id: LiftFloorsEnabled
  payload: {type: "public|user", floors: array, uuid?: string}

- id: LiftConfigChanged
  payload: {hash: int}

- id: CapabilitiesChanged
  payload: {}

- id: ConfigurationChanged
  payload: {}

- id: HardwareChanged
  payload: {reason: int, class: int, id: string}

- id: DirectoryChanged
  payload: {series: string, timestamp?: int}

- id: DirectorySaved
  payload: {series: string, timestamp?: int}

- id: LicensePlateRecognized
  payload: {ap: int, valid: boolean, licensePlate: string, session?: string, uuid?: string}

- id: ApiAccessRequested
  payload: {ap: int, valid: boolean, session?: string, uuid?: string}

- id: UserActionActivated
  payload: {id: string, state: boolean}

- id: VirtualInput
  payload: {port: string, state: boolean}

- id: VirtualOutput
  payload: {port: string, state: boolean}

- id: WaveKeyActivated
  payload: {type: string}

- id: CallSessionStateChanged
  payload: {session: int, state: string, originator?: string, info?: object}

- id: SwitchOperationChanged
  payload: {switch: int, enabled?: bool, locked?: bool, held?: bool, hold_timeout?: int, originator?: string}

- id: RescueStateChanged
  payload: {state: string, reason: string}

- id: MotionDetectionEvents
  payload: {state: "in|out"}

Macros

# UNRESOLVED: source does not document multi-step macros explicit sequences beyond
# the call flow (dial -> hangup, grant_access -> switch activation).

Safety

confirmation_required_for:
  - factory_reset  # /api/config/factoryreset is destructive; ~15s delay during which device must not be powered off
interlocks: []
# UNRESOLVED: source mentions "do not reset or switch off during ~15s after PUT /api/config
# or factoryreset" but exposes no explicit safety flags. No other interlocks documented.

Notes

All endpoints share the /api prefix under the device base URL. Endpoints accept GET, POST, PUT, DELETE per the source table; some function as both download (GET) and config upload (PUT/POST). Replies are JSON by default; XML only for /api/config download and binary pcap streams. Requests for protected services require authentication (None/Basic/Digest per service). Source recommends HTTPS+Digest for all services. Source documents endpoints shared across 2N IP intercom family (Verso, Vario, Style, Safety) — endpoint availability per device depends on installed firmware/licensing.

Provenance

source_domains:
  - wiki.2n.com
source_urls:
  - https://wiki.2n.com/download/attachments/123498082/2N_IP_HTTP_API_manual_EN_2.50_LTS.pdf
  - https://wiki.2n.com/hip/hapi/latest/en
  - https://wiki.2n.com/hip/auto/latest/en
  - https://wiki.2n.com/download/attachments/123496966/2N_IP_Automation_Manual_EN_2.50_LTS.pdf
  - https://wiki.2n.com/hip/conf/latest/en/5-konfigurace-interkomu/5-4-sluzby/5-4-5-http-api
retrieved_at: 2026-07-02T03:25:14.740Z
last_checked_at: 2026-07-07T10:58:21.316Z

Verification Summary

verdict: verified
checked_at: 2026-07-07T10:58:21.316Z
matched_actions: 85
action_count: 85
confidence: medium
summary: "All 85 spec actions match source endpoints verbatim; transport values (base /api, Digest auth) confirmed; 3 source endpoint+method combinations not represented are below the short threshold. (4 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "/api/holidays (GET)"
- "GET /api/system/time/set"
- "/api/holidays (PUT)"
- "firmware version compatibility not stated in source"
- "most variable fields are returned in /api/dir/template responses;"
- "source does not document multi-step macros explicit sequences beyond"
- "source mentions \"do not reset or switch off during ~15s after PUT /api/config"

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