openapi: 3.1.0 info: title: Luma Calendars Events 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: Events paths: /v1/events/get: get: tags: - Events summary: Get Event parameters: - name: event_id in: query required: true schema: type: string description: Event ID, this usually starts with evt- description: Event ID, this usually starts with evt- description: Return admin information about an event that you have manage access for. responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema 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. hosts: type: array items: type: object properties: id: type: string email: type: string name: anyOf: - type: string - type: 'null' first_name: anyOf: - type: string - type: 'null' last_name: anyOf: - type: string - type: 'null' avatar_url: type: string required: - id - email - name - first_name - last_name - avatar_url 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 - hosts /v1/events/guests/get: get: tags: - Events summary: Get Guest parameters: - name: event_id in: query required: true schema: type: string description: Event ID, this usually starts with evt- description: Event ID, this usually starts with evt- - name: id in: query required: true schema: type: string description: Guest identifier — the guest ID (gst-), a ticket key, a guest key (g-), or the user's email. description: Guest identifier — the guest ID (gst-), a ticket key, a guest key (g-), or the user's email. description: 'Get detailed information for an event guest by looking them up by their ID. This supports looking them up by different parameters. This response includes `event_ticket_orders`, which includes `coupon_info` when a coupon was applied.' responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: id: type: string user_id: type: string user_email: type: string user_name: anyOf: - type: string - type: 'null' user_first_name: anyOf: - type: string - type: 'null' user_last_name: anyOf: - type: string - type: 'null' approval_status: type: string enum: - approved - session - pending_approval - invited - declined - waitlist check_in_qr_code: type: string eth_address: anyOf: - type: string pattern: ^0x[0-9a-fA-F]{40}$ - type: 'null' invited_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' description: When the guest was invited to the event. Null if they registered on their own. joined_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' description: When the guest first clicked the virtual join link (luma.com/join/...). Only set for online events. Null if the guest has not joined. phone_number: anyOf: - type: string - type: 'null' registered_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' description: When the guest registered for the event. registration_answers: anyOf: - type: array items: anyOf: - type: object properties: label: type: string question_id: type: string value: type: boolean answer: type: boolean question_type: type: string const: agree-check required: - label - question_id - question_type - type: object properties: label: type: string question_id: type: string value: type: object properties: company: anyOf: - type: string - type: 'null' job_title: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' answer_company: anyOf: - type: string - type: 'null' answer_job_title: anyOf: - type: string - type: 'null' question_type: type: string const: company required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' question_type: type: string const: dropdown required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: array items: type: string - type: 'null' answer: anyOf: - type: array items: type: string - type: 'null' question_type: type: string const: multi-select required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' question_type: type: string const: phone-number required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - anyOf: - type: string - type: boolean const: true - type: 'null' answer: anyOf: - anyOf: - type: string - type: boolean const: true - type: 'null' question_type: type: string const: terms required: - label - question_id - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' question_type: anyOf: - type: string const: github - type: string const: instagram - type: string const: linkedin - type: string const: long-text - type: string const: telegram - type: string const: text - type: string const: twitter - type: string const: youtube required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' question_type: type: string const: url required: - label - question_id - value - question_type - type: 'null' solana_address: anyOf: - type: string pattern: ^[5KL1-9A-HJ-NP-Za-km-z]{32,44}$ - type: 'null' utm_source: anyOf: - type: string - type: 'null' description: The UTM source parameter captured when the guest registered (from the `?utm_source=` query parameter). event_tickets: type: array items: type: object properties: id: type: string amount: type: number amount_discount: type: number amount_tax: type: number 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' checked_in_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' event_ticket_type_id: type: string is_captured: type: boolean name: type: string required: - id - amount - amount_discount - amount_tax - currency - checked_in_at - event_ticket_type_id - is_captured - name event_ticket_orders: type: array items: type: object properties: id: type: string amount: type: number amount_discount: type: number amount_tax: type: number 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' coupon_info: anyOf: - type: object properties: api_id: type: string 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' code: type: string required: - api_id - percent_off - cents_off - currency - code - type: 'null' description: The coupon that was applied to this ticket order, if any. is_captured: type: boolean required: - id - amount - amount_discount - amount_tax - currency - coupon_info - is_captured description: Detailed ticket orders for this guest. Use this to inspect applied coupon_info per order. required: - id - user_id - user_email - user_name - user_first_name - user_last_name - approval_status - check_in_qr_code - eth_address - invited_at - joined_at - phone_number - registered_at - registration_answers - solana_address - utm_source - event_tickets - event_ticket_orders /v1/events/guests/list: get: tags: - Events summary: List Guests parameters: - name: event_id in: query required: true schema: type: string description: Event ID, this usually starts with evt- description: Event ID, this usually starts with evt- - name: approval_status in: query required: false schema: type: string enum: - approved - session - pending_approval - invited - declined - waitlist - 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: - name - email - created_at - registered_at - checked_in_at - name: sort_direction in: query required: false schema: type: string enum: - asc - desc - asc nulls last - desc nulls last description: 'Get list of guests who have registered or been invited to an event. This list response includes guest summaries and `event_tickets`, but not order-level details like `event_ticket_orders`. Use `/v1/events/guests/get` when you need detailed ticket order data for a specific guest.' 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 user_email: type: string user_name: anyOf: - type: string - type: 'null' user_first_name: anyOf: - type: string - type: 'null' user_last_name: anyOf: - type: string - type: 'null' approval_status: type: string enum: - approved - session - pending_approval - invited - declined - waitlist check_in_qr_code: type: string eth_address: anyOf: - type: string pattern: ^0x[0-9a-fA-F]{40}$ - type: 'null' invited_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' description: When the guest was invited to the event. Null if they registered on their own. joined_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' description: When the guest first clicked the virtual join link (luma.com/join/...). Only set for online events. Null if the guest has not joined. phone_number: anyOf: - type: string - type: 'null' registered_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' description: When the guest registered for the event. registration_answers: anyOf: - type: array items: anyOf: - type: object properties: label: type: string question_id: type: string value: type: boolean answer: type: boolean question_type: type: string const: agree-check required: - label - question_id - question_type - type: object properties: label: type: string question_id: type: string value: type: object properties: company: anyOf: - type: string - type: 'null' job_title: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' answer_company: anyOf: - type: string - type: 'null' answer_job_title: anyOf: - type: string - type: 'null' question_type: type: string const: company required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' question_type: type: string const: dropdown required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: array items: type: string - type: 'null' answer: anyOf: - type: array items: type: string - type: 'null' question_type: type: string const: multi-select required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' question_type: type: string const: phone-number required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - anyOf: - type: string - type: boolean const: true - type: 'null' answer: anyOf: - anyOf: - type: string - type: boolean const: true - type: 'null' question_type: type: string const: terms required: - label - question_id - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' question_type: anyOf: - type: string const: github - type: string const: instagram - type: string const: linkedin - type: string const: long-text - type: string const: telegram - type: string const: text - type: string const: twitter - type: string const: youtube required: - label - question_id - value - question_type - type: object properties: label: type: string question_id: type: string value: anyOf: - type: string - type: 'null' answer: anyOf: - type: string - type: 'null' question_type: type: string const: url required: - label - question_id - value - question_type - type: 'null' solana_address: anyOf: - type: string pattern: ^[5KL1-9A-HJ-NP-Za-km-z]{32,44}$ - type: 'null' utm_source: anyOf: - type: string - type: 'null' description: The UTM source parameter captured when the guest registered (from the `?utm_source=` query parameter). event_tickets: type: array items: type: object properties: id: type: string amount: type: number amount_discount: type: number amount_tax: type: number 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' checked_in_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' event_ticket_type_id: type: string is_captured: type: boolean name: type: string required: - id - amount - amount_discount - amount_tax - currency - checked_in_at - event_ticket_type_id - is_captured - name required: - id - user_id - user_email - user_name - user_first_name - user_last_name - approval_status - check_in_qr_code - eth_address - invited_at - joined_at - phone_number - registered_at - registration_answers - solana_address - utm_source - event_tickets has_more: type: boolean next_cursor: type: string required: - entries - has_more /v1/events/coupons/list: get: tags: - Events summary: List Event Coupons parameters: - name: event_id in: query required: true schema: type: string description: Event ID, this usually starts with evt- description: Event ID, this usually starts with evt- - 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 an event. 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/events/ticket-types/list: get: tags: - Events summary: List Ticket Types parameters: - name: event_id in: query required: true schema: type: string description: Event ID, this usually starts with evt- description: Event ID, this usually starts with evt- - name: include_hidden in: query required: false schema: description: Include hidden ticket types type: string description: Include hidden ticket types description: List all ticket types for an event 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: name: type: string require_approval: type: boolean is_hidden: type: boolean description: anyOf: - type: string - type: 'null' valid_start_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' valid_end_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' max_capacity: anyOf: - type: number - type: 'null' type: type: string enum: - free - paid cents: anyOf: - type: number - type: 'null' currency: anyOf: - type: string - type: 'null' is_flexible: type: boolean min_cents: anyOf: - type: number - type: 'null' id: type: string required: - name - type - id required: - entries /v1/events/ticket-types/get: get: tags: - Events summary: Get Ticket Type parameters: - name: event_ticket_type_id in: query required: true schema: type: string description: Ticket type ID, this usually starts with ttype- description: Ticket type ID, this usually starts with ttype- description: Get a single ticket type by ID responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: name: type: string require_approval: type: boolean is_hidden: type: boolean description: anyOf: - type: string - type: 'null' valid_start_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' valid_end_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' max_capacity: anyOf: - type: number - type: 'null' type: type: string enum: - free - paid cents: anyOf: - type: number - type: 'null' currency: anyOf: - type: string - type: 'null' is_flexible: type: boolean min_cents: anyOf: - type: number - type: 'null' id: type: string required: - name - type - id /v1/events/create: post: tags: - Events summary: Create Event requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: can_register_for_multiple_tickets: type: boolean cover_url: type: string format: uri pattern: ^https:\/\/images\.lumacdn\.com\/.* description: Specify an image that has been uploaded to the Luma CDN. You can upload an image after getting an upload URL from the Luma API. coordinate: type: object properties: longitude: type: number latitude: type: number required: - longitude - latitude description_md: type: string description: Luma stores rich text in a special format called Spark. We don't expose an API for that format, but we can convert Markdown to Spark for you. Some Spark features, like Luma event embeds, are not supported by Markdown. Images are supported using standard markdown syntax (![alt](url)) — image URLs must be hosted on the Luma CDN (images.lumacdn.com). Upload images via the /v1/images/create-upload-url endpoint first. 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 geo_address_json: 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 max_capacity: description: 'Once an event hits the max capacity, the event will be marked as sold out and registration will automatically be closed. If `can_register_for_multiple_tickets` is `true`, each ticket will count towards the max capacity.' anyOf: - type: integer minimum: -9007199254740991 maximum: 9007199254740991 - type: 'null' meeting_url: type: string name: type: string name_requirement: type: string enum: - full-name - first-last description: Luma collects the name of every guest as they register. Choose if you'd like to split this into two fields to encourage guests to enter their first and last name. phone_number_requirement: anyOf: - type: string enum: - optional - required - type: 'null' 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 reminders_disabled: description: By default, Luma will send reminders before the event. Turn off if you'd like more control over event communications. type: boolean feedback_email: description: Settings for the post-event feedback email sent to guests. If not specified on create, inherits from calendar defaults. 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 show_guest_list: description: When the guest list is shown, approved guests will be able to see who else is going to the event. type: boolean slug: description: 'The URL slug for the event. If the slug is `aloha`, the URL will be `https://luma.com/aloha`. If the slug is not available, the event creation will fail. You can use `/public/v1/entity/lookup` to check if a slug is available.' type: string minLength: 3 maxLength: 50 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 timezone: type: string description: IANA Timezone, e.g. America/New_York. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones tint_color: description: 'A hex color like ''#bb2dc7''. Alpha channels (#rgba, #rrggbbaa) are automatically stripped.' type: string visibility: type: string enum: - public - members-only - private required: - name - start_at - timezone responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: id: type: string required: - id /v1/events/update: post: tags: - Events summary: Update Event requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- suppress_notifications: description: If true, Luma will not notify guests (via email or push notification) when updating the event name, time, or location. type: boolean can_register_for_multiple_tickets: type: boolean cover_url: type: string format: uri pattern: ^https:\/\/images\.lumacdn\.com\/.* description: Specify an image that has been uploaded to the Luma CDN. You can upload an image after getting an upload URL from the Luma API. coordinate: type: object properties: longitude: type: number latitude: type: number required: - longitude - latitude description_md: type: string description: Luma stores rich text in a special format called Spark. We don't expose an API for that format, but we can convert Markdown to Spark for you. Some Spark features, like Luma event embeds, are not supported by Markdown. Images are supported using standard markdown syntax (![alt](url)) — image URLs must be hosted on the Luma CDN (images.lumacdn.com). Upload images via the /v1/images/create-upload-url endpoint first. 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 geo_address_json: 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 max_capacity: description: 'Once an event hits the max capacity, the event will be marked as sold out and registration will automatically be closed. If `can_register_for_multiple_tickets` is `true`, each ticket will count towards the max capacity.' anyOf: - type: integer minimum: -9007199254740991 maximum: 9007199254740991 - type: 'null' meeting_url: type: string name: type: string name_requirement: type: string enum: - full-name - first-last description: Luma collects the name of every guest as they register. Choose if you'd like to split this into two fields to encourage guests to enter their first and last name. phone_number_requirement: anyOf: - type: string enum: - optional - required - type: 'null' 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 reminders_disabled: description: By default, Luma will send reminders before the event. Turn off if you'd like more control over event communications. type: boolean feedback_email: description: Settings for the post-event feedback email sent to guests. If not specified on create, inherits from calendar defaults. 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 show_guest_list: description: When the guest list is shown, approved guests will be able to see who else is going to the event. type: boolean slug: description: 'The URL slug for the event. If the slug is `aloha`, the URL will be `https://luma.com/aloha`. If the slug is not available, the event creation will fail. You can use `/public/v1/entity/lookup` to check if a slug is available.' type: string minLength: 3 maxLength: 50 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 timezone: type: string description: IANA Timezone, e.g. America/New_York. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones tint_color: description: 'A hex color like ''#bb2dc7''. Alpha channels (#rgba, #rrggbbaa) are automatically stripped.' type: string visibility: type: string enum: - public - members-only - private required: - 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/events/guests/update-status: post: tags: - Events summary: Update Guest Status description: Update a guest’s status. Set `status` to `approved` ("Going"), `declined`, `pending_approval`, or `waitlist`. Use `should_refund` to refund a paid guest when moving them out of an approved state. Use `message` to include a personal note in the email we send the guest. To send a soft invite that guests can accept, use `/v1/events/guests/send-invites` instead. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- guest_id: type: string description: Guest identifier — the guest ID (gst-), a ticket key, a guest key (g-), or the user's email. status: type: string enum: - approved - declined - pending_approval - waitlist should_refund: description: If you are moving a guest who has paid to `declined`, `waitlist`, or `pending_approval`, should we refund their payment? Defaults to false. type: boolean send_email: description: Optional. Whether Luma should email the guest about the status change. Defaults to true. Set to false if your integration sends its own notifications. anyOf: - type: boolean - type: 'null' message: description: 'Optional. Personal message included in the email we send the guest about the status change. Max of 200 characters. Can''t be combined with `send_email: false`.' anyOf: - type: string maxLength: 200 - type: 'null' required: - event_id - guest_id - status responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/events/guests/send-invites: post: tags: - Events summary: Send Invites description: Send guests an invite to an event. We'll send an email, and if their phone number is linked to their Luma account, they'll also receive an SMS. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- guests: type: array items: type: object properties: email: type: string name: anyOf: - type: string - type: 'null' required: - email description: Information about the guests you want to invite to the event. If a user already has a name, this will not overwrite their name. message: description: Personalize the message that will be included in the invite. Max of 200 characters. anyOf: - type: string maxLength: 200 - type: 'null' required: - event_id - guests responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/events/guests/add: post: tags: - Events summary: Add Guests description: Add guests to the event. By default, guests are added with the status "Going" (approved) and receive one ticket of the default ticket type. Use the `ticket` or `tickets` parameter to specify custom ticket assignments. Get available ticket types using `/v1/events/ticket-types/list`. Use `approval_status` to add guests as pending approval or on the waitlist instead of immediately approved. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- guests: type: array items: type: object properties: email: type: string name: anyOf: - type: string - type: 'null' required: - email description: Information about the guests you want to add to the event. If a user already has a name, this will not overwrite their name. ticket: description: Optional. Assign a single ticket of the specified type to each guest. Cannot be used with `tickets` parameter. anyOf: - type: object properties: event_ticket_type_id: type: string required: - event_ticket_type_id - type: 'null' tickets: description: Optional. Assign multiple tickets to each guest. Each guest receives all tickets in the array. Use this to add multiple tickets of the same or different types. Cannot be used with `ticket` parameter. anyOf: - type: array items: type: object properties: event_ticket_type_id: type: string required: - event_ticket_type_id - type: 'null' approval_status: description: Optional. Status to assign to each added guest. Defaults to `approved` ("Going"). Use `pending_approval` to add guests for host review, or `waitlist` to add to the event waitlist. To send a soft invite that guests can accept, use `/v1/events/guests/send-invites` instead. anyOf: - type: string enum: - approved - pending_approval - waitlist - type: 'null' send_email: description: Optional. Whether Luma should email each added guest. Defaults to true. Set to false if your integration sends its own notifications. anyOf: - type: boolean - type: 'null' required: - event_id - guests responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/events/hosts/add: post: tags: - Events summary: Add Host description: Add a host to an event. This works for both managers and check-in staff — use the access_level parameter to control permissions. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- email: type: string access_level: description: Defaults to manager. anyOf: - type: string enum: - none - check-in - manager - type: 'null' is_visible: description: Defaults to true. type: boolean name: description: Name of the host you are adding. If they already have a Luma profile, this will be ignored. type: string required: - event_id - email responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/events/hosts/update: post: tags: - Events summary: Update Host description: Update a host's permissions or visibility on an event. Use this to change a host between check-in and manager access levels. The event creator's access level cannot be changed. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- email: type: string description: Email of the host to update. access_level: description: The new access level for the host. One of "none", "check-in", or "manager". The event creator’s access level cannot be changed. type: string enum: - none - check-in - manager is_visible: description: Whether the host is visible on the event page. type: boolean required: - event_id - email responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/events/hosts/remove: post: tags: - Events summary: Remove Host description: Remove a host from an event. The event creator cannot be removed. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- email: type: string description: Email of the host to remove. required: - event_id - email responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/events/coupons/create: post: tags: - Events summary: Create Coupon description: Create a coupon that can be applied when a guest is registering for an event. Restrict it to a ticket type with `event_ticket_type_id` — when that ticket type is hidden, this creates an unlock (access) code. You are not able to edit the coupon terms after it has been created. 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 event_id: type: string description: Event ID, this usually starts with evt- event_ticket_type_id: description: 'Optional. Restrict the coupon to a single ticket type. If that ticket type is hidden, the coupon acts as an unlock (access) code that reveals the ticket during registration. Pair a hidden ticket type that has Require Approval turned off with an unlock code to let invited guests register and pay directly, skipping the Apply to Attend step. For a code that unlocks the ticket without changing the price, set the discount to 0% (`percent_off: 0`).' type: string required: - code - discount - event_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 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/events/coupons/update: post: tags: - Events summary: Update Coupon requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- 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: - event_id - code responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/events/ticket-types/create: post: tags: - Events summary: Create Ticket Type description: Create a new ticket type for an event requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema allOf: - type: object properties: event_id: type: string description: Event ID, this usually starts with evt- required: - event_id - type: object properties: name: type: string require_approval: type: boolean is_hidden: type: boolean description: anyOf: - type: string - type: 'null' valid_start_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' valid_end_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' max_capacity: anyOf: - type: number - type: 'null' type: type: string enum: - free - paid cents: anyOf: - type: number - type: 'null' currency: anyOf: - type: string - type: 'null' is_flexible: type: boolean min_cents: anyOf: - type: number - type: 'null' required: - name - type responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: name: type: string require_approval: type: boolean is_hidden: type: boolean description: anyOf: - type: string - type: 'null' valid_start_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' valid_end_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' max_capacity: anyOf: - type: number - type: 'null' type: type: string enum: - free - paid cents: anyOf: - type: number - type: 'null' currency: anyOf: - type: string - type: 'null' is_flexible: type: boolean min_cents: anyOf: - type: number - type: 'null' id: type: string required: - name - type - id /v1/events/ticket-types/update: post: tags: - Events summary: Update Ticket Type description: Update an existing ticket type configuration requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema allOf: - type: object properties: event_ticket_type_id: type: string description: Ticket type ID, this usually starts with ttype- required: - event_ticket_type_id - type: object properties: name: type: string require_approval: type: boolean is_hidden: type: boolean description: anyOf: - type: string - type: 'null' valid_start_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' valid_end_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' max_capacity: anyOf: - type: number - type: 'null' type: type: string enum: - free - paid cents: anyOf: - type: number - type: 'null' currency: anyOf: - type: string - type: 'null' is_flexible: type: boolean min_cents: anyOf: - type: number - type: 'null' responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: name: type: string require_approval: type: boolean is_hidden: type: boolean description: anyOf: - type: string - type: 'null' valid_start_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' valid_end_at: anyOf: - type: string description: ISO 8601 Date. For example, 2025-09-01 - type: 'null' max_capacity: anyOf: - type: number - type: 'null' type: type: string enum: - free - paid cents: anyOf: - type: number - type: 'null' currency: anyOf: - type: string - type: 'null' is_flexible: type: boolean min_cents: anyOf: - type: number - type: 'null' id: type: string required: - name - type - id /v1/events/ticket-types/delete: post: tags: - Events summary: Delete Ticket Type description: Soft delete a ticket type. Cannot delete if tickets have been sold or if it's the last visible ticket type. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_ticket_type_id: type: string description: Ticket type ID, this usually starts with ttype- required: - event_ticket_type_id responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true /v1/events/cancel/request: post: tags: - Events summary: Request Event Cancellation description: 'Request a cancellation token for an event. Canceling an event is irreversible — it notifies all guests, processes refunds, and permanently deletes the event. Because of this, cancellation uses a two-step flow: first request a token here, then pass it to /events/cancel to execute. The token expires after 15 minutes.' requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- required: - event_id responses: '200': description: Successful response. content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: cancellation_token: type: string description: A short-lived token to confirm the cancellation. Expires after 15 minutes. is_paid: type: boolean description: Whether the event has paid guests. If true, you must pass should_refund in the confirm step. guest_count: type: number description: The number of approved guests for this event. required: - cancellation_token - is_paid - guest_count /v1/events/cancel: post: tags: - Events summary: Cancel Event description: Cancel an event. You must first call /events/cancel/request to get a cancellation_token, then pass it here. This is irreversible — the event will be deleted, all guests will be notified, and refunds will be processed if should_refund is true. For paid events, you must specify should_refund. requestBody: required: true content: application/json: schema: $schema: https://json-schema.org/draft/2020-12/schema type: object properties: event_id: type: string description: Event ID, this usually starts with evt- cancellation_token: type: string description: The cancellation token returned from the request endpoint. should_refund: description: Whether to refund paid guests. Required if the event has paid guests. type: boolean required: - event_id - cancellation_token responses: '200': description: Successful response. content: application/json: schema: type: object description: Empty response properties: {} additionalProperties: false x-stainless-empty-object: true 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.