curl --request POST \
--url https://api.telleo.ai/v1/human-calls/{id}/disposition \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"key": "CALLBACK"
}
'import requests
url = "https://api.telleo.ai/v1/human-calls/{id}/disposition"
payload = { "key": "CALLBACK" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({key: 'CALLBACK'})
};
fetch('https://api.telleo.ai/v1/human-calls/{id}/disposition', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "hcall_7d2e9b1c4a6f8e0d3b5c7a9e",
"object": "human_call",
"status": "queued",
"status_reason": "<string>",
"no_answer_by": "counsellor",
"counsellor": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"phone_number": "<string>",
"contact": {
"name": "<string>",
"email": "[email protected]",
"external_id": "<string>"
},
"crm_lead_linked": true,
"metadata": {},
"analyze": true,
"status_updates": "realtime",
"created_at": "2023-11-07T05:31:56Z",
"dialed_at": "2023-11-07T05:31:56Z",
"answered_at": "2023-11-07T05:31:56Z",
"ended_at": "2023-11-07T05:31:56Z",
"duration_seconds": 123,
"recording_url": "<string>",
"recording_expires_at": "2023-11-07T05:31:56Z",
"disposition": {
"key": "INTERESTED",
"label": "<string>",
"notes": "<string>",
"set_at": "2023-11-07T05:31:56Z",
"set_by": "counsellor"
},
"analysis": {
"status": "not_requested",
"reason": "<string>",
"summary": "<string>",
"short_update": "<string>",
"call_type": "<string>",
"inferred_goal": "<string>",
"outcome": "<string>",
"sentiment": "<string>",
"conversion_likelihood": "<string>",
"counsellor_rating": 123,
"outcome_rating": 123,
"language": "<string>",
"credits": 123,
"completed_at": "2023-11-07T05:31:56Z"
},
"cost": {
"credits": 123,
"billed": true,
"note": "billed_by_provider"
},
"idempotent_replay": true
}Set a disposition
Records the call’s outcome, as a counsellor does in the dashboard. When the call is filed on a lead and the disposition maps to a lead stage, the lead moves to it.
Scope: human_calls:write.
curl --request POST \
--url https://api.telleo.ai/v1/human-calls/{id}/disposition \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"key": "CALLBACK"
}
'import requests
url = "https://api.telleo.ai/v1/human-calls/{id}/disposition"
payload = { "key": "CALLBACK" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({key: 'CALLBACK'})
};
fetch('https://api.telleo.ai/v1/human-calls/{id}/disposition', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "hcall_7d2e9b1c4a6f8e0d3b5c7a9e",
"object": "human_call",
"status": "queued",
"status_reason": "<string>",
"no_answer_by": "counsellor",
"counsellor": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"phone_number": "<string>",
"contact": {
"name": "<string>",
"email": "[email protected]",
"external_id": "<string>"
},
"crm_lead_linked": true,
"metadata": {},
"analyze": true,
"status_updates": "realtime",
"created_at": "2023-11-07T05:31:56Z",
"dialed_at": "2023-11-07T05:31:56Z",
"answered_at": "2023-11-07T05:31:56Z",
"ended_at": "2023-11-07T05:31:56Z",
"duration_seconds": 123,
"recording_url": "<string>",
"recording_expires_at": "2023-11-07T05:31:56Z",
"disposition": {
"key": "INTERESTED",
"label": "<string>",
"notes": "<string>",
"set_at": "2023-11-07T05:31:56Z",
"set_by": "counsellor"
},
"analysis": {
"status": "not_requested",
"reason": "<string>",
"summary": "<string>",
"short_update": "<string>",
"call_type": "<string>",
"inferred_goal": "<string>",
"outcome": "<string>",
"sentiment": "<string>",
"conversion_likelihood": "<string>",
"counsellor_rating": 123,
"outcome_rating": 123,
"language": "<string>",
"credits": 123,
"completed_at": "2023-11-07T05:31:56Z"
},
"cost": {
"credits": 123,
"billed": true,
"note": "billed_by_provider"
},
"idempotent_replay": true
}Authorizations
Your AI calling API key (vak_call_…). Authorization: Bearer <key> also works.
Path Parameters
Body
Response
The human call with its disposition.
"hcall_7d2e9b1c4a6f8e0d3b5c7a9e"
"human_call"queued, ringing_counsellor, connecting, in_progress, completed, no_answer, busy, failed, canceled Why a call failed, in plain words. Present only when there is one.
Only on no_answer / busy: which phone did not pick up, when the provider says so.
counsellor, contact, null Show child attributes
Show child attributes
Show child attributes
Show child attributes
The call was filed on the one lead in your account with this number (it shows on the lead's timeline).
How live status is on your provider: Vacademy Voice realtime, Exotel final_only, Airtel delayed (after its call record is imported).
realtime, final_only, delayed When the contact picked up, when known.
A temporary link to the recording (24 hours). Fetch the call again for a fresh link.
The outcome recorded by the counsellor or by you. null until set.
Show child attributes
Show child attributes
AI analysis of the conversation. Fields beyond status are present once it is completed.
Show child attributes
Show child attributes
null while the call runs. Only Vacademy Voice talk time is charged to your credits; Exotel and Airtel bill you directly.
Show child attributes
Show child attributes
Only on POST /human-calls: true when this is the call created by an earlier request with the same Idempotency-Key.