curl --request GET \
--url https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles \
--header 'x-access-token: <api-key>'import requests
url = "https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles"
headers = {"x-access-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-access-token': '<api-key>'}};
fetch('https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles', 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}/participant-roles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-access-token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles")
.header("x-access-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-access-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"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"
}
]
}List participant roles
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.
curl --request GET \
--url https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles \
--header 'x-access-token: <api-key>'import requests
url = "https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles"
headers = {"x-access-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-access-token': '<api-key>'}};
fetch('https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles', 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}/participant-roles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-access-token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles")
.header("x-access-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.sessionboard.com/v1/event/{eventId}/participant-roles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-access-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"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"
}
]
}
