Connection
- Authentication: API key.
Open luma.com/calendar/manage/api-keys, pick the calendar the agent should act on, then create the key and copy it. The key is scoped to that one calendar, and the Luma API requires a Luma Plus subscription on it (see Luma’s pricing page).See Luma’s documentation.
Read actions (8)
| Action | Description |
|---|---|
get_calendar | Get the calendar the connected API key manages (takes no argument). |
get_event | Get one event by its id (starts with evt-, discoverable through list_calendar_events), including its guest counts by status. |
get_event_guest | Get one guest of an event in detail, including their ticket orders. id is the guest id (gst-), a ticket key, a guest key (g-) or the guest’s email address. |
get_self | Get the Luma user the connected API key belongs to (probe — takes no argument). |
list_calendar_contacts | List the contacts of the calendar. Optional: query, a free-text search over names and email addresses; tag, a single tag name or tag id to filter on; cursor pagination. |
list_calendar_events | List the events the calendar manages. Optional bounds before / after (ISO 8601 datetimes), a status filter (approved submissions by default) and cursor pagination — pass pagination_cursor the next_cursor of the previous response. |
list_event_guests | List the guests registered for or invited to an event, optionally filtered by approval_status, with cursor pagination. |
list_event_ticket_types | List the ticket types of an event — the way to find the event_ticket_type_id that add_guests takes. |
Write actions (5)
| Action | Description |
|---|---|
add_guests | Add guests to an event. Required: event_id (string) and guests (ARRAY OF OBJECTS — [{ email, name? }], never an array of strings; email is required on each entry). Optional: approval_status, one of ‘approved’ (the default, « Going »), ‘pending_approval’ or ‘waitlist’; ticket, an OBJECT { event_ticket_type_id } assigning one ticket of that type to each guest (ids come from list_event_ticket_types); send_email, a boolean (true by default) to let Luma email each added guest. To send an invitation a guest can accept rather than registering them outright, use send_invites. |
create_event | Create an event on the calendar. Required: name (string), start_at (ISO 8601 datetime) and timezone (IANA name). Every other field is optional. name: string. start_at and end_at: ISO 8601 datetimes (“2026-10-19T03:27:13.673Z”). timezone: IANA zone name as a string (“Europe/Paris”). description_md: Markdown string. geo_address_json: an OBJECT, one of { type: ‘manual’, address } (free-text address), { type: ‘google’, place_id } or { type: ‘lookup’, query } — leave it out for an online event; it cannot be combined with meeting_url. meeting_url: string (video-call link). visibility: ‘public’ | ‘members-only’ | ‘private’. location_visibility: ‘public’ | ‘guests-only’. max_capacity: bare integer or null. waitlist_status: ‘disabled’ | ‘enabled’. registration_open, show_guest_list, reminders_disabled, can_register_for_multiple_tickets: booleans. slug: string (URL segment). tint_color: string, a 3- or 6-digit hex code (“#bb2dc7”). |
send_invites | Send guests an invitation to an event (email, plus SMS when their phone is linked to their Luma account). Required: event_id (string) and guests (ARRAY OF OBJECTS — [{ email, name? }]). Optional: message, a string of at most 200 characters added to the invitation. |
update_event | Update an existing event. Required: event_id (string starting with evt-). Only the fields you send are changed; the others keep their value. Set suppress_email to true (boolean) to avoid emailing guests about a change of name, time or location. name: string. start_at and end_at: ISO 8601 datetimes (“2026-10-19T03:27:13.673Z”). timezone: IANA zone name as a string (“Europe/Paris”). description_md: Markdown string. geo_address_json: an OBJECT, one of { type: ‘manual’, address } (free-text address), { type: ‘google’, place_id } or { type: ‘lookup’, query } — leave it out for an online event; it cannot be combined with meeting_url. meeting_url: string (video-call link). visibility: ‘public’ | ‘members-only’ | ‘private’. location_visibility: ‘public’ | ‘guests-only’. max_capacity: bare integer or null. waitlist_status: ‘disabled’ | ‘enabled’. registration_open, show_guest_list, reminders_disabled, can_register_for_multiple_tickets: booleans. slug: string (URL segment). tint_color: string, a 3- or 6-digit hex code (“#bb2dc7”). |
update_guest_status | Change a guest’s status on an event. Required: event_id (string), guest_id (string — the guest id gst-, a ticket key, a guest key g-, or the guest’s email address, all discoverable through list_event_guests) and status, one of ‘approved’ (« Going »), ‘declined’, ‘pending_approval’ or ‘waitlist’. Optional: should_refund, a boolean refunding a paying guest moved out of an approved status; send_email, a boolean (true by default); message, a string of at most 200 characters added to the email, which cannot be combined with send_email: false. |
Permissions
Every action above must be explicitly granted to an agent before it can be used. See Permissions for the grant model and Security for how credentials are protected.Last reviewed against the provider API: September 2026.