When Calendly's hooks endpoint returns subscription data instead of appointments, you are reading the wrong thing. The hooks endpoint only manages subscriptions. Point a subscription at your webhook URL, and Calendly will POST each booking or cancellation payload to you as it happens. If you need the current list of invitees or meetings on demand, call the scheduled-events API endpoint instead of polling the hooks endpoint.

Context: Stack Overflow #55734473 (accepted answer, 3 votes): the asker called the Calendly hooks endpoint expecting scheduled appointment data and got only webhook subscription data back. The accepted answer explains the confusion: a webhook is a listener, not a data endpoint. You register the subscription once, and Calendly then POSTs the appointment payload to your webhook URL whenever an invitee books or cancels. To list existing meetings, use the regular API instead.