This page documents the structure of webhook payloads sent by Diaform, including HTTP headers and JSON body schemas.
HTTP Headers#
Every webhook request includes the following headers:
| Header | Value | Description |
|---|---|---|
Content-Type | application/json | The payload is JSON-encoded |
X-Webhook-Event | conversation.completed | The type of event that triggered the webhook |
X-Webhook-Signature | HMAC-SHA256 hex digest | HMAC signature for verifying authenticity |
conversation.completed Event#
Fired when an interview finishes and the AI-generated summary is ready.
Example Payload#
{
"conversation_id": "uuid",
"agent_id": "uuid",
"organization_id": "uuid",
"status": "completed",
"summary": {
"answers": [
{
"question": "How satisfied are you with our product?",
"answer": "Very satisfied, especially with the onboarding experience",
"sentiment": "positive",
"confidence": "high",
"quotes": ["The onboarding was really smooth"]
}
],
"overall_sentiment": "positive",
"urgent_issues": [],
"additional_insights": "User mentioned interest in API access",
"keyword_tags": {
"positive": ["onboarding", "ease of use"],
"negative": []
},
"actions_called": []
},
"completed_at": "2026-02-09T12:00:00.000Z"
}
Field Reference#
| Field | Type | Description |
|---|---|---|
conversation_id | string | Unique ID of the conversation |
agent_id | string | The project that conducted the interview |
organization_id | string | Your organization ID |
status | string | Always "completed" for this event |
summary | object | AI-generated interview summary |
summary.answers | array | Per-question structured answers |
summary.answers[].question | string | The question text |
summary.answers[].answer | string | AI-generated summary of the respondent's answer |
summary.answers[].sentiment | string | positive, negative, neutral, or mixed |
summary.answers[].confidence | string | high, medium, or low |
summary.answers[].quotes | string[] | Direct quotes from the respondent |
summary.overall_sentiment | string | Overall interview sentiment |
summary.urgent_issues | string[] | Critical issues flagged by the AI |
summary.additional_insights | string | Extra context not covered by questions |
summary.keyword_tags | object | Categorized keywords extracted from the interview |
summary.keyword_tags.positive | string[] | Up to 5 positive themes |
summary.keyword_tags.negative | string[] | Up to 5 negative themes |
summary.actions_called | string[] | Automations triggered during the interview |
completed_at | string | ISO 8601 timestamp of when the interview completed |
Sentiment Values#
The sentiment field can have the following values:
positive— The response expresses satisfaction or positive feedbacknegative— The response expresses dissatisfaction or negative feedbackneutral— The response is factual or neither positive nor negativemixed— The response contains both positive and negative elements
Confidence Levels#
The confidence field indicates how confident the AI is in its answer extraction:
high— The respondent gave a clear, direct answermedium— The answer was somewhat indirect or required interpretationlow— The answer was vague or the respondent didn't fully address the question
Next Steps#
To verify that webhook requests are genuinely from Diaform, see Verifying Webhook Signatures.