Speakers API
List, create, edit, and delete event speakers.
Manage the speakers shown in your event app and public widgets. All endpoints require the standard authentication headers. Write endpoints require the speakers:write scope; the read endpoint requires speakers:read.
GET /getSpeakers
Returns an array of all speakers for the event. Soft-deleted speakers are excluded. No request body required. Requires speakers:read.
Response body (JSON array)
[
{
"documentId": "abc123",
"name": "Dr. Jane Doe",
"title": "Chief Scientist",
"company": "Acme Labs",
"email": "[email protected]",
"imagePath": "https://.../jane.jpg",
"linkedIn": "https://linkedin.com/in/janedoe",
"biography": "[{\"insert\":\"Keynote speaker and researcher.\\n\"}]",
"tags": "keynote,ai",
"hidden": false,
"unListed": false
}
]
Example request
curl "https://api.event-vault.com/getSpeakers" \
-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 /upsertSpeaker
Creates a new speaker, or edits an existing one. Omit speakerId to create; include it to edit that speaker (only the fields you send are updated; fields you omit are left unchanged). Requires speakers:write.
New speakers appear in the console immediately, but default to Invited (unListed: true), so they are not shown on the public website/app widgets until you publish them - send "unListed": false to publish. A speaker must be confirmed or later in its lifecycle to be published, and confirming a speaker lists it by default. So publishing (unListed:false) an unconfirmed speaker automatically advances it to Confirmed (a speaker already at a later stage such as “attended” keeps it). Unlisting (unListed:true) a confirmed speaker is allowed and does not change its status - a confirmed speaker can be listed or unlisted and stays confirmed. The hidden and deleted flags cannot be set through the API (deleted is managed by the delete endpoint).
Request body fields
| Field | Type | Required | Description |
|---|---|---|---|
speakerId |
string | Existing speaker’s ID. Omit to create a new speaker; include to edit one. | |
name |
string | ✓ (create) | Speaker’s full name. Required when creating. |
title |
string | Job title or role | |
company |
string | Company or organisation | |
email |
string | Contact email | |
phone |
string | Contact phone number | |
imagePath |
string | URL of the speaker’s photo | |
link |
string | Website or profile URL | |
linkedIn |
string | LinkedIn URL | |
biography |
string | Biography as a Fleather/Parchment Delta JSON string - see Rich Text Format | |
websiteBiography |
string | Optional website-only biography (Delta JSON string) | |
websiteOverride |
boolean | When true, public website widgets show websiteBiography instead of biography |
|
tags |
string | Comma-separated tags | |
unListed |
boolean | Publish toggle. true = not shown on the public website/app widgets (but still visible in the console); false = published. New speakers default to true (Invited) |
| Status | Response body | Description |
|---|---|---|
200 OK |
{ "status": "success", "speakerId": "abc123", "created": true } |
Speaker created (created: true) or edited (created: false) |
400 Bad Request |
The request must include a non-empty name when creating a speaker. |
Creating without a name |
404 Not Found |
Speaker not found. |
speakerId was supplied but no such speaker exists |
500 Internal Server Error |
Error upserting speaker. |
Unexpected server error |
Plus the standard auth errors (400/403/404/408/429) - see Authentication.
Example - create a speaker
curl "https://api.event-vault.com/upsertSpeaker" \
-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": "Dr. Jane Doe",
"title": "Chief Scientist",
"company": "Acme Labs",
"email": "[email protected]",
"biography": "[{\"insert\":\"Keynote speaker and researcher.\\n\"}]"
}'
The response returns the new speakerId. To edit later, send the same endpoint with that speakerId and only the fields you want to change:
curl "https://api.event-vault.com/upsertSpeaker" \
-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 '{"speakerId": "abc123", "company": "Acme Research"}'
POST /deleteSpeaker
Soft-deletes a speaker: it is removed from listings (in the API, console, and app) but stays recoverable in the console, matching Event Vault’s soft-deletion system. Requires speakers:write.
Request body fields
| Field | Type | Required | Description |
|---|---|---|---|
speakerId |
string | ✓ | ID of the speaker to delete |
| Status | Response body | Description |
|---|---|---|
200 OK |
{ "status": "success" } |
Speaker was soft-deleted (removed from listings, recoverable in the console) |
400 Bad Request |
The request must include speakerId in the body. |
speakerId is missing |
404 Not Found |
Speaker not found. |
No speaker with this ID exists in the event |
500 Internal Server Error |
Error deleting speaker. |
Unexpected server error |
Example request
curl "https://api.event-vault.com/deleteSpeaker" \
-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 '{"speakerId": "abc123"}'