REST API reference

Whova API

11 endpoints for Whova. Each one is a POST with a JSON body, called with your API key.

Base URL
https://cotlet.dev/api/v1/whova
Connects with
Your own Whova organizer account for the event
Integration page
Whova
Whova Endpoints
Endpoint Access Description
list_events read Events you can manage as an organizer, with dates and status.
list_attendees read Attendees of an event with email, company, ticket type, audience type and check-in status.
list_registrations read Registration orders with registrant, ticket type and order date, newest first.
list_sessions read Agenda sessions with time, tracks, speakers and description, in agenda order.
list_speakers read Speakers of an event from the Speaker Center, with their sessions.
get_post_event_report read The post-event report of an event as text sections, available after the event ends.
add_session write Add a session to the agenda in Session Manager.
update_session write Change the time, tracks, speakers or description of an existing session.
add_attendee write Create or update one attendee by name and email.
send_announcement write Post an announcement for the attendees of an event.
message_speakers write Email all speakers of an event, or the ones you list, through Whova.

POST https://cotlet.dev/api/v1/whova/list_events

Returns every event of your organizer account, newest first. Use event_id from each item in the other tools. Dates are in the time zone of the event.

Parameters

Parameters: list_events
NameTypeDescription
status enum upcoming, past or all. Default: upcoming.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/list_events \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("whova", "list_events")
Node.js
const result = await cotlet.call('whova', 'list_events');
CLI
cotlet call whova list_events

Example response

{
  "events": [
    {
      "event_id": "284611",
      "name": "Northwind Summit 2026",
      "start": "2026-10-21",
      "end": "2026-10-23",
      "status": "upcoming"
    },
    {
      "event_id": "271905",
      "name": "Northwind Summit 2025",
      "start": "2025-10-14",
      "end": "2025-10-16",
      "status": "past"
    }
  ]
}

POST https://cotlet.dev/api/v1/whova/list_attendees

Lists attendees of one event. Filter by ticket type or audience type, or by check-in status to see who has not arrived. Pages hold up to 500 attendees; pass next_cursor back as cursor for the next page.

Parameters

