Place a call
Changed onPlace an outbound AI phone call. Two request shapes: freeform (target_phone + brief) or structured (target_phone + intent + slots). See the guide above for the 422 slot-retry loop. Either shape takes the optional disclosure and record_call fields, which change or turn off the call's opening notice and its recording, and voice. A refusal below places no call and costs nothing. Two answers below are not refusals, because they cannot say whether a call was placed: 409 idempotency_state_unknown and 502. Their entries say how to recover.
Request
- Base URLhttps://api.voygr.tech
- URLhttps://api.voygr.tech/calls
- AuthAPI key in header X-API-Key
Headers
Makes a retry safe: one fresh value (a UUID) per call you intend to place, in printable ASCII. For 24 hours the same key and body return the original response with the header Idempotent-Replayed: true, and nothing is dialed or charged again. After a 402, 429, 502, 503 or 403 account_suspended, retry with the same key; a 400, other 403 or 422 is replayed as is, so fix the body and use a new key. Without the header every request is a new call.
Optional. Names the listing or document this call was placed from (for example llms-txt). Telemetry only: it never affects auth, billing or the call.
Request body
Example request
{
"disclosure": {
"company_name": "Acme Health",
"on_behalf_of": "Example Insurance",
"purpose": "to verify your practice's directory information",
"mention_ai": true
},
"target_phone": "+15551234567"
}Response
Call created and dialing, returned only by a deployment that dials immediately (api.voygr.tech answers 202). The envelope depends on the request path: freeform returns CallResponse (a call wrapper, so the ID is call.call_id), structured returns the flat SkillRunResponse (top-level call_id). Either way, poll GET /calls/{call_id} afterwards; that response is the same whichever path created the call.
Example response
{
"call": {
"call_id": "c_abc123",
"customer_id": "cus_xyz",
"target_phone": "+15551234567"
},
"credits_charge_on_success": 10
}Changes
- breaking
removed
subschema #1: Freeformsubschema #2: Structuredfrom the request bodyanyOflist - info
headerrequest parameterIdempotency-Keylist-of-types was widened by adding typesnull - info
for the
headerrequest parameterIdempotency-Key, the type was generalized fromstringto no type - info
request property
list-of-types was widened by adding typesnullto media typeapplication/json - info
added to the response body
anyOflist for the response status - info
added to the response body
anyOflist for the response status - info
removed from the response body
oneOflist for the response status - info
removed from the response body
oneOflist for the response status
- breaking
- info
added the new optional
headerrequest parameterX-Client-Surface - info
added the required property
/to the response with the status
- info