Receive Famulor post-call events
Receives post-call payload from Famulor AI voice assistant after a call completes. Optionally validates the request via the X-Webhook-Secret header.
No authentication required
Accept
header · string
X-Webhook-Secret
header · string
Optional webhook secret for request validation.
Request body
Request schema
assistant_idstring
The Famulor assistant (agent) ID.
call_idstring
Unique identifier for the call.
idstring
Alternative call identifier field.
statusstring
Status of the call (e.g. completed, missed).
typestring
Type of call.
client_phone_numberstring
Phone number of the client.
assistant_phone_numberstring
Phone number of the assistant.
answered_bystring | null
Who answered the call.
created_atstring · date-time
Timestamp when the call was initiated.
durationinteger
Call duration in seconds.
total_costnumber
Total cost of the call.
carrier_costnumber
Carrier cost portion of the total.
transcriptstring | null
Full transcript of the call.
variablesobject | null
Custom variables associated with the call.
evaluationobject | null
Post-call evaluation data.
recording_urlstring | null
URL of the call recording.
Responses
Response schema
successboolean
Authorization Token Missing. This error is returned when the authorization token is missing.
Response schema
errorstring
Error message
example:
Authorization Token is missingData Not Found. This error is returned when the requested data is not found.
Response schema
messagearray<string>
[]string
Server error. An unexpected condition was encountered on the server and the
request could not be completed. The body is a generic JSON envelope with a
`message` field. The response is logged on the server side; quote the
request URL + timestamp when reporting an issue.
Response schema
messagestring
exceptionstring
Only present in non-production environments.
filestring
Only present in non-production environments.
lineinteger
Only present in non-production environments.
post
https://cockpit.voxbi.com/api/v1/webhooks/famulor/post-call
Base URL
Request sample
curl -X POST 'https://cockpit.voxbi.com/api/v1/webhooks/famulor/post-call' \
-H 'Content-Type: application/json' \
--data '{"assistant_id":"asst_abc123","call_id":"call_xyz789","status":"completed","type":"inbound","client_phone_number":"+32477123456","assistant_phone_number":"+32489654321","answered_by":"assistant","created_at":"2023-10-12T12:00:00Z","duration":120,"total_cost":0.05,"carrier_cost":0.02,"transcript":"Hello, how can I help you today?","variables":null,"evaluation":null,"recording_url":"https://storage.famulor.com/recordings/call_xyz789.mp3"}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/webhooks/famulor/post-call', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
"assistant_id": "asst_abc123",
"call_id": "call_xyz789",
"status": "completed",
"type": "inbound",
"client_phone_number": "+32477123456",
"assistant_phone_number": "+32489654321",
"answered_by": "assistant",
"created_at": "2023-10-12T12:00:00Z",
"duration": 120,
"total_cost": 0.05,
"carrier_cost": 0.02,
"transcript": "Hello, how can I help you today?",
"variables": null,
"evaluation": null,
"recording_url": "https://storage.famulor.com/recordings/call_xyz789.mp3"
}),
});
const data = await response.json();
console.log(data);
import requests
response = requests.post('https://cockpit.voxbi.com/api/v1/webhooks/famulor/post-call',
json={
"assistant_id": "asst_abc123",
"call_id": "call_xyz789",
"status": "completed",
"type": "inbound",
"client_phone_number": "+32477123456",
"assistant_phone_number": "+32489654321",
"answered_by": "assistant",
"created_at": "2023-10-12T12:00:00Z",
"duration": 120,
"total_cost": 0.05,
"carrier_cost": 0.02,
"transcript": "Hello, how can I help you today?",
"variables": null,
"evaluation": null,
"recording_url": "https://storage.famulor.com/recordings/call_xyz789.mp3"
}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json",
'content' => '{
\"assistant_id\": \"asst_abc123\",
\"call_id\": \"call_xyz789\",
\"status\": \"completed\",
\"type\": \"inbound\",
\"client_phone_number\": \"+32477123456\",
\"assistant_phone_number\": \"+32489654321\",
\"answered_by\": \"assistant\",
\"created_at\": \"2023-10-12T12:00:00Z\",
\"duration\": 120,
\"total_cost\": 0.05,
\"carrier_cost\": 0.02,
\"transcript\": \"Hello, how can I help you today?\",
\"variables\": null,
\"evaluation\": null,
\"recording_url\": \"https://storage.famulor.com/recordings/call_xyz789.mp3\"
}',
],
]);
$response = file_get_contents('https://cockpit.voxbi.com/api/v1/webhooks/famulor/post-call', false, $context);
$data = json_decode($response, true);
print_r($data);
Sample request
{ … }
"assistant_id": "asst_abc123",
"call_id": "call_xyz789",
"status": "completed",
"type": "inbound",
"client_phone_number": "+32477123456",
"assistant_phone_number": "+32489654321",
"answered_by": "assistant",
"created_at": "2023-10-12T12:00:00Z",
"duration": 120,
"total_cost": 0.05,
"carrier_cost": 0.02,
"transcript": "Hello, how can I help you today?",
"variables": null,
"evaluation": null,
"recording_url": "https://storage.famulor.com/recordings/call_xyz789.mp3"
}
{ … }
"success": true
}
Host
string
example:
0.0.0.0:8083
Date
string
example:
Thu, 12 Oct 2023 12:25:52 GMT
Connection
string
example:
close
Cache-Control
string
example:
no-cache, private
Content-Type
string
example:
application/json
X-RateLimit-Limit
integer
example:
60
X-RateLimit-Remaining
integer
example:
59
Access-Control-Allow-Origin
string
example:
*{ … }
"error": "Authorization Token is missing"
}
Cache-Control
string
example:
private, must-revalidate
Connection
string
example:
keep-alive
Content-Type
string
example:
application/json
Vary
string
example:
Origin
X-RateLimit-Limit
integer
Max requests allowed in the current rate-limit window.
example:
60
X-RateLimit-Remaining
integer
Requests remaining in the current rate-limit window.
example:
57{ … }
"message": [ … ]
"Data not found"
]
}
Cache-Control
string
example:
private, must-revalidate
Connection
string
example:
keep-alive
Content-Type
string
example:
application/json
Vary
string
example:
Origin
X-RateLimit-Limit
integer
Max requests allowed in the current rate-limit window.
example:
60
X-RateLimit-Remaining
integer
Requests remaining in the current rate-limit window.
example:
57{ … }
"message": "Server Error"
}