Skip to content

Commit 50b882a

Browse files
waleedlatif1claude
andauthored
feat(luma): add Luma integration for event and guest management (#3364)
* feat(luma): add Luma integration for event and guest management Add complete Luma (lu.ma) integration with 6 tools: get event, create event, update event, list calendar events, get guests, and add guests. Includes block configuration with wandConfig for timestamps/timezones/durations, advanced mode for optional fields, and generated documentation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(luma): address PR review feedback - Remove hosts field from list_events transformResponse (not in LumaEventEntry type) - Fix truncated add_guests description by removing quotes that broke docs generator Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(luma): fix update_event field name and add_guests response parsing - Use 'id' instead of 'event_id' in update_event request body per API spec - Fix add_guests to parse entries[].guest response structure instead of flat guests array Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c8a0b62 commit 50b882a

File tree

16 files changed

+1675
-0
lines changed

16 files changed

+1675
-0
lines changed

apps/docs/components/icons.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3956,6 +3956,17 @@ export function IntercomIcon(props: SVGProps<SVGSVGElement>) {
39563956
)
39573957
}
39583958

3959+
export function LumaIcon(props: SVGProps<SVGSVGElement>) {
3960+
return (
3961+
<svg {...props} fill='none' viewBox='0 0 133 134' xmlns='http://www.w3.org/2000/svg'>
3962+
<path
3963+
d='M133 67C96.282 67 66.5 36.994 66.5 0c0 36.994-29.782 67-66.5 67 36.718 0 66.5 30.006 66.5 67 0-36.994 29.782-67 66.5-67'
3964+
fill='currentColor'
3965+
/>
3966+
</svg>
3967+
)
3968+
}
3969+
39593970
export function MailchimpIcon(props: SVGProps<SVGSVGElement>) {
39603971
return (
39613972
<svg

apps/docs/components/ui/icon-mapping.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import {
7777
LinearIcon,
7878
LinkedInIcon,
7979
LinkupIcon,
80+
LumaIcon,
8081
MailchimpIcon,
8182
MailgunIcon,
8283
MailServerIcon,
@@ -229,6 +230,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
229230
linear: LinearIcon,
230231
linkedin: LinkedInIcon,
231232
linkup: LinkupIcon,
233+
luma: LumaIcon,
232234
mailchimp: MailchimpIcon,
233235
mailgun: MailgunIcon,
234236
mem0: Mem0Icon,
Lines changed: 272 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,272 @@
1+
---
2+
title: Luma
3+
description: Manage events and guests on Luma
4+
---
5+
6+
import { BlockInfoCard } from "@/components/ui/block-info-card"
7+
8+
<BlockInfoCard
9+
type="luma"
10+
color="#FF5C35"
11+
/>
12+
13+
{/* MANUAL-CONTENT-START:intro */}
14+
[Luma](https://lu.ma/) is an event management platform that makes it easy to create, manage, and share events with your community.
15+
16+
With Luma integrated into Sim, your agents can:
17+
18+
- **Create events**: Set up new events with name, time, timezone, description, and visibility settings.
19+
- **Update events**: Modify existing event details like name, time, description, and visibility.
20+
- **Get event details**: Retrieve full details for any event by its ID.
21+
- **List calendar events**: Browse your calendar's events with date range filtering and pagination.
22+
- **Manage guest lists**: View attendees for an event, filtered by approval status.
23+
- **Add guests**: Invite new guests to events programmatically.
24+
25+
By connecting Sim with Luma, you can automate event operations within your agent workflows. Automatically create events based on triggers, sync guest lists, monitor registrations, and manage your event calendar—all handled directly by your agents via the Luma API.
26+
27+
Whether you're running community meetups, conferences, or internal team events, the Luma tool makes it easy to coordinate event management within your Sim workflows.
28+
{/* MANUAL-CONTENT-END */}
29+
30+
31+
## Usage Instructions
32+
33+
Integrate Luma into the workflow. Can create events, update events, get event details, list calendar events, get guest lists, and add guests to events.
34+
35+
36+
37+
## Tools
38+
39+
### `luma_get_event`
40+
41+
Retrieve details of a Luma event including name, time, location, hosts, and visibility settings.
42+
43+
#### Input
44+
45+
| Parameter | Type | Required | Description |
46+
| --------- | ---- | -------- | ----------- |
47+
| `apiKey` | string | Yes | Luma API key |
48+
| `eventId` | string | Yes | Event ID \(starts with evt-\) |
49+
50+
#### Output
51+
52+
| Parameter | Type | Description |
53+
| --------- | ---- | ----------- |
54+
| `event` | object | Event details |
55+
|`id` | string | Event ID |
56+
|`name` | string | Event name |
57+
|`startAt` | string | Event start time \(ISO 8601\) |
58+
|`endAt` | string | Event end time \(ISO 8601\) |
59+
|`timezone` | string | Event timezone \(IANA\) |
60+
|`durationInterval` | string | Event duration \(ISO 8601 interval, e.g. PT2H\) |
61+
|`createdAt` | string | Event creation timestamp \(ISO 8601\) |
62+
|`description` | string | Event description \(plain text\) |
63+
|`descriptionMd` | string | Event description \(Markdown\) |
64+
|`coverUrl` | string | Event cover image URL |
65+
|`url` | string | Event page URL on lu.ma |
66+
|`visibility` | string | Event visibility \(public, members-only, private\) |
67+
|`meetingUrl` | string | Virtual meeting URL |
68+
|`geoAddressJson` | json | Structured location/address data |
69+
|`geoLatitude` | string | Venue latitude coordinate |
70+
|`geoLongitude` | string | Venue longitude coordinate |
71+
|`calendarId` | string | Associated calendar ID |
72+
| `hosts` | array | Event hosts |
73+
|`name` | string | Host name |
74+
|`email` | string | Host email address |
75+
76+
### `luma_create_event`
77+
78+
Create a new event on Luma with a name, start time, timezone, and optional details like description, location, and visibility.
79+
80+
#### Input
81+
82+
| Parameter | Type | Required | Description |
83+
| --------- | ---- | -------- | ----------- |
84+
| `apiKey` | string | Yes | Luma API key |
85+
| `name` | string | Yes | Event name/title |
86+
| `startAt` | string | Yes | Event start time in ISO 8601 format \(e.g., 2025-03-15T18:00:00Z\) |
87+
| `timezone` | string | Yes | IANA timezone \(e.g., America/New_York, Europe/London\) |
88+
| `endAt` | string | No | Event end time in ISO 8601 format \(e.g., 2025-03-15T20:00:00Z\) |
89+
| `durationInterval` | string | No | Event duration as ISO 8601 interval \(e.g., PT2H for 2 hours, PT30M for 30 minutes\). Used if endAt is not provided. |
90+
| `descriptionMd` | string | No | Event description in Markdown format |
91+
| `meetingUrl` | string | No | Virtual meeting URL for online events \(e.g., Zoom, Google Meet link\) |
92+
| `visibility` | string | No | Event visibility: public, members-only, or private \(defaults to public\) |
93+
| `coverUrl` | string | No | Cover image URL \(must be a Luma CDN URL from images.lumacdn.com\) |
94+
95+
#### Output
96+
97+
| Parameter | Type | Description |
98+
| --------- | ---- | ----------- |
99+
| `event` | object | Created event details |
100+
|`id` | string | Event ID |
101+
|`name` | string | Event name |
102+
|`startAt` | string | Event start time \(ISO 8601\) |
103+
|`endAt` | string | Event end time \(ISO 8601\) |
104+
|`timezone` | string | Event timezone \(IANA\) |
105+
|`durationInterval` | string | Event duration \(ISO 8601 interval, e.g. PT2H\) |
106+
|`createdAt` | string | Event creation timestamp \(ISO 8601\) |
107+
|`description` | string | Event description \(plain text\) |
108+
|`descriptionMd` | string | Event description \(Markdown\) |
109+
|`coverUrl` | string | Event cover image URL |
110+
|`url` | string | Event page URL on lu.ma |
111+
|`visibility` | string | Event visibility \(public, members-only, private\) |
112+
|`meetingUrl` | string | Virtual meeting URL |
113+
|`geoAddressJson` | json | Structured location/address data |
114+
|`geoLatitude` | string | Venue latitude coordinate |
115+
|`geoLongitude` | string | Venue longitude coordinate |
116+
|`calendarId` | string | Associated calendar ID |
117+
| `hosts` | array | Event hosts |
118+
|`name` | string | Host name |
119+
|`email` | string | Host email address |
120+
121+
### `luma_update_event`
122+
123+
Update an existing Luma event. Only the fields you provide will be changed; all other fields remain unchanged.
124+
125+
#### Input
126+
127+
| Parameter | Type | Required | Description |
128+
| --------- | ---- | -------- | ----------- |
129+
| `apiKey` | string | Yes | Luma API key |
130+
| `eventId` | string | Yes | Event ID to update \(starts with evt-\) |
131+
| `name` | string | No | New event name/title |
132+
| `startAt` | string | No | New start time in ISO 8601 format \(e.g., 2025-03-15T18:00:00Z\) |
133+
| `timezone` | string | No | New IANA timezone \(e.g., America/New_York, Europe/London\) |
134+
| `endAt` | string | No | New end time in ISO 8601 format \(e.g., 2025-03-15T20:00:00Z\) |
135+
| `durationInterval` | string | No | New duration as ISO 8601 interval \(e.g., PT2H for 2 hours\). Used if endAt is not provided. |
136+
| `descriptionMd` | string | No | New event description in Markdown format |
137+
| `meetingUrl` | string | No | New virtual meeting URL \(e.g., Zoom, Google Meet link\) |
138+
| `visibility` | string | No | New visibility: public, members-only, or private |
139+
| `coverUrl` | string | No | New cover image URL \(must be a Luma CDN URL from images.lumacdn.com\) |
140+
141+
#### Output
142+
143+
| Parameter | Type | Description |
144+
| --------- | ---- | ----------- |
145+
| `event` | object | Updated event details |
146+
|`id` | string | Event ID |
147+
|`name` | string | Event name |
148+
|`startAt` | string | Event start time \(ISO 8601\) |
149+
|`endAt` | string | Event end time \(ISO 8601\) |
150+
|`timezone` | string | Event timezone \(IANA\) |
151+
|`durationInterval` | string | Event duration \(ISO 8601 interval, e.g. PT2H\) |
152+
|`createdAt` | string | Event creation timestamp \(ISO 8601\) |
153+
|`description` | string | Event description \(plain text\) |
154+
|`descriptionMd` | string | Event description \(Markdown\) |
155+
|`coverUrl` | string | Event cover image URL |
156+
|`url` | string | Event page URL on lu.ma |
157+
|`visibility` | string | Event visibility \(public, members-only, private\) |
158+
|`meetingUrl` | string | Virtual meeting URL |
159+
|`geoAddressJson` | json | Structured location/address data |
160+
|`geoLatitude` | string | Venue latitude coordinate |
161+
|`geoLongitude` | string | Venue longitude coordinate |
162+
|`calendarId` | string | Associated calendar ID |
163+
| `hosts` | array | Event hosts |
164+
|`name` | string | Host name |
165+
|`email` | string | Host email address |
166+
167+
### `luma_list_events`
168+
169+
List events from your Luma calendar with optional date range filtering, sorting, and pagination.
170+
171+
#### Input
172+
173+
| Parameter | Type | Required | Description |
174+
| --------- | ---- | -------- | ----------- |
175+
| `apiKey` | string | Yes | Luma API key |
176+
| `after` | string | No | Return events after this ISO 8601 datetime \(e.g., 2025-01-01T00:00:00Z\) |
177+
| `before` | string | No | Return events before this ISO 8601 datetime \(e.g., 2025-12-31T23:59:59Z\) |
178+
| `paginationLimit` | number | No | Maximum number of events to return per page |
179+
| `paginationCursor` | string | No | Pagination cursor from a previous response \(next_cursor\) to fetch the next page of results |
180+
| `sortColumn` | string | No | Column to sort by \(e.g., start_at\) |
181+
| `sortDirection` | string | No | Sort direction: asc, desc, asc nulls last, or desc nulls last |
182+
183+
#### Output
184+
185+
| Parameter | Type | Description |
186+
| --------- | ---- | ----------- |
187+
| `events` | array | List of calendar events |
188+
|`id` | string | Event ID |
189+
|`name` | string | Event name |
190+
|`startAt` | string | Event start time \(ISO 8601\) |
191+
|`endAt` | string | Event end time \(ISO 8601\) |
192+
|`timezone` | string | Event timezone \(IANA\) |
193+
|`durationInterval` | string | Event duration \(ISO 8601 interval, e.g. PT2H\) |
194+
|`createdAt` | string | Event creation timestamp \(ISO 8601\) |
195+
|`description` | string | Event description \(plain text\) |
196+
|`descriptionMd` | string | Event description \(Markdown\) |
197+
|`coverUrl` | string | Event cover image URL |
198+
|`url` | string | Event page URL on lu.ma |
199+
|`visibility` | string | Event visibility \(public, members-only, private\) |
200+
|`meetingUrl` | string | Virtual meeting URL |
201+
|`geoAddressJson` | json | Structured location/address data |
202+
|`geoLatitude` | string | Venue latitude coordinate |
203+
|`geoLongitude` | string | Venue longitude coordinate |
204+
|`calendarId` | string | Associated calendar ID |
205+
| `hasMore` | boolean | Whether more results are available for pagination |
206+
| `nextCursor` | string | Cursor to pass as paginationCursor to fetch the next page |
207+
208+
### `luma_get_guests`
209+
210+
Retrieve the guest list for a Luma event with optional filtering by approval status, sorting, and pagination.
211+
212+
#### Input
213+
214+
| Parameter | Type | Required | Description |
215+
| --------- | ---- | -------- | ----------- |
216+
| `apiKey` | string | Yes | Luma API key |
217+
| `eventId` | string | Yes | Event ID \(starts with evt-\) |
218+
| `approvalStatus` | string | No | Filter by approval status: approved, session, pending_approval, invited, declined, or waitlist |
219+
| `paginationLimit` | number | No | Maximum number of guests to return per page |
220+
| `paginationCursor` | string | No | Pagination cursor from a previous response \(next_cursor\) to fetch the next page of results |
221+
| `sortColumn` | string | No | Column to sort by: name, email, created_at, registered_at, or checked_in_at |
222+
| `sortDirection` | string | No | Sort direction: asc, desc, asc nulls last, or desc nulls last |
223+
224+
#### Output
225+
226+
| Parameter | Type | Description |
227+
| --------- | ---- | ----------- |
228+
| `guests` | array | List of event guests |
229+
|`id` | string | Guest ID |
230+
|`email` | string | Guest email address |
231+
|`name` | string | Guest full name |
232+
|`firstName` | string | Guest first name |
233+
|`lastName` | string | Guest last name |
234+
|`approvalStatus` | string | Guest approval status \(approved, session, pending_approval, invited, declined, waitlist\) |
235+
|`registeredAt` | string | Registration timestamp \(ISO 8601\) |
236+
|`invitedAt` | string | Invitation timestamp \(ISO 8601\) |
237+
|`joinedAt` | string | Join timestamp \(ISO 8601\) |
238+
|`checkedInAt` | string | Check-in timestamp \(ISO 8601\) |
239+
|`phoneNumber` | string | Guest phone number |
240+
| `hasMore` | boolean | Whether more results are available for pagination |
241+
| `nextCursor` | string | Cursor to pass as paginationCursor to fetch the next page |
242+
243+
### `luma_add_guests`
244+
245+
Add guests to a Luma event by email. Guests are added with Going (approved) status and receive one ticket of the default ticket type.
246+
247+
#### Input
248+
249+
| Parameter | Type | Required | Description |
250+
| --------- | ---- | -------- | ----------- |
251+
| `apiKey` | string | Yes | Luma API key |
252+
| `eventId` | string | Yes | Event ID \(starts with evt-\) |
253+
| `guests` | string | Yes | JSON array of guest objects. Each guest requires an "email" field and optionally "name", "first_name", "last_name". Example: \[\{"email": "user@example.com", "name": "John Doe"\}\] |
254+
255+
#### Output
256+
257+
| Parameter | Type | Description |
258+
| --------- | ---- | ----------- |
259+
| `guests` | array | List of added guests with their assigned status and ticket info |
260+
|`id` | string | Guest ID |
261+
|`email` | string | Guest email address |
262+
|`name` | string | Guest full name |
263+
|`firstName` | string | Guest first name |
264+
|`lastName` | string | Guest last name |
265+
|`approvalStatus` | string | Guest approval status \(approved, session, pending_approval, invited, declined, waitlist\) |
266+
|`registeredAt` | string | Registration timestamp \(ISO 8601\) |
267+
|`invitedAt` | string | Invitation timestamp \(ISO 8601\) |
268+
|`joinedAt` | string | Join timestamp \(ISO 8601\) |
269+
|`checkedInAt` | string | Check-in timestamp \(ISO 8601\) |
270+
|`phoneNumber` | string | Guest phone number |
271+
272+

apps/docs/content/docs/en/tools/meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
"linear",
7575
"linkedin",
7676
"linkup",
77+
"luma",
7778
"mailchimp",
7879
"mailgun",
7980
"mem0",

0 commit comments

Comments
 (0)