Zcal Bookings

Bookings (events) capture timing, hosts, attendees, location, and custom question responses. Booking data is surfaced to external systems through outbound webhooks rather than a queryable public REST API.

OpenAPI Specification

zcal-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Zcal API
  description: >-
    Zcal is a free scheduling platform for booking meetings via shareable
    scheduling links, meeting polls, and team pages (round-robin and
    collective).


    IMPORTANT — API availability: As of 2026-06-21, Zcal does NOT publish a
    documented, general-purpose public REST API for creating or reading
    scheduling links, bookings, or events. This OpenAPI document therefore
    declares an empty `paths` object rather than fabricating endpoints.


    The only documented programmatic surface is OUTBOUND WEBHOOKS. When a
    booking is created, rescheduled, or cancelled, Zcal sends an HTTP POST
    with a JSON payload to a subscriber URL you configure under your account
    or team integrations (https://zcal.co/account/integrations). Supported
    event types are `event.created`, `event.rescheduled`, and
    `event.cancelled`. Each request may include an optional
    `x-zcal-webhook-signature` header containing an HMAC SHA-256 hash of the
    payload signed with your secret key for verification.


    The webhook payload has top-level fields `type` (the event type),
    `created_at` (ISO 8601 timestamp), and `data` (an Event object with
    `id`, `eventName`, `startDate`, `duration`, `cancelled`, `hosts`,
    `attendees`, `location`, optional `team`, and invite metadata).


    Inbound automation (creating links, reading bookings) is performed via
    no-code connectors such as Zapier and Make, and through native
    integrations including Zoom, Stripe, Google Analytics, and Meta Pixel —
    not via a published HTTP API. See the webhooks documentation for details.
  termsOfService: https://zcal.co/terms
  contact:
    name: Zcal Support
    url: https://help.zcal.co/
  version: '1.0'
servers:
  - url: https://zcal.co
    description: >-
      Zcal web application host. No public REST API base path is documented;
      this server entry is informational only.
paths: {}
components:
  schemas:
    WebhookEvent:
      type: object
      description: >-
        Documentation-only schema describing the outbound webhook payload Zcal
        POSTs to a subscriber URL. This is NOT a callable REST endpoint
        request/response; it documents the body your endpoint will receive.
      properties:
        type:
          type: string
          description: The webhook event type.
          enum:
            - event.created
            - event.rescheduled
            - event.cancelled
        created_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp indicating when the webhook was generated.
        data:
          $ref: '#/components/schemas/Event'
    Event:
      type: object
      description: Booking (event) details included in the webhook payload.
      properties:
        id:
          type: string
          description: Unique identifier for the event.
        eventName:
          type: string
          description: Display name of the booking.
        startDate:
          type: string
          format: date-time
          description: Start of the booking in ISO 8601 format.
        duration:
          type: integer
          description: Duration of the booking in minutes.
        cancelled:
          type: boolean
          description: Whether the booking has been cancelled.
        hosts:
          type: array
          description: Host participants (name and email).
          items:
            $ref: '#/components/schemas/Host'
        attendees:
          type: array
          description: Attendee participants (invitees and guests).
          items:
            $ref: '#/components/schemas/Attendee'
        location:
          $ref: '#/components/schemas/Location'
        team:
          $ref: '#/components/schemas/Team'
    Host:
      type: object
      properties:
        name:
          type: string
        email:
          type: string
          format: email
    Attendee:
      type: object
      properties:
        name:
          type: string
        email:
          type: string
          format: email
        timezone:
          type: string
        phone:
          type: string
        type:
          type: string
          description: Participant role.
          enum:
            - invitee
            - guest
        responses:
          type: array
          description: Responses to custom booking questions.
          items:
            type: object
    Location:
      type: object
      properties:
        type:
          type: string
          description: Location type (e.g., online or in-person).
        url:
          type: string
          description: Meeting URL for online locations.
        id:
          type: string
          description: Meeting ID for online locations.
        passcode:
          type: string
          description: Meeting passcode for online locations.
    Team:
      type: object
      description: Optional team details for team (collective/round-robin) invites.
      properties:
        id:
          type: string
        name:
          type: string