> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Luma Integration for AI Agents & Workflows

> Event management platform for creating, managing, and tracking events and guests

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img className="block dark:hidden" src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/luma-light.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=c7da49cd3fd2fc8f5121d52ef52a3fe0" alt="Luma logo" width="72" height="72" data-path="logos/luma-light.svg" />

<img className="hidden dark:block" src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/luma-dark.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=48f127f17cb7e30ee452d49cae5fb3d5" alt="Luma logo" width="72" height="72" data-path="logos/luma-dark.svg" />

## Overview

Add **Luma** to any ModuleX agent or workflow. Event management platform for creating, managing, and tracking events and guests via the Luma REST API (`public-api.luma.com/v1`).

<Info>
  **Categories**: Scheduling & Events · Events · Productivity & Collaboration · Marketing · **Auth**: API Key · **Actions**: 8
</Info>

## Authentication

### API Key Authentication

Authenticate using your Luma API key

<Steps>
  <Step title="Step 1">
    Go to [https://lu.ma](https://lu.ma) and sign in to your account
  </Step>

  <Step title="Step 2">
    Navigate to your calendar settings or developer section
  </Step>

  <Step title="Step 3">
    Generate or copy your API key
  </Step>

  <Step title="Step 4">
    Paste the API key below
  </Step>
</Steps>

#### Required Credentials

| Field        | Description       | Required | Format                                 |
| ------------ | ----------------- | -------- | -------------------------------------- |
| Luma API Key | Your Luma API key | Yes      | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |

## Available Actions

<AccordionGroup>
  <Accordion title="create_event — Create an event on the connected Luma calendar">
    ### Parameters

    <ResponseField name="name" type="string" required>
      The event name
    </ResponseField>

    <ResponseField name="start_at" type="string" required>
      The event start time as an ISO 8601 datetime, for example 2026-05-15T18:00:00Z
    </ResponseField>

    <ResponseField name="timezone" type="string" required>
      The IANA timezone for the event, for example America/New\_York
    </ResponseField>

    <ResponseField name="end_at" type="string">
      The event end time as an ISO 8601 datetime
    </ResponseField>

    <ResponseField name="description_md" type="string">
      Markdown description for the event
    </ResponseField>

    <ResponseField name="visibility" type="string">
      Event visibility: public, members-only, or private
    </ResponseField>

    <ResponseField name="slug" type="string">
      Custom event URL slug
    </ResponseField>

    <ResponseField name="meeting_url" type="string">
      Online meeting URL for a virtual event
    </ResponseField>

    <ResponseField name="cover_url" type="string">
      Cover image URL uploaded to the Luma CDN
    </ResponseField>

    <ResponseField name="max_capacity" type="integer">
      Maximum number of registrations before the event is sold out
    </ResponseField>

    <ResponseField name="can_register_for_multiple_tickets" type="boolean">
      Whether guests can register for multiple tickets
    </ResponseField>

    <ResponseField name="show_guest_list" type="boolean">
      Whether approved guests can see who else is attending
    </ResponseField>

    <ResponseField name="reminders_disabled" type="boolean">
      Whether to disable default event reminders
    </ResponseField>

    <ResponseField name="name_requirement" type="string">
      How to collect guest names: full-name or first-last
    </ResponseField>

    <ResponseField name="phone_number_requirement" type="string">
      Phone number collection: optional or required
    </ResponseField>

    <ResponseField name="tint_color" type="string">
      A hex color like #bb2dc7 for the event theme
    </ResponseField>

    <ResponseField name="coordinate_json" type="string">
      JSON object with latitude and longitude for the event location
    </ResponseField>

    <ResponseField name="geo_address_json" type="string">
      JSON object with address details (type, place\_id, description)
    </ResponseField>

    <ResponseField name="registration_questions_json" type="string">
      JSON array of registration question objects with label and required fields
    </ResponseField>

    <ResponseField name="feedback_email_json" type="string">
      JSON object with subject and message for the post-event feedback email
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "event": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Event"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateEventOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_event — Get admin details for a Luma event by event ID">
    ### Parameters

    <ResponseField name="event_id" type="string" required>
      The Luma event ID (usually starts with evt-)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "event": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Event"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetEventOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_events — List events managed by the connected Luma calendar">
    ### Parameters

    <ResponseField name="after" type="string">
      Return events starting after this ISO 8601 datetime
    </ResponseField>

    <ResponseField name="before" type="string">
      Return events starting before this ISO 8601 datetime
    </ResponseField>

    <ResponseField name="pagination_cursor" type="string">
      The next\_cursor value from a previous list response
    </ResponseField>

    <ResponseField name="pagination_limit" type="integer">
      Number of items to request per page (Default: `50`)
    </ResponseField>

    <ResponseField name="status" type="string">
      Calendar submission status: approved or pending
    </ResponseField>

    <ResponseField name="sort_column" type="string">
      Column to sort by (currently only start\_at is supported)
    </ResponseField>

    <ResponseField name="sort_direction" type="string">
      Sort order: asc, desc, asc nulls last, or desc nulls last
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "events": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Events",
          "type": "array"
        },
        "has_more": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Has More"
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Cursor"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListEventsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_guest — Get detailed information for a Luma event guest by ID or email">
    ### Parameters

    <ResponseField name="event_id" type="string" required>
      The Luma event ID (usually starts with evt-)
    </ResponseField>

    <ResponseField name="guest_id" type="string" required>
      Guest ID (gst-...), ticket key, guest key (g-...), or email address
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "guest": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Guest"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetGuestOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_guests — List guests registered for, invited to, or waitlisted for a Luma event">
    ### Parameters

    <ResponseField name="event_id" type="string" required>
      The Luma event ID (usually starts with evt-)
    </ResponseField>

    <ResponseField name="approval_status" type="string">
      Filter by status: approved, session, pending\_approval, invited, declined, or waitlist
    </ResponseField>

    <ResponseField name="pagination_cursor" type="string">
      The next\_cursor value from a previous list response
    </ResponseField>

    <ResponseField name="pagination_limit" type="integer">
      Number of items to request per page (Default: `50`)
    </ResponseField>

    <ResponseField name="sort_column" type="string">
      Guest field to sort by: name, email, created\_at, registered\_at, or checked\_in\_at
    </ResponseField>

    <ResponseField name="sort_direction" type="string">
      Sort order: asc, desc, asc nulls last, or desc nulls last
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "guests": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Guests",
          "type": "array"
        },
        "has_more": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Has More"
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Cursor"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetGuestsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="add_guests — Add guests to a Luma event with status Going">
    ### Parameters

    <ResponseField name="event_id" type="string" required>
      The Luma event ID (usually starts with evt-)
    </ResponseField>

    <ResponseField name="guests_json" type="string" required>
      JSON array of guests, each with at least an email field
    </ResponseField>

    <ResponseField name="ticket_json" type="string">
      JSON object assigning one ticket type to each guest (mutually exclusive with tickets\_json)
    </ResponseField>

    <ResponseField name="tickets_json" type="string">
      JSON array assigning multiple tickets to each guest (mutually exclusive with ticket\_json)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "guests": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Guests",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "AddGuestsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_ticket_types — List ticket types for a Luma event">
    ### Parameters

    <ResponseField name="event_id" type="string" required>
      The Luma event ID (usually starts with evt-)
    </ResponseField>

    <ResponseField name="include_hidden" type="boolean">
      Whether to include hidden ticket types (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "ticket_types": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Ticket Types",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListTicketTypesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="send_invites — Send email invitations for a Luma event">
    ### Parameters

    <ResponseField name="event_id" type="string" required>
      The Luma event ID (usually starts with evt-)
    </ResponseField>

    <ResponseField name="guests_json" type="string" required>
      JSON array of guests to invite, each with at least an email field
    </ResponseField>

    <ResponseField name="message" type="string">
      Optional invite message (max 200 characters)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        }
      },
      "required": [
        "success"
      ],
      "title": "SendInvitesOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* No documented public rate limits; Luma enforces server-side pagination maximums.
* Error model: non-2xx responses and timeouts are caught and returned as `success=False` + `error` rather than raising.

## Related integrations

<CardGroup cols={3}>
  <Card title="Cal.com" href="/integrations/tools/cal-com" />

  <Card title="Google Analytics" href="/integrations/tools/google-analytics" />

  <Card title="Google Calendar" href="/integrations/tools/google-calendar" />
</CardGroup>

## Links

* [Luma](https://luma.com)
