Reference

Changelog and versioning

What changed in the API, release by release, and what stays stable.

Versioning

  • The version is in the path. Every route is under /v1.
  • Within /v1 the API only grows. New endpoints, new optional fields, new event types and new error codes can appear in any release.
  • Ignore what you don't know. Write clients that skip unknown fields and enum values. The SDKs already do.
  • Removals are announced. Anything removed or changed incompatibly is listed here, and announced with Deprecation and Sunset response headers at least six months ahead.
  • Before general availability. Until the first customers are live, breaking changes can still happen. Each one is listed here.

Releases

Each release lists every change to the API, generated by comparing the OpenAPI document before and after it.

Headless platform, phase 2: test mode, request logs, events long-poll · 2026-10-18

  • Test mode: POST /v1/test/inbound simulates a person writing from a reserved test address (+15550100–+15550199, test-<n>, *@test.vlayers.ai) with a vl_test_ key. The conversation is stamped test; every send on it loops back, costs $0 and counts against daily caps. Its events carry livemode: false.
  • Four new error codes for test mode: test_mode_only, test_address_required, test_address_not_allowed, test_limit_reached.
  • Request logs: GET /v1/request-logs lists the workspace's API requests, newest first (method, route template, status, error code, key, latency, requestId; no bodies; 14-day retention; logs:read scope).
  • Events: GET /v1/events takes waitSec (a long-poll of up to 25 s) and from=now; both event routes take a channel filter; the pull's cursor is always set; the events routes' refusals may carry details.
  • Conversation history: GET /v1/messages and GET /v1/conversations/{id}/messages take a before cursor (before=end for the newest page) and answer prevCursor for older pages.
  • Templates: content.type: "template" is part of the send schema, but template sends are refused 422 operation_not_supported (details.reason: template_sends_not_available) until WhatsApp's template slice ships. GET /v1/channels/whatsapp/templates reads a WhatsApp Binding's approved-template copy.
Every change (248), by operation

GET /v1/conversations

  • Breaking: added the new test_address_not_allowed enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 400
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 503
  • Breaking: added the new test_address_required enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_required enum value to the error response property for the response status 400
  • Breaking: added the new test_address_required enum value to the error response property for the response status 503
  • Breaking: added the new test_limit_reached enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 400
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 503
  • Breaking: added the new test_mode_only enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 400
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 503

GET /v1/conversations/{id}

  • Breaking: added the new test_address_not_allowed enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 404
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 503
  • Breaking: added the new test_address_required enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_required enum value to the error response property for the response status 404
  • Breaking: added the new test_address_required enum value to the error response property for the response status 503
  • Breaking: added the new test_limit_reached enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 404
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 503
  • Breaking: added the new test_mode_only enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 404
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 503

PATCH /v1/conversations/{id}

  • Breaking: added the new test_address_not_allowed enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 400
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 404
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 409
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 503
  • Breaking: added the new test_address_required enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_required enum value to the error response property for the response status 400
  • Breaking: added the new test_address_required enum value to the error response property for the response status 404
  • Breaking: added the new test_address_required enum value to the error response property for the response status 409
  • Breaking: added the new test_address_required enum value to the error response property for the response status 503
  • Breaking: added the new test_limit_reached enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 400
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 404
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 409
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 503
  • Breaking: added the new test_mode_only enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 400
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 404
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 409
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 503

GET /v1/conversations/{id}/messages

  • Breaking: added the new test_address_not_allowed enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 400
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 404
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 503
  • Breaking: added the new test_address_required enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_required enum value to the error response property for the response status 400
  • Breaking: added the new test_address_required enum value to the error response property for the response status 404
  • Breaking: added the new test_address_required enum value to the error response property for the response status 503
  • Breaking: added the new test_limit_reached enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 400
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 404
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 503
  • Breaking: added the new test_mode_only enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 400
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 404
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 503
  • Change: added the new optional query request parameter before
  • Change: added the required property prevCursor to the response with the 200 status

POST /v1/conversations/{id}/messages

  • Breaking: added the new test_address_not_allowed enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 400
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 402
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 404
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 409
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 413
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 422
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 429
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 502
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 503
  • Breaking: added the new test_address_required enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_required enum value to the error response property for the response status 400
  • Breaking: added the new test_address_required enum value to the error response property for the response status 402
  • Breaking: added the new test_address_required enum value to the error response property for the response status 404
  • Breaking: added the new test_address_required enum value to the error response property for the response status 409
  • Breaking: added the new test_address_required enum value to the error response property for the response status 413
  • Breaking: added the new test_address_required enum value to the error response property for the response status 422
  • Breaking: added the new test_address_required enum value to the error response property for the response status 429
  • Breaking: added the new test_address_required enum value to the error response property for the response status 502
  • Breaking: added the new test_address_required enum value to the error response property for the response status 503
  • Breaking: added the new test_limit_reached enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 400
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 402
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 404
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 409
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 413
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 422
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 429
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 502
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 503
  • Breaking: added the new test_mode_only enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 400
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 402
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 404
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 409
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 413
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 422
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 429
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 502
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 503
  • Change: added subschema #3 to the content request property oneOf list

