All notable changes to the Luma Public API.
July 2026
Changed: Event list entries no longer include description and description_md — GET /v1/calendars/events/list, GET /v1/organizations/events/list, and the legacy GET /v1/calendar/list-events omit them. Fetch event descriptions with GET /v1/events/get.
June 2026
Added: POST /v1/calendars/contacts/block, POST /v1/calendars/contacts/remove, and POST /v1/calendars/contacts/restore to moderate calendar contacts. Block stops someone from following your calendar or joining its events; remove opts them out of invites and newsletters but lets them follow again later; restore returns a blocked or removed contact to active. Each takes a contact_id (the id from contacts/list) or an email.
Added: New flat-response endpoints that return single-object fields at the top level and list results under entries instead of nesting them under a named key. Migrate to these for a cleaner response shape:
GET /v1/calendars/get(replacesGET /v1/calendar/get)GET /v1/events/guests/get(replacesGET /v1/event/get-guest)GET /v1/users/get-self(replacesGET /v1/user/get-self)GET /v1/events/ticket-types/list(replacesGET /v1/event/ticket-types/list; entries are now underentries)GET /v1/events/ticket-types/get(replacesGET /v1/event/ticket-types/get)POST /v1/events/ticket-types/create(replacesPOST /v1/event/ticket-types/create)POST /v1/events/ticket-types/update(replacesPOST /v1/event/ticket-types/update)POST /v1/events/coupons/create(replacesPOST /v1/event/create-coupon)POST /v1/calendars/coupons/create(replacesPOST /v1/calendar/coupons/create)GET /v1/events/get(replacesGET /v1/event/get; hosts are now returned on the event object)GET /v1/events/guests/list(replacesGET /v1/event/get-guests; entries no longer include the deprecated nestedguestcopy)GET /v1/calendars/events/list(replacesGET /v1/calendar/list-events; entries no longer include the deprecated nestedeventcopy)POST /v1/events/create(replacesPOST /v1/event/create)POST /v1/events/update(replacesPOST /v1/event/update)POST /v1/events/cancel/requestandPOST /v1/events/cancel(replace the/v1/event/cancel/*equivalents)GET /v2/webhooks/get,POST /v2/webhooks/create,POST /v2/webhooks/update(replace the/v1/webhooks/*equivalents)POST /v2/organizations/calendars/create(replacesPOST /v1/organizations/calendars/create)GET /v1/events/coupons/list(replacesGET /v1/event/coupons) andPOST /v1/events/coupons/update(replacesPOST /v1/event/update-coupon)GET /v1/calendars/coupons/list(replacesGET /v1/calendar/coupons) andPOST /v1/calendars/coupons/update(replacesPOST /v1/calendar/coupons/update)POST /v1/events/guests/add(replacesPOST /v1/event/add-guests)POST /v1/events/guests/update-status(replacesPOST /v1/event/update-guest-status; takes a singleguest_id— guest ID, ticket key, guest key, or email — instead of theguestobject)POST /v1/events/guests/send-invites(replacesPOST /v1/event/send-invites)POST /v1/events/hosts/add,POST /v1/events/hosts/update,POST /v1/events/hosts/remove(replace the/v1/event/hosts/*equivalents)POST /v1/events/ticket-types/delete(replacesPOST /v1/event/ticket-types/delete)GET /v1/calendars/events/lookup,POST /v1/calendars/events/add,POST /v1/calendars/events/approve, andPOST /v1/calendars/events/reject(replace the/v1/calendar/{lookup,add,approve,reject}-eventequivalents)/v1/calendars/event-tags/create,update,delete,apply,unapply, andlist(replace the/v1/calendar/event-tags/*equivalents;createreturnsid,update/deletetaketag_id,apply/unapplytakeevent_ids, and list entries drop the deprecatedapi_id)GET /v1/calendars/admins/list(replacesGET /v1/calendar/admins/list; entries drop the deprecatedapi_id)GET /v1/entities/lookup(replacesGET /v1/entity/lookup; the entity drops the deprecatedapi_id)
The new endpoints also drop the deprecated compatibility fields from their responses — api_id (use id), user_api_id, calendar_api_id, zoom_meeting_url, geo_latitude/geo_longitude, and the guest-level event_ticket, custom_source, and checked_in_at. Use the current field names instead (e.g. coordinate, event_tickets, per-ticket checked_in_at).
The replaced endpoints keep working and still return their original nested shape (e.g. { event, hosts }, { calendar }, { guest }, { ticket_type }, { webhook }, { coupon }, { user }) including the deprecated fields, but are no longer listed in the docs. New integrations should use the endpoints above.
May 2026
Changed: Renamed calendar people endpoints to contacts: GET /v1/calendars/contacts/list, POST /v1/calendars/contacts/import, and contact tag endpoints under /v1/calendars/contact-tags/.
Changed: The new contact routes use cleaned fields like contacts, tags, membership_status, tag_id, and user_ids; contact tag creation now returns id. Old people/person-tag paths still work with their old parameter names for backwards compatibility.
Changed: Simplified ticket type schemas for GET /v1/event/ticket-types/list, GET /v1/event/ticket-types/get, POST /v1/event/ticket-types/create, and POST /v1/event/ticket-types/update. Ticket type responses now document id as the identifier and type as free or paid. Responses still include the deprecated api_id field for backwards compatibility, but new integrations should use id.
April 2026
Changed: Flattened paginated list entries for GET /v1/calendar/list-events and GET /v1/event/get-guests. Event and guest fields now appear at the top level of each entry instead of being nested under an event / guest key. The nested objects are still returned for backwards compatibility but are deprecated — new integrations should read fields directly off the entry.
Changed: Standardized identifier naming across all endpoints. Request parameters now use event_id instead of event_api_id (and similarly for other entities like event_ticket_type_id). Response objects now return id instead of api_id. The old names are still accepted/returned but deprecated.
March 2026
Added: utm_source field on the Guest object, replacing custom_source (which is now deprecated). Contains the UTM source parameter captured when the guest registered.
Added: GET /v1/calendar/get endpoint to retrieve info about the calendar associated with your API key.
February 2026
Added: Two-step event cancellation via POST /v1/event/cancel/request and POST /v1/event/cancel. Returns guest count and whether the event has paid guests before confirming, with optional refunds for paid events.
Added: POST /v1/event/hosts/update and POST /v1/event/hosts/remove endpoints for managing event hosts. The existing add-host endpoint is now also available at POST /v1/event/hosts/create.
Added: Event tag management endpoints: POST /v1/calendar/event-tags/create, POST /v1/calendar/event-tags/update, POST /v1/calendar/event-tags/delete, POST /v1/calendar/event-tags/apply, and POST /v1/calendar/event-tags/unapply.
January 2026
Added: terms registration question type for events. Supports both markdown content (content_md) and link-based terms.
Added: skip_payment flag on POST /v1/memberships/members/add to add members to paid tiers without requiring payment through Luma.
Added: suppress_notifications parameter on POST /v1/event/update to update an event without notifying guests.
December 2025
Added: Webhook management endpoints: POST /v1/webhooks/create, POST /v1/webhooks/update, and POST /v1/webhooks/delete.
Added: Membership management endpoints: GET /v1/memberships/tiers/list, POST /v1/memberships/members/add, and POST /v1/memberships/members/update-status.
