curl --request GET \
--url https://public-api.sessionboard.com/v1/event/{eventId}/sessions \
--header 'x-access-token: <api-key>'import requests
url = "https://public-api.sessionboard.com/v1/event/{eventId}/sessions"
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}/sessions', 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}/sessions",
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}/sessions"
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}/sessions")
.header("x-access-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.sessionboard.com/v1/event/{eventId}/sessions")
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{
"data": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"friendly_id": "SESS-8",
"friendly_id_raw": 8,
"title": "Networking",
"description": "<p>Networking session description</p>",
"status": "accepted",
"starts_at": "2024-03-15T09:00:00Z",
"ends_at": "2024-03-15T10:00:00Z",
"is_public": true,
"created_at": "2024-01-10T14:30:00Z",
"updated_at": "2024-03-01T09:15:00Z",
"ceu_credits": 1.5,
"capacity": 200,
"language": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"event_id": 42,
"name": "English",
"order": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"track": {
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"event_id": 42,
"name": "Artificial Intelligence & ML",
"color": "#329af0",
"order": 1,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"level": {
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"name": "Beginner",
"order": 2,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"format": {
"id": "d4e5f6a7-b8c9-0123-def0-234567890123",
"name": "Session"
},
"room": {
"id": "e5f6a7b8-c9d0-1234-ef01-345678901234",
"name": "Workshop Room 1",
"order": 3,
"capacity": 120,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"tags": [],
"speakers": [],
"content": [],
"custom_fields": [],
"admin_url": "https://app.sessionboard.com/event/42/sessions/497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
],
"pagination": {
"current_page": 123,
"page_size": 123,
"total_pages": 123,
"total_results": 123
}
}{
"error": "VALIDATION_ERROR",
"message": "track_id must be a UUID (received \"nope\")"
}List sessions (CRUD proxy)
Paginated list of top-level sessions via the CRUD proxy. Returns nested
language, track, level, format, and room metadata using the same
field sets documented on the Session schema (null when unassigned).
Also includes is_abstract and composition_status.
Query params: is_abstract (true/false), expand=linked_sources,
expand=composition, plus standard pagination and filters.
Session categorization filters use snake_case query params on this
endpoint: track_id/track_ids, tag_id/tag_ids,
level_id/level_ids, format_id/format_ids,
language_id/language_ids. Plural params take comma-separated UUIDs
(OR within a filter; separate filters combine with AND).
Every value passed to these filters must be a UUID. A non-UUID value
returns 400 with error code VALIDATION_ERROR and a message naming
the offending parameter, for example
track_id must be a UUID (received "nope").
curl --request GET \
--url https://public-api.sessionboard.com/v1/event/{eventId}/sessions \
--header 'x-access-token: <api-key>'import requests
url = "https://public-api.sessionboard.com/v1/event/{eventId}/sessions"
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}/sessions', 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}/sessions",
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}/sessions"
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}/sessions")
.header("x-access-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.sessionboard.com/v1/event/{eventId}/sessions")
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{
"data": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"friendly_id": "SESS-8",
"friendly_id_raw": 8,
"title": "Networking",
"description": "<p>Networking session description</p>",
"status": "accepted",
"starts_at": "2024-03-15T09:00:00Z",
"ends_at": "2024-03-15T10:00:00Z",
"is_public": true,
"created_at": "2024-01-10T14:30:00Z",
"updated_at": "2024-03-01T09:15:00Z",
"ceu_credits": 1.5,
"capacity": 200,
"language": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"event_id": 42,
"name": "English",
"order": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"track": {
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"event_id": 42,
"name": "Artificial Intelligence & ML",
"color": "#329af0",
"order": 1,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"level": {
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"name": "Beginner",
"order": 2,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"format": {
"id": "d4e5f6a7-b8c9-0123-def0-234567890123",
"name": "Session"
},
"room": {
"id": "e5f6a7b8-c9d0-1234-ef01-345678901234",
"name": "Workshop Room 1",
"order": 3,
"capacity": 120,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"tags": [],
"speakers": [],
"content": [],
"custom_fields": [],
"admin_url": "https://app.sessionboard.com/event/42/sessions/497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
],
"pagination": {
"current_page": 123,
"page_size": 123,
"total_pages": 123,
"total_results": 123
}
}{
"error": "VALIDATION_ERROR",
"message": "track_id must be a UUID (received \"nope\")"
}Authorizations
Organization API token. Generate from Organization Settings → API Tokens.
Path Parameters
The event ID.
Query Parameters
Page number for pagination.
1 <= x <= 9991 <= x <= 100Filter to abstract submissions or program sessions.
Expand records with additional data.
Possible values:
translated_fields— includes thetranslated_fieldsarray on records when the event has language variants configured.subsession_details— applies to session responses. Each subsession insideparent.subsessions[]is returned with full parent-session field parity (status,custom_status,custom_fields,chairpersons,moderators,sponsors,exhibitors,tags,language,track,level,room,is_public,external_url,client_session_id,ceu_credits,capacity,source) instead of the default minimal shape. Subsessions inheritis_abstract,composition_status, and optionalcompositionfrom the parent. Not required when callingGET /v1/event/{eventId}/sessions/{sessionId}with a subsession UUID — that endpoint always returns the full shape at the top level.linked_sources— include sessions that are linked as composition sources (excluded from list/search results by default).composition— attach a fullcompositionobject with target and source details on each returned session. Recommended for single-session GET; use cautiously on broad searches.
A single value can be passed directly, and multiple values repeat the parameter — all of these are accepted:
?expand=composition?expand=translated_fields&expand=composition?expand[]=translated_fields&expand[]=composition
translated_fields, subsession_details, linked_sources, composition Filter by a single track UUID.
Comma-separated track UUIDs (OR). Repeat track_id for the same effect.
Comma-separated level UUIDs (OR).
Comma-separated format UUIDs (OR).
Comma-separated language UUIDs (OR).
Comma-separated tag UUIDs (OR).

