Sessions API
List, create, edit, and delete sessions in the event programme.
Manage the sessions in your event programme (shown in the app and the public schedule widget). All endpoints require the standard authentication headers. Write endpoints require the sessions:write scope; the read endpoint requires sessions:read.
GET /getSessions
Returns an array of all sessions for the event. Soft-deleted sessions are excluded. No request body required. Requires sessions:read.
Example request
curl "https://api.event-vault.com/getSessions" \
-H "x-api-key: <your-api-key>" \
-H "x-client-id: <your-client-id>" \
-H "x-event-id: <your-event-id>" \
-H "x-timestamp: $(date +%s%3N)"
POST /upsertSession
Creates a new session, or edits an existing one. Omit sessionId to create (name required); include it to edit (only the fields you send change). Requires sessions:write.
Request body fields
| Field | Type | Required | Description |
|---|---|---|---|
sessionId |
string | Existing session’s id. Omit to create; include to edit. | |
name |
string | create | Session title |
date |
string | Session date, YYYY-MM-DD (e.g. "2026-09-14"). "" leaves it unscheduled |
|
timeStart / timeEnd |
string | Start / end time, 24-hour HH:MM |
|
location |
string | Room, stage or location name | |
format |
string | Session format label | |
difficulty |
string | Difficulty label | |
synopsis |
string | Short summary (plain text) | |
tags |
string | One tag, or several separated by commas. An array is accepted too | |
capacity |
integer | Seat capacity (0 = unlimited) |
|
track |
integer | The position of the track in your event’s track list, counting from 0 |
|
tintColor |
integer | Session colour. Send a hex string such as "#3366FF", or a 32-bit ARGB integer (4294967295 is white) |
|
handOutLink |
string | Handout URL | |
additionalContentLabel / additionalContentLink |
string | Optional extra content label + URL | |
ticketRedemption / ticketRedemptionLabel / ticketRedemptionDescription |
string | The ticket tier that can be redeemed at this session, plus the label and description shown to attendees. Leave ticketRedemption empty for none |
|
hasPreRegistration |
boolean | Enable pre-registration | |
hasLiveQA / managedQA / hasPoll |
boolean | Live Q&A, moderated Q&A, and poll toggles | |
hasSponsorship / sponsorshipLink / sponsorImagePath |
boolean / string / string | Session sponsorship | |
unListed |
boolean | Publish toggle. true = not shown on the public widgets (still visible in the console); false = published (default) |
|
contentData |
array | Ordered content sections; returned in the same array form on read - see Content Sections | |
websiteOverride |
boolean | When true, public widgets use websiteContentData instead of contentData |
|
websiteContentData |
array | Website-only content sections (same format as contentData) |
| Status | Body | Description |
|---|---|---|
200 OK |
{ "status": "success", "sessionId": "...", "created": true } |
Session created (created: true) or edited (created: false). May also carry warnings / ignoredFields - see Field Types |
400 Bad Request |
{ "error": "Invalid request body", "details": [...] } |
A field has the wrong type or format, name is missing on create, or track is outside the event’s track list |
400 Bad Request |
{ "error": "Invalid content sections", "details": [...] } |
A content section is malformed or references a missing/hidden/deleted record |
404 Not Found |
Session not found. |
sessionId supplied but no such session |
500 Internal Server Error |
Error upserting session. |
Unexpected server error |
Plus the standard auth errors (400/403/404/408/429) - see Authentication.
Example - create a session with content and a speaker section
curl "https://api.event-vault.com/upsertSession" \
-X POST \
-H "Content-Type: application/json" \
-H "x-api-key: <your-api-key>" \
-H "x-client-id: <your-client-id>" \
-H "x-event-id: <your-event-id>" \
-H "x-timestamp: $(date +%s%3N)" \
-d '{
"name": "Opening Keynote",
"date": "2026-09-14",
"timeStart": "09:00",
"timeEnd": "10:00",
"location": "Main Hall",
"contentData": [
{ "type": "paragraph", "data": { "content": "[{\"insert\":\"Welcome to the event.\\n\"}]" } },
{ "type": "speaker", "data": { "speakerType": "Presenters", "speakerIds": ["<speakerId>"] } }
]
}'
POST /deleteSession
Soft-deletes a session: it is removed from listings but stays recoverable in the console. Requires sessions:write.
Request body fields
| Field | Type | Required | Description |
|---|---|---|---|
sessionId |
string | ✓ | Id of the session to delete |
| Status | Body | Description |
|---|---|---|
200 OK |
{ "status": "success" } |
Session was soft-deleted |
400 Bad Request |
The request must include sessionId in the body. |
sessionId missing |
404 Not Found |
Session not found. |
No session with this id |
500 Internal Server Error |
Error deleting session. |
Unexpected server error |