> ## Documentation Index
> Fetch the complete documentation index at: https://developer.zeeg.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Create an Event

> Programmatically book a scheduled event on a Zeeg scheduling page by providing an invitee, a chosen time slot, and any required custom answers.



## OpenAPI

````yaml POST /event
openapi: 3.0.0
info:
  title: Zeeg Public API
  description: >-
    Zeeg public API documentation.


    ## Authentication

    All endpoints require a Bearer token. You can generate an API token from
    [your Zeeg dashboard](https://app.zeeg.me/account/settings/api-access).


    Each token is scoped to specific permissions (e.g. `events:read`,
    `webhooks:write`). Make sure your token has the required scopes for the
    endpoints you want to use.


    ## Recommended Headers

    We recommend including the `Accept: application/json` header in all API
    requests to ensure you receive JSON responses.
  version: 2.0.0
  x-logo:
    url: https://app.zeeg.me/img/logo-dark.2ca83593.svg
    backgroundColor: '#f7f7f9'
    altText: zeeg
  contact:
    name: Zeeg Support
    email: support@zeeg.me
    url: https://zeeg.me/en/contact
  license:
    name: Proprietary
    url: https://zeeg.me/en/legal/terms
  termsOfService: https://zeeg.me/en/legal/terms
servers:
  - url: https://api.zeeg.me/v2
    description: Production
security:
  - bearer: []
tags:
  - name: Scheduled Events
    description: Management of events scheduled via Zeeg
  - name: Scheduling Pages
    description: Scheduling pages information and management
  - name: Availability Schedule
    description: Read and change availability for users
  - name: Webhooks
    description: Webhooks management
  - name: Notes
    description: Notes for scheduled events
  - name: Workspaces & Teams
    description: Workspace users and team member management
  - name: AI Agent
    description: AI Agent integration endpoints
  - name: Payloads
    description: Webhook payload schemas
  - name: CRM - Objects
    description: >-
      Discover the schema of CRM objects (standard and custom) including all
      attribute definitions
  - name: CRM - Companies
    description: Create, read, update, and delete CRM company records
  - name: CRM - People
    description: Create, read, update, and delete CRM person records
paths:
  /event:
    post:
      tags:
        - Scheduling Pages
      summary: Create an event
      description: >-
        Creates a new event booking for a specific scheduling page.


        Please note that access to this endpoint requires an **active paid
        subscription**.


        This API requires either of the following scopes:

        - `admin:full`

        - `booking`


        **Important:** Before creating an event, verify availability using the
        availability endpoint (`GET
        /availability/{ownerSlug}/event-types/{eventTypeSlug}`).


        **Custom invitee questions:**

        - Retrieve the list of questions and their IDs from the scheduling page
        configuration.

        - Include all required questions in the `question_answers` array.

        - For text-based questions, provide a string answer.

        - For multiple-choice questions, provide an array of strings with
        selected options.

        - Failure to provide required question answers will result in a
        validation error.
      operationId: post-event
      requestBody:
        description: >-
          - Required fields may vary based on the event type's configuration.

          - Before creating an event, verify availability using the availability
          endpoint.

          - Validate any required custom fields (guests, phone, questions) by
          checking the event type's settings first.
        content:
          application/json:
            schema:
              type: object
              required:
                - ownerSlug
                - eventTypeSlug
                - date
                - duration
                - name
                - email
                - timeZone
                - start
              properties:
                ownerSlug:
                  type: string
                  description: >-
                    The slug of the scheduling page owner, can be a user or a
                    team.
                eventTypeSlug:
                  type: string
                  description: The slug of the scheduling page.
                date:
                  type: string
                  format: date
                  description: The event date in YYYY-MM-DD format.
                duration:
                  type: integer
                  description: Meeting duration in minutes.
                name:
                  type: string
                  description: Invitee's full name.
                email:
                  type: string
                  format: email
                  description: Invitee's email address.
                phone:
                  type: string
                  description: >-
                    Invitee's phone number (required for `"PHONE_CALL"` location
                    type).
                guests:
                  type: array
                  description: Array of additional guest email addresses.
                  items:
                    type: string
                    format: email
                location:
                  type: string
                  description: >-
                    Location type identifier (required if locations are enabled
                    in the scheduling page).

                    Accepted values:

                    - `"IN_PERSON"`: Physical in-person meeting (requires
                    `locationOptions` with address and details).

                    - `"PHONE_CALL"`: Phone call meeting (requires
                    `locationOptions.callType` and `phone` field).

                    - Other types as configured in the scheduling page (e.g.
                    `"ZOOM"`, `"GOOGLE_MEET"`, `"MICROSOFT_TEAMS"`).
                locationOptions:
                  type: object
                  description: >-
                    Additional location details, required for certain location
                    types:

                    - For in-person meetings (`location: "IN_PERSON"`): provide
                    `address` and `details`.

                    - For phone call meetings (`location: "PHONE_CALL"`):
                    provide `callType` (e.g. `"I_WILL_CALL"`).
                  properties:
                    address:
                      type: string
                    details:
                      type: string
                    callType:
                      type: string
                timeZone:
                  type: string
                  description: Invitee's IANA timezone identifier.
                  example: Europe/Paris
                start:
                  type: string
                  format: time
                  description: Start time in HH:mm format (in the specified `timeZone`).
                  example: '09:00'
                question_answers:
                  type: array
                  description: >-
                    Array of question-answer pairs for custom invitee questions
                    configured on the scheduling page.
                  items:
                    type: object
                    properties:
                      question_id:
                        type: integer
                        description: >-
                          The numeric ID of the question (obtain from scheduling
                          page settings).
                      answer:
                        description: >-
                          The answer to the question. A string for single-answer
                          questions, or an array of strings for multi-select
                          questions.
                        oneOf:
                          - type: string
                          - type: array
                            items:
                              type: string
                customQueryParams:
                  type: object
                  description: Custom URL parameters to pass through.
                utm:
                  type: object
                  description: UTM tracking parameters.
                  properties:
                    utm_campaign:
                      type: string
                    utm_source:
                      type: string
                    utm_medium:
                      type: string
                    utm_content:
                      type: string
                    utm_term:
                      type: string
                sharedLink:
                  type: string
                  description: >-
                    The shared link token, required when booking via a shared or
                    collective scheduling link.
            examples:
              Booking with question answers:
                value:
                  ownerSlug: lena-meier
                  eventTypeSlug: 30min-discovery-call
                  date: '2026-04-15'
                  duration: 30
                  name: Sophie Laurent
                  email: sophie.laurent@northwind.io
                  guests:
                    - alex.chen@northwind.io
                  location: GOOGLE_MEET
                  timeZone: Europe/Paris
                  start: '09:00'
                  question_answers:
                    - question_id: 1
                      answer: Product demo and pricing options
                  customQueryParams: {}
                  utm:
                    utm_campaign: spring_launch
                    utm_source: linkedin
                    utm_medium: social
              In-person meeting:
                value:
                  ownerSlug: lena-meier
                  eventTypeSlug: product-demo
                  date: '2026-04-20'
                  start: '14:30'
                  location: IN_PERSON
                  locationOptions:
                    address: Horizon Digital GmbH Office
                    details: Reception on the 3rd floor, ask for Lena.
                  duration: 60
                  name: Sophie Laurent
                  email: sophie.laurent@northwind.io
                  phone: +49 170 9876543
                  timeZone: Europe/Paris
              Phone call meeting:
                value:
                  ownerSlug: lena-meier
                  eventTypeSlug: 30min-discovery-call
                  date: '2026-04-22'
                  start: '10:00'
                  location: PHONE_CALL
                  locationOptions:
                    callType: I_WILL_CALL
                  phone: +49 170 9876543
                  duration: 30
                  name: Sophie Laurent
                  email: sophie.laurent@northwind.io
                  timeZone: Europe/Paris
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScheduledEvent'
              examples:
                Newly created event:
                  value:
                    uri: https://api.zeeg.me/v2/scheduled-events/zg-O69bac566950c6
                    uuid: zg-O69bac566950c6
                    title: 30-Minute Discovery Call
                    type: ONE_ON_ONE
                    startTime: '2026-04-15T07:00:00.000000Z'
                    endTime: '2026-04-15T07:30:00.000000Z'
                    duration: 30
                    status: confirmed
                    eventTypeUri: >-
                      https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e
                    location:
                      type: Google Meet
                      joinUrl: https://meet.google.com/abc-defg-hij
                    maxActiveInvitees: 1
                    activeInviteesCount: 1
                    invitees:
                      - uuid: zg-O69bad4047abf0
                        salutation: null
                        fullName: Sophie Laurent
                        email: sophie.laurent@northwind.io
                        guests:
                          - alex.chen@northwind.io
                        timeZone: Europe/Paris
                        cancellation:
                          cancelledAt: null
                          cancelledBy: null
                          cancellerType: null
                          cancellationReason: null
                        payment: null
                        questions:
                          - answer: Product demo and pricing options
                            answer_type: STRING
                            question: What would you like to discuss?
                        scheduledAt: '2026-04-10T08:30:00.000000Z'
                        utm:
                          utm_campaign: spring_launch
                          utm_source: linkedin
                          utm_medium: social
                          utm_content: null
                          utm_term: null
                        customQueryParams: []
                    guests:
                      - alex.chen@northwind.io
                    hosts:
                      - firstName: Lena
                        lastName: Meier
                        email: lena.meier@horizondigital.de
                        slug: lena-meier
                        url: https://zeeg.me/lena-meier
                        avatarUrl: null
                    createdAt: '2026-04-10T08:30:00.000000Z'
                    updatedAt: '2026-04-10T08:30:00.000000Z'
                    currentTime: '2026-04-10T08:30:00+00:00'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  status:
                    type: integer
              examples:
                Time slot not available:
                  value:
                    success: false
                    message: >-
                      The requested time slot is not available for booking.
                      Please select another time.
                    status: 400
        '401':
          $ref: '#/components/responses/401'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  status:
                    type: integer
              examples:
                Forbidden:
                  value:
                    success: false
                    message: You cannot access this resource.
                    status: 403
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              examples:
                Event type not found:
                  value:
                    error: Entry for EventType not found
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  errors:
                    type: object
              examples:
                Invalid date:
                  value:
                    message: The date field must be a valid date.
                    errors:
                      date:
                        - The date field must be a valid date.
      security:
        - bearer: []
