Skip to main content
Configure the voice agent’s outgoing URL in Advanced → Post-call and publish it. ContactShip delivers a JSON POST after call analysis. This is separate from inbound-context requests, channel conversation events, and lead-routing notifications.

Delivery contract

The body has a top-level data object. It is not an event envelope with a required event: call_analyzed property. Internal call lifecycle events do not imply a public subscription to every lifecycle event. Call fields include call_id, call_status, call_analysis, disconnection_reason, recording_url, start_timestamp, end_timestamp, transcript, transcript_object, transcript_with_tool_calls, call_type, and duration. Timestamps are Unix milliseconds; duration represents seconds and may be serialized as a string. Calls with an associated contact can also include call_result, from_number, to_number, and call_additional_data. Contact fields include contact_id, full_name, phone_number, email, country, and additional_data; campaign-related contact values may be absent. Treat missing context as missing data rather than a delivery failure. An empty recording URL or analysis value does not prove that a usable recording or analysis exists.

Minimal illustrative body

This example intentionally omits optional context and transcript details. It shows the nesting to parse, not a complete result from a real call.

Acknowledgment and retries

Return an HTTP 2xx response after accepting the payload. The delivery client uses a 30-second timeout. Queue retries and manual retries can cause repeated delivery, so persist an application-level processing key such as the call ID before creating an external record. Do not assume a separate webhook event ID is included in the HTTP body. The configured call-webhook sender does not add the lead-routing x-contactship-signature header. Do not apply that separate signing contract to these deliveries. If your receiver needs additional verification, agree on a supported mechanism with support before treating a request as authenticated. Inspect URL, attempts, response, and raw data in Calls → Webhooks. Fix the receiver before retrying, and verify whether an earlier delivery already completed its external effect.

Test

The current voice editor has no sample-payload test button. Publish the URL, make a controlled test call, wait for analysis, and inspect both delivery history and your receiver logs. Tests can produce real webhooks and downstream effects. See Call webhooks, Post-call settings, and Get call.