The Masker REST API is the same API that powers the portal. Anything you can do in the UI you can do over HTTP — create agents, list sessions, download compliance reports, and integrate the proxy into your voice pipeline. This page covers the conventions that apply to every endpoint.Documentation Index
Fetch the complete documentation index at: https://docs.masker.dev/llms.txt
Use this file to discover all available pages before exploring further.
Base URL
/api/v1 because they’re called by external systems with their own URL conventions:
| Endpoint | Purpose |
|---|---|
POST /proxy/{agent_id}/v1/chat/completions | OpenAI-compatible LLM proxy called by your voice platform |
POST /vapi/webhook/{agent_id} | Vapi assistant-request webhook |
GET /health | Health check |
Conventions
- JSON only. All request and response bodies are
application/jsonunless the endpoint explicitly returns another content type (e.g.application/pdffor report downloads). - UTF-8. All strings are UTF-8 encoded.
- ISO 8601 UTC for all timestamps — for example,
2026-05-03T21:14:32.481Z. - ULIDs for resource IDs, prefixed by resource type:
agt_01HYZ...for agents,sess_01HYZ...for sessions,evt_01HYZ...for events. - Snake_case for all request and response field names.
- Meaningful HTTP status codes. 2xx means success, 4xx means a problem with your request, 5xx means a problem on our end.
Pagination
All list endpoints use cursor-based pagination. Passlimit and cursor as query parameters:
Maximum number of results to return. Accepted range: 1–100.
Opaque pagination cursor returned in the previous response as
next_cursor. Omit to start from the beginning.next_cursor. When it is null or absent, you have reached the last page:
next_cursor as cursor on the next request to retrieve the following page.
Errors
All errors use a standard envelope:request_id — it is the fastest way to diagnose an issue when contacting support.
| Code | HTTP status | Meaning |
|---|---|---|
unauthenticated | 401 | No valid masker_session cookie |
forbidden | 403 | Authenticated but not permitted for this action |
not_found | 404 | Resource does not exist or is not visible to your account |
validation_failed | 422 | Request body or query parameter failed validation |
rate_limited | 429 | Too many requests; respect the Retry-After response header |
upstream_error | 502 | The upstream LLM provider returned an error |
internal_error | 500 | An error on our end; include request_id when reporting |
Rate limits
The hosted service enforces per-account limits:| Endpoint group | Sustained limit | Burst limit |
|---|---|---|
/proxy/* and /vapi/webhook/* | 100 req/s | 200 req/s |
All other /api/v1/* endpoints | 30 req/s | 60 req/s |
429 with a Retry-After header specifying how many seconds to wait before retrying. Self-hosted deployments have no rate limit applied by default.
Versioning
The current API version isv1. Masker will not introduce breaking changes under v1. When v2 ships, both versions will run in parallel for at least six months before v1 is retired.
Backwards-compatible changes — new endpoints, new optional request fields, new optional response fields, new enum values — are added to v1 without a version bump.
Authentication
Every/api/v1/* endpoint requires a valid masker_session cookie. See Authentication for how to obtain and use it. The proxy and webhook endpoints use a separate mechanism described on their respective pages.