openapi: 3.1.0 info: title: Luma Calendars API version: 1.0.0 description: 'API for interacting with Luma''s event platform. ## Rate Limits The Luma API uses a per-minute rate limit shared across `GET` and `POST` requests: - **Calendar API keys** and OAuth tokens: **200 requests/minute** per calendar. - **Organization API keys**: **500 requests/minute** per organization. When you exceed the limit the API returns `429 Too Many Requests`. Back off before retrying.' contact: name: Luma Support url: https://help.luma.com license: name: Proprietary servers: - url: https://public-api.luma.com description: Production server security: - apiKeyAuth: [] tags: - name: Calendars paths: /v1/calendars/get: get: tags: - Calendars summary: Get Calendar parameters: [] description: Get information about the calendar. responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: id: type: string name: type: string slug: anyOf: - type: string - type: 'null' avatar_url: anyOf: - type: string - type: 'null' url: type: string description: anyOf: - type: string - type: 'null' social_image_url: anyOf: - type: string - type: 'null' cover_image_url: anyOf: - type: string - type: 'null' is_personal: type: boolean location: anyOf: - type: object properties: city: type: string description: City name, e.g. 'New York'. region: anyOf: - type: string - type: 'null' description: State or province, e.g. 'New York' or 'California'. country: anyOf: - type: string - type: 'null' description: Country name, e.g. 'United States'. Null for cities in disputed territories where Google omits the country. country_code: anyOf: - type: string - type: 'null' description: ISO 3166-1 alpha-2 country code, e.g. 'US'. timezone: type: string description: IANA timezone of the city, e.g. 'America/New_York'. required: - city - region - country - country_code - timezone - type: 'null' description: City the calendar is based in (e.g. for city calendars). Null when the calendar isn't tied to a place. coordinate: anyOf: - type: object properties: longitude: type: number latitude: type: number required: - longitude - latitude - type: 'null' description: Latitude and longitude of the calendar's primary location (e.g. city calendars). Null when the calendar isn't tied to a place. instagram_handle: anyOf: - type: string - type: 'null' twitter_handle: anyOf: - type: string - type: 'null' youtube_handle: anyOf: - type: string - type: 'null' website: anyOf: - type: string - type: 'null' required: - id - name - slug - avatar_url - url - description - social_image_url - cover_image_url - is_personal - location - coordinate - instagram_handle - twitter_handle - youtube_handle - website /v1/calendars/events/list: get: tags: - Calendars summary: List Events parameters: - name: before in: query required: false schema: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - name: after in: query required: false schema: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - name: pagination_cursor in: query required: false schema: description: Value of `next_cursor` from a previous request. type: string description: Value of `next_cursor` from a previous request. - name: pagination_limit in: query required: false schema: description: The number of items to return. The server will enforce a maximum number. type: number description: The number of items to return. The server will enforce a maximum number. - name: platforms in: query required: false schema: description: Which event platforms to include. Defaults to `luma` for backwards compatibility. Pass as repeated query params, e.g. `?platforms=luma&platforms=external`. type: array items: type: string enum: - luma - external description: Which event platforms to include. Defaults to `luma` for backwards compatibility. Pass as repeated query params, e.g. `?platforms=luma&platforms=external`. - name: sort_column in: query required: false schema: type: string enum: - start_at - name: sort_direction in: query required: false schema: type: string enum: - asc - desc - asc nulls last - desc nulls last - name: status in: query required: false schema: description: Filter by calendar submission status. Defaults to `approved`. type: string enum: - approved - pending description: Filter by calendar submission status. Defaults to `approved`. description: 'Every event and API key on Luma is managed by a [Luma Calendar](https://help.luma.com/p/luma-calendar-overview). You can list all of the events managed by your Calendar by using this API route. Note that this API route will not list events that are listed on the Calendar but not managed by the Calendar.' responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: entries: type: array items: allOf: - oneOf: - type: object properties: platform: type: string const: luma id: type: string user_id: type: string calendar_id: type: string start_at: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z duration_interval: type: string end_at: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z created_at: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z timezone: type: string description: IANA Timezone, e.g. America/New_York. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones name: type: string description: type: string description_md: type: string geo_address_json: anyOf: - type: object properties: address: type: string city: anyOf: - type: string - type: 'null' region: anyOf: - type: string - type: 'null' country: anyOf: - type: string - type: 'null' city_state: anyOf: - type: string - type: 'null' full_address: anyOf: - type: string - type: 'null' google_maps_place_id: anyOf: - type: string - type: 'null' apple_maps_place_id: anyOf: - type: string - type: 'null' description: anyOf: - type: string - type: 'null' required: - address - city - region - country - city_state - full_address - google_maps_place_id - apple_maps_place_id - description - type: 'null' coordinate: anyOf: - type: object properties: longitude: type: number latitude: type: number required: - longitude - latitude - type: 'null' description: Latitude and longitude of the event location. Null for online events or when the address can't be geocoded. meeting_url: anyOf: - type: string - type: 'null' location_type: type: string enum: - discord - meet - twitch - twitter - youtube - zoom - offline - missing - unknown description: '`offline` for in-person events. Online events have the meeting platform (`zoom`, `meet`, etc.), or `unknown` if we don''t recognize the meeting link. `missing` if the event has no location set.' location_visibility: type: string enum: - public - guests-only description: Whether the event's address is shown to everyone or only to approved guests. This API always returns the full address. cover_url: type: string registration_questions: type: array items: anyOf: - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: agree-check required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: company collect_job_title: anyOf: - type: boolean - type: 'null' job_title_label: anyOf: - type: string - type: 'null' required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: dropdown options: maxItems: 250 type: array items: type: string required: - id - label - required - question_type - options - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: github required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: instagram required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: linkedin required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: long-text required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: multi-select options: maxItems: 250 type: array items: type: string required: - id - label - required - question_type - options - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: phone-number required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: telegram required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: text required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: twitter required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: url required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: youtube required: - id - label - required - question_type - type: object properties: id: type: string label: type: string required: type: boolean question_type: type: string const: terms terms: oneOf: - type: object properties: content_type: type: string const: text content_md: type: string description: Markdown content for the terms. Luma converts this to rich text internally. collect_signature: type: boolean require_review: description: When true, guests must open the hosted terms before accepting. type: boolean required: - content_type - content_md - collect_signature - type: object properties: content_type: type: string const: link url: type: string format: uri collect_signature: type: boolean required: - content_type - url - collect_signature required: - id - label - required - question_type - terms url: type: string visibility: type: string enum: - public - members-only - private waitlist_status: type: string enum: - disabled - enabled description: '`enabled` if the event has a waitlist. New registrations join the waitlist once the event reaches capacity.' feedback_email: type: object properties: enabled: type: boolean description: Whether to send the feedback email. delay: description: How long after the event ends to send the feedback email. Defaults to PT0M (immediately). Maximum is P7D (7 days). type: string required: - enabled description: Settings for the post-event feedback email sent to guests. required: - platform - id - user_id - calendar_id - start_at - duration_interval - end_at - created_at - timezone - name - description - description_md - geo_address_json - coordinate - meeting_url - location_type - location_visibility - cover_url - url - visibility - waitlist_status - feedback_email - type: object properties: platform: type: string const: external id: type: string calendar_id: type: string start_at: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z duration_interval: type: string end_at: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z created_at: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z timezone: type: string description: IANA Timezone, e.g. America/New_York. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones name: type: string geo_address_json: anyOf: - type: object properties: address: type: string city: anyOf: - type: string - type: 'null' region: anyOf: - type: string - type: 'null' country: anyOf: - type: string - type: 'null' city_state: anyOf: - type: string - type: 'null' full_address: anyOf: - type: string - type: 'null' google_maps_place_id: anyOf: - type: string - type: 'null' apple_maps_place_id: anyOf: - type: string - type: 'null' description: anyOf: - type: string - type: 'null' required: - address - city - region - country - city_state - full_address - google_maps_place_id - apple_maps_place_id - description - type: 'null' coordinate: anyOf: - type: object properties: longitude: type: number latitude: type: number required: - longitude - latitude - type: 'null' description: Latitude and longitude of the event location. Null for online events or when the address can't be geocoded. url: type: string host: anyOf: - type: string - type: 'null' required: - platform - id - calendar_id - start_at - duration_interval - end_at - created_at - timezone - name - geo_address_json - coordinate - url - host - type: object properties: tags: type: array items: type: object properties: id: type: string name: type: string required: - id - name required: - tags has_more: type: boolean next_cursor: type: string required: - entries - has_more /v1/calendars/contact-tags/list: get: tags: - Calendars summary: List Contact Tags parameters: [] responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: entries: type: array items: type: object properties: id: type: string name: type: string color: type: string required: - id - name - color has_more: type: boolean required: - entries - has_more /v1/calendars/event-tags/list: get: tags: - Calendars summary: List Event Tags parameters: [] responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: entries: type: array items: type: object properties: id: type: string name: type: string color: type: string required: - id - name - color has_more: type: boolean required: - entries - has_more /v1/calendar/admins/list: get: tags: - Calendars summary: List Calendar Admins parameters: [] description: List all admins for the calendar. responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: entries: type: array items: type: object properties: id: type: string name: anyOf: - type: string - type: 'null' avatar_url: type: string email: type: string first_name: anyOf: - type: string - type: 'null' last_name: anyOf: - type: string - type: 'null' api_id: type: string deprecated: true description: Use `id` instead. required: - id - name - avatar_url - email - first_name - last_name - api_id required: - entries /v1/calendar/lookup-event: get: tags: - Calendars summary: Lookup Event parameters: - name: platform in: query required: false schema: type: string enum: - external - luma - name: url in: query required: false schema: type: string - name: event_id in: query required: false schema: description: Event ID, this usually starts with evt- type: string description: Event ID, this usually starts with evt- - name: event_api_id in: query required: false schema: deprecated: true description: Use `event_id` instead. type: string description: Use `event_id` instead. description: See if an event already exists on the calendar. This is useful when figuring out if you want to submit an event to the calendar. responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event: anyOf: - type: object properties: id: type: string api_id: type: string deprecated: true description: Use `id` instead. status: type: string enum: - approved - pending - rejected required: - id - api_id - status - type: 'null' required: - event /v1/calendars/contacts/list: get: tags: - Calendars summary: List Contacts parameters: - name: query in: query required: false schema: description: Search over names and emails. anyOf: - type: string - type: 'null' description: Search over names and emails. - name: tags in: query required: false schema: description: Tag names or tag IDs to filter contacts. Pass as repeated query params, e.g. `?tags=vip&tags=sponsor`. Returns contacts who have any of the specified tags. anyOf: - type: array items: type: string - type: 'null' description: Tag names or tag IDs to filter contacts. Pass as repeated query params, e.g. `?tags=vip&tags=sponsor`. Returns contacts who have any of the specified tags. - name: calendar_membership_tier_id in: query required: false schema: anyOf: - type: string - type: 'null' - name: membership_status in: query required: false schema: description: This is relevant for Calendar Memberships but not relevant otherwise. anyOf: - type: string enum: - approved - pending - approved-pending-payment - declined - type: 'null' description: This is relevant for Calendar Memberships but not relevant otherwise. - name: pagination_cursor in: query required: false schema: description: Value of `next_cursor` from a previous request. type: string description: Value of `next_cursor` from a previous request. - name: pagination_limit in: query required: false schema: description: The number of items to return. The server will enforce a maximum number. type: number description: The number of items to return. The server will enforce a maximum number. - name: sort_column in: query required: false schema: type: string enum: - created_at - event_checked_in_count - event_approved_count - name - revenue_usd_cents - name: sort_direction in: query required: false schema: type: string enum: - asc - desc - asc nulls last - desc nulls last responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: entries: type: array items: type: object properties: id: type: string user_id: type: string created_at: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z event_approved_count: type: number event_checked_in_count: type: number revenue_usd_cents: type: number tags: type: array items: type: object properties: id: type: string name: type: string required: - id - name membership: anyOf: - type: object properties: status: type: string enum: - approved - pending - approved-pending-payment - declined calendar_membership_tier_id: anyOf: - type: string - type: 'null' required: - status - calendar_membership_tier_id - type: 'null' name: anyOf: - type: string - type: 'null' avatar_url: type: string email: type: string first_name: anyOf: - type: string - type: 'null' last_name: anyOf: - type: string - type: 'null' required: - id - user_id - created_at - event_approved_count - event_checked_in_count - revenue_usd_cents - tags - membership - name - avatar_url - email - first_name - last_name has_more: type: boolean next_cursor: type: string required: - entries - has_more /v1/calendars/coupons/list: get: tags: - Calendars summary: List Calendar Coupons parameters: - name: pagination_cursor in: query required: false schema: description: Value of `next_cursor` from a previous request. type: string description: Value of `next_cursor` from a previous request. - name: pagination_limit in: query required: false schema: description: The number of items to return. The server will enforce a maximum number. type: number description: The number of items to return. The server will enforce a maximum number. description: List all coupons that have been created for a calendar. responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: entries: type: array items: type: object properties: id: type: string code: type: string description: This code is case insensitive. remaining_count: type: integer minimum: -9007199254740991 maximum: 9007199254740991 valid_start_at: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - type: 'null' valid_end_at: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - type: 'null' percent_off: anyOf: - type: number - type: 'null' cents_off: anyOf: - type: number - type: 'null' currency: anyOf: - type: string enum: - solana_sol - solana_usdc - aed - afn - all - amd - ang - aoa - ars - aud - awg - azn - bam - bbd - bdt - bgn - bhd - bif - bmd - bnd - bob - brl - bsd - bwp - byn - bzd - cad - cdf - chf - clp - cny - cop - crc - cve - czk - djf - dkk - dop - dzd - egp - etb - eur - fjd - fkp - gbp - gel - ghs - gip - gmd - gnf - gtq - gyd - hkd - hnl - htg - huf - idr - ils - inr - isk - jmd - jod - jpy - kes - kgs - khr - kmf - krw - kwd - kyd - kzt - lak - lbp - lkr - lrd - lsl - mad - mdl - mga - mkd - mmk - mnt - mop - mur - mvr - mwk - mxn - myr - mzn - nad - ngn - nio - nok - npr - nzd - omr - pab - pen - pgk - php - pkr - pln - pyg - qar - ron - rsd - rub - rwf - sar - sbd - scr - sek - sgd - shp - sle - sos - srd - std - szl - thb - tjs - tnd - top - try - ttd - twd - tzs - uah - ugx - usd - uyu - uzs - vnd - vuv - wst - xaf - xcd - xof - xpf - yer - zar - zmw - type: 'null' event_ticket_type_id: description: The ticket type this coupon is restricted to, if any. Set for unlock (access) codes that reveal a hidden ticket type. anyOf: - type: string - type: 'null' required: - id - code - remaining_count - valid_start_at - valid_end_at - percent_off - cents_off - currency has_more: type: boolean next_cursor: type: string required: - entries - has_more /v1/calendars/coupons/create: post: tags: - Calendars summary: Create Coupon description: Create a coupon that can be applied to any event that is managed by the calendar. Be careful not to have the same code on an event and on the calendar. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: code: type: string minLength: 1 maxLength: 20 description: This is the code that the user will enter on the event page. It is not case sensitive. Maximum 20 characters. remaining_count: description: Number of times the coupon can be used. Set to 1000000 for unlimited uses. type: integer minimum: 0 maximum: 1000000 valid_start_at: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - type: 'null' valid_end_at: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - type: 'null' discount: oneOf: - type: object properties: discount_type: type: string const: percent percent_off: type: number minimum: 0 maximum: 100 required: - discount_type - percent_off - type: object properties: discount_type: type: string const: amount cents_off: type: number minimum: 0 currency: type: string enum: - solana_sol - solana_usdc - aed - afn - all - amd - ang - aoa - ars - aud - awg - azn - bam - bbd - bdt - bgn - bhd - bif - bmd - bnd - bob - brl - bsd - bwp - byn - bzd - cad - cdf - chf - clp - cny - cop - crc - cve - czk - djf - dkk - dop - dzd - egp - etb - eur - fjd - fkp - gbp - gel - ghs - gip - gmd - gnf - gtq - gyd - hkd - hnl - htg - huf - idr - ils - inr - isk - jmd - jod - jpy - kes - kgs - khr - kmf - krw - kwd - kyd - kzt - lak - lbp - lkr - lrd - lsl - mad - mdl - mga - mkd - mmk - mnt - mop - mur - mvr - mwk - mxn - myr - mzn - nad - ngn - nio - nok - npr - nzd - omr - pab - pen - pgk - php - pkr - pln - pyg - qar - ron - rsd - rub - rwf - sar - sbd - scr - sek - sgd - shp - sle - sos - srd - std - szl - thb - tjs - tnd - top - try - ttd - twd - tzs - uah - ugx - usd - uyu - uzs - vnd - vuv - wst - xaf - xcd - xof - xpf - yer - zar - zmw required: - discount_type - cents_off - currency required: - code - discount responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: id: type: string code: type: string description: This code is case insensitive. remaining_count: type: integer minimum: -9007199254740991 maximum: 9007199254740991 valid_start_at: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - type: 'null' valid_end_at: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - type: 'null' percent_off: anyOf: - type: number - type: 'null' cents_off: anyOf: - type: number - type: 'null' currency: anyOf: - type: string enum: - solana_sol - solana_usdc - aed - afn - all - amd - ang - aoa - ars - aud - awg - azn - bam - bbd - bdt - bgn - bhd - bif - bmd - bnd - bob - brl - bsd - bwp - byn - bzd - cad - cdf - chf - clp - cny - cop - crc - cve - czk - djf - dkk - dop - dzd - egp - etb - eur - fjd - fkp - gbp - gel - ghs - gip - gmd - gnf - gtq - gyd - hkd - hnl - htg - huf - idr - ils - inr - isk - jmd - jod - jpy - kes - kgs - khr - kmf - krw - kwd - kyd - kzt - lak - lbp - lkr - lrd - lsl - mad - mdl - mga - mkd - mmk - mnt - mop - mur - mvr - mwk - mxn - myr - mzn - nad - ngn - nio - nok - npr - nzd - omr - pab - pen - pgk - php - pkr - pln - pyg - qar - ron - rsd - rub - rwf - sar - sbd - scr - sek - sgd - shp - sle - sos - srd - std - szl - thb - tjs - tnd - top - try - ttd - twd - tzs - uah - ugx - usd - uyu - uzs - vnd - vuv - wst - xaf - xcd - xof - xpf - yer - zar - zmw - type: 'null' event_ticket_type_id: description: The ticket type this coupon is restricted to, if any. Set for unlock (access) codes that reveal a hidden ticket type. anyOf: - type: string - type: 'null' required: - id - code - remaining_count - valid_start_at - valid_end_at - percent_off - cents_off - currency /v1/calendars/coupons/update: post: tags: - Calendars summary: Update Coupon requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: code: type: string remaining_count: type: integer minimum: -9007199254740991 maximum: 9007199254740991 valid_start_at: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - type: 'null' valid_end_at: anyOf: - type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z - type: 'null' required: - code responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/calendars/contacts/import: post: tags: - Calendars summary: Import Contacts description: Import contacts to your calendar to easily invite them to events and send them newsletters. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: contacts: type: array items: type: object properties: email: type: string name: anyOf: - type: string - type: 'null' required: - email description: Information about the contacts you want to import. You can include a name and email. Note that we will not set the name of a user once it has already been set. tags: description: Tag IDs or tag names to apply to the contacts. anyOf: - type: array items: type: string - type: 'null' required: - contacts responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/calendars/contact-tags/create: post: tags: - Calendars summary: Create Contact Tag requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: name: type: string color: anyOf: - type: string enum: - cranberry - barney - red - green - blue - purple - yellow - orange - type: 'null' required: - name responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: id: type: string description: Tag ID, this usually starts with tag- required: - id /v1/calendars/contact-tags/update: post: tags: - Calendars summary: Update Contact Tag requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: tag_id: type: string description: Tag ID, this usually starts with tag- name: type: string color: type: string enum: - cranberry - barney - red - green - blue - purple - yellow - orange required: - tag_id responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/calendars/contact-tags/delete: post: tags: - Calendars summary: Delete Contact Tag requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: tag_id: type: string description: Tag ID, this usually starts with tag- required: - tag_id responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/calendars/contact-tags/apply: post: tags: - Calendars summary: Apply Contact Tag description: Apply a tag to existing calendar contacts. This will not create new contacts. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: tag: type: string description: Tag ID (e.g., 'tag-123') or tag name user_ids: description: Array of user IDs to apply the tag to type: array items: type: string emails: description: Array of email addresses to apply the tag to type: array items: type: string required: - tag responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: applied_count: type: number description: Number of contacts the tag was successfully applied to skipped_count: type: number description: Number of users skipped because they are not calendar contacts required: - applied_count - skipped_count /v1/calendars/contact-tags/unapply: post: tags: - Calendars summary: Unapply Contact Tag description: Unapply a tag from calendar contacts. Only affects existing contacts. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: tag: type: string description: Tag ID (e.g., 'tag-123') or tag name user_ids: description: Array of user IDs to remove the tag from type: array items: type: string emails: description: Array of email addresses to remove the tag from type: array items: type: string required: - tag responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: removed_count: type: number description: Number of contacts the tag was successfully removed from skipped_count: type: number description: Number of users skipped because they are not calendar contacts required: - removed_count - skipped_count /v1/calendars/event-tags/create: post: tags: - Calendars summary: Create Event Tag requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: name: type: string color: anyOf: - type: string enum: - cranberry - barney - red - green - blue - purple - yellow - orange - type: 'null' required: - name responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: id: type: string description: Tag ID, this usually starts with tag- required: - id /v1/calendars/event-tags/update: post: tags: - Calendars summary: Update Event Tag requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: tag_id: type: string description: Tag ID, this usually starts with tag- name: type: string color: type: string enum: - cranberry - barney - red - green - blue - purple - yellow - orange required: - tag_id responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/calendars/event-tags/delete: post: tags: - Calendars summary: Delete Event Tag requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: tag_id: type: string description: Tag ID, this usually starts with tag- required: - tag_id responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/calendars/event-tags/apply: post: tags: - Calendars summary: Apply Event Tag description: Apply a tag to events on the calendar. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: tag: type: string description: Tag ID (e.g., 'tag-123') or tag name event_ids: minItems: 1 type: array items: type: string description: Array of event IDs to apply the tag to required: - tag - event_ids responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: applied_count: type: number description: Number of events the tag was successfully applied to skipped_count: type: number description: Number of events skipped because they are not on this calendar required: - applied_count - skipped_count /v1/calendars/event-tags/unapply: post: tags: - Calendars summary: Unapply Event Tag description: Unapply a tag from events on the calendar. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: tag: type: string description: Tag ID (e.g., 'tag-123') or tag name event_ids: minItems: 1 type: array items: type: string description: Array of event IDs to remove the tag from required: - tag - event_ids responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: removed_count: type: number description: Number of events the tag was successfully removed from skipped_count: type: number description: Number of events skipped because they are not on this calendar required: - removed_count - skipped_count /v1/calendar/add-event: post: tags: - Calendars summary: Add Event description: 'Add or submit an existing event (on Luma or on an external platform) to the Luma calendar. By default, events added by a calendar manager are approved immediately. Use `submission_mode: "pending"` to keep the submission pending. On calendars with `require-manage-access`, submitting a Luma event you manage can also grant the target calendar manage access once the submission is approved.' requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema oneOf: - type: object properties: platform: type: string const: external submission_mode: default: auto description: '`auto` approves the event immediately. `pending` keeps the event pending for calendar admin approval.' type: string enum: - auto - pending url: type: string name: type: string start_at: type: string format: date-time pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z duration_interval: type: string timezone: type: string description: IANA Timezone, e.g. America/New_York. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones geo_address_json: anyOf: - oneOf: - type: object properties: type: type: string const: manual address: type: string required: - type - address - type: object properties: type: type: string const: google place_id: type: string description: anyOf: - type: string - type: 'null' required: - type - place_id - type: 'null' host: anyOf: - type: string - type: 'null' geo_longitude: anyOf: - type: number - type: 'null' geo_latitude: anyOf: - type: number - type: 'null' coordinate: anyOf: - type: object properties: longitude: type: number latitude: type: number required: - longitude - latitude - type: 'null' required: - platform - url - name - start_at - duration_interval - timezone - type: object properties: platform: type: string const: luma submission_mode: default: auto description: '`auto` approves the event immediately. `pending` keeps the event pending for calendar admin approval.' type: string enum: - auto - pending event_id: description: Event ID, this usually starts with evt- type: string event_api_id: deprecated: true description: Use `event_id` instead. type: string required: - platform responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: id: type: string api_id: type: string deprecated: true description: Use `id` instead. status: type: string enum: - approved - pending required: - id - api_id - status /v1/calendar/approve-event: post: tags: - Calendars summary: Approve Event description: Approve a pending event submission on your calendar. The event becomes visible on the calendar and the submitter is notified. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: calendar_event_id: type: string description: Calendar event ID (starts with `calev-`). You can also pass the Luma event ID (starts with `evt-`) — we'll resolve it to the active submission on your calendar. required: - calendar_event_id responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/calendar/reject-event: post: tags: - Calendars summary: Reject Event description: Reject a pending event submission on your calendar. If the event is still pending, the submitter is notified. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: calendar_event_id: type: string description: Calendar event ID (starts with `calev-`). You can also pass the Luma event ID (starts with `evt-`) — we'll resolve it to the active submission on your calendar. message: description: Optional message to send to the submitter explaining the rejection. type: string required: - calendar_event_id responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/calendars/update: post: tags: - Calendars summary: Update Calendar description: Update a calendar's settings. Only the provided fields are changed. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: calendar_id: type: string description: Calendar ID, this usually starts with cal-. name: description: Name of the calendar. type: string slug: description: URL slug for the calendar page (e.g. 'my-community' → lu.ma/my-community). type: string description: description: Short description of the calendar. type: string avatar_url: description: Specify an image that has been uploaded to the Luma CDN. type: string format: uri tint_color: description: Tint color for the calendar in hex format (e.g. '#E3CBEF'). type: string required: - calendar_id responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: id: type: string name: type: string slug: anyOf: - type: string - type: 'null' avatar_url: anyOf: - type: string - type: 'null' url: type: string description: anyOf: - type: string - type: 'null' social_image_url: anyOf: - type: string - type: 'null' cover_image_url: anyOf: - type: string - type: 'null' is_personal: type: boolean location: anyOf: - type: object properties: city: type: string description: City name, e.g. 'New York'. region: anyOf: - type: string - type: 'null' description: State or province, e.g. 'New York' or 'California'. country: anyOf: - type: string - type: 'null' description: Country name, e.g. 'United States'. Null for cities in disputed territories where Google omits the country. country_code: anyOf: - type: string - type: 'null' description: ISO 3166-1 alpha-2 country code, e.g. 'US'. timezone: type: string description: IANA timezone of the city, e.g. 'America/New_York'. required: - city - region - country - country_code - timezone - type: 'null' description: City the calendar is based in (e.g. for city calendars). Null when the calendar isn't tied to a place. coordinate: anyOf: - type: object properties: longitude: type: number latitude: type: number required: - longitude - latitude - type: 'null' description: Latitude and longitude of the calendar's primary location (e.g. city calendars). Null when the calendar isn't tied to a place. instagram_handle: anyOf: - type: string - type: 'null' twitter_handle: anyOf: - type: string - type: 'null' youtube_handle: anyOf: - type: string - type: 'null' website: anyOf: - type: string - type: 'null' required: - id - name - slug - avatar_url - url - description - social_image_url - cover_image_url - is_personal - location - coordinate - instagram_handle - twitter_handle - youtube_handle - website components: securitySchemes: apiKeyAuth: type: apiKey in: header name: x-luma-api-key description: API key to authenticate requests to the Luma API. Generate an API key on your Luma dashboard.