Skip to main content
74 toolsAPI key
luma_example.py
Luma runs event pages and the calendars that list them. This API is how a program does what an organizer does in the app: create and update events, add and approve guests, issue ticket types and coupons, email the guest list, and manage the calendar’s contacts, tags, admins and memberships. The pack was drafted from Luma’s own OpenAPI document by scripts/openapi_to_pack.py, so every parameter, enum member and description is Luma’s, word for word. What a spec cannot carry — the rules Luma states in prose, the sentences a blank parameter needed, the limits below — was added in review.

Authenticating

Get a key: at luma.com/calendar/manage/api-keys choose the calendar and generate a key — it reaches that calendar only, and the API needs a Luma Plus subscription — then export LUMA_API_KEY=…. This pack takes an API key in x-luma-api-key, and configure() is optional when $LUMA_API_KEY is set. That key serves every call the process makes. For an application whose users each connect their own account, hand configure() a credential_provider instead — a SubjectProvider that answers per user — and each call carries the credential of the user use_subject names. Your users’ accounts says how each pack’s users connect. A calendar key reaches the calendar it was made on and nothing else, so the calendars_* tools act on that calendar and only calendars_update asks for its ID. An organization key reaches the organizations_* tools. Where Luma documents choosing one of the organization’s calendars — approving or rejecting a submission — it is a header, and which calendar a call acts on is your decision, not the model’s, so pass it per call rather than as an argument:

The client

oauth_tool_factory is the whole client: a thin wrapper over httpx that attaches your key and these endpoint constants to each request. No vendor SDK enters your dependency tree.

Paging through a list

A cursor belongs to the tool that returns it, so it is declared on that tool’s builder call:
luma_pagination.py
Pagination is declared on calendars_events_list, events_guests_list, images_search, calendars_contacts_list, events_coupons_list, calendars_coupons_list, memberships_tiers_list, webhooks_list, organizations_calendars_list and organizations_events_list. The other 64 take no cursor.
Reads are GETs with query parameters and every write is a POST. Luma versions each route on its own, so /v1/ and /v2/ sit side by side and the version is part of each tool’s URL. Failure is an HTTP status — 429 past the rate limit of 200 requests a minute per calendar key — and the ten list tools page on has_more, sending next_cursor back as pagination_cursor.

Limits

  • null cannot be sent. Charter omits an unset field rather than sending null, so what Luma clears with null — an event’s font, a registration question’s library source, a calendar’s location, a ticket type’s max_per_guest — can be set through these tools but not cleared.
  • Uploading an image is two steps, and the second is not a tool. images_create_upload_url returns an upload_url to PUT the bytes to, which is a file transfer to Luma’s CDN rather than an API call.
  • events_create and events_update are large, about 22KB of schema each, mostly themes, fonts and the thirteen kinds of registration question. A projection keeps what an agent uses.

Tools

