curl --request POST \
--url https://public-api.sessionboard.com/v1/event/{eventId}/speakers \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"filters": {
"createdAt": {
"before": "2023-11-07T05:31:56Z",
"after": "2023-11-07T05:31:56Z"
},
"updatedAt": {
"before": "2023-11-07T05:31:56Z",
"after": "2023-11-07T05:31:56Z"
},
"trackIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"levelIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"formatIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"languageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"tagIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
},
"sort": {
"createdAt": {
"order": 123
},
"updatedAt": {
"order": 123
}
},
"expand": [
"translated_fields"
]
}
'import requests
url = "https://public-api.sessionboard.com/v1/event/{eventId}/speakers"
payload = {
"filters": {
"createdAt": {
"before": "2023-11-07T05:31:56Z",
"after": "2023-11-07T05:31:56Z"
},
"updatedAt": {
"before": "2023-11-07T05:31:56Z",
"after": "2023-11-07T05:31:56Z"
},
"trackIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"levelIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"formatIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"languageIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"tagIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
},
"sort": {
"createdAt": { "order": 123 },
"updatedAt": { "order": 123 }
},
"expand": ["translated_fields"]
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
filters: {
createdAt: {before: '2023-11-07T05:31:56Z', after: '2023-11-07T05:31:56Z'},
updatedAt: {before: '2023-11-07T05:31:56Z', after: '2023-11-07T05:31:56Z'},
trackIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
levelIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
formatIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
languageIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
tagIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
},
sort: {createdAt: {order: 123}, updatedAt: {order: 123}},
expand: ['translated_fields']
})
};
fetch('https://public-api.sessionboard.com/v1/event/{eventId}/speakers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/speakers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'filters' => [
'createdAt' => [
'before' => '2023-11-07T05:31:56Z',
'after' => '2023-11-07T05:31:56Z'
],
'updatedAt' => [
'before' => '2023-11-07T05:31:56Z',
'after' => '2023-11-07T05:31:56Z'
],
'trackIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'levelIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'formatIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'languageIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'tagIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'sort' => [
'createdAt' => [
'order' => 123
],
'updatedAt' => [
'order' => 123
]
],
'expand' => [
'translated_fields'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://public-api.sessionboard.com/v1/event/{eventId}/speakers"
payload := strings.NewReader("{\n \"filters\": {\n \"createdAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"updatedAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"trackIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"levelIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"formatIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"languageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"tagIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n },\n \"sort\": {\n \"createdAt\": {\n \"order\": 123\n },\n \"updatedAt\": {\n \"order\": 123\n }\n },\n \"expand\": [\n \"translated_fields\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://public-api.sessionboard.com/v1/event/{eventId}/speakers")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"createdAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"updatedAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"trackIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"levelIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"formatIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"languageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"tagIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n },\n \"sort\": {\n \"createdAt\": {\n \"order\": 123\n },\n \"updatedAt\": {\n \"order\": 123\n }\n },\n \"expand\": [\n \"translated_fields\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.sessionboard.com/v1/event/{eventId}/speakers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": {\n \"createdAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"updatedAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"trackIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"levelIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"formatIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"languageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"tagIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n },\n \"sort\": {\n \"createdAt\": {\n \"order\": 123\n },\n \"updatedAt\": {\n \"order\": 123\n }\n },\n \"expand\": [\n \"translated_fields\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"friendly_id": "SPK-42",
"full_name": "Dr. Jane Smith",
"first_name": "Jane",
"last_name": "Smith",
"email": "[email protected]",
"created_at": "2023-11-01T10:00:00Z",
"updated_at": "2024-02-15T16:30:00Z",
"photo_url": "https://cdn.sessionboard.com/photos/jane-smith.jpg",
"company_name": "State University",
"title": "Professor of Computer Science",
"about": "Dr. Smith is a leading researcher in distributed systems.",
"address_city": "Austin",
"address_state": "TX",
"address_country": "US",
"honorific": "Dr.",
"pronouns": "she/her",
"topic_expertise": "Distributed Systems, Cloud Computing",
"custom_fields": [],
"translated_fields": []
}
],
"pagination": {
"currentPage": 1,
"pageSize": 25,
"totalPages": 4,
"totalResults": 97
}
}Search speakers
Search and filter speakers within an event. Supports the session
categorization filters (trackIds, tagIds, levelIds, formatIds,
languageIds) to match speakers by the sessions they are assigned to.
sort uses the same nested shape as other search endpoints
({"createdAt": {"sort": "desc"}}).
Categorization filters are evaluated against the top-level session, matching session search semantics: a speaker assigned to a subsession matches when the subsession’s parent (root) session satisfies the filter — a subsession’s own categorization values are not consulted.
Each categorization filter needs at least one ID. An empty array is
rejected with a 400 naming the field — to apply no filter at all, omit
the property rather than sending [].
Only a session’s speakers are matched. A contact attached to a
matching session as a chairperson, moderator or other participant is
not returned by this endpoint — with or without a filter. The session
object from POST /v1/event/{eventId}/sessions exposes four separate
participant arrays (speakers, chairpersons, moderators,
participants) and they are not interchangeable here: reconciling
“speakers on track X” against a session search must compare against
the speakers array alone, or the counts will not agree. The same
contact can appear under different roles on different sessions, so a
contact present in the unfiltered speaker list may still be absent
from a filtered one when its attachment to the matching session is a
non-speaker role.
To retrieve every participant regardless of role — chairpersons,
moderators and custom roles included, each with the roles it holds —
use POST /v1/event/{eventId}/participants. It accepts the same
filters and returns the same contact fields plus a roles array.
curl --request POST \
--url https://public-api.sessionboard.com/v1/event/{eventId}/speakers \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"filters": {
"createdAt": {
"before": "2023-11-07T05:31:56Z",
"after": "2023-11-07T05:31:56Z"
},
"updatedAt": {
"before": "2023-11-07T05:31:56Z",
"after": "2023-11-07T05:31:56Z"
},
"trackIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"levelIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"formatIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"languageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"tagIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
},
"sort": {
"createdAt": {
"order": 123
},
"updatedAt": {
"order": 123
}
},
"expand": [
"translated_fields"
]
}
'import requests
url = "https://public-api.sessionboard.com/v1/event/{eventId}/speakers"
payload = {
"filters": {
"createdAt": {
"before": "2023-11-07T05:31:56Z",
"after": "2023-11-07T05:31:56Z"
},
"updatedAt": {
"before": "2023-11-07T05:31:56Z",
"after": "2023-11-07T05:31:56Z"
},
"trackIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"levelIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"formatIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"languageIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"tagIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
},
"sort": {
"createdAt": { "order": 123 },
"updatedAt": { "order": 123 }
},
"expand": ["translated_fields"]
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
filters: {
createdAt: {before: '2023-11-07T05:31:56Z', after: '2023-11-07T05:31:56Z'},
updatedAt: {before: '2023-11-07T05:31:56Z', after: '2023-11-07T05:31:56Z'},
trackIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
levelIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
formatIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
languageIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
tagIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
},
sort: {createdAt: {order: 123}, updatedAt: {order: 123}},
expand: ['translated_fields']
})
};
fetch('https://public-api.sessionboard.com/v1/event/{eventId}/speakers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/speakers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'filters' => [
'createdAt' => [
'before' => '2023-11-07T05:31:56Z',
'after' => '2023-11-07T05:31:56Z'
],
'updatedAt' => [
'before' => '2023-11-07T05:31:56Z',
'after' => '2023-11-07T05:31:56Z'
],
'trackIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'levelIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'formatIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'languageIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'tagIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'sort' => [
'createdAt' => [
'order' => 123
],
'updatedAt' => [
'order' => 123
]
],
'expand' => [
'translated_fields'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://public-api.sessionboard.com/v1/event/{eventId}/speakers"
payload := strings.NewReader("{\n \"filters\": {\n \"createdAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"updatedAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"trackIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"levelIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"formatIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"languageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"tagIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n },\n \"sort\": {\n \"createdAt\": {\n \"order\": 123\n },\n \"updatedAt\": {\n \"order\": 123\n }\n },\n \"expand\": [\n \"translated_fields\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://public-api.sessionboard.com/v1/event/{eventId}/speakers")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"createdAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"updatedAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"trackIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"levelIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"formatIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"languageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"tagIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n },\n \"sort\": {\n \"createdAt\": {\n \"order\": 123\n },\n \"updatedAt\": {\n \"order\": 123\n }\n },\n \"expand\": [\n \"translated_fields\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.sessionboard.com/v1/event/{eventId}/speakers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": {\n \"createdAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"updatedAt\": {\n \"before\": \"2023-11-07T05:31:56Z\",\n \"after\": \"2023-11-07T05:31:56Z\"\n },\n \"trackIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"levelIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"formatIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"languageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"tagIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n },\n \"sort\": {\n \"createdAt\": {\n \"order\": 123\n },\n \"updatedAt\": {\n \"order\": 123\n }\n },\n \"expand\": [\n \"translated_fields\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"friendly_id": "SPK-42",
"full_name": "Dr. Jane Smith",
"first_name": "Jane",
"last_name": "Smith",
"email": "[email protected]",
"created_at": "2023-11-01T10:00:00Z",
"updated_at": "2024-02-15T16:30:00Z",
"photo_url": "https://cdn.sessionboard.com/photos/jane-smith.jpg",
"company_name": "State University",
"title": "Professor of Computer Science",
"about": "Dr. Smith is a leading researcher in distributed systems.",
"address_city": "Austin",
"address_state": "TX",
"address_country": "US",
"honorific": "Dr.",
"pronouns": "she/her",
"topic_expertise": "Distributed Systems, Cloud Computing",
"custom_fields": [],
"translated_fields": []
}
],
"pagination": {
"currentPage": 1,
"pageSize": 25,
"totalPages": 4,
"totalResults": 97
}
}Authorizations
Organization API token. Generate from Organization Settings → API Tokens.
Path Parameters
The event ID.
Query Parameters
Page number for pagination.
1 <= x <= 999Number of results per page.
The event-settings list endpoints (tags, tracks, levels, formats,
rooms, languages, statuses) also accept the older spelling
page_size, and used to accept only that — a request sending
pageSize silently got the default 25. Both now work, pageSize
wins when both are sent, and on these endpoints a value outside
1–100 is clamped rather than rejected. Everywhere else pageSize
is the only spelling.
1 <= x <= 100Body
Search request body for speakers, including session metadata filters.
Categorization filters (trackIds, levelIds, formatIds,
languageIds, tagIds) match against the speaker's top-level
session — a speaker on a subsession matches via the subsession's
parent (root) session, mirroring session search semantics.

