Skip to main content
This reference documents every endpoint available in the Sessionboard Public API. Endpoint pages are generated from our OpenAPI specification and include request parameters, response schemas, and example payloads.

Base URLs

RegionBase URL
UShttps://public-api.sessionboard.com
EUhttps://public-api-eu.sessionboard.com
Use the base URL corresponding to the region where your organization’s data is hosted.

Authentication

All requests require an x-access-token header containing a valid API token. See Authentication for details on generating and managing tokens.
curl -H "x-access-token: YOUR_TOKEN" https://public-api.sessionboard.com/v1/events

Common Patterns

Pagination

Search endpoints accept page and pageSize parameters and return a pagination object in the response. The default page size is 25 and the maximum is 100. Session responses include is_abstract and composition_status for composition-aware integrations. Subsessions inherit these fields from their parent. See Sessions & composition for filters, expand options, and contact session summaries.

Filtering

POST-based search endpoints accept filter criteria in the request body. Refer to each endpoint’s documentation for available filter fields.

Create vs Search Endpoints

Some resources have two POST endpoints at similar paths:
Path PatternPurpose
POST /v1/event/{eventId}/sessionsSearch sessions with filters, sorting, and pagination
POST /v1/event/{eventId}/sessions/createCreate a new session
The /create suffix distinguishes write operations from search where both use POST on the same collection path (sessions, contacts, exhibitors, sponsors, custom fields, and metadata entities). Session-scoped transcriptions, recordings, and session files use standard REST — POST on the collection path creates a resource; there is no conflicting search endpoint. See Media & Transcriptions and Uploading session files for upload flows.

Sorting

POST-based search endpoints accept a sort object in the request body to control result ordering. Sort by createdAt or updatedAt with asc or desc direction.

Expanding Records

Some endpoints support an expand query parameter (or request-body field) to include additional data in the response.
Expand valueEndpointsDescription
translated_fieldsmost read endpointsReturns translated versions of text fields when your event has translations enabled.
subsession_detailssession search + getReturns full parent-shape 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) on every subsession inside parent.subsessions[]. Nested language, track, level, and room objects include the same fields as on parent sessions (see the Session schema). Without this expand the array contains the minimal subsession shape (id, friendly_id, title, description, starts_at, ends_at, speakers, participants, format, content, timestamps, parent friendly-id keys). Heavy joins are gated behind the flag for query performance.

Nested session metadata

Session responses embed assigned metadata as nested objects:
FieldPopulated fieldsNotes
languageid, event_id, name, order, created_at, updated_at
trackid, event_id, name, color, order, created_at, updated_at
levelid, name, order, created_at, updated_atNo event_id on nested objects
formatid, name only
roomid, name, order, capacity, created_at, updated_atOnly when location is room
Unassigned metadata is returned as an empty object {} on POST /v1/event/{eventId}/sessions (search). CRUD proxy endpoints (GET list, create, update, restore) return null instead.

Subsessions

Sessions can have subsessions (child sessions linked to a parent). Subsessions are returned both:
  • Nested, inside parent.subsessions[] on every session response. The default shape is minimal — pass expand=subsession_details to receive full parity with the parent session.
  • Top-level, by calling GET /v1/event/{eventId}/sessions/{sessionId} with the subsession’s UUID directly. The endpoint always returns the full session shape (including chairpersons, moderators, custom_fields, etc.) plus parent_session_friendly_id and parent_session_friendly_id_raw keys identifying the parent. The expand=subsession_details flag has no effect at the top level.
This means callers can iterate parent.subsessions[], take each subsession id, and call the GET endpoint to retrieve the same shape they would for a parent session — useful for integration patterns that need to walk the session tree.

Session participants (Sessions 2.0)

Session responses include both legacy role arrays and a flat participants array:
FieldSourceWhen to use
speakers, chairpersons, moderatorsLegacy junction tablesExisting integrations that expect these arrays
participantsSession_Participants + Session_RolesNew integrations; events with custom program roles (Author, Panelist, etc.)
Each participant object uses the SessionSpeaker contact profile shape plus participant_role (slug, name, name_plural, core_role). Use participant_role.name (or slug) as the display/program role — for example Author or Panelist. core_role is only the legacy junction mapping (speaker, chairperson, moderator) and is not the role label. Contact profile fields on embedded participants — photo_url, company_name, title, address_country, and other standard contact fields — are included in the event’s default language without expand. Use expand=translated_fields for other locales. Legacy speakers / chairpersons / moderators entries also include participant_role when the event has Sessions 2.0 roles configured.

Organization-Scoped vs Convenience Routes

Dashboards, widgets, and saved reports support three route patterns:
PatternExampleNotes
Event-scoped/v1/event/{eventId}/dashboardsScoped to a single event
Org-scoped/v1/organization/{orgId}/dashboardsCross-event, explicit org ID
Convenience/v1/dashboardsCross-event, org resolved from token
The convenience routes are recommended for org-level operations — they’re simpler and don’t require you to know the org ID. The org-scoped routes (/v1/organization/{orgId}/...) are equivalent but require the org ID in the URL.

Media & Transcriptions

Sessionboard exposes three related but distinct media workflows. Pick the path that matches what you have:
WorkflowWhen to useScopes
TranscriptionsYou already have transcript text, summaries, topics, or translations to syncread:transcriptions, write:transcriptions
Session recordingsYou have an audio file for a session’s recording archiveread:transcriptions, write:transcriptions
Media uploadYou have a video or audio file and want Sessionboard to transcribe it automaticallyread:media, write:media
Start with the Media & Transcriptions guide for playbooks and examples, or the API overview for resource shapes. Endpoint pages are grouped under Event — Media in the sidebar.

Error Codes

Status CodeDescription
200Success. The response body contains the requested data.
400Bad Request. The request body or parameters are invalid. Check the error message for details.
401Unauthorized. The x-access-token header is missing or the token is invalid.
403Forbidden. The token does not have the required scope for this endpoint.
404Not Found. The requested resource does not exist.
409Conflict. The resource was modified since you last fetched it. Re-fetch the resource to get the current updated_at value and retry your update.
429Too Many Requests. You are being rate limited. Retry after a short delay with exponential backoff.
500Internal Server Error. An unexpected error occurred. Contact support if the issue persists.