Skip to content
First requestVisit website ↗
Navigation

Create appointment booking (Public)

Create a new appointment booking. Can be used by external users without authentication. The contact is resolved by the first identity the request supplies, in this order: contact_id, then contact_phone (alias phone), then contact_name plus contact_email. A phone that is not already in the workspace creates a contact; a phone that matches an existing one books against it and does not overwrite its name.

POST
https://api.channelautomation.com/api/calendar/book

Request body JSON required

  • workspace_id
    string
    required

    Workspace ID

  • slot_id
    optional
    string

    The id of a time returned by the availability endpoints. Supplying it replaces date, start_time, end_time and timezone entirely, and it wins if those are sent too. The id is re-resolved against live availability rather than trusted, so an invented time or a slot that filled up since it was offered is rejected with a 400 instead of booked. Ids embed the event type, so they must not be cached beyond the current conversation.

  • contact_id
    optional
    string

    Existing contact ID (optional if creating new contact)

  • contact_name
    optional
    string

    Contact name (required for new contacts)

  • contact_email
    optional
    string

    Contact email (required for new contacts)

    format: email
  • contact_phone
    optional
    string

    Contact phone number (optional)

  • event_title
    optional
    string

    Title of the appointment

  • event_description
    optional
    string

    Description of the appointment

  • date
    optional
    string

    Date in mm-dd-yyyy format (user-friendly)

  • start_time
    optional
    string

    Start time in hh:mm AM/PM format (user-friendly)

  • end_time
    optional
    string

    End time in hh:mm AM/PM format (user-friendly)

  • timezone
    optional
    string

    IANA timezone identifier

  • location
    optional
    string

    Location of the appointment

  • notes
    optional
    string

    Additional notes

  • product_interest
    optional
    string

    Product or service of interest

Example requests

{
  "workspace_id": "workspace-uuid",
  "contact_name": "John Smith",
  "contact_email": "[email protected]",
  "contact_phone": "+1234567890",
  "event_title": "Kitchen Consultation",
  "event_description": "Discuss renovation plans",
  "date": "07-15-2025",
  "start_time": "2:30 PM",
  "end_time": "3:30 PM",
  "timezone": "America/New_York",
  "location": "Customer's home",
  "product_interest": "Kitchen Renovation"
}

Returns

201

Booking created successfully

JSON
  • success
    optional
    boolean
  • booking
    optional
    object
    • id
      optional
      string

      Unique appointment identifier

    • contact_id
      optional
      string

      Associated contact ID

    • workspace_id
      optional
      string

      Workspace ID

    • created_by
      optional
      string

      ID of user who created the appointment

    • title
      optional
      string

      Appointment title

    • description
      optional
      string

      Appointment description

    • appointment_date
      optional
      string

      Date and time of the appointment

      format: date-time
    • duration_minutes
      optional
      integer

      Duration of the appointment in minutes

    • location
      optional
      string

      Location of the appointment

    • created_at
      optional
      string

      When the appointment was created

      format: date-time
    • updated_at
      optional
      string

      When the appointment was last updated

      format: date-time
  • appointment
    optional
    object
    • id
      optional
      string

      Unique appointment identifier

    • contact_id
      optional
      string

      Associated contact ID

    • workspace_id
      optional
      string

      Workspace ID

    • created_by
      optional
      string

      ID of user who created the appointment

    • title
      optional
      string

      Appointment title

    • description
      optional
      string

      Appointment description

    • appointment_date
      optional
      string

      Date and time of the appointment

      format: date-time
    • duration_minutes
      optional
      integer

      Duration of the appointment in minutes

    • location
      optional
      string

      Location of the appointment

    • created_at
      optional
      string

      When the appointment was created

      format: date-time
    • updated_at
      optional
      string

      When the appointment was last updated

      format: date-time
  • contact_id
    optional
    string

    The contact the booking was attached to, however it was resolved

    format: uuid
  • contact_created
    optional
    boolean

    True when this request created the contact rather than matching one

  • contact_resolved_via
    optional
    contact_id
    or
    phone
    or
    name_email
    or null

    Which identity in the request the contact was resolved from

  • slot_id
    optional
    string
    or null

    Echoed back when the booking was made from a slot id, else null

  • message
    optional
    string

400

Missing required fields or invalid data
JSON
  • success
    optional
    boolean
  • error
    optional
    string

409

Time slot conflict
JSON
  • success
    optional
    boolean
  • error
    optional
    string

500

Internal server error
JSON
  • error
    optional
    string
  • details
    optional
    string
  • success
    optional
    boolean

Type to search…

↑↓ navigate↵ selectEsc close