Skip to main content
Alpha This payload is delivered to your webhook callback URL when an ai_agent.call_completed event occurs. It fires once when an AI agent call reaches a terminal state. This webhook is in alpha: the payload shape may still change without a deprecation cycle.

Event Info

event
string
required
Always "ai_agent.call_completed".
conversationId
string
required
Unique identifier for this call. Use this as the dedup key for idempotent processing — in rare cases the same call may be delivered more than once.

Agent

agentId
string
required
UUID of the AI agent that handled the call.
agentName
string | null
Display name of the AI agent.

Call

direction
string
required
"inbound" (caller reached the agent) or "outbound" (agent dialled out).
callOutcome
string
required
Terminal outcome of the call attempt: "answered", "voicemail", "not_answered", "busy", or "unknown".
isCall
boolean
required
true when the interaction was a real phone call; false for non-call interactions such as chat.
startedAt
string | null
ISO 8601 UTC timestamp when the call started.
endedAt
string | null
ISO 8601 UTC timestamp when the call ended.
durationSeconds
integer | null
Total call duration in seconds.
contactPhoneNumber
string | null
The external party’s (contact/lead) phone number in E.164 format, regardless of call direction. null for test/widget calls or blocked caller ID.
agentPhoneNumber
string | null
Your agent’s own provisioned phone number (DID) in E.164 format. null when the agent has no provisioned number.

Transcript

transcript
array
required
Ordered conversation turns. Tool-only turns with no spoken message are omitted — the actions the agent took are in actions.

Conversation Analysis

conversationAnalysis
object
AI-generated analysis of the conversation.

Actions

actions
array
required
Ordered list of actions the agent executed during the call.

Booking

booking
object | null
The scheduled event created during the call, in the same shape as the GET /v2/scheduled-events/{uuid} resource; null if no booking was made. Correlate booking.uuid with invitee.scheduled webhook events for the same booking.

CRM

crmPersonId
string | null
UUID of the CRM person record linked to this call, if matched.

Full Payload Example

{
  "event": "ai_agent.call_completed",
  "conversationId": "abc1234-0000-0000-0000-xyz987654321",
  "agentId": "9a39bf60-a6c3-45e7-80cd-2cd36e520861",
  "agentName": "Sales Agent",
  "direction": "inbound",
  "callOutcome": "answered",
  "isCall": true,
  "startedAt": "2026-06-01T10:00:00+00:00",
  "endedAt": "2026-06-01T10:01:30+00:00",
  "durationSeconds": 90,
  "contactPhoneNumber": "+4917612345678",
  "agentPhoneNumber": "+4989123456789",
  "transcript": [
    { "role": "agent", "message": "Hello, thank you for calling. How can I help you today?", "timeInCallSeconds": 0 },
    { "role": "user", "message": "Hi, I'd like to know more about your pricing.", "timeInCallSeconds": 4 },
    { "role": "agent", "message": "Of course. Our plans start at 12 euros per month. Shall I book a follow-up call?", "timeInCallSeconds": 9 }
  ],
  "conversationAnalysis": {
    "transcriptSummary": "The caller asked about product pricing and requested a follow-up call next week.",
    "collectedData": {
      "name":    { "value": "Alice Müller", "type": "string" },
      "email":   { "value": "alice@example.com", "type": "string" },
      "message": { "value": "Please send me the pricing sheet.", "type": "string" },
      "summary": { "value": "Caller asked about pricing and wants a follow-up.", "type": "string" }
    }
  },
  "actions": [
    {
      "type": "book_event",
      "routeId": null,
      "calledAt": "2026-06-01T10:00:45+00:00"
    },
    {
      "type": "send_email",
      "routeId": "9b1c2d3e-4f56-7890-abcd-ef0123456789",
      "calledAt": "2026-06-01T10:01:20+00:00"
    }
  ],
  "booking": {
    "uri": "https://api.zeeg.me/v2/scheduled-events/zg-O69bd55e004c8b",
    "uuid": "zg-O69bd55e004c8b",
    "title": "30-Minute Meeting with Sales Agent",
    "type": "ONE_ON_ONE",
    "startTime": "2026-06-03T14:00:00.000000Z",
    "endTime": "2026-06-03T14:30:00.000000Z",
    "duration": 30,
    "status": "confirmed",
    "eventTypeUri": "https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e",
    "location": { "type": "google_meet", "joinUrl": "https://meet.google.com/abc-defg-hij" },
    "maxActiveInvitees": 1,
    "activeInviteesCount": 1,
    "invitees": [
      {
        "uuid": "zg-A12cd34ef005a9c",
        "salutation": null,
        "fullName": "Alice Müller",
        "email": "alice@example.com",
        "guests": [],
        "timeZone": "Europe/Berlin",
        "cancellation": { "cancelledAt": null, "cancelledBy": null, "cancellerType": null, "cancellationReason": null },
        "payment": null,
        "questions": [],
        "scheduledAt": "2026-06-01T10:00:50.000000Z",
        "utm": [],
        "customQueryParams": [],
        "agentBookingReference": "123456"
      }
    ],
    "guests": [],
    "hosts": [
      { "firstName": "Lena", "lastName": "Meier", "email": "lena.meier@example.com", "slug": "lena-meier", "url": "https://zeeg.me/lena-meier", "avatarUrl": null }
    ],
    "createdAt": "2026-06-01T10:00:50.000000Z",
    "updatedAt": "2026-06-01T10:00:50.000000Z",
    "currentTime": "2026-06-01T10:01:30.000000Z"
  },
  "crmPersonId": "7f3e2a91-1234-4abc-9012-b3c456d78901"
}
Last modified on June 2, 2026