Documentation

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)
Responses
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
Responses
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"}'