Luma API Reference
API reference for Luma event management including cookie-based authentication and web scraping approaches
The Luma API requires you to own or manage an event to fetch its details via the official API endpoints. For public events you don't own, web scraping is the only viable option.
---
What Doesn't Work (API Authentication Issues)
Official API Endpoints That Fail
All these attempts resulted in authentication errors:
1. Get Event endpoint (/v1/event/get)
- URL:
https://public-api.luma.com/v1/event/get?event_api_id={eventId} - Error:
400 Bad Request - Missing event identifier - Requires: Event ownership/management access
2. Lookup Event endpoint (/v1/calendar/lookup-event)
- Still requires event ownership
3. Entity Lookup endpoint (/v1/entity/lookup)
- URL:
https://public-api.luma.com/v1/entity/lookup?url={url} - Error:
400 Bad Request - Invalid input: expected string, received undefined - Not suitable for public events
Why These Fail
The Luma API is designed for event managers/hosts to programmatically manage their own events. It's not a public data API for viewing any event.
---
✅ What Works
Option 1: Cookie-Based Authentication (For Admin/Guest Access)
Important: This approach uses the api2.luma.com endpoint (not the public API) with cookie authentication.
The Cookie That Works
__stripe_mid=588eff62-04c6-4d1f-8b3e-79c32473b15bc7d41c; luma.evt-JWQLBSkGWnuaADY.registered-with=usr-3LEWr3lyQSCOFkQ; luma.auth-session-key=usr-3LEWr3lyQSCOFkQ.08gl83p3j2a9yqcae4j8; luma.evt-sTJB1vG5ovVhnWm.registered-with=usr-3LEWr3lyQSCOFkQ; luma.evt-XVJmNwrFOIYxZX1.registered-with=usr-3LEWr3lyQSCOFkQ; luma.evt-ZxCl3Vtn5SNcoLH.registered-with=usr-3LEWr3lyQSCOFkQ; luma.evt-qswNTyuE7T5QwLb.registered-with=usr-3LEWr3lyQSCOFkQ; luma.evt-Bk2BNV9DvC99D8p.registered-with=usr-3LEWr3lyQSCOFkQ; luma.did=16vywvlkxqnl92c5vk5g1h9j9j67dj; luma.first-page=%2Fka2o8dzo; __stripe_sid=45525520-b2de-4476-b916-3dad3d6a1acedd8ea7; luma.native-referrer=https%3A%2F%2Fluma.com%2Fcalendar%2Fmanage%2Fcal-G9niBUMKeNUTm4O%2Fevents%3Fe%3Dcalev-wcMNhNFvllMsuxv; __cf_bm=b_x4xwOpG0IkaEphBO6177AsySg11A2FpSD14dHezRY-1764138490-1.0.1.1-VrYx4Ph6IwshFAlPiYEMiFEd_v4QP9l96nIra9OlhPvMmHaYOfVOPvp0xqj07y02elGPUiml0E8_AhuTDOASFLZvChySZFFj7ej1tmlFVhA
How to Use It
Endpoint: GET https://api2.luma.com/event/admin/get-guests
Query Parameters:
event_api_id: The event ID (e.g.,evt-u4aRgr0hLaNqiQV)pagination_limit: Number of results (e.g.,100)query: Search query (empty for all)sort_column: Sort by field (e.g.,registered_or_created_at)sort_direction:descorasc
Headers:
{
'accept': '/',
'cookie': '',
'x-luma-client-type': 'luma-web',
'origin': 'https://luma.com',
'referer': 'https://luma.com/'
}
Example Code:
const eventId = "evt-u4aRgr0hLaNqiQV";
const response = await fetch(
https://api2.luma.com/event/admin/get-guests?event_api_id=${eventId}&pagination_limit=100&query=&sort_column=registered_or_created_at&sort_direction=desc,
{
headers: {
accept: "/",
cookie:
"__stripe_mid=588eff62-04c6-4d1f-8b3e-79c32473b15bc7d41c; luma.evt-JWQLBSkGWnuaADY.registered-with=usr-3LEWr3lyQSCOFkQ; luma.auth-session-key=usr-3LEWr3lyQSCOOFkQ.08gl83p3j2a9yqcae4j8; luma.evt-sTJB1vG5ovVhnWm.registered-with=usr-3LEWr3lyQSCOFkQ; luma.evt-XVJmNwrFOIYxZX1.registered-with=usr-3LEWr3lyQSCOFkQ; luma.evt-ZxCl3Vtn5SNcoLH.registered-with=usr-3LEWr3lyQSCOFkQ; luma.evt-qswNTyuE7T5QwLb.registered-with=usr-3LEWr3lyQSCOFkQ; luma.evt-Bk2BNV9DvC99D8p.registered-with=usr-3LEWr3lyQSCOFkQ; luma.did=16vywvlkxqnl92c5vk5g1h9j9j67dj; luma.first-page=%2Fka2o8dzo; __stripe_sid=45525520-b2de-4476-b916-3dad3d6a1acedd8ea7; luma.native-referrer=https%3A%2F%2Fluma.com%2Fcalendar%2Fmanage%2Fcal-G9niBUMKeNUTm4O%2Fevents%3Fe%3Dcalev-wcMNhNFvllMsuxv; __cf_bm=b_x4xwOpG0IkaEphBO6177AsySg11A2FpSD14dHezRY-1764138490-1.0.1.1-VrYx4Ph6IwshFAlPiYEMiFEd_v4QP9l96nIra9OlhPvMmHaYOfVOPvp0xqj07y02elGPUiml0E8_AhuTDOASFLZvChySZFFj7ej1tmlFVhA",
"x-luma-client-type": "luma-web",
origin: "https://luma.com",
referer: "https://luma.com/",
},
}
);
if (response.ok) {
const data = await response.json();
console.log(Total Attendees: ${data.entries?.length || 0});
data.entries?.forEach((guest) => {
console.log(${guest.name} (${guest.email}) - ${guest.approval_status});
});
} else {
console.error("Failed:", response.status, await response.text());
}
What You Get:
- Full guest list with names, emails, approval status
- Registration answers
- Ticket information
- Check-in status
- User profile data
Important Notes:
- ⚠️ This uses an internal API endpoint (
api2.luma.com), not the public API - ⚠️ Cookies may expire and need to be refreshed from a browser session
- ⚠️ This requires that you're registered/have access to the event
- ✅ Works even if you don't own/manage the event (unlike the official API)
Option 2: Web Scraping (For Public Event Info)
For public Luma events, use web scraping to extract event details:
Method
const eventUrl = "https://lu.ma/event/evt-u4aRgr0hLaNqiQV";
const response = await fetch(eventUrl);
const html = await response.text();
// Parse the HTML to extract event details
Better Approach: Use Jina Reader
Use a tool like webfetch with Jina Reader to get clean markdown:
// Using webfetch tool
const markdown = await webfetch({
url: "https://lu.ma/event/evt-u4aRgr0hLaNqiQV",
format: "markdown",
});
Example Output
From the scraped page, you can extract:
- Event title: "Wordware Presents Sauna (2:00pm) + Friendsgiving Dinner (3:30pm): SF Only"
- Event description (full text)
- Timing details: "2:00pm - Sauna Product Presentation", "3:30pm - Turkey in the Sauna Dinner"
- Event details and agenda
---
Event ID Format
Luma event IDs follow this format:
- Pattern:
evt-{alphanumeric} - Example:
evt-u4aRgr0hLaNqiQV
You can extract the event ID from URLs like:
https://luma.com/event/evt-u4aRgr0hLaNqiQV?pk=g-cu8K8nGIpxISixT
---
API Reference
Official Luma API documentation: https://docs.lu.ma/
Key Endpoints (For Event Owners Only)
- Get Event:
GET https://public-api.luma.com/v1/event/get?event_api_id={eventId} - Get Guests:
GET https://public-api.luma.com/v1/event/get-guests?event_api_id={eventId} - Create Event:
POST https://public-api.luma.com/v1/event/create
Authentication
API key via header:
x-luma-api-key: your-api-key-here
Important: Even with a valid API key, you can only access events you own/manage.
---
Best Practice
For Getting Guest Lists (Attendees):
1. Use cookie-based auth with api2.luma.com if you have access/are registered
2. Extract cookies from your browser session (DevTools → Network → Copy cookie header)
3. Note: Cookies expire, so you may need to refresh them periodically
For Fetching Public Event Details:
1. Use web scraping (via webfetch or similar)
2. Don't waste time trying official API endpoints - they won't work without event ownership
3. Parse the event page directly to get all public information
For Managing Your Own Events:
1. Use the official Luma API (public-api.luma.com)
2. Get your API key from Settings → Options → API Keys
3. Requires Luma Plus subscription
Cookie Expiration
The cookie authentication method may stop working when:
- Session expires (typically after some time)
- You log out of Luma
- Cookies are cleared from your browser
To refresh:
1. Log into Luma in your browser
2. Open DevTools → Network tab
3. Make any request to luma.com
4. Find the request and copy the Cookie header value
5. Update your code with the new cookie string