Parameters: list_attendees
NameTypeDescription
event_id required string Event ID from list_events.
ticket_type string Only holders of this ticket type, as named in your event.
audience_type string Only attendees with this audience type, as named in your event.
checked_in boolean true for checked-in attendees, false for those not checked in.
limit integer 1 to 500. Default: 100.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/list_attendees \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("whova", "list_attendees", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('whova', 'list_attendees', {"event_id":"event_8c41d2"});
CLI
cotlet call whova list_attendees --data '{"event_id":"event_8c41d2"}'

Example response

{
  "attendees": [
    {
      "attendee_id": "at_5521",
      "first_name": "Maya",
      "last_name": "Ortiz",
      "email": "maya@example.com",
      "company": "Northwind Labs",
      "ticket_type": "Full Pass",
      "audience_type": "Attendee",
      "checked_in": false
    }
  ],
  "next_cursor": null
}

POST https://cotlet.dev/api/v1/whova/list_registrations

Lists registration orders of one event, newest first. Filter by date or ticket type to get only what is new since your last check. Pages hold up to 500 orders; pass next_cursor back as cursor.

Parameters

Parameters: list_registrations
NameTypeDescription
event_id required string Event ID from list_events.
since date Only orders placed on or after this date.
ticket_type string Only orders with this ticket type.
limit integer 1 to 500. Default: 100.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/list_registrations \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("whova", "list_registrations", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('whova', 'list_registrations', {"event_id":"event_8c41d2"});
CLI
cotlet call whova list_registrations --data '{"event_id":"event_8c41d2"}'

Example response

{
  "orders": [
    {
      "order_id": "ord_80231",
      "registrant": "Maya Ortiz",
      "email": "maya@example.com",
      "ticket_type": "Full Pass",
      "ordered_at": "2026-10-10T14:12:00Z"
    },
    {
      "order_id": "ord_80229",
      "registrant": "Leo Brandt",
      "email": "leo@example.com",
      "ticket_type": "Student",
      "ordered_at": "2026-10-10T09:40:00Z"
    }
  ],
  "next_cursor": null
}

POST https://cotlet.dev/api/v1/whova/list_sessions

Lists the sessions of one event in agenda order. Filter by day or track. Use session_id with update_session. Times carry the time zone of the event.

Parameters

Parameters: list_sessions
NameTypeDescription
event_id required string Event ID from list_events.
date date Only sessions on this day.
track string Only sessions in this track.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/list_sessions \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("whova", "list_sessions", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('whova', 'list_sessions', {"event_id":"event_8c41d2"});
CLI
cotlet call whova list_sessions --data '{"event_id":"event_8c41d2"}'

Example response

{
  "sessions": [
    {
      "session_id": "s_30871",
      "title": "Breakout: Pricing workshop",
      "start": "2026-10-22T14:00:00-07:00",
      "end": "2026-10-22T15:00:00-07:00",
      "tracks": [
        "Workshops"
      ],
      "speakers": [
        "Jon Pike"
      ]
    }
  ]
}

POST https://cotlet.dev/api/v1/whova/list_speakers

Lists the speakers of one event with the sessions each one speaks in. Speakers added to a session appear here automatically. Use it to build the recipient list for message_speakers.

Parameters

Parameters: list_speakers
NameTypeDescription
event_id required string Event ID from list_events.
session_id string Only speakers of this session.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/list_speakers \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2"}'
Python
result = client.call("whova", "list_speakers", {"event_id":"event_8c41d2"})
Node.js
const result = await cotlet.call('whova', 'list_speakers', {"event_id":"event_8c41d2"});
CLI
cotlet call whova list_speakers --data '{"event_id":"event_8c41d2"}'

Example response

{
  "speakers": [
    {
      "speaker_id": "sp_204",
      "name": "Dana Reyes",
      "email": "dana@example.com",
      "sessions": [
        "Opening keynote"
      ]
    }
  ]
}

POST https://cotlet.dev/api/v1/whova/get_post_event_report

Returns the post-event report of one finished event as titled sections with their figures. Pass section to read one part, for example Sponsors and exhibitors. Whova releases the report only after the organizer requests it under Tools > Report; until then the call fails with a not-ready error.

Parameters

Parameters: get_post_event_report
NameTypeDescription
event_id required string Event ID from list_events.
section string Section title as shown in the report. Default: all sections.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/get_post_event_report \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"271905","section":"Sponsors and exhibitors"}'
Python
result = client.call("whova", "get_post_event_report", {"event_id":"271905","section":"Sponsors and exhibitors"})
Node.js
const result = await cotlet.call('whova', 'get_post_event_report', {"event_id":"271905","section":"Sponsors and exhibitors"});
CLI
cotlet call whova get_post_event_report --data '{"event_id":"271905","section":"Sponsors and exhibitors"}'

Example response

{
  "event_id": "271905",
  "sections": [
    {
      "title": "Sponsors and exhibitors",
      "text": "Total sponsor impressions, exhibitor leads and attendee profile views, then impressions per sponsor."
    }
  ]
}

Add session

write

POST https://cotlet.dev/api/v1/whova/add_session

Creates one session in the agenda of one event. Speakers you name also appear in the Speaker Center. The session shows in the event app agenda at once. It reaches no one directly and one update_session or a delete in Whova undoes it, so it runs without asking.

Parameters

Parameters: add_session
NameTypeDescription
event_id required string Event ID from list_events.
title required string Session title.
start required datetime Start, ISO 8601 with time zone.
end required datetime End, ISO 8601 with time zone.
tracks string[] Tracks the session belongs to, as named in your event.
speakers string[] Speaker names.
description string Session description.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/add_session \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2","title":"title","start":"2026-10-01T09:00:00Z","end":"2026-10-01T09:00:00Z"}'
Python
result = client.call("whova", "add_session", {"event_id":"event_8c41d2","title":"title","start":"2026-10-01T09:00:00Z","end":"2026-10-01T09:00:00Z"})
Node.js
const result = await cotlet.call('whova', 'add_session', {"event_id":"event_8c41d2","title":"title","start":"2026-10-01T09:00:00Z","end":"2026-10-01T09:00:00Z"});
CLI
cotlet call whova add_session --data '{"event_id":"event_8c41d2","title":"title","start":"2026-10-01T09:00:00Z","end":"2026-10-01T09:00:00Z"}'

Example response

{
  "session_id": "s_30902",
  "event_id": "284611",
  "title": "Opening keynote",
  "start": "2026-10-21T09:00:00-07:00",
  "end": "2026-10-21T09:45:00-07:00",
  "tracks": [
    "Main stage"
  ],
  "speakers": [
    "Dana Reyes"
  ],
  "status": "created"
}

POST https://cotlet.dev/api/v1/whova/update_session

Changes the fields you send and leaves the others as they are. Moving a block of sessions means one call per session. It reaches no one directly and one more call restores the old values, so it runs without asking.

Parameters

Parameters: update_session
NameTypeDescription
event_id required string Event ID from list_events.
session_id required string Session ID from list_sessions.
title string New title.
start datetime New start, ISO 8601 with time zone.
end datetime New end, ISO 8601 with time zone.
tracks string[] Replaces the tracks.
speakers string[] Replaces the speakers.
description string New description.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/update_session \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"284611","session_id":"s_30871","start":"2026-10-22T15:00:00-07:00","end":"2026-10-22T16:00:00-07:00"}'
Python
result = client.call("whova", "update_session", {"event_id":"284611","session_id":"s_30871","start":"2026-10-22T15:00:00-07:00","end":"2026-10-22T16:00:00-07:00"})
Node.js
const result = await cotlet.call('whova', 'update_session', {"event_id":"284611","session_id":"s_30871","start":"2026-10-22T15:00:00-07:00","end":"2026-10-22T16:00:00-07:00"});
CLI
cotlet call whova update_session --data '{"event_id":"284611","session_id":"s_30871","start":"2026-10-22T15:00:00-07:00","end":"2026-10-22T16:00:00-07:00"}'

Example response

{
  "session_id": "s_30871",
  "event_id": "284611",
  "title": "Breakout: Pricing workshop",
  "start": "2026-10-22T15:00:00-07:00",
  "end": "2026-10-22T16:00:00-07:00",
  "status": "updated"
}

Add attendee

write Confirm

POST https://cotlet.dev/api/v1/whova/add_attendee

Creates the attendee, or updates the one with the same email. The attendee appears in the event's attendee list. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: add_attendee
NameTypeDescription
event_id required string Event ID from list_events.
first_name required string First name.
last_name required string Last name.
email required string Attendee email.
company string Company or organization.
title string Job title.
ticket_type string Ticket type, as named in your event.
audience_type string Audience type, as named in your event.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/add_attendee \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"event_8c41d2","first_name":"first name","last_name":"last name","email":"jane@example.com"}'
Python
result = client.call("whova", "add_attendee", {"event_id":"event_8c41d2","first_name":"first name","last_name":"last name","email":"jane@example.com"})
Node.js
const result = await cotlet.call('whova', 'add_attendee', {"event_id":"event_8c41d2","first_name":"first name","last_name":"last name","email":"jane@example.com"});
CLI
cotlet call whova add_attendee --data '{"event_id":"event_8c41d2","first_name":"first name","last_name":"last name","email":"jane@example.com"}'

