Search speakers
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
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.
Request example
curl --request POST \ --url 'https://public-api.sessionboard.com/v1/event/{eventId}/speakers' \ --header 'x-access-token: <api-token>' \ --header 'Content-Type: application/json' \ --data '{ "filters": { "createdAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "updatedAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "status": "accepted", "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": { "sort": "asc", "order": 123 }, "updatedAt": { "sort": "asc", "order": 123 } }, "expand": [ "translated_fields" ]}'const response = await fetch('https://public-api.sessionboard.com/v1/event/{eventId}/speakers', { method: 'POST', headers: { "x-access-token": "<api-token>", "Content-Type": "application/json" }, body: JSON.stringify({ "filters": { "createdAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "updatedAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "status": "accepted", "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": { "sort": "asc", "order": 123 }, "updatedAt": { "sort": "asc", "order": 123 } }, "expand": [ "translated_fields" ] }),});
const data = await response.json();console.log(data);import requests
response = requests.request( "POST", "https://public-api.sessionboard.com/v1/event/{eventId}/speakers", headers={ "x-access-token": "<api-token>", "Content-Type": "application/json" }, json={ "filters": { "createdAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "updatedAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "status": "accepted", "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": { "sort": "asc", "order": 123 }, "updatedAt": { "sort": "asc", "order": 123 } }, "expand": [ "translated_fields" ] },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/speakers", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{ "filters": { "createdAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "updatedAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "status": "accepted", "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": { "sort": "asc", "order": 123 }, "updatedAt": { "sort": "asc", "order": 123 } }, "expand": [ "translated_fields" ]}', CURLOPT_HTTPHEADER => [ "x-access-token: <api-token>", "Content-Type: application/json", ],]);
$response = curl_exec($curl);curl_close($curl);
echo $response;package main
import ( "fmt" "io" "net/http" "strings")
func main() { req, _ := http.NewRequest("POST", "https://public-api.sessionboard.com/v1/event/{eventId}/speakers", strings.NewReader(`{ "filters": { "createdAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "updatedAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "status": "accepted", "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": { "sort": "asc", "order": 123 }, "updatedAt": { "sort": "asc", "order": 123 } }, "expand": [ "translated_fields" ]}`)) req.Header.Add("x-access-token", "<api-token>") 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))}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://public-api.sessionboard.com/v1/event/{eventId}/speakers")) .header("x-access-token", "<api-token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{\n \"filters\": {\n \"createdAt\": {\n \"before\": \"2026-01-15T09:30:00Z\",\n \"after\": \"2026-01-15T09:30:00Z\"\n },\n \"updatedAt\": {\n \"before\": \"2026-01-15T09:30:00Z\",\n \"after\": \"2026-01-15T09:30:00Z\"\n },\n \"status\": \"accepted\",\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 \"sort\": \"asc\",\n \"order\": 123\n },\n \"updatedAt\": {\n \"sort\": \"asc\",\n \"order\": 123\n }\n },\n \"expand\": [\n \"translated_fields\"\n ]\n}")) .build();
HttpResponse<String> response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Try it
Response headers
Authorizations
x-access-tokenstringheaderOrganization API token. Generate from Organization Settings → API Tokens.
AuthorizationBearer <token>headerorOAuth 2.1 access token. Obtained via the OAuth PKCE flow at
/oauth/token.
Send one of these. See Authentication.
Path parameters
eventIdintegerpathrequiredThe event ID.
Query parameters
pageintegerqueryPage number for pagination.
- Default
1- Minimum
1- Maximum
999
pageSizeintegerqueryNumber 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 sendingpageSizesilently got the default 25. Both now work,pageSizewins when both are sent, and on these endpoints a value outside 1–100 is clamped rather than rejected. Everywhere elsepageSizeis the only spelling.- Default
25- Minimum
1- Maximum
100
Request body
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.
filtersobjectShow child attributes
createdAtDateRangeFilterFilter by a date range using before and/or after bounds.
Show child attributes
beforestring<date-time>Return records before this date-time.
afterstring<date-time>Return records after this date-time.
updatedAtDateRangeFilterFilter by a date range using before and/or after bounds.
Show child attributes
beforestring<date-time>Return records before this date-time.
afterstring<date-time>Return records after this date-time.
statusstring- Allowed values
"accepted", "accept_queue", "pending", "decline_queue", "declined"
trackIdsstring<uuid>[]Send at least one ID — an empty array is rejected with a 400; to apply no track filter, omit the property.
- Min items
1
levelIdsstring<uuid>[]- Min items
1
formatIdsstring<uuid>[]- Min items
1
languageIdsstring<uuid>[]- Min items
1
tagIdsstring<uuid>[]- Min items
1
sortSortOptionsNested sort keys matching the search POST body (
createdAt.sort, not a flatorderenum). Each key is optional.Show child attributes
createdAtNestedSortFieldOne sort key.
sortis the direction;orderis the priority when multiple keys are set (lower numbers apply first).Show child attributes
sortstring- Allowed values
"asc", "desc"
orderinteger
updatedAtNestedSortFieldOne sort key.
sortis the direction;orderis the priority when multiple keys are set (lower numbers apply first).Show child attributes
sortstring- Allowed values
"asc", "desc"
orderinteger
expandstring[]- Allowed values
"translated_fields"
{ "filters": { "createdAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "updatedAt": { "before": "2026-01-15T09:30:00Z", "after": "2026-01-15T09:30:00Z" }, "status": "accepted", "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": { "sort": "asc", "order": 123 }, "updatedAt": { "sort": "asc", "order": 123 } }, "expand": [ "translated_fields" ]}Responses
200application/json
OK
resultsContact[]Show child attributes
idstringfriendly_idstringfull_namestringfirst_namestringlast_namestringemailstringcreated_atstringupdated_atstring<date-time>When the contact last changed, from any source: an admin or portal edit, a sync, or a Public API write (create, update or bulk). Send it back as
updated_atonPUT /v1/event/{eventId}/contacts/{contactId}or a bulk update for optimistic concurrency; the write returns the new value.photo_urlstringURL of the contact's headshot. Images larger than 2 MB are delivered resized from this URL, scaled to fit within 2400 x 2400 pixels (a PNG may arrive as WebP for clients that accept it). The uploaded file is stored unchanged; for full-resolution originals use the bulk download tools in Sessionboard, such as Download Headshots (Contacts, More menu).
company_namestringtitlestringaboutstringphone_homestringphone_mobilestringaddress_line_1stringaddress_line_2stringaddress_citystringaddress_statestringaddress_postal_codestringaddress_countrystringwebsite_urlstringlinkedin_urlstringtwitter_urlstringfacebook_urlstringhonorificstringsalutationstringpronounsstringgenderstringpast_companiesstringeducational_affiliationstringhighest_level_of_educationstringethnicitystringlanguagesstringspeaker_scorestringorganization_contactstringspeaker_feestringavailabilitystringpreferred_session_formatstringannual_revenuestringheadcountstringyears_in_operationstringorganization_structurestringindustrystringglobal_regionstringaudience_typestringtarget_age_rangestringtopic_expertisestringbrandstringtranslated_fieldsTranslatedField[]Show child attributes
idstringnamestringtypestringparent_field_idstringparent_field_sourcestringparent_field_namestringparent_field_internal_namestringtranslated_languagestringvaluestring
custom_fieldsCustomFieldValue[]Show child attributes
idstringnamestringvaluestring | boolean | nullThe formatted field value, or
nullwhen the field is empty. Numeric field types (number,currency,percent,quantity,formula) serialize a stored zero as its formatted value (for example"0") —nullmeans the field has no value, not that the value is zero.checkboxfields serialize as the strings"Yes"(checked) and"No"(explicitly unchecked); a checkbox that was never set isnull. Writes take booleantrue/false.datetimefields serialize as ISO 8601. On event custom fields (GET /v1/events?expand=custom_fields) the value is event-local time with the event's UTC offset (for example2026-08-15T09:00:00-03:00), falling back to the raw UTC instant (2026-08-15T12:00:00.000Z) when the event has no valid timezone. On session, speaker, sponsor, and exhibitor custom fields the value is the raw UTC instant.date(date-only) fields serialize asM-DD-YYYY: month without a leading zero, day with one, four-digit year (for example9-22-2026for 22 September 2026,3-04-2026for 4 March 2026). This is not ISO 8601; parse it with that exact pattern.typestringinternal_namestringcreated_atstring
admin_urlstring<uri> | nullDeep link to this entity in the Sessionboard admin UI.
paginationPaginationPagination metadata returned with POST search responses. The event-settings GET lists return the same numbers under snake_case keys — see
ListPagination.Show child attributes
currentPageintegerpageSizeintegertotalPagesintegertotalResultsinteger
401
Unauthorized
404
Event not found
Response examples
{ "results": [ { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "friendly_id": "SPK-42", "full_name": "Dr. Jane Smith", "first_name": "Jane", "last_name": "Smith", "email": "jane.smith@university.edu", "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 }}