{
"call_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "<string>",
"transcript": "<string>",
"recording_url": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"loan_id": "<string>",
"to_phone_number": "+14155551234",
"flags": [
"CONNECT",
"RPC"
],
"summarization": "<string>"
}Outbound Webhooks
New Call
Finosu posts call results to your configured receiver. /call/webhook is a documentation identifier, not an endpoint to call on api.finosu.com. Acknowledge with any 2xx status after durably accepting the event.
WEBHOOK
/
call
/
webhook
{
"call_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "<string>",
"transcript": "<string>",
"recording_url": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"loan_id": "<string>",
"to_phone_number": "+14155551234",
"flags": [
"CONNECT",
"RPC"
],
"summarization": "<string>"
}Finosu sends call results to the receiver configured for your integration. The
The public flag catalog describes a public
subset for a selected task type. Receivers should tolerate additional flag codes.
/call/webhook name identifies this contract; it is not a URL to call on
api.finosu.com. Contact Finosu to configure delivery and validate a test call.
Payload
The webhook uses snake_case field names. REST call detail and scheduled-call responses have separate schemas; their camelCase names do not apply here.{
"call_id": "edc5c123-a981-4b2b-8ccd-3b729bcaa18f",
"customer_id": "CUST-12345",
"loan_id": "LOAN-67890",
"transcript": "Customer requested a callback.",
"to_phone_number": "+14155551234",
"flags": ["CONNECT", "RPC", "CALLBACK_REQUEST"],
"summarization": "Customer requested a callback.",
"recording_url": "https://example.com/recording.wav?signature=example",
"timestamp": "2026-09-30T14:22:31+00:00"
}
call_idis the Finosu call UUID; use it withGET /calls/{id}to look up the call. It stays the same across retries, including deliveries queued before this field was added.customer_idis your external customer reference.loan_idis the external loan reference supplied asloanIdduring enrollment (POST /customers/schedule/sync). It comes from the loan linked to this call’s schedule and is omitted when that reference is unavailable. Finosu does not infer it from the customer’s latest loan or send an internal loan UUID. Existing deliveries queued before this field was introduced may omit it.call_id,customer_id,transcript,recording_url, andtimestampare always present. Unavailable transcript or recording data is represented by an empty string.to_phone_numberandflagsare omitted when unavailable or empty.summarizationis omitted when no summary data exists; it can be an empty string if a stored summary object has no note. These fields are not sent as null.timestampis the UTC time when the worker prepares the delivery attempt, not the call time. Worker retries refresh it; immediate HTTP retries reuse the same body. REST call detail’stimestampis the call record’s creation time.recording_urlexpires one hour after generation. Download a recording before expiry if you need to retain it; storing the URL does not preserve access.
Retries and deduplication
Every request includes anIdempotency-Key header that is stable for the call
and destination and is reused across retries. Treat it as opaque. Use it as the
delivery deduplication key. Use call_id to correlate the call in your records;
Idempotency-Key identifies its delivery to a particular destination.
Do not deduplicate by the body or timestamp: a worker retry may refresh the
timestamp and recording URL.
Durably record the key and accept the event before returning a 2xx response.
Coordinate that record with your processing or durable queue so simultaneous
retries cannot apply the same business action twice. A duplicate that has already
been accepted should also receive a 2xx response. Non-2xx responses and network
errors are retried within configured limits. The header enables deduplication;
it does not itself guarantee exactly-once processing or unlimited delivery.
Other call objects
| Object | Recording field | Outcome flags |
|---|---|---|
| This webhook | recording_url | flags, omitted when empty |
| REST call detail | recordingUrl, nullable | Not included |
| Scheduled-call response | Not included | postProcessingFlags, currently always null |
Headers
Body
application/json
Call result delivery
Outbound call-result webhook. Field names are snake_case; REST call detail uses CallResponse instead.
Response
2XX
Any 2xx acknowledges the delivery. Non-2xx responses and transport errors are retried within configured limits.