# Call Booked Webhook

Webhook event triggered when a call is successfully booked in iClosed.io.

## Overview

The Call Booked webhook is triggered whenever a call is successfully scheduled and booked in your iClosed.io account. This event provides comprehensive details about the booked call, including event information, invitee details, and scheduling data.

## Event Details

| Property | Value |
|  --- | --- |
| **Event Type** | `callBooked` |
| **Trigger** | When a call is successfully booked through any booking channel |
| **Payload** | Complete call booking information with event and invitee details |


## Webhook Payload

The HTTP body is a single JSON object (not an array). It contains detailed information about the booked call:

```json
{
  "event_type": {
    "uuid": 2,
    "kind": "Round Robin",
    "slug": "strategy-call",
    "name": "Strategy intro call",
    "duration": 30,
    "durationUnit": "MINUTES",
    "owner": {
      "type": "closer"
    },
    "type": "STRATEGY_EVENT"
  },
  "event": {
    "uuid": 168,
    "closerId": 5,
    "closerName": "Jamie Alvarez ",
    "closerEmail": "jamie.alvarez@example.com",
    "closerTimezone": "Asia/Karachi",
    "assigned_to": {
      "1": "Jamie Alvarez "
    },
    "extended_assigned_to": {
      "1": {
        "name": "Jamie Alvarez ",
        "email": "jamie.alvarez@example.com",
        "primary": true
      }
    },
    "utc_start_time": "2026-04-09T10:30:00.000Z",
    "utc_end_time": "2026-04-09T11:00:00.000Z",
    "start_time": "2026-04-09T10:30:00.000Z",
    "start_time_pretty": "03:30PM - Thursday, April 9, 2026",
    "invitee_start_time": "2026-04-09T10:30:00.000Z",
    "invitee_start_time_pretty": "03:30PM - Thursday, April 9, 2026",
    "end_time": "2026-04-09T11:00:00.000Z",
    "end_time_pretty": "04:00PM - Thursday, April 9, 2026",
    "invitee_end_time": "2026-04-09T11:00:00.000Z",
    "invitee_end_time_pretty": "04:00PM - Thursday, April 9, 2026",
    "created_at": "2026-04-09T09:15:39.003Z",
    "location": "+1 415 555 0192",
    "location_type": "phone",
    "eventLink": "https://app.iclosed.io/e/acme/strategy-call",
    "callPreviewId": "call_esiPJQAfxjJw",
    "type": "STRATEGY_CALL",
    "canceled": false,
    "canceler_name": null,
    "cancel_reason": null,
    "canceled_at": null,
    "old_start_time": null,
    "rescheduleLink": "https://app.iclosed.io/reschedulings/call_esiPJQAfxjJw",
    "cancelLink": "https://app.iclosed.io/cancellations/call_esiPJQAfxjJw",
    "setter": {
      "name": "Riley Chen",
      "firstName": "Riley",
      "lastName": "Chen",
      "email": "riley.chen@example.com",
      "setBy": {
        "firstName": "Riley",
        "lastName": "Chen",
        "email": "riley.chen@example.com"
      }
    }
  },
  "contactFields": {},
  "invitee": {
    "uuid": 239,
    "previewUrl": "https://app.iclosed.io/app/global-data/contacts?preview=contact_We1Ztdhvcii0",
    "ip_address": "::1",
    "callPreviewId": "call_esiPJQAfxjJw",
    "first_name": "Morgan",
    "last_name": "Lee",
    "name": "Morgan Lee",
    "email": "morgan.lee@example.com",
    "text_reminder_number": "+1 415 555 0192",
    "timezone": "Asia/Karachi",
    "created_at": "2026-04-09T09:15:39.003Z",
    "is_reschedule": false,
    "reschedule_reason": "First booking (not a reschedule)",
    "reschedule_by": null,
    "canceled": false,
    "canceler_name": null,
    "cancel_reason": null,
    "canceled_at": null
  },
  "questions_and_answers": [
    {
      "question": "Email Address",
      "answer": "morgan.lee@example.com"
    },
    {
      "question": "Phone Number",
      "answer": "+1 415 555 0192"
    },
    {
      "question": "Full Name",
      "answer": "Morgan Lee"
    },
    {
      "question": "Goals for the next 90 days",
      "answer": "We need to cut demo no-shows by half this quarter."
    },
    {
      "question": "Check box",
      "answer": "1, 3"
    },
    {
      "question": "Internal reference code",
      "answer": 123
    },
    {
      "question": "Date and Time",
      "answer": "2026-04-10T09:14:00.000Z"
    },
    {
      "question": "Team size (people)",
      "answer": 123
    },
    {
      "question": "New Multi Select",
      "answer": "b"
    },
    {
      "question": "Disqualify",
      "answer": "No"
    }
  ],
  "questions_and_responses": {
    "1_question": "Email Address",
    "1_response": "morgan.lee@example.com",
    "2_question": "Phone Number",
    "2_response": "+1 415 555 0192",
    "3_question": "Full Name",
    "3_response": "Morgan Lee",
    "4_question": "Goals for the next 90 days",
    "4_response": "We need to cut demo no-shows by half this quarter.",
    "5_question": "Check box",
    "5_response": "1, 3",
    "6_question": "Internal reference code",
    "6_response": 123,
    "7_question": "Date and Time",
    "7_response": "2026-04-10T09:14:00.000Z",
    "8_question": "Team size (people)",
    "8_response": 123,
    "9_question": "New Multi Select",
    "9_response": "b",
    "10_question": "Disqualify",
    "10_response": "No",
    "Email Address": "morgan.lee@example.com",
    "Phone Number": "+1 415 555 0192",
    "Full Name": "Morgan Lee",
    "Goals for the next 90 days": "We need to cut demo no-shows by half this quarter.",
    "Check box": "1, 3",
    "Internal reference code": 123,
    "Date and Time": "2026-04-10T09:14:00.000Z",
    "Team size (people)": 123,
    "New Multi Select": "b",
    "Disqualify": "No"
  },
  "tracking": {
    "first_utm_term": "strategy consultation",
    "first_utm_source": "google",
    "first_utm_medium": "cpc",
    "first_utm_content": "hero_cta_variant_b",
    "first_utm_campaign": "q2_2026_demo_requests",
    "utm_term": "sales scheduling software",
    "utm_source": "linkedin",
    "utm_medium": "paid_social",
    "utm_content": "carousel_ad_3",
    "utm_campaign": "b2b_outbound_apr",
    "utmKey_0": "gclid",
    "utmValue_0": "EAIaIQobChMIexampleValue123",
    "utmKey_1": "li_fat_id",
    "utmValue_1": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "utmKey_2": "referrer_domain",
    "utmValue_2": "newsletter.partner.io",
    "utmKey_3": "landing_path",
    "utmValue_3": "/events/strategy-call",
    "utmKey_4": "experiment_id",
    "utmValue_4": "exp_booking_flow_v2"
  },
  "call_booked_from": "PUBLIC_SCHEDULER",
  "externalIntegrationData": {
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
    "referrerUrl": "https://app.iclosed.io/e/acme/strategy-call",
    "sessionId": "f3ac02ab-f154-4e9c-a96f-7edb9ada61b4"
  },
  "hookType": "Call booked"
}
```

