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.
  1. Optional: go2rtc for live camera on video calls.

If the physical intercom or mailbox bank already lists unit numbers and resident names but apartment display names in OpenApp are empty, use Enrich (Virtual Intercom → Enrich): upload panel photos, Analyze, review, and Commit. This fills the visitor directory labels visitors see when browsing the portal.

See Virtual Access — automatic directory filling from photos for privacy, API key setup, and manual JSON fallback.

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

SDK

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

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

HTTP API (curl)

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"

When policy allows, open from the active session:

SDK

await client.public_access.session_open(session_id)

HTTP API (curl)

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

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