Reference

API reference

How every VoiceLayer API request works, and where to find each endpoint.

The VoiceLayer API is a JSON REST API. Every endpoint has its own page in this section, with its parameters, a request in curl, TypeScript and Python, and an example response.

Make a request

The base URL is https://api.vlayers.ai, and every route is under /v1. Send your API key as a bearer token:

curl https://api.vlayers.ai/v1/channels \
  -H "Authorization: Bearer $VOICELAYER_API_KEY"

Create keys in the dashboard under Developers → API keys. See Authentication and API keys for test and live keys and their scopes.

Conventions

  • JSON in, JSON out. Send Content-Type: application/json with a body. Every answer is JSON, except the event stream, which is Server-Sent Events.
  • Ids are opaque strings. Store them as you receive them.
  • Times are ISO 8601 in UTC, for example 2026-10-20T15:04:05.000Z.
  • Sends are accepted, not delivered. A send answers 202 Accepted; delivery arrives later as events.
  • New fields appear without notice. Ignore fields and enum values you do not know.

The OpenAPI document

The whole API is described by one OpenAPI 3.1 document at /openapi.json. Load it into your API client or a code generator. The SDKs are generated from it.

Errors

A refused request answers an HTTP error status and a JSON body:

{
  "error": "window_closed",
  "message": "The 24-hour reply window for this conversation is closed.",
  "requestId": "req-8f2c1d4b",
  "retryable": false,
  "docs": "https://docs.vlayers.ai/errors/window_closed"
}

error is a stable code: branch on it, not on message. Every code has a page in Error codes.

Everything else

TopicPage
Retrying safely with Idempotency-KeyErrors, retries and idempotency
Cursors and page sizesPagination
Requests per minuteRate limits
Versions and what changedChangelog and versioning
Real-time eventsWebhooks, event stream

On this page