/dashboard/api-keys manages keys that let external systems (CRMs) trigger outbound calls without a JWT. It lives in src/pages/ApiKeys.tsx with modals in src/components/api-keys/ (CreateKeyModal, KeyCreatedModal).
Key table
Loaded fromGET /api/v1/api-keys, the DataTable shows:
| Column | Source |
|---|---|
| Name | key.name |
| Key | key_prefix followed by •••• (full key never re-shown) |
| Status | Active / Expired / Inactive badge |
| Expires | expires_at |
| Last Used | relative time of last_used_at |
| Created | created_at |
| Actions | activate/deactivate toggle, delete |
getStatus: inactive keys are Inactive (danger), keys past expires_at are Expired (neutral), otherwise Active (success). A search box filters by name or key prefix.
Lifecycle
| Action | Endpoint |
|---|---|
| Create | POST /api/v1/api-keys |
| Toggle active | PATCH /api/v1/api-keys/{id} with is_active |
| Delete | DELETE /api/v1/api-keys/{id} (confirm dialog) |
Create and one-time reveal
CreateKeyModal collects a required Name and an optional Expires At date (blank = no expiry), then POSTs to /api/v1/api-keys. The response includes the full key, which is handed to KeyCreatedModal.
Deleting a key immediately revokes access for any system using it — the confirm dialog states this explicitly.
Related docs
API keys (VoxBridge)
Key hashing, dual auth, and enforcement.
Dialout API
Triggering outbound calls with an API key.
Users
Human user accounts and roles.