## Key Fields Explained

### Event Type Information

The `event_type` object contains configuration details for the event type:

| Field | Description |
|  --- | --- |
| `uuid` | Unique identifier for the event type |
| `kind` | Booking strategy (e.g., `"Round Robin"`, `"Direct Assignment"`) |
| `slug` | URL-friendly event name |
| `name` | Display name of the event |
| `duration` | Call duration in the specified unit |
| `durationUnit` | Time unit (`MINUTES`, `HOURS`) |
| `owner.type` | Type of owner (`closer`, `setter`, etc.) |
| `type` | Event category (`STRATEGY_EVENT`, `DISCOVERY_EVENT`, etc.) |


### Event Details

The `event` object contains specific call instance information:

| Field | Description |
|  --- | --- |
| `uuid` | Unique call identifier |
| `assigned_to` | Simple assignment mapping |
| `extended_assigned_to` | Detailed assignment info with name, email, and primary flag |
| `utc_start_time` / `utc_end_time` | UTC timestamps for the call |
| `start_time` / `end_time` | Local timezone timestamps |
| `start_time_pretty` / `end_time_pretty` | Human-readable time formats |
| `invitee_start_time` / `invitee_end_time` | Times from the invitee's perspective |
| `type` | Call type (`STRATEGY_CALL`, `DISCOVERY_CALL`, etc.) |
| `location` | Meeting URL or location |
| `canceled` | Whether the call has been cancelled |
| `setter` | Information about the setter assigned to the call |


### Invitee Information

The `invitee` object contains details about the person who booked the call:

| Field | Description |
|  --- | --- |
| `previewUrl` | Direct link to view the contact in iClosed.io |
| `uuid` | Unique invitee identifier |
| `name` | Full name of the invitee |
| `email` | Invitee's email address |
| `text_reminder_number` | Phone number for SMS reminders |
| `timezone` | Invitee's timezone |
| `created_at` | When the invitee record was created |
| `canceled` | Whether the invitee has cancelled |


### Questions and Responses

| Field | Description |
|  --- | --- |
| `questions_and_answers` | Array format of booking form responses |
| `questions_and_responses` | Object format with question/response pairs and direct key-value mapping |


### Tracking Information

The `tracking` object contains UTM parameters and attribution data, including current UTM values, first-touch attribution (`first_utm_*`), and custom tracking parameters (`utmKey_0` through `utmKey_4`).

## Call Types

### Strategy Calls

- **Purpose:** Sales strategy and qualification calls
- **Duration:** Typically 15–30 minutes
- **Owner:** Usually a closer or sales representative


### Discovery Calls

- **Purpose:** Initial discovery and qualification
- **Duration:** Typically 15–30 minutes
- **Owner:** Usually a setter or SDR


### Other Call Types

- **Consultation Calls** – Expert advice sessions
- **Demo Calls** – Product demonstrations
- **Follow-up Calls** – Post-meeting discussions


## Use Cases

This webhook is useful for:

- **CRM Integration** – Create or update records in your CRM system
- **Calendar Synchronization** – Add events to team calendars
- **Notification Systems** – Send confirmations to team members
- **Analytics Tracking** – Monitor booking patterns and conversion rates
- **Workflow Automation** – Trigger follow-up actions based on call bookings
- **Reporting** – Track booking metrics and team performance
- **Customer Communication** – Send personalized confirmation emails


## Response Requirements

Your webhook endpoint should:

- Return a `2xx` status code to acknowledge receipt
- Respond within **5 seconds** to avoid retries
- Handle duplicate events (idempotency)
- Log the call `uuid` and invitee information for debugging
- Consider timezone differences when processing timestamps


## Best Practices

1. **Timezone Handling** – Always use the provided timezone information when displaying times
2. **Duplicate Prevention** – Use the call `uuid` to prevent duplicate processing
3. **Assignment Tracking** – Monitor the `assigned_to` field for team notifications
4. **Cancellation Status** – Check the `canceled` flags before processing
5. **Contact Linking** – Use the `previewUrl` to link back to the contact record
6. **Reminder Setup** – Use `text_reminder_number` for SMS reminder systems
7. **Tracking Attribution** – Preserve UTM data for marketing attribution