API overview
Admin API vs Core routes, auth, environments, and response shapes.
Overview
Intry's HTTP surface splits into:
/api/admin/*— CRM-style operations (tenants, properties, units, users, calls, devices, analytics). Used by the admin dashboard, Unkey API keys, and intry-mcp./api/v1/*— Resident-facing JSON API (auth, profile, access). Used by portal and mobile.- Voice gateway —
/twilio/*and/telnyx/*for carrier webhooks. - Legacy mobile —
/access/*,/devices/*,/registration/*for older app builds.
OpenAPI spec
Import the bundled spec from the monorepo:
docs/openapi/admin.yaml
Use it with Postman, Insomnia, or OpenAPI code generators. When the spec and code disagree, trust the running service and file a docs bug.
Multi-environment admin proxy
When calling admin routes through intry-admin, send:
X-Admin-Env: PRODAccepted values: DEV, TEST, STAGING, PROD. The proxy selects the matching Railway Core base URL.
Authentication
| Client | Method |
|---|---|
| Human (dashboard) | WorkOS SSO or Clerk session via admin UI |
| Automation / agents | Unkey API key in Authorization |
| Residents | JWT Bearer (after login or Clerk exchange) |
See Authentication.
Response shapes
Admin endpoints use two patterns — check the route before integrating:
Legacy list (still common):
{
"properties": [],
"total": 42,
"limit": 20,
"offset": 0
}Envelope (newer routes):
{
"data": { "property": { "id": "…" } },
"meta": { "total": 1 }
}Errors:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "…"
}
}Quick start (admin automation)
Create or obtain an Unkey key with the scopes your integration needs (see docs/AGENT_UNKEY_KEYS.md).
Choose target environment and set X-Admin-Env on every request if you route through the admin proxy.
GET /api/admin/stats HTTP/1.1
Host: <your-proxy-host>
Authorization: Bearer <unkey_api_key>
X-Admin-Env: STAGINGRelated sections
Last verified: 2026-06-21 (commit 293c4a7)