Example response

{
  "attendee_id": "at_5530",
  "event_id": "284611",
  "email": "sam@example.com",
  "status": "created"
}

Send announcement

write Confirm

POST https://cotlet.dev/api/v1/whova/send_announcement

Posts an announcement to the attendees of one event. App users get it as a push notification, and Whova also connects announcements to attendees' email, so people without the app are notified. It reaches every attendee at once. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: send_announcement
NameTypeDescription
event_id required string Event ID from list_events.
message required string Announcement text.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/send_announcement \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"284611","message":"The opening keynote has moved to Hall B. Doors open at 8:45."}'
Python
result = client.call("whova", "send_announcement", {"event_id":"284611","message":"The opening keynote has moved to Hall B. Doors open at 8:45."})
Node.js
const result = await cotlet.call('whova', 'send_announcement', {"event_id":"284611","message":"The opening keynote has moved to Hall B. Doors open at 8:45."});
CLI
cotlet call whova send_announcement --data '{"event_id":"284611","message":"The opening keynote has moved to Hall B. Doors open at 8:45."}'

Example response

{
  "announcement_id": "ann_90314",
  "event_id": "284611",
  "status": "sent"
}

Message speakers

write Confirm

POST https://cotlet.dev/api/v1/whova/message_speakers

Sends an email to speakers through Whova's speaker messaging. Leave speaker_ids out to email all speakers of the event. Speakers receive it from Whova, not from your own address. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: message_speakers
NameTypeDescription
event_id required string Event ID from list_events.
subject required string Email subject.
body required string Email body.
speaker_ids string[] Speaker IDs from list_speakers. Default: all speakers.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/whova/message_speakers \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"284611","subject":"Your session at Northwind Summit: 21 Oct, 9:00 AM","body":"Hi Dana, you open the summit with the keynote on 21 Oct, 9:00 to 9:45 AM on the Main stage. Please keep the talk to 40 minutes plus 5 for questions.","speaker_ids":["sp_204"]}'
Python
result = client.call("whova", "message_speakers", {"event_id":"284611","subject":"Your session at Northwind Summit: 21 Oct, 9:00 AM","body":"Hi Dana, you open the summit with the keynote on 21 Oct, 9:00 to 9:45 AM on the Main stage. Please keep the talk to 40 minutes plus 5 for questions.","speaker_ids":["sp_204"]})
Node.js
const result = await cotlet.call('whova', 'message_speakers', {"event_id":"284611","subject":"Your session at Northwind Summit: 21 Oct, 9:00 AM","body":"Hi Dana, you open the summit with the keynote on 21 Oct, 9:00 to 9:45 AM on the Main stage. Please keep the talk to 40 minutes plus 5 for questions.","speaker_ids":["sp_204"]});
CLI
cotlet call whova message_speakers --data '{"event_id":"284611","subject":"Your session at Northwind Summit: 21 Oct, 9:00 AM","body":"Hi Dana, you open the summit with the keynote on 21 Oct, 9:00 to 9:45 AM on the Main stage. Please keep the talk to 40 minutes plus 5 for questions.","speaker_ids":["sp_204"]}'

Example response

{
  "message_id": "msg_4107",
  "event_id": "284611",
  "recipients": 18,
  "status": "sent"
}