Search sessions by status
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
Returns a lightweight list of session statuses, including deleted
sessions. Supports filtering by deletedAt in addition to standard
filters.
Also accepts the five session categorization filters (trackIds,
tagIds, levelIds, formatIds, languageIds). IDs within one
filter match with OR; separate filters combine with AND. The filters
are evaluated against the top-level (root) session: a subsession
row matches when its parent carries the filtered attribute, so a
matching parent and the flat rows of its subsessions array stay
consistent. Unlike other session searches, a deleted root session
still satisfies a categorization filter — surfacing deleted sessions
is this endpoint's purpose, and filtering must not hide them.
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 [].
Parent rows additionally include a subsessions array with the same
minimal status-focused shape for each child subsession
(SubsessionStatus). Subsession rows that appear in the flat
results continue to surface with their own row (for back-compat) and
carry an empty subsessions array.
Request example
curl --request POST \ --url 'https://public-api.sessionboard.com/v1/event/{eventId}/sessions/status' \ --header 'x-access-token: <api-token>' \ --header 'Content-Type: application/json' \ --data '{ "filters": { "status": "declined" }, "sort": { "deletedAt": { "sort": "desc" } }}'const response = await fetch('https://public-api.sessionboard.com/v1/event/{eventId}/sessions/status', { method: 'POST', headers: { "x-access-token": "<api-token>", "Content-Type": "application/json" }, body: JSON.stringify({ "filters": { "status": "declined" }, "sort": { "deletedAt": { "sort": "desc" } } }),});
const data = await response.json();console.log(data);import requests
response = requests.request( "POST", "https://public-api.sessionboard.com/v1/event/{eventId}/sessions/status", headers={ "x-access-token": "<api-token>", "Content-Type": "application/json" }, json={ "filters": { "status": "declined" }, "sort": { "deletedAt": { "sort": "desc" } } },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/sessions/status", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{ "filters": { "status": "declined" }, "sort": { "deletedAt": { "sort": "desc" } }}', 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}/sessions/status", strings.NewReader(`{ "filters": { "status": "declined" }, "sort": { "deletedAt": { "sort": "desc" } }}`)) 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}/sessions/status")) .header("x-access-token", "<api-token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{\n \"filters\": {\n \"status\": \"declined\"\n },\n \"sort\": {\n \"deletedAt\": {\n \"sort\": \"desc\"\n }\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
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.
deletedAtDateRangeFilterFilter 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>[]Match sessions in any of these tracks (OR). Combined with other filters using AND. Evaluated against the top-level session; a deleted root still matches. 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>[]Match sessions tagged with any of these tag IDs (OR). Send at least one ID — an empty array is rejected with a 400.
- Min items
1
sortobjectNested sort keys — the same shape as other search endpoints (
{"createdAt": {"sort": "desc"}}), not a flat{"order": "createdAt", "sort": "desc"}pair.When sorting by
deletedAt, deleted sessions sort before never-deleted ones (whosedeleted_atis null) in both directions.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
deletedAtNestedSortFieldOne 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[]
{ "filters": { "status": "declined" }, "sort": { "deletedAt": { "sort": "desc" } }}{ "filters": { "status": "declined", "trackIds": [ "3fa85f64-5717-4562-b3fc-2c963f66afa6" ] }, "sort": { "deletedAt": { "sort": "desc" } }}Responses
200application/json
OK
resultsSessionStatus[]Show child attributes
idstring<uuid>friendly_idstringfriendly_id_rawintegerstatusstringcustom_status_idstring<uuid> | nullcustom_statusSessionCustomStatusA custom session status definition configured for an event.
Show child attributes
idstringnamestringstatusstringApproval state this custom label maps onto. Stored NOT NULL, so it is always present on a status created through this API.
- Allowed values
"pending", "accepted", "declined", "accept_queue", "decline_queue"
status_namestring | nullcolorstringorderintegeris_custombooleancreated_atstring | nullcreated_by_user_idinteger | nullcreated_by_user_namestring | null
is_abstractbooleancomposition_statusCompositionStatusSummary of how this session participates in a composition (merge or link). Always present on session responses.
Show child attributes
rolestringstandalone— normal editable recordtarget— composite parent with one or more linked sourcessource— linked into another record (still editable)
- Allowed values
"standalone", "target", "source"
is_linkedbooleanis_read_onlybooleanAlways
false. Linked sources stay editable; the key is kept for compatibility.- Allowed values
false
source_countintegerNumber of records merged or linked into this session.
targetobject | nullPresent when
roleissource.Show child attributes
idstring<uuid>friendly_idstringtitlestringis_abstractboolean
deleted_atstring<date-time> | nullcreated_atstring<date-time>updated_atstring<date-time>subsessionsSubsessionStatus[]Empty for subsession rows. Populated with
SubsessionStatusitems for parent rows, in the admin-defined order (subsession_order, falling back to subsession number and start time).Show child attributes
idstring<uuid>friendly_idstringfriendly_id_rawintegerparent_session_friendly_idstringparent_session_friendly_id_rawintegersubsession_orderinteger | nullAdmin-defined position among the parent session's subsessions; subsessions are returned in this order, falling back to subsession number and start time.
nullwhen the parent's subsessions have never been reordered.statusstring | nullThe subsession's own approval status from the database. The API does not inherit the parent session's status. May be null when the subsession has no explicit status set.
custom_status_idstring<uuid> | nullcustom_statusSessionCustomStatusA custom session status definition configured for an event.
Show child attributes
idstringnamestringstatusstringApproval state this custom label maps onto. Stored NOT NULL, so it is always present on a status created through this API.
- Allowed values
"pending", "accepted", "declined", "accept_queue", "decline_queue"
status_namestring | nullcolorstringorderintegeris_custombooleancreated_atstring | nullcreated_by_user_idinteger | nullcreated_by_user_namestring | null
deleted_atstring<date-time> | nullcreated_atstring<date-time>updated_atstring<date-time>
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": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "friendly_id": "<string>", "friendly_id_raw": 123, "status": "<string>", "custom_status_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "custom_status": { "id": "<string>", "name": "<string>", "status": "pending", "status_name": "<string>", "color": "<string>", "order": 123, "is_custom": true, "created_at": "<string>", "created_by_user_id": 123, "created_by_user_name": "<string>" }, "is_abstract": true, "composition_status": { "role": "standalone", "is_linked": true, "is_read_only": false, "source_count": 123, "target": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "friendly_id": "<string>", "title": "<string>", "is_abstract": true } }, "deleted_at": "2026-01-15T09:30:00Z", "created_at": "2026-01-15T09:30:00Z", "updated_at": "2026-01-15T09:30:00Z", "subsessions": [ { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "friendly_id": "<string>", "friendly_id_raw": 123, "parent_session_friendly_id": "<string>", "parent_session_friendly_id_raw": 123, "subsession_order": 123, "status": "<string>", "custom_status_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "custom_status": { "id": "<string>", "name": "<string>", "status": "pending", "status_name": "<string>", "color": "<string>", "order": 123, "is_custom": true, "created_at": "<string>", "created_by_user_id": 123, "created_by_user_name": "<string>" }, "deleted_at": "2026-01-15T09:30:00Z", "created_at": "2026-01-15T09:30:00Z", "updated_at": "2026-01-15T09:30:00Z" } ] } ], "pagination": { "currentPage": 1, "pageSize": 25, "totalPages": 4, "totalResults": 97 }}