| name | luma-events |
| description | Create events on Luma and send bulk invites via the Luma API. Handles event creation (private by default), cover image upload, and invite sending. |
Luma Events API
Create and manage events on Luma programmatically.
Authentication
All requests use header: x-luma-api-key
LUMA_API_KEY="$(jq -r '.tools.luma_api_key' ~/.agi/config.json)"
LUMA_API="https://public-api.luma.com/v1"
AIC Calendar
All AIC events should be created under the AIC Luma calendar:
Create Event
curl -s -X POST "$LUMA_API/event/create" \
-H "x-luma-api-key: $LUMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"calendar_id": "cal-E74MDlDKBaeAwXK",
"name": "Event Title",
"description_md": "Full markdown description",
"start_at": "2026-04-15T01:30:00.000Z",
"end_at": "2026-04-15T04:30:00.000Z",
"timezone": "America/Los_Angeles",
"visibility": "private",
"geo_address_json": {
"address": "Venue Name",
"city": "San Francisco",
"region": "California",
"full_address": "123 Main St, San Francisco, CA 94105"
}
}'
Response: {"api_id": "evt-xxxxx"}
Parameters:
| Field | Type | Required | Notes |
|---|
name | string | yes | Event title |
description_md | string | yes | Markdown description (full event page body) |
start_at | ISO 8601 | yes | UTC datetime |
end_at | ISO 8601 | yes | UTC datetime |
timezone | string | yes | IANA timezone, e.g. America/Los_Angeles |
visibility | string | yes | private, public, or members-only. Always use private for AIC partner events |
geo_address_json | object | no | Location with address, city, region, full_address, google_maps_place_id |
meeting_url | string | no | Virtual meeting link |
Important: Always create events as private first. AJ or Jamie will change to public after review.
Get Event
curl -s -X GET "$LUMA_API/event/get?api_id=evt-xxxxx" \
-H "x-luma-api-key: $LUMA_API_KEY"
Returns full event object with url field (the public Luma link like https://luma.com/abc123).
Send Invites
curl -s -X POST "$LUMA_API/event/send-invites" \
-H "x-luma-api-key: $LUMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_api_id": "evt-xxxxx",
"guests": [
{"email": "guest1@example.com"},
{"email": "guest2@example.com"},
{"email": "guest3@example.com"}
]
}'
Response: {} (empty = success)
Luma sends an email to each guest. If the guest has a Luma account with a phone number, they also get an SMS.
Batch size: Send in batches of 50-100 emails per request to avoid timeouts.
Workflow for AIC Events
- Create event with
visibility: "private" → get api_id
- Fetch event to get the
url (public Luma link)
- Share url with team for review
- Send invites with the curated guest email list
- After Jamie approves, update visibility to public (manual step)
List Calendar Events
curl -s -X GET "$LUMA_API/calendar/list-events" \
-H "x-luma-api-key: $LUMA_API_KEY"
Returns {"entries": [{"api_id": "...", "event": {...}, "tags": [...]}]}.
Filter by date: ?after=2026-04-01T00:00:00.000Z
Time Conversion
All Luma times are UTC. For Pacific Time events:
- 6:30 PM PT = next day 01:30 UTC (during PDT)
- 6:30 PM PT = next day 02:30 UTC (during PST)
Example: "April 15, 2026, 6:30 PM PDT" → "2026-04-16T01:30:00.000Z"