Luma Events API
The Events API from Luma — 21 operation(s) for events.
The Events API from Luma — 21 operation(s) for events.
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:
# --- truncated at 32 KB (169 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/luma/refs/heads/main/openapi/luma-events-api-openapi.yml