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

# Create events

> Create one or several events (bookings) with contact information and optional company details. Multiple bookings in a single request will be grouped together. Optionally include products to create a draft quotation.



## OpenAPI

````yaml /api-reference/bookingshake-openapi.json post /events/create
openapi: 3.0.3
info:
  title: BookingShake API
  description: >-
    The BookingShake API allows you to programmatically create and manage
    events, bookings, and related resources. Integrate BookingShake with your
    applications to automate event creation, retrieve booking sources, spaces,
    statuses, and custom fields.


    **Rate Limiting:** All endpoints are rate limited per API key. POST
    /events/create allows 10 requests per minute, while GET endpoints allow 60
    requests per minute. Rate limit information is provided in response headers
    (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset).
  version: 1.0.0
  contact:
    name: BookingShake Support
    email: support@bookingshake.com
    url: https://bookingshake.com
servers:
  - url: https://api.bookingshake.io/api
    description: Production server
security:
  - bearerAuth: []
tags:
  - name: Events
    description: Create and manage events and bookings
  - name: Resources
    description: Retrieve booking sources, spaces, and statuses
  - name: Fields
    description: Retrieve available custom and default fields
  - name: Invoices
    description: Retrieve issued invoices
  - name: Payments
    description: Retrieve payments
  - name: Contacts
    description: Retrieve contacts (people)
  - name: Products
    description: Retrieve the venue product catalog
