REST API reference
Meetup API
14 endpoints for Meetup. Each one is a POST with a JSON body, called with your API key.
- Base URL
- https://cotlet.dev/api/v1/meetup
- Connects with
- Your own Meetup account, as organizer or co-organizer of the group
- Integration page
- Meetup
| Endpoint | Access | Description |
|---|---|---|
| list_groups | read | Groups you organize or co-organize, with member count and your role. |
| list_events | read | Events of a group with date, RSVP counts, attendee limit and status. |
| get_event | read | Full event: title, description, time, venue or online link, hosts, fee and settings. |
| list_attendees | read | RSVPs of an event with guests, answers and check-in status. |
| list_members | read | Members of your group with join date and role. |
| create_event | write | New event as a draft, or published without an announcement. |
| copy_event | write | Copy a past event to a new date, keeping its description, venue and settings. |
| update_event | write | Change the title, time, description, venue or attendee limit of an upcoming event. |
| announce_event | write | Send the announcement of a published event to your members. |
| update_attendee | write | Mark a member as attending, remove them, or move them off the waitlist. |
| mark_attendance | write | Set check-in status for attendees of an event, from 1 hour before it starts. |
| message_attendees | write | Send a message to the people who RSVPed going to an upcoming or past event. |
| message_members | write | Contact members of your group who opted in to organizer announcements. |
| cancel_event | write | Cancel an upcoming event. Attendees are notified and it cannot be undone. |
List groups
readPOST https://cotlet.dev/api/v1/meetup/list_groups
Returns every group where you are organizer or co-organizer. Use group_urlname from each item as the group parameter of the other tools.
Parameters
No parameters.
Request
curl -X POST https://cotlet.dev/api/v1/meetup/list_groups \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("meetup", "list_groups") const result = await cotlet.call('meetup', 'list_groups'); cotlet call meetup list_groups Example response
{
"groups": [
{
"group_urlname": "tech-founders-berlin",
"name": "Tech Founders Berlin",
"role": "organizer",
"members": 2140
}
]
} List events
readPOST https://cotlet.dev/api/v1/meetup/list_events
Lists events of one group, soonest first for upcoming and newest first for past. Each item has the going and waitlist counts. get_event returns the full text.
Parameters
| Name | Type | Description |
|---|---|---|
| group_urlname required | string | Group URL name, e.g. tech-founders-berlin. |
| status | enum | upcoming, past, draft or cancelled. Default: upcoming. |
| limit | integer | 1 to 50. Default: 20. |
| cursor | string | Next page cursor from the previous call. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/list_events \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"group_urlname":"https://example.com"}' result = client.call("meetup", "list_events", {"group_urlname":"https://example.com"}) const result = await cotlet.call('meetup', 'list_events', {"group_urlname":"https://example.com"}); cotlet call meetup list_events --data '{"group_urlname":"https://example.com"}' Example response
{
"events": [
{
"event_id": "311204587",
"title": "Python Night #23",
"start_time": "2026-10-08T19:00:00+02:00",
"status": "past",
"going": 38,
"waitlist": 0,
"attendee_limit": 40
}
],
"next_cursor": null
} Get event
readPOST https://cotlet.dev/api/v1/meetup/get_event
Returns one event with its full description, venue or online link, hosts and settings such as the attendee limit. Use it before copy_event or update_event.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/get_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("meetup", "get_event", {"event_id":"event_8c41d2"}) const result = await cotlet.call('meetup', 'get_event', {"event_id":"event_8c41d2"}); cotlet call meetup get_event --data '{"event_id":"event_8c41d2"}' Example response
{
"event_id": "311204587",
"title": "Python Night #23",
"description": "Lightning talks and pizza.",
"start_time": "2026-10-08T19:00:00+02:00",
"duration_minutes": 120,
"venue": {
"name": "Co-Work Mitte",
"address": "Torstr. 1",
"city": "Berlin"
},
"attendee_limit": 40,
"hosts": [
"Dana K."
]
} List attendees
readPOST https://cotlet.dev/api/v1/meetup/list_attendees
Returns the RSVPs of one event with the guests each member brings, answers to your event questions and check-in status. Filter by status to see the waitlist or the no-shows.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
| status | enum | going, waitlist, not_going, checked_in, no_show or all. Default: going. |
| cursor | string | Next page cursor from the previous call. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/list_attendees \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("meetup", "list_attendees", {"event_id":"event_8c41d2"}) const result = await cotlet.call('meetup', 'list_attendees', {"event_id":"event_8c41d2"}); cotlet call meetup list_attendees --data '{"event_id":"event_8c41d2"}' Example response
{
"attendees": [
{
"member_id": "402118",
"name": "Ana L.",
"status": "going",
"guests": 1,
"checked_in": false
}
],
"next_cursor": null
} List members
readPOST https://cotlet.dev/api/v1/meetup/list_members
Lists members of one group, newest first. Filter by join date to find new members. Pages hold up to 200 members; pass next_cursor back as cursor.
Parameters
| Name | Type | Description |
|---|---|---|
| group_urlname required | string | Group URL name, e.g. tech-founders-berlin. |
| joined_since | date | Only members who joined on or after this date. |
| limit | integer | 1 to 200. Default: 100. |
| cursor | string | Next page cursor from the previous call. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/list_members \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"group_urlname":"https://example.com"}' result = client.call("meetup", "list_members", {"group_urlname":"https://example.com"}) const result = await cotlet.call('meetup', 'list_members', {"group_urlname":"https://example.com"}); cotlet call meetup list_members --data '{"group_urlname":"https://example.com"}' Example response
{
"members": [
{
"member_id": "402118",
"name": "Ana L.",
"role": "member",
"joined_at": "2026-10-01T18:21:00Z"
}
],
"next_cursor": "eyJvZmZzZXQiOjEwMH0"
} POST https://cotlet.dev/api/v1/meetup/create_event
Creates an event in your group. It is saved as a draft unless publish is true. A published event is visible to everyone, but members are told only when you call announce_event. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| group_urlname required | string | Group URL name, e.g. tech-founders-berlin. |
| title required | string | Under 80 characters. |
| start_time required | datetime | ISO 8601 with time zone. |
| duration_minutes | integer | Default: 120. |
| description | string | Event description, Markdown. |
| venue | object | name, address and city, or online_url for an online event. |
| attendee_limit | integer | Turns on the waitlist when reached. |
| publish | boolean | Publish now or keep as draft. Default: false. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/create_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"group_urlname":"tech-founders-berlin","title":"Intro to SQL","start_time":"2026-11-03T19:00:00+01:00","duration_minutes":120,"venue":{"name":"Co-Work Mitte","address":"Torstr. 1","city":"Berlin"},"attendee_limit":40,"publish":false}' result = client.call("meetup", "create_event", {"group_urlname":"tech-founders-berlin","title":"Intro to SQL","start_time":"2026-11-03T19:00:00+01:00","duration_minutes":120,"venue":{"name":"Co-Work Mitte","address":"Torstr. 1","city":"Berlin"},"attendee_limit":40,"publish":False}) const result = await cotlet.call('meetup', 'create_event', {"group_urlname":"tech-founders-berlin","title":"Intro to SQL","start_time":"2026-11-03T19:00:00+01:00","duration_minutes":120,"venue":{"name":"Co-Work Mitte","address":"Torstr. 1","city":"Berlin"},"attendee_limit":40,"publish":false}); cotlet call meetup create_event --data '{"group_urlname":"tech-founders-berlin","title":"Intro to SQL","start_time":"2026-11-03T19:00:00+01:00","duration_minutes":120,"venue":{"name":"Co-Work Mitte","address":"Torstr. 1","city":"Berlin"},"attendee_limit":40,"publish":false}' Example response
{
"event_id": "311990021",
"status": "draft",
"title": "Intro to SQL",
"start_time": "2026-11-03T19:00:00+01:00"
} POST https://cotlet.dev/api/v1/meetup/copy_event
Creates a new event from an existing one with the same description, venue and settings, at a new start time. It is a draft unless publish is true. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
| start_time required | datetime | New start, ISO 8601 with time zone. |
| title | string | New title. Default: the old one. |
| publish | boolean | Publish now or keep as draft. Default: false. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/copy_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"311204587","start_time":"2026-11-12T19:00:00+01:00","title":"Python Night #24","publish":true}' result = client.call("meetup", "copy_event", {"event_id":"311204587","start_time":"2026-11-12T19:00:00+01:00","title":"Python Night #24","publish":True}) const result = await cotlet.call('meetup', 'copy_event', {"event_id":"311204587","start_time":"2026-11-12T19:00:00+01:00","title":"Python Night #24","publish":true}); cotlet call meetup copy_event --data '{"event_id":"311204587","start_time":"2026-11-12T19:00:00+01:00","title":"Python Night #24","publish":true}' Example response
{
"event_id": "311988140",
"status": "draft",
"announced": false,
"start_time": "2026-11-12T19:00:00+01:00",
"url": "https://www.meetup.com/yourgroup/events/311988140/"
} POST https://cotlet.dev/api/v1/meetup/update_event
Changes fields of an upcoming event. Only the fields you pass change. Edits to a published event are visible to members and attendees. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
| fields required | object | Any of title, start_time, duration_minutes, description, venue, attendee_limit. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/update_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2","fields":"fields"}' result = client.call("meetup", "update_event", {"event_id":"event_8c41d2","fields":"fields"}) const result = await cotlet.call('meetup', 'update_event', {"event_id":"event_8c41d2","fields":"fields"}); cotlet call meetup update_event --data '{"event_id":"event_8c41d2","fields":"fields"}' Example response
{
"event_id": "311988140",
"status": "updated",
"changed": [
"attendee_limit"
]
} POST https://cotlet.dev/api/v1/meetup/announce_event
Sends the announcement of one published event to the members of your group. Drafts cannot be announced. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/announce_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("meetup", "announce_event", {"event_id":"event_8c41d2"}) const result = await cotlet.call('meetup', 'announce_event', {"event_id":"event_8c41d2"}); cotlet call meetup announce_event --data '{"event_id":"event_8c41d2"}' Example response
{
"event_id": "311988140",
"announced": true
} POST https://cotlet.dev/api/v1/meetup/update_attendee
Changes the RSVP of one member for one event. Moving off the waitlist needs a free spot under the attendee limit. The member sees the change. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
| member_id required | string | Member ID from list_attendees or list_members. |
| action required | enum | mark_attending, remove or move_from_waitlist. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/update_attendee \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2","member_id":"member_8c41d2","action":"mark_attending"}' result = client.call("meetup", "update_attendee", {"event_id":"event_8c41d2","member_id":"member_8c41d2","action":"mark_attending"}) const result = await cotlet.call('meetup', 'update_attendee', {"event_id":"event_8c41d2","member_id":"member_8c41d2","action":"mark_attending"}); cotlet call meetup update_attendee --data '{"event_id":"event_8c41d2","member_id":"member_8c41d2","action":"mark_attending"}' Example response
{
"event_id": "311204587",
"member_id": "402118",
"status": "going"
} Mark attendance
writePOST https://cotlet.dev/api/v1/meetup/mark_attendance
Sets the status of many attendees in one call, from 1 hour before the event starts, also after it has ended. It sends nothing to members and one more call changes the status again, so it runs without asking first.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
| member_ids required | string[] | Member IDs from list_attendees. |
| status required | enum | checked_in, no_show or not_coming. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/mark_attendance \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"311204587","member_ids":["402118","402119"],"status":"no_show"}' result = client.call("meetup", "mark_attendance", {"event_id":"311204587","member_ids":["402118","402119"],"status":"no_show"}) const result = await cotlet.call('meetup', 'mark_attendance', {"event_id":"311204587","member_ids":["402118","402119"],"status":"no_show"}); cotlet call meetup mark_attendance --data '{"event_id":"311204587","member_ids":["402118","402119"],"status":"no_show"}' Example response
{
"event_id": "311204587",
"updated": 2,
"status": "no_show"
} POST https://cotlet.dev/api/v1/meetup/message_attendees
Sends one message with a subject to the people who RSVPed going to an upcoming or past event, under your name. Returns how many people it reached. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
| subject required | string | Message subject. |
| body required | string | Message text. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/message_attendees \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"311988140","subject":"Room 204 and 19:30 start tonight","body":"Python Night moved to room 204 at Co-Work Mitte and starts at 19:30. Same building, same talks."}' result = client.call("meetup", "message_attendees", {"event_id":"311988140","subject":"Room 204 and 19:30 start tonight","body":"Python Night moved to room 204 at Co-Work Mitte and starts at 19:30. Same building, same talks."}) const result = await cotlet.call('meetup', 'message_attendees', {"event_id":"311988140","subject":"Room 204 and 19:30 start tonight","body":"Python Night moved to room 204 at Co-Work Mitte and starts at 19:30. Same building, same talks."}); cotlet call meetup message_attendees --data '{"event_id":"311988140","subject":"Room 204 and 19:30 start tonight","body":"Python Night moved to room 204 at Co-Work Mitte and starts at 19:30. Same building, same talks."}' Example response
{
"event_id": "311204587",
"status": "sent",
"recipients": 38
} POST https://cotlet.dev/api/v1/meetup/message_members
Sends one message to the members of your group who opted in to organizer announcements, under your name. Returns how many people it reached. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| group_urlname required | string | Group URL name, e.g. tech-founders-berlin. |
| subject required | string | Message subject. |
| body required | string | Message text. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/message_members \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"group_urlname":"https://example.com","subject":"subject","body":"body"}' result = client.call("meetup", "message_members", {"group_urlname":"https://example.com","subject":"subject","body":"body"}) const result = await cotlet.call('meetup', 'message_members', {"group_urlname":"https://example.com","subject":"subject","body":"body"}); cotlet call meetup message_members --data '{"group_urlname":"https://example.com","subject":"subject","body":"body"}' Example response
{
"group_urlname": "tech-founders-berlin",
"status": "sent",
"recipients": 1760
} POST https://cotlet.dev/api/v1/meetup/cancel_event
Cancels one upcoming event. Attendees are notified and the cancellation cannot be undone. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
Request
curl -X POST https://cotlet.dev/api/v1/meetup/cancel_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("meetup", "cancel_event", {"event_id":"event_8c41d2"}) const result = await cotlet.call('meetup', 'cancel_event', {"event_id":"event_8c41d2"}); cotlet call meetup cancel_event --data '{"event_id":"event_8c41d2"}' Example response
{
"event_id": "311988140",
"status": "cancelled"
}