Update a session
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
Changes a session's title, description, start and end (an empty string clears the time), room, track, format, or its sponsor tags (sponsorIds is the full list). Only the fields you send change. Requires write:sessions. Refused for a key restricted to particular events. Also at PUT /v1/sessions-workspace/events/{eventId}/sessions/{sessionId}.
Request example
curl --request PUT \ --url 'https://public-api.sessionboard.com/v1/organization/{orgId}/sessions-workspace/events/{eventId}/sessions/{sessionId}' \ --header 'x-access-token: <api-token>' \ --header 'Content-Type: application/json' \ --data '{ "title": "<string>", "description": "<string>", "startsAt": "<string>", "endsAt": "<string>", "roomId": "<string>", "trackId": "<string>", "formatId": "<string>", "sponsorIds": [ "3c90c3cc-0d44-4b50-8888-8dd25736052a" ], "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" }}'const response = await fetch('https://public-api.sessionboard.com/v1/organization/{orgId}/sessions-workspace/events/{eventId}/sessions/{sessionId}', { method: 'PUT', headers: { "x-access-token": "<api-token>", "Content-Type": "application/json" }, body: JSON.stringify({ "title": "<string>", "description": "<string>", "startsAt": "<string>", "endsAt": "<string>", "roomId": "<string>", "trackId": "<string>", "formatId": "<string>", "sponsorIds": [ "3c90c3cc-0d44-4b50-8888-8dd25736052a" ], "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" } }),});
const data = await response.json();console.log(data);import requests
response = requests.request( "PUT", "https://public-api.sessionboard.com/v1/organization/{orgId}/sessions-workspace/events/{eventId}/sessions/{sessionId}", headers={ "x-access-token": "<api-token>", "Content-Type": "application/json" }, json={ "title": "<string>", "description": "<string>", "startsAt": "<string>", "endsAt": "<string>", "roomId": "<string>", "trackId": "<string>", "formatId": "<string>", "sponsorIds": [ "3c90c3cc-0d44-4b50-8888-8dd25736052a" ], "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" } },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/organization/{orgId}/sessions-workspace/events/{eventId}/sessions/{sessionId}", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "PUT", CURLOPT_POSTFIELDS => '{ "title": "<string>", "description": "<string>", "startsAt": "<string>", "endsAt": "<string>", "roomId": "<string>", "trackId": "<string>", "formatId": "<string>", "sponsorIds": [ "3c90c3cc-0d44-4b50-8888-8dd25736052a" ], "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" }}', 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("PUT", "https://public-api.sessionboard.com/v1/organization/{orgId}/sessions-workspace/events/{eventId}/sessions/{sessionId}", strings.NewReader(`{ "title": "<string>", "description": "<string>", "startsAt": "<string>", "endsAt": "<string>", "roomId": "<string>", "trackId": "<string>", "formatId": "<string>", "sponsorIds": [ "3c90c3cc-0d44-4b50-8888-8dd25736052a" ], "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" }}`)) 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/organization/{orgId}/sessions-workspace/events/{eventId}/sessions/{sessionId}")) .header("x-access-token", "<api-token>") .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofString("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"startsAt\": \"<string>\",\n \"endsAt\": \"<string>\",\n \"roomId\": \"<string>\",\n \"trackId\": \"<string>\",\n \"formatId\": \"<string>\",\n \"sponsorIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"source\": {\n \"client\": \"<string>\",\n \"version\": \"<string>\",\n \"run_id\": \"<string>\",\n \"prompt\": \"<string>\"\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
orgIdstringpathrequiredYour organization ID. Any other organization returns
404.eventIdintegerpathrequiredThe Sessions event ID.
sessionIdstring<uuid>pathrequiredThe session ID.
Request body
titlestring- Max length
500
descriptionstring- Max length
20000
startsAtstringISO 8601, or empty to clear.
endsAtstringISO 8601, or empty to clear.
roomIdstringA room id, or empty for no room.
trackIdstringA track id, or empty for no track.
formatIdstringA format id, or empty for none.
sponsorIdsstring<uuid>[]- Max items
50
sourceSessionsWorkspaceSourceOptional on every write: which assistant is calling and what the person asked it. Recorded with the change in the organization's activity and on any approval request.
Show child attributes
clientstringversionstringrun_idstringpromptstring- Max length
2000
{ "title": "<string>", "description": "<string>", "startsAt": "<string>", "endsAt": "<string>", "roomId": "<string>", "trackId": "<string>", "formatId": "<string>", "sponsorIds": [ "3c90c3cc-0d44-4b50-8888-8dd25736052a" ], "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" }}Responses
200application/json
OK
successbooleanpayloadobjectShow child attributes
sessionSessionsWorkspaceSessionShow child attributes
idstring<uuid>titlestringdescriptionstring | nullPlain text.
statusstringpending(undecided),acceptedordeclined.track_idstring | nullformat_idstring | nullroom_idstring | nullstarts_atstring<date-time> | nullends_atstring<date-time> | nullsubmittedbooleanCame through the call for speakers.
created_atstring<date-time>speakersSessionsWorkspaceSessionSpeaker[]Show child attributes
contact_idstring<uuid>namestring | nullemailstring | nulltitlestring | nullrolestring | null
sponsor_idsstring<uuid>[]
400application/json
VALIDATION_ERROR: the body or a path id does not match the schema. source is always accepted.
errorstring- Allowed values
"VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
messagestringrequiredcodestringA more specific reason:
enterprise_only,trial_ended,plan_ended,in_use.upgradestringWith
enterprise_only: what needs a bigger plan or the platform (events,speakers,review_plans,forms, …).
401
Missing, invalid or expired token.
403application/json
SCOPE_REQUIRED: the token lackswrite:sessions.ORG_WIDE_TOKEN_REQUIRED: the key is restricted to particular events.code: enterprise_onlywithupgrade: the self-serve plan does not include it (another event this year, more speakers on the event); a person chooses a bigger plan or talks to us about the platform.code: trial_endedorplan_ended: the self-serve plan is read-only; everything can still be read.FORBIDDENwith nocode: the token's user is not an organization admin.
errorstring- Allowed values
"VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
messagestringrequiredcodestringA more specific reason:
enterprise_only,trial_ended,plan_ended,in_use.upgradestringWith
enterprise_only: what needs a bigger plan or the platform (events,speakers,review_plans,forms, …).
404application/json
NOT_FOUND: orgId is not the token's organization, or the event, session or sponsor is not in it.
errorstring- Allowed values
"VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
messagestringrequiredcodestringA more specific reason:
enterprise_only,trial_ended,plan_ended,in_use.upgradestringWith
enterprise_only: what needs a bigger plan or the platform (events,speakers,review_plans,forms, …).
423
A person has paused connected assistants for the organization (code: AGENT_WRITES_PAUSED); writes wait until they resume it in Sessionboard.
429
The token's request limit (100 requests per 15 minutes by default) or, for writes, its daily write quota. Wait Retry-After seconds.
Retry-AfterintegerheaderSeconds to wait before retrying.
Response examples
{ "success": true, "payload": { "session": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "title": "<string>", "description": "<string>", "status": "<string>", "track_id": "<string>", "format_id": "<string>", "room_id": "<string>", "starts_at": "2026-01-15T09:30:00Z", "ends_at": "2026-01-15T09:30:00Z", "submitted": true, "created_at": "2026-01-15T09:30:00Z", "speakers": [ { "contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "<string>", "email": "<string>", "title": "<string>", "role": "<string>" } ], "sponsor_ids": [ "3c90c3cc-0d44-4b50-8888-8dd25736052a" ] } }}{ "error": "VALIDATION_ERROR", "message": "<string>", "code": "<string>", "upgrade": "<string>"}{ "message": "This event has reached the speakers your plan includes. Bigger events are part of Growth or the Sessionboard platform.", "code": "enterprise_only", "upgrade": "speakers"}{ "message": "Your Sessions trial has ended. Choose a plan to keep going.", "code": "trial_ended"}{ "error": "VALIDATION_ERROR", "message": "<string>", "code": "<string>", "upgrade": "<string>"}