List participant roles
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
The event's participant roles — the three standard roles (Speaker,
Chairperson, Moderator) and every custom role configured for the
event — with the ids to use in the roleIds filter of
POST /v1/event/{eventId}/participants. Ordered as the Sessions
settings page shows them. Deleted roles are not returned.
is_custom is true for roles the organizer added. core_role is
the standard category a custom role maps to (speaker,
chairperson or moderator); it decides which legacy array the
role's participants appear in on POST /v1/event/{eventId}/sessions,
and is not a display label — use name.
An event that has never been opened in the Sessions editor may have no
roles yet and answers with an empty results array. Its participants
are still returned by POST .../participants, with roleId: null on
their standard roles until the roles are created.
Request example
curl --request GET \ --url 'https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles' \ --header 'x-access-token: <api-token>'const response = await fetch('https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles', { method: 'GET', headers: { "x-access-token": "<api-token>" },});
const data = await response.json();console.log(data);import requests
response = requests.request( "GET", "https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles", headers={ "x-access-token": "<api-token>" },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "x-access-token: <api-token>", ],]);
$response = curl_exec($curl);curl_close($curl);
echo $response;package main
import ( "fmt" "io" "net/http")
func main() { req, _ := http.NewRequest("GET", "https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles", nil) req.Header.Add("x-access-token", "<api-token>")
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}/participant-roles")) .header("x-access-token", "<api-token>") .method("GET", HttpRequest.BodyPublishers.noBody()) .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.
Responses
200application/json
OK
resultsEventParticipantRole[]Show child attributes
idstring<uuid>Use as a
roleIdsfilter value onPOST /v1/event/{eventId}/participants.namestringDisplay name (singular).
name_pluralstringDisplay name (plural).
slugstringStable programmatic identifier within the event.
core_rolestringThe standard category the role maps to. Not a display label.
- Allowed values
"speaker", "chairperson", "moderator"
is_custombooleantruefor a role the organizer added;falsefor the three standard roles.sort_orderintegerPosition in the Sessions settings page; results are returned in this order.
created_atstring<date-time>updated_atstring<date-time>
401
Unauthorized
404
Event not found
Response examples
{ "results": [ { "id": "84bd12e5-d5ec-4c64-a604-4051e06c8dc2", "name": "Speaker", "name_plural": "Speakers", "slug": "speaker", "core_role": "speaker", "is_custom": false, "sort_order": 0, "created_at": "2026-02-03T18:04:11.120Z", "updated_at": "2026-02-03T18:04:11.120Z" }, { "id": "4efeb845-050f-4002-9496-cb586cdf10f2", "name": "Moderator", "name_plural": "Moderators", "slug": "moderator", "core_role": "moderator", "is_custom": false, "sort_order": 2, "created_at": "2026-02-03T18:04:11.120Z", "updated_at": "2026-02-03T18:04:11.120Z" }, { "id": "52d60237-19db-4bda-a116-8b9fcb6750e9", "name": "Panelist", "name_plural": "Panelists", "slug": "panelist", "core_role": "speaker", "is_custom": true, "sort_order": 3, "created_at": "2026-02-10T09:41:52.004Z", "updated_at": "2026-02-10T09:41:52.004Z" } ]}