Skip to content
OpenAppPhysical access, fully managed
Login

Agent-relevant API index

Use this page as a routing index when building agents or search-retrieval over OpenApp. Paths are relative to https://openapp.house/api/v1 unless noted. The machine-readable contract is OpenAPI JSON; browse schemas in the interactive API reference.

For setup and safety, start with Build an access-control agent.

ConcernOperationsNotes
API keysSee API keysX-API-Key. A scoped key reaches only these routes.
Org scopeMost GET /devices, integrations, zonesHeader X-Org: {org_ulid}
Caller identityGET /me/directory-listings, GET /me/invitationsNo X-Org — Me. Not reachable with a scoped key.
IntentHTTPoperationId
List entitiesGET /entitieslist_entities
Get entityGET /entities/{id}get_entity
Open door / gatePOST /entities/{id}/actions/switchable.openexecute_entity_action
Preview (dry-run)POST /entities/{id}/actions/{action_id}/previewpreview_entity_action
Close / togglePOST .../switchable.close, .../switchable.toggleexecute_entity_action

Headers: Idempotency-Key (retries), X-OpenApp-Confirm (step-up confirmation).

When confirmation is required — by the agent’s confirmation mode or a require_step_up policy — the action returns an error with error_code: "confirmation_required" and a preview_token. Repeat the same request, with the same payload, with that token in X-OpenApp-Confirm. The token is short-lived and single-use.

Guide: Open the door with the HTTP API.

IntentHTTPNotes
Named agentsGET/POST /agents, POST /agents/{id}/credentialsFirst-class principal; audit actor_kind=agent
NL resolvePOST /orgs/{org_id}/resolveRanked candidates; ambiguous when top-2 are close
AliasesPOST/GET /orgs/{org_id}/aliasesOperator-defined spoken names
Hosted MCPPOST /mcpOAuth; no scripting tools
CopilotPOST /orgs/{org_id}/copilot/chat, .../commitReview-before-commit
Event skillsPOST /orgs/{org_id}/skillsVersioned webhook playbooks
PMS inboundPOST /pms/{id}/inboundCheckout → revoke invites
PerceptionPOST /orgs/{org_id}/perception/lpr, .../visitor-presentSame Cedar path as switchable.open

An agent credential carries entity, device and org read roles plus entities:set_state. Group routes (/orgs/{org_id}/groups, /groups/{id}/…, /group-share-offers/redeem) are closed to agents unless the agent’s organization enables agent_group_write. Then:

  1. Mint the credential with group_roles, for example {"group_roles": ["groups:read", "groups:update"]} on POST /agents/{id}/credentials. You must hold each role in the agent’s organization yourself.
  2. The credential can use those roles only in the agent’s organization and its sub-organizations.
  3. If the policy is disabled, the next group request fails with 403 error_code: "agent_capability_disabled". Minting group roles without the policy fails the same way.

API keys and voice keys cannot carry group roles.

Trimmed Custom GPT spec: openapp-openapi-agent.json. MCP: MCP server setup.

IntentHTTPoperationId
List integrationsGET /integrationslist_integrations
Create integrationPOST /integrationscreate_integration
List devicesGET /deviceslist_devices
Integration entitiesGET /integrations/{id}/entitieslist_integration_entities
Provider opsPOST /integrations/{id}/ops/{op_id}execute_integration_op

SDK: Integrations, Devices, Entities.

IntentHTTPoperationId
List portalsGET /integrations/{id}/access-portalslist_integration_access_portals
Create portalPOST /integrations/{id}/access-portalscreate_integration_access_portal
List invitesGET /integrations/{id}/access-inviteslist_integration_access_invites
Create invitePOST /integrations/{id}/access-invitescreate_integration_access_invite
Update invitePUT /integrations/{id}/access-invites/{invite_link_id}update_integration_access_invite
Delete inviteDELETE .../access-invites/{invite_link_id}delete_integration_access_invite

Guides: Time-bound guest invitation, Integrate existing software.

IntentHTTPoperationId
Load inviteGET /public/access/invites/{inviteToken}get_public_invite
Claim invitePOST .../claimpost_public_invite_claim
Execute grant (open)POST .../executepost_public_invite_execute
Portal configGET /public/access/portals/{publicPortalId}get_public_portal
Start call/videoPOST .../portals/{id}/sessionspost_public_portal_sessions
Session openPOST /public/access/sessions/{sessionId}/openpost_public_session_open
Stream metadataGET .../sessions/{sessionId}/streamsget_public_session_streams

Guide: Virtual intercom. SDK: Public Access.

IntentHTTPNotes
Site peopleGET/POST /integrations/{id}/people, DELETE /integrations/{id}/people/{user_id}Site people
Org users / roles/orgs/..., /users/...Orgs, Users
IntentHTTPoperationId
Create executionPOST /scripting/executionscreate_scripting_execution
Get executionGET /scripting/executions/{id}get_scripting_execution
List executionsGET /scripting/executionslist_scripting_executions
Cancel executionDELETE /scripting/executions/{id}cancel_scripting_execution

Executions are asynchronous jobs: POST returns 202 with a ScriptingExecution, and you poll GET until status is terminal (succeeded, failed, canceled). Runtime cap 15 minutes; executions are deleted 24 hours after completion; canceling does not roll back effects already applied.

Reference: OpenApp Scripting. Getting started: Scripting step.

IntentHTTPoperationId
Backend healthGET /statusget_backend_status
Error shape—ApiErrorResponse: message (always), error_code, correlationId, preview_token (when error_code is confirmation_required)

See Errors & retries.

IntentHTTPoperationId
List recent audit eventsGET /orgs/{org_id}/audit/eventslist_audit_events (30-day hot window, cursor pagination; supports exact target_id filters)
Start historical exportPOST /orgs/{org_id}/audit/exportscreate_audit_export
Poll export jobGET /orgs/{org_id}/audit/exports/{job_id}get_audit_export
List / create webhooksGET/POST /orgs/{org_id}/webhookslist_webhooks / create_webhook

Guide: Query access and audit activity. When automating, preserve correlationId from API errors and org policy constraints. OpenApp does not replace certified life-safety design — see Architecture guide.