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

# Add a location to an Event

> Adds one location after the Event's existing locations and returns it with its `id`. Takes the same shape as an item of `locations` on `POST /v2/events`. Every existing location is kept as it is, including one this API version can't represent.

An Event can have one address and one conferencing location, either an integration or the organizer's default app; links can repeat. On a published Event, a new location can't change what guests who already registered are charged, and adding it emails the guests. If the Event changes while the location is being added, nothing is saved and 409 is returned.

The authenticated user must be its owner, one of its hosts, an accepted co-host, or a member of the owning team; an accepted co-host can only add a free location. PBAC permission for team events: `calEvent.update`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. If accessed using an OAuth access token, the `EVENT_WRITE` scope is required.



## OpenAPI

````yaml /api-reference/v2/openapi.json post /v2/events/{uuid}/locations
openapi: 3.0.0
info:
  title: Cal.com API v2
  description: ''
  version: 1.0.0
  contact: {}
servers: []
security: []
tags: []
paths:
  /v2/events/{uuid}/locations:
    post:
      tags:
        - Events
      summary: Add a location to an Event
      description: >-
        Adds one location after the Event's existing locations and returns it
        with its `id`. Takes the same shape as an item of `locations` on `POST
        /v2/events`. Every existing location is kept as it is, including one
        this API version can't represent.


        An Event can have one address and one conferencing location, either an
        integration or the organizer's default app; links can repeat. On a
        published Event, a new location can't change what guests who already
        registered are charged, and adding it emails the guests. If the Event
        changes while the location is being added, nothing is saved and 409 is
        returned.


        The authenticated user must be its owner, one of its hosts, an accepted
        co-host, or a member of the owning team; an accepted co-host can only
        add a free location. PBAC permission for team events: `calEvent.update`.
        Learn more about API access control at
        https://cal.com/docs/api-reference/v2/access-control. If accessed using
        an OAuth access token, the `EVENT_WRITE` scope is required.
      operationId: EventLocationsController_add
      parameters:
        - name: uuid
          required: true
          in: path
          description: >-
            Event UUID. Accepts the canonical UUID (e.g.
            `018ff5cd-6dc4-7d57-bcbc-374702ca8b38`) or its short-uuid (Flickr
            Base58) form (e.g. `1cbZYoAFoJdwqN4tixezd5`).
          schema:
            type: string
            format: uuid
        - name: Authorization
          in: header
          description: >-
            value must be `Bearer <token>` where `<token>` is api key prefixed
            with cal_, managed user access token, or OAuth access token
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/EventAddressLocationInput'
                  title: Address
                - $ref: '#/components/schemas/EventLinkLocationInput'
                  title: Link
                - $ref: '#/components/schemas/EventIntegrationLocationInput'
                  title: Integration
                - $ref: '#/components/schemas/EventOrganizersDefaultAppLocationInput'
                  title: Organizer Default App
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventLocationOutputResponseDto'
        '400':
          description: >-
            Invalid Event UUID, an invalid location, a second address or
            conferencing location, a price that changes what registered guests
            are charged, or a cancelled Event
        '401':
          description: Unauthenticated
        '403':
          description: Insufficient permissions, or a co-host adding a priced location
        '404':
          description: Event not found
        '409':
          description: The Event changed while the location was being saved
