Luma APIluma.com ↗
Access public Luma (lu.ma) event data by location. Search events, get host details, ticket availability, coordinates, and guest info via 2 structured endpoints.
What is the Luma API?
The Luma API exposes 2 endpoints for discovering and inspecting public events on lu.ma. search_events returns paginated event listings filtered by city name, custom lat/lng, or Luma place ID, while get_event_details delivers per-event data including host profiles, ticket availability, sold-out status, full address, and ISO 8601 start/end times.
curl -X GET 'https://api.parse.bot/scraper/c6dfcba3-0e2a-48c5-8e21-f562868d7bf2/search_events?limit=5&latitude=40.7128&location=New+York&place_id=discplace-G0tGUVYwl7T17Sb&longitude=-74.0060' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace luma-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Luma Events API — discover public events by location, drill into details."""
from parse_apis.luma_events_api import Luma, Location, EventNotFound
client = Luma()
# Search for upcoming events in San Francisco, capped at 5 total items.
for event in client.events.search(location=Location.SAN_FRANCISCO, limit=5):
print(event.name, event.city, event.start_at, event.is_free)
# Drill into the first result for full details (hosts, guests, tickets).
summary = client.events.search(location=Location.NEW_YORK, limit=1).first()
if summary:
detail = summary.details()
print(detail.name, detail.guest_count, detail.sold_out)
for host in detail.hosts:
print(host.name, host.avatar_url)
# Fetch a known event directly by its API ID.
try:
event = client.events.get(event_api_id="evt-DmSmWL7HBwk4xNd")
print(event.name, event.timezone, event.ticket_info.is_free)
except EventNotFound as exc:
print(f"Event gone: {exc.event_api_id}")
print("exercised: events.search / EventSummary.details / events.get / EventNotFound")
Search for upcoming public events by geographic location. Accepts a city name (with built-in coordinates for major cities), custom latitude/longitude, or a Luma place ID. Returns a paginated list of events ordered by start time. Each event includes basic info, hosts, ticket pricing, and location. Pagination uses an opaque cursor; the response indicates whether more results exist.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of events to return (max 50 per page). |
| cursor | string | Opaque pagination cursor from a previous response's next_cursor field. |
| latitude | string | Custom latitude coordinate. Use together with longitude instead of location. |
| location | string | City name for location-based search. Built-in coordinates exist for: New York, San Francisco, London, Tokyo, Bangalore, Bengaluru, Mumbai, Delhi. Other city names are passed as-is. |
| place_id | string | Luma discover place API ID (e.g., 'discplace-G0tGUVYwl7T17Sb'). When provided, overrides location and lat/lng. |
| longitude | string | Custom longitude coordinate. Use together with latitude instead of location. |
{
"type": "object",
"fields": {
"events": "array of event summary objects",
"has_more": "boolean indicating if more results are available",
"next_cursor": "string opaque pagination cursor for the next page",
"total_returned": "integer count of events in this response"
},
"sample": {
"data": {
"events": [
{
"url": "i5ju0s29",
"city": "New York",
"name": "The 20th Annual Notable Occasion",
"hosts": [
{
"name": "Akari Machino",
"avatar_url": "https://cdn.lu.ma/avatars-default/avatar_16.png"
}
],
"end_at": "2026-06-11T14:00:00.000Z",
"address": "Carnegie Hall, 57th Street and, 7th Ave, New York, NY 10019, USA",
"country": "United States",
"is_free": true,
"start_at": "2026-06-11T10:00:00.000Z",
"timezone": "America/New_York",
"cover_url": "https://images.lumacdn.com/uploads/dn/afb1192c-97c1-41be-b5e0-81e4390798ff.png",
"city_state": "New York, NY",
"description": "",
"guest_count": 5,
"event_api_id": "evt-FaBuCmOx5GFoWHn",
"ticket_price": 0,
"calendar_name": "Personal",
"location_type": "offline",
"ticket_currency": ""
}
],
"has_more": true,
"next_cursor": "eyJzdiI6IjIwMjYtMDYtMTEgMTE6MDA6MDArMDAiLCJmYiI6ImV2dC1xOXBkTmxTVTl1NllKQ2kifQ",
"total_returned": 3
},
"status": "success"
}
}About the Luma API
Search Events by Location
search_events accepts a location string (e.g., "San Francisco" or "Tokyo") with built-in coordinate resolution for major cities, or raw latitude/longitude values for any geographic point. You can also pass a place_id (e.g., discplace-G0tGUVYwl7T17Sb) to target a specific Luma discovery area. Results are paginated: each response includes a next_cursor string and a has_more boolean. Pass the cursor back as the cursor parameter to fetch the next page. Each page returns up to 50 events, and total_returned tells you how many came back in the current response.
Event Search Response Fields
Each object in the events array includes event_api_id, name, description, start_at, end_at, timezone, url, cover_url, location_type, and address. The event_api_id value (e.g., evt-DmSmWL7HBwk4xNd) is the key input to get_event_details for retrieving full event data.
Event Detail Fields
get_event_details takes a single required parameter, event_api_id, and returns a richer record: hosts (array with name, username, avatar_url, and bio), sold_out boolean, country, city, address, start_at, end_at, timezone, and url. This is where you get host identity data and ticket availability signals not present in the search results.
The Luma API is a managed, monitored endpoint for luma.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when luma.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official luma.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a local event discovery app that filters lu.ma events by city using the
locationparameter. - Aggregate event host profiles (name, bio, avatar) for speaker or organizer research.
- Monitor sold-out status on specific events using the
sold_outfield fromget_event_details. - Pull event coordinates and addresses for plotting public events on a map.
- Paginate through all upcoming events in a metro area by chaining
next_cursorvalues. - Feed event start/end times and timezone into a calendar or scheduling tool.
- Identify events by a specific Luma place ID to scope results to a defined discovery region.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Luma have an official developer API?+
What does `get_event_details` return beyond what `search_events` includes?+
get_event_details adds host objects (with name, username, avatar_url, and bio), a sold_out boolean, and country and city fields. The search results give you enough to identify an event; the detail endpoint gives you the host identity and ticket availability data needed to act on it.Does the API cover private or invite-only Luma events?+
Does the API return attendee lists or RSVP counts?+
How does pagination work with `search_events`?+
has_more boolean and a next_cursor string. When has_more is true, pass the next_cursor value as the cursor parameter in your next request to retrieve the following page. Each page returns at most 50 events, and total_returned reflects the count in the current page only, not the total across all pages.