paths:
  /events/create:
    post:
      tags:
        - Events
      summary: Create events
      description: >-
        Create one or several events (bookings) with contact information and
        optional company details. Multiple bookings in a single request will be
        grouped together. Optionally include products to create a draft
        quotation.
      operationId: createEvents
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEventRequest'
            examples:
              single-event:
                summary: Single event
                description: Create a single event with basic information
                value:
                  bookings:
                    - date: 15-03-2025
                      start_time: '14:00'
                      end_time: '18:00'
                      pax: '50'
                      event_type: Corporate Event
                      comments: Setup needed at 13:00
                  contact:
                    first_name: John
                    last_name: Doe
                    email: john.doe@example.com
                    phone: '+33123456789'
                  source_slug: website
              multiple-events:
                summary: Multiple events (group booking)
                description: >-
                  Create multiple events in a single request - they will be
                  grouped together
                value:
                  bookings:
                    - date: 15-03-2025
                      start_time: '09:00'
                      end_time: '12:00'
                      pax: '30'
                      space_id: space_abc123
                      event_type: Workshop
                    - date: 15-03-2025
                      start_time: '14:00'
                      end_time: '17:00'
                      pax: '30'
                      space_id: space_abc123
                      event_type: Workshop
                  contact:
                    first_name: Jane
                    last_name: Smith
                    email: jane.smith@company.com
                    phone: '+33987654321'
                  company:
                    name: Tech Corp
                    address_line_1: 456 Innovation Ave
                    city: Lyon
                    country: France
              event-with-products:
                summary: Event with products (draft quotation)
                description: Create an event with products to generate a draft quotation
                value:
                  bookings:
                    - date: 20-04-2025
                      start_time: '10:00'
                      end_time: '16:00'
                      pax: '100'
                      event_type: Conference
                      products:
                        - title: Conference Room Package
                          quantity: 1
                          price_without_tax: 50000
                          vat: 2000
                        - title: Catering Service
                          quantity: 100
                          price_without_tax: 2500
                          vat: 1000
                        - title: AV Equipment
                          quantity: 1
                          price_without_tax: 15000
                          vat: 2000
                  contact:
                    first_name: Alice
                    last_name: Johnson
                    email: alice@events.com
                    phone: '+33111222333'
                    position: Event Coordinator
                  company:
                    name: Global Events Inc
                    siret: '12345678901234'
                    address_line_1: 789 Business Blvd
                    postal_code: '75001'
                    city: Paris
                    country: France
                  source_slug: direct
              event-with-custom-fields:
                summary: Event with custom fields
                description: >-
                  Create an event with custom field values for booking, contact,
                  and company. Field codes follow the format
                  'custom_XXXXXXXXXXX' and can be found via GET /fields.
                value:
                  bookings:
                    - date: 15-06-2025
                      start_time: '18:00'
                      end_time: '23:00'
                      pax: '150'
                      event_type: Gala Dinner
                      custom_fields:
                        custom_a1b2c3d4e5: 20000-50000
                        custom_f6g7h8i9j0: Black Tie
                  contact:
                    first_name: Marie
                    last_name: Dupont
                    email: marie.dupont@example.com
                    phone: '+33612345678'
                    custom_fields:
                      custom_k1l2m3n4o5: fr
                      custom_p6q7r8s9t0: referral
                  company:
                    name: Luxury Events SA
                    address_line_1: 10 Avenue des Champs-Élysées
                    postal_code: '75008'
                    city: Paris
                    country: France
                    custom_fields:
                      custom_u1v2w3x4y5: 100-500
                      custom_z6a7b8c9d0: premium
                  source_slug: website
      responses:
        '200':
          description: Events created successfully
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
              description: Maximum requests allowed per minute (10 for this endpoint)
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests remaining in the current window
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the rate limit resets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
              example:
                message: success
        '400':
          description: Bad request - validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                missing-token:
                  summary: Missing authentication token
                  value:
                    message: missing token
                invalid-token:
                  summary: Invalid authentication token
                  value:
                    message: invalid token
                empty-body:
                  summary: Empty request body
                  value:
                    message: body is empty
                invalid-body:
                  summary: Invalid request body format
                  value:
                    message: invalid body
                missing-bookings:
                  summary: Missing bookings array
                  value:
                    message: missing bookings
                too-many-bookings:
                  summary: Too many bookings (max 20)
                  value:
                    message: too many bookings - maximum 20 per request
                missing-contact:
                  summary: Missing contact information
                  value:
                    message: missing contact
                invalid-date:
                  summary: Invalid date format
                  value:
                    message: date format must be DD-MM-YYYY
                invalid-time:
                  summary: Invalid time format
                  value:
                    message: start_time format must be HH:mm
                invalid-endtime:
                  summary: Invalid end_time format
                  value:
                    message: end_time format must be HH:mm
                missing-pax:
                  summary: Missing number of attendees
                  value:
                    message: missing pax
                invalid-space:
                  summary: Invalid space ID
                  value:
                    message: invalid space
                invalid-source:
                  summary: Invalid source
                  value:
                    message: invalid source
                bookings-must-be-array:
                  summary: Bookings must be an array
                  value:
                    message: bookings must be an array
                missing-date:
                  summary: Missing date in booking
                  value:
                    message: missing date
                missing-start_time:
                  summary: Missing start time in booking
                  value:
                    message: missing start_time
                missing-contact-first_name:
                  summary: Missing contact first name
                  value:
                    message: missing contact first_name
                missing-contact-last_name:
                  summary: Missing contact last name
                  value:
                    message: missing contact last_name
                missing-contact-email:
                  summary: Missing contact email
                  value:
                    message: missing contact email
                invalid-contact-id:
                  summary: Invalid contact ID
                  value:
                    message: invalid contact_id
                invalid-source-slug:
                  summary: Invalid source slug
                  value:
                    message: invalid source_slug
                invalid-source-id:
                  summary: Invalid source ID
                  value:
                    message: invalid source_id
                invalid-space-ids:
                  summary: Invalid space ID(s)
                  value:
                    message: invalid space_id(s)
                missing-products-title:
                  summary: Missing product title
                  value:
                    message: missing products title
                missing-products-quantity:
                  summary: Missing product quantity
                  value:
                    message: missing products quantity
                missing-products-price:
                  summary: Missing product price without tax
                  value:
                    message: missing products price_without_tax
                missing-products-vat:
                  summary: Missing product VAT
                  value:
                    message: missing products vat
                missing-required-custom-field:
                  summary: Missing required custom field
                  value:
                    message: missing required custom field "Budget Range" for contact
                unknown-custom-field:
                  summary: Unknown custom field code
                  value:
                    message: unknown custom field "custom_invalid123" for booking[0]
        '429':
          description: Rate limit exceeded - too many requests
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
              description: Maximum requests allowed per minute
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests remaining (always 0 on 429)
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp when the rate limit resets
            Retry-After:
              schema:
                type: integer
              description: Seconds to wait before retrying
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitResponse'
              example:
                message: Rate limit exceeded
                data:
                  limit: 10
                  window: 60 seconds
                  remaining: 0
                  resetAt: '2025-11-17T14:30:00.000Z'
                  retryAfter: 45
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                message: error
      security:
        - bearerAuth: []
