bot or the tx scope. See
Authentication for minting and scoping keys.
Where each setting lives
Settings written here are account-level overrides of the deployment’s defaults, resolved
field by field: a field you set wins; a field you leave unset falls through to the deployment
configuration. Clearing a field returns it to the deployment default.
Identity
GET /auth/me
Response — 200
This is the cheapest way to check that a key is live and which scopes it holds. A key with only the
browser scope can call this route and nothing else.
Model configuration
The account’s LLM settings, used by the agent control plane and meeting-time summarization.GET /user/models
Response — 200
api_key is masked to its last four characters,
enough to recognize which credential is set, and api_key_set states whether one exists at all.
An unset field reads as null.
PUT /user/models
string
subscription or custom — which credential terms this account operates under. Any other value
returns 422. See Model credentials & licensing.string
Model name for general agent work.
string
Model name for meeting-time work, when it should differ from
model.string
OpenAI-compatible endpoint. Must be an
http or https URL with a hostname, or the request
returns 422.string
Credential for that endpoint. Stored, never echoed in the clear.
Transcription backend
The account’s override of the deployment’s speech-to-text endpoint. Leave it unset to use whatever the deployment configures — see Bring your own STT.GET /user/transcription
Response — 200
PUT /user/transcription
string
Transcription endpoint. Must be an
http or https URL with a hostname.string
Credential for that endpoint. Masked on every read-back, exactly like the model credential.
Webhook configuration
GET /user/webhook
Response — 200
PUT /user/webhook
string
required
Where Vexa POSTs events. Required on every write — this endpoint replaces the URL, it does not
patch it.
string
HMAC signing secret. Written only when non-empty: sending
"" leaves the stored secret in place
rather than clearing it.object
A
{event_type: boolean} filter. When you have never set one, only meeting.completed
fires. An explicit false suppresses an event; an event you do not mention falls back to that
default.GET /user/webhook, where it appears masked.
Delivery history
GET /user/webhook/deliveries
Response — 200
limit accepts 1–500 and defaults to 100; a value outside that range returns 422.
Vexa retains the most recent 100 attempts per account — this is a recent-history window, not an
audit log.
A row carries the target host only, never the configured URL or the secret: a webhook URL can
carry a token in its path or query.
An empty
deliveries array means no attempt has been recorded for this account — including when
the feature has never fired at all.
Account limits (admin tier)
Concurrency is an account limit, not a self-serve setting: it is changed with the admin key on the admin API, not with yourX-API-Key.
PATCH /admin/users/{user_id}
data object of platform-billing fields, which the hosted
deployment’s billing integration writes. A self-hosted deployment does not need it.
Creating accounts and minting keys are covered in Authentication.
What is not configurable through the API
These have no settings endpoint today. They are listed so you can stop looking for one.Error summary
See the full error reference.