Outbound Post-Call Payload Reference
Use this guide to understand the data SalesAi sends through outbound post-call webhooks after a call is completed. This reference is intended for developers, integration specialists, and CRM administrators building integrations with SalesAi.
Recommended Flow
SalesAi → Outbound Webhook → CRM / Middleware / Database
Common destinations include:
- HubSpot
- Salesforce
- GoHighLevel
- Zapier
- n8n
- Make
- Custom APIs
- Data Warehouses
The outbound webhook is triggered after the call has completed and all post-call data has been generated.
Payload StructureThe SalesAi outbound webhook contains four primary sections:
- Call Information
- Contact Information
- Timestamps
- Transcript Data
|
Field |
Description |
|
id |
Unique call identifier |
|
call_direction |
Direction of the call |
|
call_flow |
Call workflow type |
|
call_status |
Final call status |
|
call_outcome |
Final call outcome |
|
call_summary |
AI-generated call summary |
|
call_recording_url |
Recording URL if available |
|
call_duration |
Length of call in seconds |
|
call_began_at |
Call start timestamp |
|
call_ended_at |
Call end timestamp |
Example
{
"id": "b69297d7-b481-4ff6-b0ba-6945224c51fe",
"call_direction": "OUTBOUND",
"call_flow": "PROMPT",
"call_status": "SUCCESS",
"call_outcome": "ANSWERED",
"call_summary": "Otto answered the call from the Google representative.",
"call_recording_url": "",
"call_duration": 37,
"call_began_at": 1780503202346,
"call_ended_at": 1780503239582
}
Contact Information FieldsThe contact object contains information about the person involved in the call.
|
Field |
Description |
|
first_name |
Contact first name |
|
last_name |
Contact last name |
|
company_name |
Company name |
|
|
Email address |
|
phone_number |
Phone number |
|
linkedin_url |
LinkedIn profile URL |
|
job_title |
Job title |
|
department |
Department |
|
seniority_level |
Seniority level |
Address Fields
|
Field |
Description |
|
street |
Street address |
|
city |
City |
|
state |
State |
|
zip_code |
Postal code |
|
country |
Country |
|
timezone |
Contact timezone |
Example
{
"contact": {
"first_name": "Otto",
"last_name": "AU Test",
"email": "shahji84@gmail.com",
"phone_number": "+17087156080",
"company_name": "",
"linkedin_url": "",
"job_title": "",
"department": "",
"seniority_level": ""
}
}
Timestamp FieldsSalesAi includes several timestamp values.
|
Field |
Description |
|
created_at |
Record creation timestamp |
|
updated_at |
Record update timestamp |
|
call_began_at |
Call start timestamp |
|
call_ended_at |
Call end timestamp |
Important Note
SalesAi timestamps are returned as Unix Epoch timestamps in milliseconds.
Example:
{
"created_at": 1780503255352,
"updated_at": 1780503255352
}
Developers may need to convert these values into local date and time formats within their application.
Transcript DataThe transcript field contains the conversation between the contact and the AI agent.
The transcript is returned as an array of transcript entries.
Transcript Fields
|
Field |
Description |
|
id |
Transcript entry identifier |
|
user |
Speaker type |
|
text |
Spoken text |
|
created_at |
Transcript timestamp |
Speaker Values
|
Value |
Description |
|
user |
Contact speaking |
|
assistant |
SalesAi AI agent speaking |
Example Transcript
{
"transcript": [
{
"id": 1,
"user": "user",
"text": "Hello. This is Otto.",
"created_at": 1780503205
},
{
"id": 2,
"user": "assistant",
"text": "Hello Otto, my name is [Agent Name] and I'm calling from Google.",
"created_at": 1780503207
}
]
}
Complete Example Payload{
"id": "b69297d7-b481-4ff6-b0ba-6945224c51fe",
"call_direction": "OUTBOUND",
"call_flow": "PROMPT",
"call_status": "SUCCESS",
"call_outcome": "ANSWERED",
"call_summary": "Otto answered the call from the Google representative.",
"call_recording_url": "",
"call_duration": 37,
"call_began_at": 1780503202346,
"call_ended_at": 1780503239582,
"created_at": 1780503255352,
"updated_at": 1780503255352,
"contact": {
"first_name": "Otto",
"last_name": "AU Test",
"email": "shahji84@gmail.com",
"phone_number": "+17087156080"
},
"transcript": [
{
"id": 1,
"user": "user",
"text": "Hello. This is Otto."
},
{
"id": 2,
"user": "assistant",
"text": "Hello Otto, my name is [Agent Name] and I'm calling from Google."
}
]
}
Common Call OutcomesThe exact values may vary by workflow, but these are the most common outcomes used in integrations.
|
Outcome |
Description |
|
ANSWERED |
Contact answered the call |
|
VOICEMAIL |
Voicemail was reached |
|
NO ANSWER |
Contact did not answer |
|
BOOKED |
Appointment booked |
|
TRANSFERRED |
Call transferred |
|
DNC |
Contact requested no further contact |
|
Status |
Description |
|
SUCCESS |
Call completed successfully |
|
FAILED |
Call could not be completed |
Developers commonly use this payload to:
- Update CRM records
- Create CRM timeline activities
- Generate tasks
- Store transcripts
- Store call recordings
- Trigger follow-up workflows
- Generate AI analysis
- Build reporting dashboards
When building integrations with the outbound payload:
- Store the call ID for tracking.
- Store the call outcome for reporting.
- Save the call summary to the CRM.
- Save the recording URL when available.
- Save the transcript when detailed call history is required.
- Convert Unix timestamps into local date formats.
- Handle missing optional fields gracefully.
Before moving an integration into production:
- Verify the webhook is received successfully.
- Confirm all required fields are mapped correctly.
- Validate timestamp conversion logic.
- Confirm transcript processing works correctly.
- Verify CRM updates complete successfully.
- Test multiple call outcomes.
- Validate handling of optional or blank fields.
Once validation is complete, the integration is ready for production use.