Retrieves the details of a single guest for an event, including ticket order details.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `id` (string, required) — Guest identifier — the guest ID (gst-), a ticket key, a guest key (g-), or the user's email.
Returns a paginated list of coupons associated with an event.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `pagination_cursor` (string, optional, default: null) — Value of next_cursor from a previous request.- `pagination_limit` (number, optional, default: null) — The number of items to return. The server enforces a maximum.
output data schema:
{ entries: { id
Returns a paginated list of guests who have registered or been invited to an event, including guest summaries and event_tickets (use get_guest for order-level detail).
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `approval_status` (string, optional, default: null) — Filter by status: approved, session, pending_approval, invited, declined, or waitlist.- `pagination_cursor` (string, optional, default: null) — Value of next_cursor from a previous request.- `pagination_limit` (number, optional, default: null) — The number of items to return. The server enforces a maximum.- `sort_column` (string, optional, default: null) — name, email, created_at, registered_at, or checked_in_at.- `sort_direction` (string, optional, default: null) — asc, desc, asc nulls last, or desc nulls last.
Returns the full list of ticket types for an event in one response (not paginated).
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `include_hidden` (string, optional, default: null) — Include hidden ticket types in the results.
output data schema:
{ entries: { id: string; name: string | null;
Requests a short-lived cancellation token and impact preview (guest count, whether paid) for an event — the first step of Luma's two-step cancellation flow.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.
- `name` (string, required) — Event name.- `start_at` (string, required) — ISO 8601 datetime the event starts.- `timezone` (string, required) — IANA timezone, e.g. America/New_York.- `can_register_for_multiple_tickets` (boolean, optional, default: null) — Whether a single guest can register for multiple tickets.- `cover_url` (string, optional, default: null) — Cover image URL; must be hosted on the Luma CDN (images.lumacdn.com), uploaded via /v1/images/create-upload-url first.- `coordinate` (object, optional, default: null) — {longitude, latitude} for the event location.- `description_md` (string, optional, default: null) — Markdown description, converted internally to Luma's rich text format; embedded images must be hosted on the Luma CDN.
Creates a new ticket type for an event and returns the created ticket type, including its id.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `name` (string, required) — Ticket type name.- `type` (string, required) — free or paid.- `require_approval` (boolean, optional, default: null) — Whether registrations for this ticket type require host approval.- `is_hidden` (boolean, optional, default: null) — Hides the ticket type from public view, e.g. for an invite-only tier.- `description` (string, optional, default: null) — Ticket type description.- `valid_start_at` (string, optional, default: null) — ISO 8601 date the ticket type becomes available.- `valid_end_at` (string, optional, default: null) — ISO 8601 date the ticket type stops being available.- `max_capacity` (number, optional, default:
Creates a new discount coupon for an event and returns the created coupon.
Inputs:
- `code` (string, required) — Code the guest enters on the event page. Case-insensitive, maximum 20 characters.- `discount` (object, required) — Discriminated union: {discount_type: "percent", percent_off} (0-100), or {discount_type: "amount", cents_off, currency}.- `event_id` (string, required) — Event ID, this usually starts with evt-.- `remaining_count` (integer, optional, default: null) — Number of times the coupon can be used. Set to 1000000 for unlimited uses.
Adds one or more guests directly to an event (default status "Going", one ticket of the default type unless overridden) and returns an empty response on success.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `guests` (object[], required) — Guests to add, each requiring at least email; existing names are not overwritten. Each guest may include registration_answers (question_id + value) for the event's registration questions.- `ticket` (object, optional, default: null) — Assign a single ticket of the specified event_ticket_type_id to each guest. Cannot be combined with tickets.- `tickets` (object[], optional, default: null) — Assign multiple tickets (each by event_ticket_type_id) to each guest. Cannot be combined with ticket.- `approval_status` (string, optional, default: null) — Status to assign each added guest: approved, pending_approval, or waitlist. Defaults to approved.- `send_email` (boolean, optional, default: null) — Whether Luma should email each added guest. Defaults to true.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Sends one or more guests a soft invite to an event by email (and SMS if their phone is linked to their Luma account) that they can accept, returning an empty response on success. This sends real communications to every listed guest — the original invite state is not returned and cannot be recovered from this call. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly which guests will be invited and what the message will say, and wait for their explicit written confirmation before proceeding.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `guests` (object[], required) — Guests to invite, each requiring at least email; existing names are not overwritten.- `message` (string, optional, default: null) — Personalized message included in the invite. Maximum 200 characters.
output data schema:
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Cancels an event using a cancellation token from request_event_cancellation and returns an empty response on success. This action is irreversible — the event is deleted, all guests are notified, and refunds are processed if requested; the event cannot be recovered after this call. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly what event will be permanently cancelled and that it is irreversible, and wait for their explicit written confirmation before proceeding.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `cancellation_token` (string, required) — The cancellation token returned by request_event_cancellation.- `should_refund` (boolean, optional, default: null) — Whether to refund paid guests. Conditionally required — must be set if the event has paid guests (see is_paid from request_event_cancellation).
output data schema:
Updates an existing event's details. Only the fields you provide are changed — others keep their current value. NOTE: this overwrites the current field values, and the original values are not preserved after the call — the response includes both the before and after state (fetched via the same lookup as get_event) so you have a full record of what changed.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `suppress_notifications` (boolean, optional, default: null) — If true, guests are not notified (email/push) when the name, time, or location changes.- `can_register_for_multiple_tickets` (boolean, optional, default: null) — Whether a single guest can register for multiple tickets.- `cover_url` (string, optional, default: null) — Cover image URL; must be hosted on the Luma CDN (images.lumacdn.com).- `coordinate` (object, optional, default: null) — {longitude, latitude} for the event location.- `description_md` (string, optional, default:
Updates a guest's status (approved, declined, pending_approval, or waitlist), optionally refunding them and/or emailing a personal message. NOTE: this overwrites the guest's current status, and the original status is not preserved after the call — the response includes both the before and after state (fetched via the same lookup as get_guest) so you have a full record of what changed.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `guest_id` (string, required) — Guest identifier — the guest ID (gst-), a ticket key, a guest key (g-), or the user's email.- `status` (string, required) — approved, declined, pending_approval, or waitlist.- `should_refund` (boolean, optional, default: null) — If moving a paid guest to declined, waitlist, or pending_approval, whether to refund their payment. Defaults to false.- `send_email` (boolean, optional, default: null) — Whether Luma should email the guest about the status change. Defaults to true.- `message` (string, optional, default: null) — Personal message included in the status-change email. Maximum 200 characters. Can't be combined with send_email: false
Administratively adds complimentary tickets to or removes/invalidates tickets from an existing guest with no payment or refund processed. NOTE: this overwrites the guest's ticket set, and the original ticket set is not preserved after the call — the response includes both the before and after state (fetched via the same lookup as get_guest) so you have a full record of what changed.
Inputs:
- `event_id` (string, required) — Event ID, this usually starts with evt-.- `guest_id` (string, required) — Guest identifier — the guest ID (gst-), a ticket key, a guest key (g-), or the user's email.- `ticket_ids_to_remove` (string[], optional, default: null) — Existing ticket IDs to invalidate. Removing tickets does not issue a refund, and at least one valid ticket must remain on the guest. Default [].- `tickets_to_add` (object[], optional, default: null) — Complimentary tickets to grant (each by event_ticket_type_id); each entry creates a new $0 administrative ticket even for a normally paid ticket type. Default [].- `send_email` (boolean, optional, default: null) — Whether Luma may email the guest about the ticket change. Defaults to true and still respects notification preferences.
Updates an existing ticket type's details and returns the updated ticket type. Only the fields you provide are changed — others keep their current value. NOTE: this overwrites the current field values — the original state is not stored after the call. The response includes both the before and after state so you have a full record of what changed.
Inputs:
- `event_ticket_type_id` (string, required) — Ticket type ID, this usually starts with ttype-.- `name` (string, optional, default: null) — Ticket type name.- `require_approval` (boolean, optional, default: null) — Whether registrations for this ticket type require host approval.- `is_hidden` (boolean, optional, default: null) — Hides the ticket type from public view.- `description` (string, optional, default: null) — Ticket type description.- `valid_start_at` (string, optional, default: null) — ISO 8601 date the ticket type becomes available.- `valid_end_at` (string, optional, default: null) — ISO
API Parameters Reference
Every tool returns the same top-level envelope. Only data varies per tool.
Go to Luma and open the calendar you want the key to act on
Open Settings for that calendar and select the Options tab
Find the API section and click Create API Key (an eligible Luma plan is required)
Copy the generated key — you will only see it once
Troubleshooting
Cause: API key not provided in request headers or incorrect format
Solution:
Verify Authorization: Bearer YOUR_API_KEY and X-Mewcp-Credential-Id: CREDENTIAL-ID headers are present
Check API key is active in your MewCP account
Cause: API calls have exceeded your request limits
Solution:
Check credit usage in your Curious Layer dashboard
Upgrade to a paid plan or add credits for higher limits
Contact support for credit adjustments
Cause: No Luma credential linked to your account
Solution:
Go to Credentials in your MewCP dashboard
Add your Luma API key (static credential)
Retry the request with the correct X-Mewcp-Credential-Id header
Cause: JSON payload is invalid or missing required fields
Solution:
Validate JSON syntax before sending
Ensure all required tool parameters are included
Check parameter types match expected values — for example, ticket and tickets cannot both be set on add_guests, and message cannot be combined with send_email: false on update_guest_status
- `end_at` (string, optional, default: null) — ISO 8601 datetime the event ends.
- `geo_address_json` (object, optional, default: null) — Either {type: "manual", address} for a free-text address, or {type: "google", place_id, description?} for a Google Maps Place ID.
- `location_visibility` (string, optional, default: null) — public (default) or guests-only — hides the precise location from unapproved guests.
- `max_capacity` (number, optional, default: null) — Maximum registrations before the event is marked sold out (or guests join the waitlist, if enabled).
- `name_requirement` (string, optional, default: null) — full-name or first-last — whether to split the guest name field into first/last.
- `phone_number_requirement` (string, optional, default: null) — optional or required — whether guests must supply a phone number at registration; omit to not collect it.
- `registration_open` (boolean, optional, default: null) — Whether to accept registrations. Defaults to true.
- `waitlist_status` (string, optional, default: null) — disabled or enabled — whether new registrations join a waitlist once capacity is reached.
output data schema:
{ id: string;}
null
) — Maximum number of this ticket type that can be issued.
- `cents` (number, optional, default: null) — Ticket price as an integer in the smallest unit of currency (e.g. cents for USD); only meaningful when type is paid.
- `valid_start_at` (string, optional, default: null) — ISO 8601 datetime the coupon becomes valid.
- `valid_end_at` (string, optional, default: null) — ISO 8601 datetime the coupon expires.
- `event_ticket_type_id` (string, optional, default: null) — Restrict the coupon to a single ticket type. If that ticket type is hidden, the coupon acts as an unlock/access code instead of a discount.
sort_column / sort_direction — Order guest results by name, email, created_at, registered_at, or checked_in_at, using asc, desc, asc nulls last, or desc nulls last.
send_email — Whether Luma sends its own notification email for the action. Defaults to true where supported.