# booked_call

> An appointment was booked through a connected calendar.

---
title: booked_call
description: An appointment was booked through a connected calendar.
---

Fires when a visitor books an appointment through a Calendly or GoHighLevel calendar connected to the form.

<ApiSection>
<div>
<Attributes title="data">
  <Attribute name="appointment" type="object">
    The booked appointment.
    <ChildAttributes>
      <Attribute name="id" type="uuid">ROASForm appointment id.</Attribute>
      <Attribute name="status" type="string" values={["new", "pending", "cancelled"]}>
        Booking state, read fresh when the delivery is sent. Almost always `new`,
        meaning the appointment was confirmed with the calendar provider.
        `pending` means we recorded it but the provider never confirmed it —
        typically a dropped calendar connection. `cancelled` only shows up on a
        retry: a failed delivery is rebuilt with current data, so if the invitee
        cancels in the meantime, the retry carries the newer state.
      </Attribute>
      <Attribute name="scheduledAtUtc" type="timestamp">Meeting start.</Attribute>
      <Attribute name="endAtUtc" type="timestamp">
        Meeting end. Derived from the start plus the provider's confirmed
        duration, so it always agrees with `durationMinutes`.
      </Attribute>
      <Attribute name="durationMinutes" type="number" />
      <Attribute name="timezone" type="nullable string">
        The IANA timezone the invitee booked in, e.g. `America/Chicago` — taken
        from their browser when they picked the slot, not from the calendar
        provider. Useful for showing the meeting time the way they saw it.
        Falls back to `UTC` when the browser reported nothing, so treat a plain
        `UTC` as "unknown" rather than a confirmed location.
      </Attribute>
      <Attribute name="location" type="nullable string">
        Where the meeting happens: a video link, a phone number, or a physical
        address. **Calendly** returns its join URL for conferencing event types
        (Google Meet links are generated asynchronously, so this can be `null`
        right after booking), otherwise the location text. **GoHighLevel**
        returns the calendar's configured address or meeting link. `null` when
        the provider gave none.
      </Attribute>
      <Attribute name="providerCalendarId" type="string">
        Which calendar the booking landed on, in the provider's system: the
        GoHighLevel calendar id, or the Calendly event type id. Configured on the
        form, so it's the same for every booking on that calendar. Matches what
        you see in your own GoHighLevel/Calendly account.
      </Attribute>
      <Attribute name="providerBookingId" type="nullable string">
        The provider's id for this one appointment, returned when the booking was
        created. Use it with the Calendly/GoHighLevel API to fetch, reschedule, or
        cancel the booking. `null` when the provider did not return a booking id.
      </Attribute>
      <Attribute name="cancelUrl" type="nullable string">
        Invitee-facing link to cancel the booking, safe to put in your own
        emails. Points at the ROASForm appointment page for both providers.
      </Attribute>
      <Attribute name="rescheduleUrl" type="nullable string">
        Invitee-facing link to reschedule, same as above.
      </Attribute>
      <Attribute name="bookingTags" type="string[]" />
      <Attribute name="createdAtUtc" type="timestamp" />
    </ChildAttributes>
  </Attribute>
  <Attribute name="calendarProvider" type="string" values={["calendly", "gohighlevel"]} />
  <Attribute name="assignedUser" type="nullable string">
    The host's name. Calendly fills it; GoHighLevel usually returns none, so expect `null` there.
  </Attribute>
  <Attribute name="eventName" type="nullable string">
    The booked event type's name, e.g. `Intro Call - 30 min`.
  </Attribute>
  <Attribute name="lead" type="object">
    The lead who booked. See [shared objects](/docs/webhooks/webhook#shared-objects).
  </Attribute>
  <Attribute name="submission" type="object">
    The submission that led to the booking. Carries its own `ending`, `answers`, `lastSeenElement`, `utmData`, `ipAddress`, `userAgent`, and `appliedTags`. See [the submission object](/docs/webhooks/webhook#shared-objects).
  </Attribute>
  <Attribute name="splitTestVariant" type="nullable object">
    `{ id, name }` of the variant served, or `null` when the form has no running split test.
  </Attribute>
</Attributes>
</div>
<ExamplePanel title="booked_call">

```json
{
  "id": "1f6a9d34-7c2e-4b8f-a5d1-9e3b7c0f4a68",
  "event": "booked_call",
  "webhookVersion": "2026-07-01",
  "createdAtUtc": "2026-07-28T14:35:02.771Z",
  "agency": {
    "id": "c1a2b3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
    "name": "Acme Marketing"
  },
  "subaccount": {
    "id": "7f3e9d21-4b8a-4c5e-9f60-2d8b1a7c3e54",
    "name": "Acme Fitness Client"
  },
  "form": {
    "id": "e8b4c672-9a1d-4f3b-b7c8-5d2e9f0a1b3c",
    "name": "Fitness Coaching Application",
    "url": "https://forms.roasform.com/fitness-coaching"
  },
  "data": {
    "appointment": {
      "id": "f2a6d9c4-7b1e-4d8a-9c3f-0e5b8d2a6f49",
      "status": "new",
      "scheduledAtUtc": "2026-07-30T16:00:00.000Z",
      "endAtUtc": "2026-07-30T16:30:00.000Z",
      "durationMinutes": 30,
      "timezone": "America/Chicago",
      "location": "https://meet.google.com/abc-defg-hij",
      "providerCalendarId": "CVokAlI8fgw4WYWoCtQz",
      "providerBookingId": "sV3xPqT9uHkLmA2cRfGe",
      "cancelUrl": "https://my.roasform.com/appt/f2a6d9c4-7b1e-4d8a-9c3f-0e5b8d2a6f49/cancel",
      "rescheduleUrl": "https://my.roasform.com/appt/f2a6d9c4-7b1e-4d8a-9c3f-0e5b8d2a6f49/reschedule",
      "bookingTags": [
        "booked"
      ],
      "createdAtUtc": "2026-07-28T14:35:02.771Z"
    },
    "calendarProvider": "calendly",
    "assignedUser": "Sam Closer",
    "eventName": "Intro Call - 30 min",
    "lead": {
      "id": "3d9f7a25-6c1b-4e8d-a2f4-8b0c5d7e9f13",
      "name": "Jane Doe",
      "email": "jane@example.com",
      "phone": "+15555550100",
      "company": "Doe Fitness LLC",
      "location": "Austin, TX",
      "tags": [
        "hot-lead"
      ],
      "timezone": "America/Chicago",
      "country": "US",
      "createdAtUtc": "2026-07-28T14:29:03.114Z"
    },
    "submission": {
      "id": "5a2c8e94-1f7d-4b3a-9e6c-4d8f0b2a6c71",
      "status": "complete",
      "qualification": "qualified",
      "score": 40,
      "startedAtUtc": "2026-07-28T14:26:40.207Z",
      "completedAtUtc": "2026-07-28T14:32:11.482Z",
      "ending": {
        "id": "9c4b7d13-8e2a-4f6c-b1d9-7a3e5c8f2d46",
        "name": "Qualified - Book a call",
        "type": "calendar"
      },
      "lastSeenElement": {
        "elementId": "a1d4c7f2-9b3e-4c6a-8d2f-5e9b1c4a7d30",
        "label": "What is your email?",
        "type": "email",
        "value": "jane@example.com",
        "values": null,
        "score": null
      },
      "answers": [
        {
          "elementId": "b7e2f9a4-3c8d-4a1e-9f5b-6d0c2e8a4f17",
          "label": "What is your monthly budget?",
          "type": "single_choice",
          "value": "$2,000 - $5,000",
          "values": null,
          "score": 30
        },
        {
          "elementId": "d2c8f5b1-7e4a-4d9c-a6f3-9b0e5d8c2a64",
          "label": "What are your goals?",
          "type": "multiple_choice",
          "value": null,
          "values": [
            "Lose weight",
            "Build muscle"
          ],
          "score": 10
        },
        {
          "elementId": "a1d4c7f2-9b3e-4c6a-8d2f-5e9b1c4a7d30",
          "label": "What is your email?",
          "type": "email",
          "value": "jane@example.com",
          "values": null,
          "score": null
        }
      ],
      "appliedTags": [
        "hot-lead"
      ],
      "utmData": {
        "utm_source": "facebook",
        "utm_medium": "cpc",
        "utm_campaign": "summer-2026"
      },
      "ipAddress": "203.0.113.42",
      "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15"
    },
    "splitTestVariant": {
      "id": "d6f1a8c3-2e9b-4a5d-8f7c-1b4e6a9d3c82",
      "name": "Variant B"
    }
  }
}
```

</ExamplePanel>
</ApiSection>
