REST API
Place outbound calls, read call records, and list your workspaces. Plain HTTP, JSON in and out.
Base URL
https://voylo.ai/v1. The interactive Swagger UI is at /docs.
Authentication
Programmatic requests use an API key as a bearer token. The key is already bound to a workspace at creation time, so it scopes the request automatically — no X-Workspace-Id header needed. Create keys at API keys — the raw key is shown once.
X-Workspace-Id header to support users with multiple workspaces. API keys are simpler: one key, one workspace, no header.Place an outbound call
POST /v1/calls— rings a destination from one of your workspace numbers and runs your chosen application's VoyloML on answer. Returns immediately with { publicId, status: "dialing" }; the real outcome arrives via webhooks (call.placed immediately, then call.completed / call.failed when the call ends). The Idempotency-Key header is honoured — replaying the same request returns the original call instead of dialling twice.
Custom variables are substituted as {{key}}in the application's static VoyloML AND ride as var_<key> on any action-URL POSTs. See the VoyloML reference.
Get a single call
GET /v1/calls/{publicId}— the full record once it's ended (or the pending shape while it's still in progress). Use the publicId returned by POST.
Pending outbound calls return { "pending": true, "pendingStatus": "dialing" } until the call ends; completed calls return the CDR shape including outcome, durationS, and destinationKind.
List calls
GET /v1/calls — most recent first. Useful for a quick audit or to build a CRM-side activity feed. The response is an array of call records; paginate by passing before= a publicId.
List your workspaces
GET /v1/workspaces — the workspace bound to the API key. Returns a one-element array today (one key, one workspace) but the array shape is preserved so multi-workspace API keys, when we support them, are a non-breaking addition.
Errors
JSON body with statusCode, error, and message; validation failures (400) include field details. Full breakdown in Errors.