import { Luma } from "@alhwyn/luma";
const luma = new Luma(process.env.LUMA_API_KEY!);
const { data, hasMore, nextCursor } = await luma.events.list({
pagination_limit: 20,
});
for (const event of data) {
console.log(event.name);
}
{
"data": [
{
"api_id": "evt-abc123",
"name": "SDK test event",
"start_at": "2026-07-01T18:00:00.000Z",
"end_at": "2026-07-01T20:00:00.000Z",
"timezone": "America/Los_Angeles"
}
],
"hasMore": true,
"nextCursor": "cursor_xyz789"
}
Events
List events
List events on your Luma calendar with luma.events.list(), returning a paginated response of event entries with optional filters and pagination.
import { Luma } from "@alhwyn/luma";
const luma = new Luma(process.env.LUMA_API_KEY!);
const { data, hasMore, nextCursor } = await luma.events.list({
pagination_limit: 20,
});
for (const event of data) {
console.log(event.name);
}
{
"data": [
{
"api_id": "evt-abc123",
"name": "SDK test event",
"start_at": "2026-07-01T18:00:00.000Z",
"end_at": "2026-07-01T20:00:00.000Z",
"timezone": "America/Los_Angeles"
}
],
"hasMore": true,
"nextCursor": "cursor_xyz789"
}
SDK
See Client — List responses for the shared pagination shape.
Next page (when
Repeat with each page’s
luma.events.list(params?: EventListParams): Promise<ListResponse<EventListEntry>>
Returns a paginated list of events on your calendar.
import { Luma } from "@alhwyn/luma";
const luma = new Luma(process.env.LUMA_API_KEY!);
const { data, hasMore, nextCursor } = await luma.events.list({
pagination_limit: 20,
});
for (const event of data) {
console.log(event.name);
}
{
"data": [
{
"api_id": "evt-abc123",
"name": "SDK test event",
"start_at": "2026-07-01T18:00:00.000Z",
"end_at": "2026-07-01T20:00:00.000Z",
"timezone": "America/Los_Angeles"
}
],
"hasMore": true,
"nextCursor": "cursor_xyz789"
}
Parameters
EventListParams
Optional pagination and filter options. See the official Luma API docs for available fields.
Pagination
List methods are cursor-based. Read one page, then passnextCursor as pagination_cursor to fetch the next page.
First page:
const page = await luma.events.list({ pagination_limit: 50 });
for (const event of page.data) {
console.log(event.name);
}
page.hasMore is true and page.nextCursor is set):
const nextPage = await luma.events.list({
pagination_limit: 50,
pagination_cursor: page.nextCursor!,
});
for (const event of nextPage.data) {
console.log(event.name);
}
nextCursor until hasMore is false. The same pattern applies to events.guests.list, events.ticketTypes.list, and webhooks.list.
Test it
import { Luma } from "@alhwyn/luma";
const luma = new Luma(process.env.LUMA_API_KEY!);
const { data } = await luma.events.list({ pagination_limit: 5 });
console.log(data.map((e) => e.name ?? e.api_id));