Skip to content
OAOpenAppPhysical Security as a Service
Login

Virtual intercom — directory, call, unlock

A virtual intercom replaces or augments a lobby panel: visitors scan a QR code or open a public portal URL, browse a building directory, call a resident, and optionally unlock the door. OpenApp implements this through Virtual Access integrations, access portals, and public session APIs — no rip-and-replace hardware required when you already have relays or cloud gate APIs.

This guide targets building operators and integrators automating apartment and office entry. For end-user portal concepts, see Access Portals and Virtual Access integration.

Visitor scans portal QR (/p/{public_id})
├─ Directory mode → pick resident → POST portal/sessions (call/video)
│ └─ Resident answers → POST session/open
└─ Guest with invite → quick open (invite execute)
  1. Add a Virtual Access integration and link a door device to a portal (portals user guide).
  2. Note publicPortalId from the portal’s public URL and the target_entity_id for the door entity.
  3. Optional: go2rtc for live camera on video calls.

Start a call or video session from the public portal. Body PublicPortalCreateSessionRequest requires target_entity_id and mode ("call" or "video").

Terminal window
export OPENAPP_API_BASE='https://api.openapp.house/api/v1'
export PUBLIC_PORTAL_ID='01HPUBLICPORTAL000000000000'
export TARGET_ENTITY_ID='01HENTITY000000000000000000'
curl -sS -X POST \
-H "Content-Type: application/json" \
-d '{
"target_entity_id": "'"${TARGET_ENTITY_ID}"'",
"mode": "call"
}' \
"${OPENAPP_API_BASE}/public/access/portals/${PUBLIC_PORTAL_ID}/sessions"

The response includes session_id, caller_token, and WebRTC routing hints. Poll GET /public/access/sessions/{sessionId} until the callee accepts.

session = await client.public_access.portal_start_session(
portal_id,
target_entity_id=entity_id,
mode="call",
)
session_id = session["session_id"]

When policy allows, open from the active session:

Terminal window
curl -sS -X POST \
-H "Content-Type: application/json" \
-d '{}' \
"${OPENAPP_API_BASE}/public/access/sessions/${SESSION_ID}/open"

Or use client.public_access.session_open(session_id) in Python — see Public Access.

Residents may also receive Web Push notifications; configure subscriptions via Me — push.

Visitors with a valid invite link skip the directory and use invite execute. Pair with Time-bound guest invitation for STR and hotel stays.

StepAPI surface
List portalsGET /integrations/{id}/access-portals
Probe reachabilityGET /public/access/portals/{id}/reachable
Callable targetsGET /public/access/portals/{id}/targets
Audit-friendly reasonPass reason on portal open when supported

Full operation index: Agent-relevant API.


← Time-bound guest invitation · Agents overview