components:
  schemas:
    CreateEventRequest:
      type: object
      required:
        - bookings
        - contact
      properties:
        bookings:
          type: array
          description: >-
            Array of one or more bookings to create (maximum 20 per request).
            Multiple bookings will be grouped together.
          items:
            $ref: '#/components/schemas/Booking'
          minItems: 1
          maxItems: 20
        contact:
          $ref: '#/components/schemas/Contact'
        company:
          $ref: '#/components/schemas/Company'
        source_slug:
          type: string
          description: >-
            Booking source slug identifier. Found in Settings > Sources. If not
            provided, uses the default source (marked in settings), or 'Site
            web', or the first available source.
          example: website
        source_id:
          type: string
          description: >-
            Booking source ID. Alternative to source_slug. If neither
            source_slug nor source_id is provided, uses the default source
            (marked in settings), or 'Site web', or the first available source.
          example: src_abc123
    SuccessResponse:
      type: object
      properties:
        message:
          type: string
          example: success
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
          description: Error message describing what went wrong
          example: invalid token
    RateLimitResponse:
      type: object
      properties:
        message:
          type: string
          description: Error message
          example: Rate limit exceeded
        data:
          type: object
          properties:
            limit:
              type: integer
              description: Maximum requests allowed per window
              example: 10
            window:
              type: string
              description: Time window duration
              example: 60 seconds
            remaining:
              type: integer
              description: Requests remaining (always 0 on rate limit error)
              example: 0
            resetAt:
              type: string
              format: date-time
              description: ISO 8601 timestamp when the limit resets
              example: '2025-11-17T14:30:00.000Z'
            retryAfter:
              type: integer
              description: Seconds to wait before retrying
              example: 45
    Booking:
      type: object
      required:
        - date
        - start_time
        - pax
      properties:
        date:
          type: string
          description: Event date in DD-MM-YYYY format
          example: 25-12-2024
          pattern: ^\d{2}-\d{2}-\d{4}$
        start_time:
          type: string
          description: Start time in HH:mm format (24-hour)
          example: '14:30'
          pattern: ^\d{2}:\d{2}$
        end_time:
          type: string
          description: End time in HH:mm format (24-hour). Optional.
          example: '18:00'
          pattern: ^\d{2}:\d{2}$
        pax:
          type: string
          description: Number of attendees/guests
          example: '50'
        space_id:
          type: string
          description: >-
            ID of the space/room. If not specified, uses the default space
            (marked in settings), or 'Espace indéterminé', or the first
            available space.
          example: space_abc123
        event_type:
          type: string
          description: Type or category of event (e.g., Conference, Wedding, Meeting)
          example: Corporate Event
        comments:
          type: string
          description: Additional notes or special requests for the event
          example: Please prepare projector and whiteboard
        products:
          type: array
          description: List of products/services to include in the draft quotation
          items:
            $ref: '#/components/schemas/Product'
        custom_fields:
          type: object
          description: >-
            Custom field values for the booking. Keys are field codes (format:
            'custom_XXXXXXXXXXX') retrieved from GET /fields. Required custom
            fields (isRequiredInBO=true) must be provided.
          additionalProperties:
            type: string
          example:
            custom_a1b2c3d4e5: 10000-20000
            custom_f6g7h8i9j0: Corporate
    Contact:
      type: object
      description: >-
        Contact information. Either provide contact_id to use an existing
        contact, or provide first_name, last_name, and email to create a new
        contact.
      required:
        - first_name
        - last_name
        - email
      properties:
        contact_id:
          type: string
          description: >-
            Existing contact ID. If provided, the API uses the existing contact
            and ignores other contact fields (first_name, last_name, email). If
            not provided, first_name, last_name, and email are required to
            create a new contact.
          example: contact_xyz789
        first_name:
          type: string
          description: Contact's first name
          example: John
        last_name:
          type: string
          description: Contact's last name
          example: Doe
        email:
          type: string
          format: email
          description: Contact's email address
          example: john.doe@example.com
        phone:
          type: string
          description: Contact's phone number
          example: '+33123456789'
        position:
          type: string
          description: Contact's job title or position
          example: Event Manager
        landline_phone:
          type: string
          description: Contact's landline phone number
          example: '+33145678901'
        title:
          type: string
          description: Contact's title or honorific (e.g., Mr., Mrs., Dr.)
          example: Mr.
        optin_marketing:
          type: boolean
          description: Marketing communications opt-in status
          example: true
        optin_general:
          type: boolean
          description: General communications opt-in status
          example: true
        address_line_1:
          type: string
          description: Contact's address line 1
          example: 123 Main Street
        address_line_2:
          type: string
          description: Contact's address line 2 (apartment, suite, etc.)
          example: Apt 4B
        postal_code:
          type: string
          description: Contact's postal/ZIP code
          example: '75001'
        city:
          type: string
          description: Contact's city
          example: Paris
        country:
          type: string
          description: Contact's country
          example: France
        custom_fields:
          type: object
          description: >-
            Custom field values for the contact. Keys are field codes (format:
            'custom_XXXXXXXXXXX') retrieved from GET /fields. Required custom
            fields (isRequiredInBO=true) must be provided. Only used when
            creating a new contact (ignored if contact_id is provided).
          additionalProperties:
            type: string
          example:
            custom_k1l2m3n4o5: fr
            custom_p6q7r8s9t0: gold
    Company:
      type: object
      description: >-
        Company/organization information (optional). Note: A company will only
        be created if the 'name' field is provided. If the company object is
        omitted or provided without a name, no company will be created.
      properties:
        name:
          type: string
          description: Company or organization name
          example: Acme Corporation
        legal_name:
          type: string
          description: Legal name of the company (dénomination sociale)
          example: Acme Corporation SARL
        company_type:
          type: string
          description: Type of company (e.g., SARL, SAS, SA)
          example: SARL
        company_registration_id:
          type: string
          description: SIREN number (French company registration ID)
          example: '123456789'
        siret:
          type: string
          description: SIRET number (French business identification)
          example: '12345678901234'
        vat_number:
          type: string
          description: VAT number (numéro de TVA)
          example: FR12345678901
        rcs_number:
          type: string
          description: RCS registration number
          example: Paris B 123 456 789
        sector:
          type: string
          description: Business sector or industry
          example: Technology
        address_line_1:
          type: string
          description: Company address line 1
          example: 123 Main Street
        address_line_2:
          type: string
          description: Company address line 2 (building, floor, etc.)
          example: Building A, 3rd Floor
        postal_code:
          type: string
          description: Postal/ZIP code
          example: '75001'
        city:
          type: string
          description: City name
          example: Paris
        country:
          type: string
          description: Country name
          example: France
        billing_address_line_1:
          type: string
          description: Billing address line 1
          example: 456 Billing Ave
        billing_address_line_2:
          type: string
          description: Billing address line 2
          example: Suite 100
        billing_postal_code:
          type: string
          description: Billing postal/ZIP code
          example: '75002'
        billing_city:
          type: string
          description: Billing city
          example: Paris
        billing_country:
          type: string
          description: Billing country
          example: France
        custom_fields:
          type: object
          description: >-
            Custom field values for the company. Keys are field codes (format:
            'custom_XXXXXXXXXXX') retrieved from GET /fields. Required custom
            fields (isRequiredInBO=true) must be provided.
          additionalProperties:
            type: string
          example:
            custom_u1v2w3x4y5: 50-100
            custom_z6a7b8c9d0: IT-001
    Product:
      type: object
      required:
        - title
        - quantity
        - price_without_tax
        - vat
      properties:
        title:
          type: string
          description: Product or service name
          example: Conference Room Package
        description:
          type: string
          description: Product or service description (optional)
          example: Full day conference room rental with setup and cleanup
        quantity:
          type: integer
          description: Quantity of the product
          example: 2
          minimum: 1
        price_without_tax:
          type: integer
          description: >-
            Price in cents (centimes) without tax. NOT in euros/dollars.
            Example: €150.00 = 15000 cents, €35.50 = 3550 cents
          example: 15000
          minimum: 0
        vat:
          type: integer
          description: >-
            VAT rate in basis points (1/100th of a percent). NOT a percentage.
            Example: 20% = 2000, 10% = 1000, 5.5% = 550. Range: 0-10000 (0% to
            100%)
          example: 2000
          minimum: 0
          maximum: 10000
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Bearer authentication using your BookingShake API key. Retrieve your API
        key from Settings > Integrations in your BookingShake dashboard.

````