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.