REST API

Base URL, authentication, the resource endpoints, and the error model.

Base URL

https://api.voylo.io/v1. The full OpenAPI spec is served at /openapi.json with interactive docs at /docs.

Authentication

Programmatic requests use an API key as a bearer token and the X-Workspace-Id header (which workspace the call acts on). Create keys at API keys — the raw key is shown once.

Headers
Authorization: Bearer vlx_live_abc…
X-Workspace-Id: ws_…

Resources

The API is resource-based. The main collections:

  • /numbers — list, import (BYO), update destination + direction, SIP credentials
  • /trunks/inbound, /trunks/outbound — SIP routing
  • /applications — VoyloML apps (static or webhook)
  • /calls — call records (read)
  • /webhooks — event subscriptions + delivery log
  • /billing, /plans, /rentals — plans, wallet, invoices, number rentals
  • /voyloml/validate — lint a VoyloML document
GET /v1/numbers
curl https://api.voylo.io/v1/numbers \
-H "Authorization: Bearer $VOYLO_API_KEY" \
-H "X-Workspace-Id: $VOYLO_WORKSPACE_ID"
Calls originate over SIP
You don't POST a call to place one — calls arrive on your numbers and your systems dial out through an outbound trunk. The API manages configuration and reads call records; call control is VoyloML.

Errors

JSON body with statusCode, error, and message; validation failures (400) include field details. Full breakdown in Errors.

SDKs

The Node and Python SDKs wrap these endpoints (typed errors, workspace header handled) and include a VoyloML builder. Prefer them over raw HTTP.