GET /v1/events

  • Breaking: added the new cursor_expired enum value to the error response property for the response status 400
  • Breaking: added the new cursor_expired enum value to the error response property for the response status 401
  • Breaking: added the new cursor_expired enum value to the error response property for the response status 403
  • Breaking: added the new cursor_expired enum value to the error response property for the response status 503
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 400
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 401
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 403
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 503
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 400
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 401
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 403
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 503
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 400
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 401
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 403
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 503
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 400
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 401
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 403
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 503
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 400
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 401
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 403
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 503
  • Breaking: added the new invalid_request enum value to the error response property for the response status 400
  • Breaking: added the new invalid_request enum value to the error response property for the response status 401
  • Breaking: added the new invalid_request enum value to the error response property for the response status 403
  • Breaking: added the new invalid_request enum value to the error response property for the response status 503
  • Breaking: added the new no_project enum value to the error response property for the response status 400
  • Breaking: added the new no_project enum value to the error response property for the response status 401
  • Breaking: added the new no_project enum value to the error response property for the response status 403
  • Breaking: added the new no_project enum value to the error response property for the response status 503
  • Change: added the new optional query request parameter channel
  • Change: added the new optional query request parameter from
  • Change: added the new optional query request parameter waitSec
  • Change: added the optional property details to the response with the 400 status
  • Change: added the optional property details to the response with the 401 status
  • Change: added the optional property details to the response with the 403 status
  • Change: added the optional property details to the response with the 503 status
  • Change: the response property cursor became not nullable for the status 200

GET /v1/events/stream

  • Breaking: added the new cursor_expired enum value to the error response property for the response status 400
  • Breaking: added the new cursor_expired enum value to the error response property for the response status 401
  • Breaking: added the new cursor_expired enum value to the error response property for the response status 403
  • Breaking: added the new cursor_expired enum value to the error response property for the response status 410
  • Breaking: added the new cursor_expired enum value to the error response property for the response status 503
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 400
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 401
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 403
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 410
  • Breaking: added the new events_unavailable enum value to the error response property for the response status 503
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 400
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 401
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 403
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 410
  • Breaking: added the new insufficient_scope enum value to the error response property for the response status 503
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 400
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 401
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 403
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 410
  • Breaking: added the new invalid_conversation_id enum value to the error response property for the response status 503
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 400
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 401
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 403
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 410
  • Breaking: added the new invalid_cursor enum value to the error response property for the response status 503
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 400
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 401
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 403
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 410
  • Breaking: added the new invalid_event_types enum value to the error response property for the response status 503
  • Breaking: added the new invalid_request enum value to the error response property for the response status 400
  • Breaking: added the new invalid_request enum value to the error response property for the response status 401
  • Breaking: added the new invalid_request enum value to the error response property for the response status 403
  • Breaking: added the new invalid_request enum value to the error response property for the response status 410
  • Breaking: added the new invalid_request enum value to the error response property for the response status 503
  • Breaking: added the new no_project enum value to the error response property for the response status 400
  • Breaking: added the new no_project enum value to the error response property for the response status 401
  • Breaking: added the new no_project enum value to the error response property for the response status 403
  • Breaking: added the new no_project enum value to the error response property for the response status 410
  • Breaking: added the new no_project enum value to the error response property for the response status 503
  • Change: added the new optional query request parameter channel
  • Change: added the optional property details to the response with the 400 status
  • Change: added the optional property details to the response with the 401 status
  • Change: added the optional property details to the response with the 403 status
  • Change: added the optional property details to the response with the 410 status
  • Change: added the optional property details to the response with the 503 status

GET /v1/messages

  • Breaking: added the new test_address_not_allowed enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 400
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 503
  • Breaking: added the new test_address_required enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_required enum value to the error response property for the response status 400
  • Breaking: added the new test_address_required enum value to the error response property for the response status 503
  • Breaking: added the new test_limit_reached enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 400
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 503
  • Breaking: added the new test_mode_only enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 400
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 503
  • Change: added the new optional query request parameter before
  • Change: added the required property prevCursor to the response with the 200 status

POST /v1/messages

  • Breaking: added the new test_address_not_allowed enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 400
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 402
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 404
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 409
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 413
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 422
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 429
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 502
  • Breaking: added the new test_address_not_allowed enum value to the error response property for the response status 503
  • Breaking: added the new test_address_required enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_address_required enum value to the error response property for the response status 400
  • Breaking: added the new test_address_required enum value to the error response property for the response status 402
  • Breaking: added the new test_address_required enum value to the error response property for the response status 404
  • Breaking: added the new test_address_required enum value to the error response property for the response status 409
  • Breaking: added the new test_address_required enum value to the error response property for the response status 413
  • Breaking: added the new test_address_required enum value to the error response property for the response status 422
  • Breaking: added the new test_address_required enum value to the error response property for the response status 429
  • Breaking: added the new test_address_required enum value to the error response property for the response status 502
  • Breaking: added the new test_address_required enum value to the error response property for the response status 503
  • Breaking: added the new test_limit_reached enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 400
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 402
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 404
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 409
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 413
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 422
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 429
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 502
  • Breaking: added the new test_limit_reached enum value to the error response property for the response status 503
  • Breaking: added the new test_mode_only enum value to the anyOf[#/components/schemas/MessagingError]/error response property for the response status 403
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 400
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 402
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 404
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 409
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 413
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 422
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 429
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 502
  • Breaking: added the new test_mode_only enum value to the error response property for the response status 503
  • Change: added subschema #3 to the content request property oneOf list

The document

  • Change: a breaking change was detected but the version is still 1.0.0

GET /v1/channels/whatsapp/templates

  • Change: endpoint added

GET /v1/request-logs

  • Change: endpoint added

POST /v1/test/inbound

  • Change: endpoint added

On this page