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
Evite Endpoints
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.

POST 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

Parameters: list_events
NameTypeDescription
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
curl -X POST https://cotlet.dev/api/v1/evite/list_events \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("evite", "list_events")
Node.js
const result = await cotlet.call('evite', 'list_events');
CLI
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

read

POST 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

Parameters: get_event
NameTypeDescription
event_id required string Event ID from list_events.

Request

cURL
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"}'
Python
result = client.call("evite", "get_event", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('evite', 'get_event', {"event_id":"event_8c41d2"});
CLI
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"
}

POST 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

Parameters: list_guests
NameTypeDescription
event_id required string Event ID from list_events.
rsvp enum all, yes, no, maybe or no_reply. Default: all.

Request

cURL
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"}'
Python
result = client.call("evite", "list_guests", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('evite', 'list_guests', {"event_id":"event_8c41d2"});
CLI
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"
    }
  ]
}

POST 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

Parameters: export_guest_list
NameTypeDescription
event_id required string Event ID from list_events.

Request

cURL
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"}'
Python
result = client.call("evite", "export_guest_list", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('evite', 'export_guest_list', {"event_id":"event_8c41d2"});
CLI
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

write

POST 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

Parameters: create_event
NameTypeDescription
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
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"}'
Python
result = client.call("evite", "create_event", {"design":"design","title":"title","start":"2026-10-01T09:00:00Z"})
Node.js
const result = await cotlet.call('evite', 'create_event', {"design":"design","title":"title","start":"2026-10-01T09:00:00Z"});
CLI
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"
}

Update event

write Confirm

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

Parameters: update_event
NameTypeDescription
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
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"}'
Python
result = client.call("evite", "update_event", {"event_id":"event_8c41d2","fields":"fields"})
Node.js
const result = await cotlet.call('evite', 'update_event', {"event_id":"event_8c41d2","fields":"fields"});
CLI
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"
}

POST 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

Parameters: duplicate_event
NameTypeDescription
event_id required string Event ID from list_events.

Request

cURL
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"}'
Python
result = client.call("evite", "duplicate_event", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('evite', 'duplicate_event', {"event_id":"event_8c41d2"});
CLI
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"
}

Add guests

write Confirm

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

Parameters: add_guests
NameTypeDescription
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
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"}]}'
Python
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"}]})
Node.js
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"}]});
CLI
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"
    }
  ]
}

Send invitation

write Confirm

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

Parameters: send_invitation
NameTypeDescription
event_id required string Event ID from list_events.

Request

cURL
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"}'
Python
result = client.call("evite", "send_invitation", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('evite', 'send_invitation', {"event_id":"event_8c41d2"});
CLI
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"
}

POST 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

Parameters: update_guest_rsvp
NameTypeDescription
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
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}'
Python
result = client.call("evite", "update_guest_rsvp", {"event_id":"ev_7Q2KX9M4","guest_id":"g_41a9","response":"yes","party_size":2})
Node.js
const result = await cotlet.call('evite', 'update_guest_rsvp', {"event_id":"ev_7Q2KX9M4","guest_id":"g_41a9","response":"yes","party_size":2});
CLI
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
}

Message guests

write Confirm

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

Parameters: message_guests
NameTypeDescription
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
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!"}'
Python
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!"})
Node.js
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!"});
CLI
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"
}

Set reminders

write Confirm

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

Parameters: set_reminders
NameTypeDescription
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
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"]}'
Python
result = client.call("evite", "set_reminders", {"event_id":"event_8c41d2","send_at":["send at"]})
Node.js
const result = await cotlet.call('evite', 'set_reminders', {"event_id":"event_8c41d2","send_at":["send at"]});
CLI
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"
  ]
}

Cancel event

write Confirm

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

Parameters: cancel_event
NameTypeDescription
event_id required string Event ID from list_events.
message string Note sent to guests with the cancellation.

Request

cURL
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"}'
Python
result = client.call("evite", "cancel_event", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('evite', 'cancel_event', {"event_id":"event_8c41d2"});
CLI
cotlet call evite cancel_event --data '{"event_id":"event_8c41d2"}'

Example response

{
  "event_id": "ev_7Q2KX9M4",
  "status": "canceled",
  "message_sent": true
}