components:
  schemas:
    EventAddressLocationInput:
      type: object
      properties:
        label:
          type: string
          description: Name shown for this location.
          maxLength: 100
        price:
          type: number
          minimum: 1
          description: Price for this location, in the currency's smallest unit.
          example: 1500
        currency:
          enum:
            - usd
            - eur
            - gbp
            - cad
            - aud
            - chf
            - nzd
            - jpy
            - brl
            - mxn
            - inr
            - sgd
            - hkd
            - dkk
            - nok
            - sek
            - pln
            - czk
            - huf
            - ron
            - bgn
            - krw
            - thb
            - php
            - myr
            - idr
            - try
            - zar
            - aed
            - cop
          type: string
          description: Cal Pay currency code. Required when `price` is set.
          example: usd
        capacity:
          type: number
          minimum: 1
          description: >-
            Seats at this location. Omit for unlimited. All locations together
            can have at most 100000 seats.
          maximum: 100000
        type:
          type: string
          example: address
          enum:
            - address
        address:
          type: string
          minLength: 1
          example: 1 Example Street, Berlin
      required:
        - type
        - address
    EventLinkLocationInput:
      type: object
      properties:
        label:
          type: string
          description: Name shown for this location.
          maxLength: 100
        price:
          type: number
          minimum: 1
          description: Price for this location, in the currency's smallest unit.
          example: 1500
        currency:
          enum:
            - usd
            - eur
            - gbp
            - cad
            - aud
            - chf
            - nzd
            - jpy
            - brl
            - mxn
            - inr
            - sgd
            - hkd
            - dkk
            - nok
            - sek
            - pln
            - czk
            - huf
            - ron
            - bgn
            - krw
            - thb
            - php
            - myr
            - idr
            - try
            - zar
            - aed
            - cop
          type: string
          description: Cal Pay currency code. Required when `price` is set.
          example: usd
        capacity:
          type: number
          minimum: 1
          description: >-
            Seats at this location. Omit for unlimited. All locations together
            can have at most 100000 seats.
          maximum: 100000
        type:
          type: string
          example: link
          enum:
            - link
        link:
          type: string
          format: uri
          example: https://example.com/watch
      required:
        - type
        - link
    EventIntegrationLocationInput:
      type: object
      properties:
        label:
          type: string
          description: Name shown for this location.
          maxLength: 100
        price:
          type: number
          minimum: 1
          description: Price for this location, in the currency's smallest unit.
          example: 1500
        currency:
          enum:
            - usd
            - eur
            - gbp
            - cad
            - aud
            - chf
            - nzd
            - jpy
            - brl
            - mxn
            - inr
            - sgd
            - hkd
            - dkk
            - nok
            - sek
            - pln
            - czk
            - huf
            - ron
            - bgn
            - krw
            - thb
            - php
            - myr
            - idr
            - try
            - zar
            - aed
            - cop
          type: string
          description: Cal Pay currency code. Required when `price` is set.
          example: usd
        capacity:
          type: number
          minimum: 1
          description: >-
            Seats at this location. Omit for unlimited. All locations together
            can have at most 100000 seats.
          maximum: 100000
        type:
          type: string
          example: integration
          enum:
            - integration
        integration:
          enum:
            - cal-video
            - google-meet
            - zoom
            - whereby-video
            - whatsapp-video
            - webex-video
            - telegram-video
            - tandem
            - sylaps-video
            - skype-video
            - sirius-video
            - signal-video
            - shimmer-video
            - salesroom-video
            - roam-video
            - riverside-video
            - ping-video
            - office365-video
            - mirotalk-video
            - jitsi
            - jelly-video
            - jelly-conferencing
            - huddle
            - facetime-video
            - element-call-video
            - eightxeight-video
            - discord-video
            - demodesk-video
            - campfire-video
          type: string
          example: cal-video
        credentialId:
          type: number
          description: >-
            Identifies which connected account will host the Event when a host
            has multiple connected accounts.
      required:
        - type
        - integration
    EventOrganizersDefaultAppLocationInput:
      type: object
      properties:
        label:
          type: string
          description: Name shown for this location.
          maxLength: 100
        price:
          type: number
          minimum: 1
          description: Price for this location, in the currency's smallest unit.
          example: 1500
        currency:
          enum:
            - usd
            - eur
            - gbp
            - cad
            - aud
            - chf
            - nzd
            - jpy
            - brl
            - mxn
            - inr
            - sgd
            - hkd
            - dkk
            - nok
            - sek
            - pln
            - czk
            - huf
            - ron
            - bgn
            - krw
            - thb
            - php
            - myr
            - idr
            - try
            - zar
            - aed
            - cop
          type: string
          description: Cal Pay currency code. Required when `price` is set.
          example: usd
        capacity:
          type: number
          minimum: 1
          description: >-
            Seats at this location. Omit for unlimited. All locations together
            can have at most 100000 seats.
          maximum: 100000
        type:
          type: string
          example: organizersDefaultApp
          enum:
            - organizersDefaultApp
      required:
        - type
    EventLocationOutputResponseDto:
      type: object
      properties:
        status:
          enum:
            - success
            - error
          type: string
          example: success
        data:
          oneOf:
            - $ref: '#/components/schemas/EventAddressLocationOutput'
              title: Address
            - $ref: '#/components/schemas/EventLinkLocationOutput'
              title: Link
            - $ref: '#/components/schemas/EventIntegrationLocationOutput'
              title: Integration
            - $ref: '#/components/schemas/EventOrganizersDefaultAppLocationOutput'
              title: Organizer Default App
      required:
        - status
        - data
    EventAddressLocationOutput:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier of this location. Pass it to `PATCH` or `DELETE
            /v2/events/{uuid}/locations/{locationId}` to edit or remove this
            location.
        label:
          type: string
          description: Name shown for this location.
          maxLength: 100
        price:
          type: number
          nullable: true
          example: 2500
          description: >-
            Price a guest who picks this location pays, in the currency's
            smallest unit. null when the location is free.
        currency:
          type: string
          nullable: true
          example: usd
          description: Currency of price. null when the location is free.
        capacity:
          type: number
          description: Seats at this location. Absent when unlimited.
          minimum: 1
          maximum: 100000
        type:
          type: string
          example: address
          enum:
            - address
        address:
          type: string
          example: 123 Event Street
      required:
        - id
        - price
        - currency
        - type
        - address
    EventLinkLocationOutput:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier of this location. Pass it to `PATCH` or `DELETE
            /v2/events/{uuid}/locations/{locationId}` to edit or remove this
            location.
        label:
          type: string
          description: Name shown for this location.
          maxLength: 100
        price:
          type: number
          nullable: true
          example: 2500
          description: >-
            Price a guest who picks this location pays, in the currency's
            smallest unit. null when the location is free.
        currency:
          type: string
          nullable: true
          example: usd
          description: Currency of price. null when the location is free.
        capacity:
          type: number
          description: Seats at this location. Absent when unlimited.
          minimum: 1
          maximum: 100000
        type:
          type: string
          example: link
          enum:
            - link
        link:
          type: string
          example: https://example.com/event
      required:
        - id
        - price
        - currency
        - type
        - link
    EventIntegrationLocationOutput:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier of this location. Pass it to `PATCH` or `DELETE
            /v2/events/{uuid}/locations/{locationId}` to edit or remove this
            location.
        label:
          type: string
          description: Name shown for this location.
          maxLength: 100
        price:
          type: number
          nullable: true
          example: 2500
          description: >-
            Price a guest who picks this location pays, in the currency's
            smallest unit. null when the location is free.
        currency:
          type: string
          nullable: true
          example: usd
          description: Currency of price. null when the location is free.
        capacity:
          type: number
          description: Seats at this location. Absent when unlimited.
          minimum: 1
          maximum: 100000
        type:
          type: string
          example: integration
          enum:
            - integration
        integration:
          type: string
          description: >-
            The integration's API name, e.g. `zoom` or `google-meet`. An app
            without an API name is returned with its stored type, e.g.
            `integrations:dialpad_video`.
          example: zoom
        credentialId:
          type: number
          description: >-
            Identifies which connected account will host the Event when a host
            has multiple connected accounts.
      required:
        - id
        - price
        - currency
        - type
        - integration
    EventOrganizersDefaultAppLocationOutput:
      type: object
      properties:
        id:
          type: string
          description: >-
            Identifier of this location. Pass it to `PATCH` or `DELETE
            /v2/events/{uuid}/locations/{locationId}` to edit or remove this
            location.
        label:
          type: string
          description: Name shown for this location.
          maxLength: 100
        price:
          type: number
          nullable: true
          example: 2500
          description: >-
            Price a guest who picks this location pays, in the currency's
            smallest unit. null when the location is free.
        currency:
          type: string
          nullable: true
          example: usd
          description: Currency of price. null when the location is free.
        capacity:
          type: number
          description: Seats at this location. Absent when unlimited.
          minimum: 1
          maximum: 100000
        type:
          type: string
          example: organizersDefaultApp
          enum:
            - organizersDefaultApp
      required:
        - id
        - price
        - currency
        - type

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.