Read the answering policy one number answers by
const url = 'https://api.vocapable.com/v1/phone-numbers/example/answering-policy';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.vocapable.com/v1/phone-numbers/example/answering-policy \ --header 'Authorization: Bearer <token>'The stored document, re-validated against the contract on the way out.
Readable without any carrier eligibility: a customer whose account has since been unverified must still be able to see what their number is configured to do, exactly as clearing a stale route never depends on a carrier.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Responses
Section titled “Responses”Successful Response
One number’s stored answering document, as its tenant reads it back.
version is server-owned and bumped on every write. It is not an optimistic-locking
token for this endpoint: it exists so a signed callback URL can carry the exact document
revision it was minted against, and a caller walking a policy that was edited mid-call
is detected rather than silently re-routed.
object
object
One local-time window on one weekday.
object
Read options, then follow the branch the caller pressed.
timeout_branch is required rather than optional, and it is also where the invalid
budget lands once it is spent: a menu whose silent or fumbling caller has nowhere to go
re-prompts forever, which is the single most common way a keypress tree becomes a trap.
object
object
Ring real people, in the order the customer listed them.
Only rep_id values, resolved at build time against active transfer-enabled reps.
Order is meaningful and preserved, because an escalation list whose order the server
re-derives is not the list the customer wrote.
object
Hand the caller to one of this tenant’s published agents.
The agent is named per step rather than by phone_numbers.inbound_agent_id so a
single number can route sales and support to different agents without widening a
column three call paths already read as “the one inbound agent”.
Take a message. Consent is re-decided per call, never by this configuration.
The greeting here is the same kind of value inbound_voicemail_greeting is: a
tenant-authored announcement. Whether a recording may actually be made is settled at
admission against the published recording policy and the caller’s matched jurisdiction,
exactly as the legacy voicemail route settles it - a policy document cannot grant
itself a recording basis.
object
Speak one message, then hang up. The terminal step every chain can fall back to.
object
Bridge the caller to one number the tenant configured.
E.164 is carried here and nowhere near a model-visible shape: this is a customer typing
a destination into their own answering policy, which is the same act as configuring a
HumanRep. :class:DirectRepHandoffTarget deliberately carries no destination and
is not widened by this - a live model still cannot name a number to dial.
object
Ring real people, in the order the customer listed them.
Only rep_id values, resolved at build time against active transfer-enabled reps.
Order is meaningful and preserved, because an escalation list whose order the server
re-derives is not the list the customer wrote.
object
Hand the caller to one of this tenant’s published agents.
The agent is named per step rather than by phone_numbers.inbound_agent_id so a
single number can route sales and support to different agents without widening a
column three call paths already read as “the one inbound agent”.
Take a message. Consent is re-decided per call, never by this configuration.
The greeting here is the same kind of value inbound_voicemail_greeting is: a
tenant-authored announcement. Whether a recording may actually be made is settled at
admission against the published recording policy and the caller’s matched jurisdiction,
exactly as the legacy voicemail route settles it - a policy document cannot grant
itself a recording basis.
object
Speak one message, then hang up. The terminal step every chain can fall back to.
object
Bridge the caller to one number the tenant configured.
E.164 is carried here and nowhere near a model-visible shape: this is a customer typing
a destination into their own answering policy, which is the same act as configuring a
HumanRep. :class:DirectRepHandoffTarget deliberately carries no destination and
is not widened by this - a live model still cannot name a number to dial.
object
Read options, then follow the branch the caller pressed.
timeout_branch is required rather than optional, and it is also where the invalid
budget lands once it is spent: a menu whose silent or fumbling caller has nowhere to go
re-prompts forever, which is the single most common way a keypress tree becomes a trap.
object
object
Ring real people, in the order the customer listed them.
Only rep_id values, resolved at build time against active transfer-enabled reps.
Order is meaningful and preserved, because an escalation list whose order the server
re-derives is not the list the customer wrote.
object
Hand the caller to one of this tenant’s published agents.
The agent is named per step rather than by phone_numbers.inbound_agent_id so a
single number can route sales and support to different agents without widening a
column three call paths already read as “the one inbound agent”.
Take a message. Consent is re-decided per call, never by this configuration.
The greeting here is the same kind of value inbound_voicemail_greeting is: a
tenant-authored announcement. Whether a recording may actually be made is settled at
admission against the published recording policy and the caller’s matched jurisdiction,
exactly as the legacy voicemail route settles it - a policy document cannot grant
itself a recording basis.
object
Speak one message, then hang up. The terminal step every chain can fall back to.
object
Bridge the caller to one number the tenant configured.
E.164 is carried here and nowhere near a model-visible shape: this is a customer typing
a destination into their own answering policy, which is the same act as configuring a
HumanRep. :class:DirectRepHandoffTarget deliberately carries no destination and
is not widened by this - a live model still cannot name a number to dial.
object
Ring real people, in the order the customer listed them.
Only rep_id values, resolved at build time against active transfer-enabled reps.
Order is meaningful and preserved, because an escalation list whose order the server
re-derives is not the list the customer wrote.
object
Hand the caller to one of this tenant’s published agents.
The agent is named per step rather than by phone_numbers.inbound_agent_id so a
single number can route sales and support to different agents without widening a
column three call paths already read as “the one inbound agent”.
Take a message. Consent is re-decided per call, never by this configuration.
The greeting here is the same kind of value inbound_voicemail_greeting is: a
tenant-authored announcement. Whether a recording may actually be made is settled at
admission against the published recording policy and the caller’s matched jurisdiction,
exactly as the legacy voicemail route settles it - a policy document cannot grant
itself a recording basis.
object
Speak one message, then hang up. The terminal step every chain can fall back to.
object
Bridge the caller to one number the tenant configured.
E.164 is carried here and nowhere near a model-visible shape: this is a customer typing
a destination into their own answering policy, which is the same act as configuring a
HumanRep. :class:DirectRepHandoffTarget deliberately carries no destination and
is not widened by this - a live model still cannot name a number to dial.
object
Example
{ "open_steps": [ { "type": "menu", "timeout_seconds": 5, "max_invalid_attempts": 2, "timeout_branch": [ { "type": "ring_humans", "timeout_seconds": 20 } ] } ], "closed_steps": [ { "type": "menu", "timeout_seconds": 5, "max_invalid_attempts": 2, "timeout_branch": [ { "type": "ring_humans", "timeout_seconds": 20 } ] } ]}Validation Error
object
object
object
Examplegenerated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example", "input": "example", "ctx": {} } ]}