REST API reference
Evite API
13 endpoints for Evite. Each one is a POST with a JSON body, called with your API key.
- Base URL
- https://cotlet.dev/api/v1/evite
- Connects with
- Your own Evite account (the host of the events)
- Integration page
- Evite
| Endpoint | Access | Description |
|---|---|---|
| list_events | read | Invitations you host, from My Invitations, with date and status. |
| get_event | read | Event details: title, host and co-hosts, date, time zone, location, host note and RSVP settings. |
| list_guests | read | Guest list with RSVP, party size and comment, plus counts per RSVP status. |
| export_guest_list | read | The guest list as a file: name, email or phone, RSVP, party count and comment. |
| create_event | write | New invitation draft from a gallery design. Nothing is sent until send_invitation. |
| update_event | write | Change event details. Only the fields you pass change. |
| duplicate_event | write | Copy one of your current or past invitations into a new draft. |
| add_guests | write | Add guests by email or phone. On an event already sent, they get the invitation right away. |
| send_invitation | write | Send a draft invitation to its guests. Free designs only. |
| update_guest_rsvp | write | Set a guest's response and party size as host. The guest is not notified. |
| message_guests | write | Send a message to a group by RSVP status or to one guest. Each guest gets it privately. |
| set_reminders | write | Replace the event's reminders. Up to 5, each at least 30 minutes from now. |
| cancel_event | write | Cancel an event before its date, optionally with a note to guests. Evite lets you reinstate it. |
List events
readPOST https://cotlet.dev/api/v1/evite/list_events
Lists the events in your My Invitations. Canceled events are included when you ask for them, so you can find one to reinstate. Use event_id from each item in the other endpoints.
Parameters
| Name | Type | Description |
|---|---|---|
| status | enum | upcoming, past or canceled. Default: upcoming. |
| query | string | Only events whose title contains this text. |
| limit | integer | 1 to 50. Default: 20. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/list_events \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("evite", "list_events") const result = await cotlet.call('evite', 'list_events'); cotlet call evite list_events Example response
{
"events": [
{
"event_id": "ev_7Q2KX9M4",
"title": "Team offsite dinner",
"start": "2026-11-14T18:00:00-05:00",
"status": "upcoming",
"guests": 42
},
{
"event_id": "ev_3H8WNP6Z",
"title": "Holiday party 2025",
"start": "2025-12-13T19:00:00-05:00",
"status": "past",
"guests": 58
}
]
} Get event
readPOST https://cotlet.dev/api/v1/evite/get_event
Returns one event as you set it in Edit Details, plus its RSVP settings: the RSVP limit and the maximum number of additional guests per RSVP (up to 9). Use it before update_event or set_reminders to see the date and time zone.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/get_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("evite", "get_event", {"event_id":"event_8c41d2"}) const result = await cotlet.call('evite', 'get_event', {"event_id":"event_8c41d2"}); cotlet call evite get_event --data '{"event_id":"event_8c41d2"}' Example response
{
"event_id": "ev_7Q2KX9M4",
"title": "Team offsite dinner",
"host_name": "Maya Chen",
"start": "2026-11-14T18:00:00-05:00",
"time_zone": "America/New_York",
"location": "Harbor House, 12 Pier St",
"host_note": "Dinner is on us. Please RSVP by Friday.",
"rsvp_limit": 60,
"max_additional_guests": 1,
"status": "upcoming"
} List guests
readPOST https://cotlet.dev/api/v1/evite/list_guests
Returns the guests of one event as View Guest List shows them: name, email or phone, RSVP, party count and comment. Guests whose invitation was not delivered are listed first. The counts block gives the number of guests per status and the total party count. Guests added through the shareable link appear only after they RSVP.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
| rsvp | enum | all, yes, no, maybe or no_reply. Default: all. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/list_guests \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("evite", "list_guests", {"event_id":"event_8c41d2"}) const result = await cotlet.call('evite', 'list_guests', {"event_id":"event_8c41d2"}); cotlet call evite list_guests --data '{"event_id":"event_8c41d2"}' Example response
{
"counts": {
"yes": 21,
"no": 4,
"maybe": 3,
"no_reply": 14,
"party_total": 39
},
"guests": [
{
"guest_id": "g_41a9",
"name": "Sam Rivera",
"email": "sam@example.com",
"rsvp": "no_reply",
"party_size": null,
"comment": null,
"delivery": "delivered"
},
{
"guest_id": "g_41b2",
"name": "Priya Nair",
"phone": "+12025550143",
"rsvp": "yes",
"party_size": 2,
"comment": "Vegetarian for both of us",
"delivery": "delivered"
}
]
} Export guest list
readPOST https://cotlet.dev/api/v1/evite/export_guest_list
Runs the same Export guest list download as Manage Event and returns a link to the file with the number of guests in it. It reads only and sends nothing.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/export_guest_list \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("evite", "export_guest_list", {"event_id":"event_8c41d2"}) const result = await cotlet.call('evite', 'export_guest_list', {"event_id":"event_8c41d2"}); cotlet call evite export_guest_list --data '{"event_id":"event_8c41d2"}' Example response
{
"event_id": "ev_7Q2KX9M4",
"guests": 42,
"columns": [
"name",
"email_or_phone",
"rsvp",
"party_count",
"comment"
],
"url": "https://files.cotlet.example/exports/ev_7Q2KX9M4.csv"
} Create event
writePOST https://cotlet.dev/api/v1/evite/create_event
Creates a draft from a free design in the Evite gallery and fills the Event Details. The draft reaches no one, and you can change it with update_event, so it runs without asking. Premium designs and Premium upgrades are bought in Evite, not by this tool; Cotlet never pays for you.
Parameters
| Name | Type | Description |
|---|---|---|
| design required | string | Free design from the Evite gallery, by name or keyword. |
| title required | string | Event title. |
| start required | datetime | Start, ISO 8601. |
| time_zone | string | IANA time zone, e.g. America/New_York. |
| location | string | Venue name or address. |
| host_name | string | Host name shown on the invitation. |
| host_note | string | Message from the host. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/create_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"design":"design","title":"title","start":"2026-10-01T09:00:00Z"}' result = client.call("evite", "create_event", {"design":"design","title":"title","start":"2026-10-01T09:00:00Z"}) const result = await cotlet.call('evite', 'create_event', {"design":"design","title":"title","start":"2026-10-01T09:00:00Z"}); cotlet call evite create_event --data '{"design":"design","title":"title","start":"2026-10-01T09:00:00Z"}' Example response
{
"event_id": "ev_9R5TLD2A",
"title": "Offsite dinner",
"start": "2026-11-14T18:00:00-05:00",
"time_zone": "America/New_York",
"status": "draft"
} POST https://cotlet.dev/api/v1/evite/update_event
Edits an event like Edit Details: title, host name, date, time, time zone, location and host note, until the event date. Evite does not say whether guests are told about a change, but they see the new details on the invitation. Design text is separate: if the time or place appears in the design, keep both in step. 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, host_name, start, time_zone, location, host_note. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/update_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2","fields":"fields"}' result = client.call("evite", "update_event", {"event_id":"event_8c41d2","fields":"fields"}) const result = await cotlet.call('evite', 'update_event', {"event_id":"event_8c41d2","fields":"fields"}); cotlet call evite update_event --data '{"event_id":"event_8c41d2","fields":"fields"}' Example response
{
"event_id": "ev_7Q2KX9M4",
"updated": [
"start",
"location"
],
"start": "2026-12-12T19:00:00-05:00",
"location": "Harbor House, 12 Pier St"
} Duplicate event
writePOST https://cotlet.dev/api/v1/evite/duplicate_event
Runs Duplicate Invitation: a new draft with the old design and details, to update and send. Works only on invitations created from your own account, not on events from the previous version of Evite. Evite does not say whether guests are copied, so check with list_guests. The copy reaches no one and is just a draft, so it runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/duplicate_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("evite", "duplicate_event", {"event_id":"event_8c41d2"}) const result = await cotlet.call('evite', 'duplicate_event', {"event_id":"event_8c41d2"}); cotlet call evite duplicate_event --data '{"event_id":"event_8c41d2"}' Example response
{
"event_id": "ev_5K1BQC8E",
"copied_from": "ev_3H8WNP6Z",
"title": "Holiday party 2025",
"status": "draft"
} POST https://cotlet.dev/api/v1/evite/add_guests
Adds guests the way Add Guests does. On an event that is already sent, each new guest receives the same invitation at once, with the RSVP link. A free invitation holds up to 750 guests and Evite Pro up to 2,500. Text invitations work for US and Canada numbers only, and every number needs a name. 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. |
| guests required | object[] | List of { name, email } or { name, phone }. Text invites: US and Canada numbers only. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/add_guests \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"ev_7Q2KX9M4","guests":[{"name":"Dana & Chris Reyes","email":"dana@example.com"},{"name":"Luis Ortega","email":"luis@example.com"},{"name":"Priya Nair","phone":"+12025550143"}]}' result = client.call("evite", "add_guests", {"event_id":"ev_7Q2KX9M4","guests":[{"name":"Dana & Chris Reyes","email":"dana@example.com"},{"name":"Luis Ortega","email":"luis@example.com"},{"name":"Priya Nair","phone":"+12025550143"}]}) const result = await cotlet.call('evite', 'add_guests', {"event_id":"ev_7Q2KX9M4","guests":[{"name":"Dana & Chris Reyes","email":"dana@example.com"},{"name":"Luis Ortega","email":"luis@example.com"},{"name":"Priya Nair","phone":"+12025550143"}]}); cotlet call evite add_guests --data '{"event_id":"ev_7Q2KX9M4","guests":[{"name":"Dana & Chris Reyes","email":"dana@example.com"},{"name":"Luis Ortega","email":"luis@example.com"},{"name":"Priya Nair","phone":"+12025550143"}]}' Example response
{
"event_id": "ev_7Q2KX9M4",
"added": 3,
"guests": [
{
"guest_id": "g_52c1",
"name": "Dana Reyes",
"via": "email"
},
{
"guest_id": "g_52c2",
"name": "Luis Ortega",
"via": "email"
},
{
"guest_id": "g_52c3",
"name": "Priya Nair",
"via": "text"
}
]
} POST https://cotlet.dev/api/v1/evite/send_invitation
Sends the draft to every guest on its list. It works for free invitations. A Premium invitation is charged by guest list size in Evite, so the call stops with payment_required and you finish it in Evite. 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/evite/send_invitation \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("evite", "send_invitation", {"event_id":"event_8c41d2"}) const result = await cotlet.call('evite', 'send_invitation', {"event_id":"event_8c41d2"}); cotlet call evite send_invitation --data '{"event_id":"event_8c41d2"}' Example response
{
"event_id": "ev_9R5TLD2A",
"status": "sent",
"invited": 42,
"sent_at": "2026-10-14T09:30:00-04:00"
} Update guest RSVP
writePOST https://cotlet.dev/api/v1/evite/update_guest_rsvp
Does what Edit under View Guest List does: sets the response to yes, no or maybe, with a guest count. Evite does not tell the guest, and guests can still change their own answer later. It reaches no one and one more call undoes it, so it runs without asking.
Parameters
| Name | Type | Description |
|---|---|---|
| event_id required | string | Event ID from list_events. |
| guest_id required | string | Guest ID from list_guests. |
| response required | enum | yes, no or maybe. |
| party_size | integer | Number of people in the party. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/update_guest_rsvp \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"ev_7Q2KX9M4","guest_id":"g_41a9","response":"yes","party_size":2}' result = client.call("evite", "update_guest_rsvp", {"event_id":"ev_7Q2KX9M4","guest_id":"g_41a9","response":"yes","party_size":2}) const result = await cotlet.call('evite', 'update_guest_rsvp', {"event_id":"ev_7Q2KX9M4","guest_id":"g_41a9","response":"yes","party_size":2}); cotlet call evite update_guest_rsvp --data '{"event_id":"ev_7Q2KX9M4","guest_id":"g_41a9","response":"yes","party_size":2}' Example response
{
"event_id": "ev_7Q2KX9M4",
"guest_id": "g_41a9",
"rsvp": "yes",
"party_size": 2,
"guest_notified": false
} POST https://cotlet.dev/api/v1/evite/message_guests
Runs Send Message from Guest Options. Groups are all, attending, declined and no_reply (still no response). Each guest receives the message on their own, so guests never see each other's email addresses. Evite sets no cap on messages. To write to one guest, pass guest_id. 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. |
| body required | string | Message text. |
| group | enum | all, attending, declined or no_reply. Default: all. |
| guest_id | string | Send to this one guest instead of a group. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/message_guests \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"ev_7Q2KX9M4","group":"no_reply","body":"Quick nudge: please RSVP by Friday so we can order food. Thanks!"}' result = client.call("evite", "message_guests", {"event_id":"ev_7Q2KX9M4","group":"no_reply","body":"Quick nudge: please RSVP by Friday so we can order food. Thanks!"}) const result = await cotlet.call('evite', 'message_guests', {"event_id":"ev_7Q2KX9M4","group":"no_reply","body":"Quick nudge: please RSVP by Friday so we can order food. Thanks!"}); cotlet call evite message_guests --data '{"event_id":"ev_7Q2KX9M4","group":"no_reply","body":"Quick nudge: please RSVP by Friday so we can order food. Thanks!"}' Example response
{
"event_id": "ev_7Q2KX9M4",
"status": "sent",
"group": "no_reply",
"recipients": 14,
"sent_at": "2026-10-14T18:05:00-04:00"
} POST https://cotlet.dev/api/v1/evite/set_reminders
Replaces the reminders of Manage Event with the times you pass. Each must be at least 30 minutes from now and no later than 30 minutes before the event starts; an empty list removes them all, including the automatic one. Reminders go to guests who have not replied and to Yes and Maybe guests. The text is Evite's own and cannot be changed. Not available when RSVPs are off. 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. |
| send_at required | string[] | Up to 5 ISO 8601 datetimes. Empty list removes all. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/set_reminders \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2","send_at":["send at"]}' result = client.call("evite", "set_reminders", {"event_id":"event_8c41d2","send_at":["send at"]}) const result = await cotlet.call('evite', 'set_reminders', {"event_id":"event_8c41d2","send_at":["send at"]}); cotlet call evite set_reminders --data '{"event_id":"event_8c41d2","send_at":["send at"]}' Example response
{
"event_id": "ev_7Q2KX9M4",
"event_start": "2026-11-14T18:00:00-05:00",
"reminders": [
"2026-11-12T18:00:00-05:00",
"2026-11-14T10:00:00-05:00"
]
} POST https://cotlet.dev/api/v1/evite/cancel_event
Runs Cancel Event from My Invitations, with the optional personal message to guests that Evite asks for after cancelling. Evite does not say guests get an automatic notice, so pass message when they should hear it. The host can reinstate the event in Evite any time before its original date. 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. |
| message | string | Note sent to guests with the cancellation. |
Request
curl -X POST https://cotlet.dev/api/v1/evite/cancel_event \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_id":"event_8c41d2"}' result = client.call("evite", "cancel_event", {"event_id":"event_8c41d2"}) const result = await cotlet.call('evite', 'cancel_event', {"event_id":"event_8c41d2"}); cotlet call evite cancel_event --data '{"event_id":"event_8c41d2"}' Example response
{
"event_id": "ev_7Q2KX9M4",
"status": "canceled",
"message_sent": true
}