Each is a Tool, called with ainvoke as in the snippet above.
Eventsevents_getGETReturn details about an event.events_guests_getGETGet detailed information for an event guest by looking them up by their ID.events_guests_listGETGet list of guests who have registered or been invited to an event.events_coupons_listGETList all coupons that have been created for an event.events_ticket_types_listGETList all ticket types for an eventevents_ticket_types_getGETGet a single ticket type by IDevents_blasts_listGETList the blasts (emails to guests) on an event, newest first.events_blasts_getGETGet a blast by ID.events_createPOSTCreate an event on the calendar.events_updatePOSTUpdate an event by its ID.events_guests_update_statusPOSTUpdate a guest’s status.events_guests_update_ticketsPOSTAdd or remove tickets from an existing guest.events_guests_send_invitesPOSTSend guests an invite to an event.events_guests_addPOSTAdd guests to the event.events_hosts_addPOSTAdd a host to an event.events_hosts_updatePOSTUpdate a host’s permissions or visibility on an event.events_hosts_removePOSTRemove a host from an event.events_coupons_createPOSTCreate a coupon that can be applied when a guest is registering for an event.events_coupons_updatePOSTChange how many more times an event coupon can be used, or the window it is valid in.events_ticket_types_createPOSTCreate a new ticket type for an event.events_ticket_types_updatePOSTUpdate an existing ticket type configurationevents_ticket_types_deletePOSTSoft delete a ticket type.events_blasts_createPOSTEmail a message to an event’s guests now, or at scheduled_for.events_blasts_updatePOSTEdit a blast.events_blasts_deletePOSTDelete a blast.events_cancel_requestPOSTRequest a cancellation token for an event.events_cancelPOSTCancel an event.Calendarscalendars_getGETGet information about the calendar.calendars_events_listGETEvery event and API key on Luma is managed by a Luma Calendar.calendars_contact_tags_listGETList the contact tags on the calendar, with the IDs that apply, unapply, update and delete them.calendars_event_tags_listGETList the event tags on the calendar, with the IDs that apply, unapply, update and delete them.calendars_admins_listGETList all admins for the calendar.calendars_events_lookupGETSee if an event already exists on the calendar.calendars_contacts_listGETList the calendar’s contacts, optionally narrowed by search text, contact tags, or membership tier and status, and sorted by the column you choose.calendars_coupons_listGETList all coupons that have been created for a calendar.calendars_coupons_createPOSTCreate a coupon that can be applied to any event that is managed by the calendar.calendars_coupons_updatePOSTChange how many more times a calendar coupon can be used, or the window it is valid in.calendars_contacts_importPOSTImport contacts to the calendar, so they can be invited to events and sent newsletters.calendars_contacts_blockPOSTBlock a contact so they can’t follow your calendar or join its events.calendars_contacts_removePOSTRemove a contact from your calendar.calendars_contacts_restorePOSTRestore a blocked or removed contact, returning them to your active contacts.calendars_contact_tags_createPOSTCreate a contact tag on the calendar.calendars_contact_tags_updatePOSTRename a contact tag or change its color.calendars_contact_tags_deletePOSTDelete a contact tag from the calendar.calendars_contact_tags_applyPOSTApply a tag to existing calendar contacts.calendars_contact_tags_unapplyPOSTUnapply a tag from calendar contacts.calendars_event_tags_createPOSTCreate an event tag on the calendar.calendars_event_tags_updatePOSTRename an event tag or change its color.calendars_event_tags_deletePOSTDelete an event tag from the calendar.calendars_event_tags_applyPOSTApply a tag to events on the calendar.calendars_event_tags_unapplyPOSTUnapply a tag from events on the calendar.calendars_events_addPOSTAdd or submit an existing event (on Luma or on an external platform) to the Luma calendar.calendars_events_approvePOSTApprove a pending event submission on your calendar.calendars_events_rejectPOSTReject a pending event submission on your calendar.calendars_admins_addPOSTAdd admins to the calendar.calendars_updatePOSTUpdate a calendar’s settings.Miscellaneoususers_get_selfGETGet the Luma user the API key belongs to.entities_lookupGETLook up an event or calendar by its slug, Luma URL, or permanent public path such as event/evt-…, e/evt-…, or calendar/cal-….places_searchGETSearch Google Maps for a place and get up to 5 candidates.images_searchGETSearch Luma’s gallery of stock event cover images by keyword.images_create_upload_urlPOSTGet a URL to upload a JPEG or PNG to Luma’s CDN.Membershipsmemberships_tiers_listGETList the calendar’s membership tiers, including hidden ones (see is_hidden).memberships_members_addPOSTAdd a user to a membership tier.memberships_members_update_statusPOSTUpdate a member’s membership status.Webhookswebhooks_listGETList all webhook endpoints for the calendar.webhooks_getGETGet details about a specific webhook endpoint.webhooks_createPOSTCreate a new webhook endpoint to receive event notifications.webhooks_updatePOSTUpdate a webhook endpoint’s event types or status (active/paused).webhooks_deletePOSTDelete a webhook endpoint.Organizationsorganizations_admins_listGETList all admins for the organization.organizations_calendars_listGETList all calendars belonging to the organization.organizations_events_listGETList all events across all calendars belonging to the organization.organizations_calendars_createPOSTCreate a new calendar within the organization.organizations_events_transfer_calendarPOSTTransfer an event from its current managing calendar to a different calendar within the organization.