components:
  schemas:
    ScheduledEvent:
      type: object
      required:
        - uri
        - uuid
        - title
        - type
        - startTime
        - endTime
        - duration
        - status
        - eventTypeUri
        - maxActiveInvitees
        - activeInviteesCount
        - invitees
        - createdAt
      properties:
        uri:
          type: string
          format: uri
          description: Public API URI of the scheduled event resource.
        uuid:
          type: string
          description: Zeeg event identifier (zg-XXX format)
          example: zg-O69bac566950c6
        title:
          type: string
          description: Title of the scheduled event.
        type:
          type: string
          description: Event type kind (e.g. `ONE_ON_ONE`, `GROUP`, `ROUND_ROBIN`).
        startTime:
          type: string
          format: date-time
          description: ISO 8601 UTC start time of the booked event.
        endTime:
          type: string
          format: date-time
          description: ISO 8601 UTC end time of the booked event.
        duration:
          type: integer
          description: Event duration in minutes.
        status:
          type: string
          description: Booking status (e.g. `confirmed`, `cancelled`).
        eventTypeUri:
          type: string
          format: uri
          description: Public API URI of the event type this booking was made against.
        location:
          type: object
          nullable: true
          required:
            - type
          properties:
            type:
              type: string
              description: >-
                Location type (e.g. `google_meet`, `zoom`, `phone`,
                `in_person`).
            joinUrl:
              type: string
              format: uri
              description: Join URL for the meeting, when applicable.
              nullable: true
          description: Meeting location for the booking.
        maxActiveInvitees:
          type: integer
          description: Maximum number of active invitees the event allows.
        activeInviteesCount:
          type: integer
          description: Current number of active (non-cancelled) invitees.
        invitees:
          type: array
          items:
            type: object
            required:
              - fullName
              - email
              - timeZone
              - scheduledAt
            properties:
              uuid:
                type: string
                description: Zeeg attendee identifier (zg-XXX format)
                example: zg-O69bac566950c6
              salutation:
                type: string
                nullable: true
                description: Salutation for the invitee, if collected.
              fullName:
                type: string
                description: Full name of the invitee.
                nullable: true
              email:
                type: string
                format: email
                description: Email address of the invitee.
                nullable: true
              guests:
                type: array
                description: Array of additional emails invited
                nullable: true
                items:
                  type: string
              timeZone:
                type: string
                description: IANA time zone of the invitee.
                nullable: true
              cancellation:
                type: object
                properties:
                  cancelledAt:
                    type: string
                    format: date-time
                    nullable: true
                    description: ISO 8601 UTC timestamp when the invitee was cancelled.
                  cancelledBy:
                    type: string
                    nullable: true
                    description: Identifier of who cancelled the booking.
                  cancellerType:
                    type: string
                    nullable: true
                    description: Type of canceller (e.g. host, invitee).
                  cancellationReason:
                    type: string
                    nullable: true
                    description: Reason given for the cancellation.
                description: >-
                  Cancellation details. All fields are `null` when the invitee
                  is not cancelled.
              payment:
                type: object
                nullable: true
                description: >-
                  Payment details for the booking, or `null` when no payment
                  applies.
                properties:
                  gateway:
                    type: string
                    description: Payment provider, e.g. `stripe` or `paypal`.
                  price:
                    type: number
                  currency:
                    type: string
                  transactionId:
                    type: string
                    nullable: true
                  createdAt:
                    type: string
                    format: date-time
                  status:
                    type: string
                    enum:
                      - pending
                      - success
                    description: '`pending` until the transaction completes.'
              scheduledAt:
                type: string
                format: date-time
                description: ISO 8601 UTC timestamp when the invitee booked.
                nullable: true
              utm:
                type: object
                properties:
                  utm_campaign:
                    type: string
                    nullable: true
                  utm_source:
                    type: string
                    nullable: true
                  utm_medium:
                    type: string
                    nullable: true
                  utm_content:
                    type: string
                    nullable: true
                  utm_term:
                    type: string
                    nullable: true
                description: UTM tracking parameters captured at booking time.
              customQueryParams:
                type: array
                items: {}
                description: Custom query parameters captured at booking time.
              questions:
                type: array
                nullable: true
                items:
                  type: object
                  properties:
                    answer:
                      type: string
                    answer_type:
                      type: string
                    question:
                      type: string
                description: Booking questions answered by the invitee.
              agentBookingReference:
                type: string
                nullable: true
                description: >-
                  Reference code for bookings made via the AI agent; `null`
                  otherwise.
          description: Invitees booked on the scheduled event.
        guests:
          type: array
          description: Array of additional emails invited
          nullable: true
          items:
            type: string
        hosts:
          type: array
          nullable: true
          items:
            type: object
            required:
              - firstName
              - email
              - slug
              - url
            properties:
              firstName:
                type: string
                description: Host's first name.
                nullable: true
              lastName:
                type: string
                description: Host's last name. Empty string when not set.
              email:
                type: string
                format: email
                description: Host's email address.
                nullable: true
              slug:
                type: string
                description: Host's public profile slug.
                nullable: true
              url:
                type: string
                format: uri
                description: Host's public profile URL.
              avatarUrl:
                type: string
                format: uri
                nullable: true
                description: URL of the host's avatar image, if set.
          description: Hosts assigned to the scheduled event.
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 UTC timestamp when the booking was created.
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 UTC timestamp when the booking was last updated.
        currentTime:
          type: string
          format: date-time
          description: Current server time
      description: >-
        A scheduled event resource. This is the single canonical shape returned
        by all scheduled-event endpoints and embedded in the AI agent call
        webhook payload.
  responses:
    '401':
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Unauthenticated.
          examples:
            Unauthenticated:
              value:
                message: Unauthenticated.
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: ''

````