Create a draft awards program
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
Creates a working draft that is ready to review: the program with you as a manager, its categories (yours, or the starter categories for the organization's audience, at most 50), a four-question nomination form, a scorecard (Impact, Originality and Evidence on a 1–5 scale, plus comments) on the program's one review pass, and the winner types Winner and Finalist. The deadline sets the review pass dates: nominations from now until the deadline (30 days from now when omitted), then three weeks of review. Nothing is public and nothing is sent until nominations are opened. Requires write:awards; the token's user needs the Awards create permission. Refused for a key restricted to particular events. Also at POST /v1/awards/workspace/programs.
Request example
curl --request POST \ --url 'https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs' \ --header 'x-access-token: <api-token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "<string>", "description": "<string>", "categories": [ "<string>" ], "deadline": "2026-01-15T09:30:00Z", "nominationMode": "nominate_others", "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" }}'const response = await fetch('https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs', { method: 'POST', headers: { "x-access-token": "<api-token>", "Content-Type": "application/json" }, body: JSON.stringify({ "name": "<string>", "description": "<string>", "categories": [ "<string>" ], "deadline": "2026-01-15T09:30:00Z", "nominationMode": "nominate_others", "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" } }),});
const data = await response.json();console.log(data);import requests
response = requests.request( "POST", "https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs", headers={ "x-access-token": "<api-token>", "Content-Type": "application/json" }, json={ "name": "<string>", "description": "<string>", "categories": [ "<string>" ], "deadline": "2026-01-15T09:30:00Z", "nominationMode": "nominate_others", "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}/awards/workspace/programs", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{ "name": "<string>", "description": "<string>", "categories": [ "<string>" ], "deadline": "2026-01-15T09:30:00Z", "nominationMode": "nominate_others", "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("POST", "https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs", strings.NewReader(`{ "name": "<string>", "description": "<string>", "categories": [ "<string>" ], "deadline": "2026-01-15T09:30:00Z", "nominationMode": "nominate_others", "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}/awards/workspace/programs")) .header("x-access-token", "<api-token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"categories\": [\n \"<string>\"\n ],\n \"deadline\": \"2026-01-15T09:30:00Z\",\n \"nominationMode\": \"nominate_others\",\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.
Request body
namestringrequired- Min length
1- Max length
200
descriptionstring- Max length
2000
categoriesstring[]Category names, in order. Omit (or send
[]) for the audience's starter categories.- Max items
50
deadlinestring<date-time>When nominations close, as a full date and time with a time zone (for example
2026-12-01T17:00:00Z). A date alone is refused.nominationModestringnominate_others: people nominate someone else.self_only: people submit for themselves. Defaults to the audience's mode.- Allowed values
"nominate_others", "self_only"
sourceAwardsWorkspaceSourceOptional 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; never stored on the program.
Show child attributes
clientstringThe assistant's client name (for example
ClaudeorChatGPT).versionstringrun_idstringYour own id for the conversation.
promptstringWhat the person asked the assistant.
- Max length
2000
{ "name": "<string>", "description": "<string>", "categories": [ "<string>" ], "deadline": "2026-01-15T09:30:00Z", "nominationMode": "nominate_others", "source": { "client": "<string>", "version": "<string>", "run_id": "<string>", "prompt": "<string>" }}Responses
201application/json
Created
successbooleanpayloadobjectShow child attributes
programAwardsWorkspaceProgramShow child attributes
idstring<uuid>namestringnomenclaturestring- Allowed values
"awards", "grants", "scholarships"
descriptionstring | nullnomination_modestringnominate_others: people nominate someone else.self_only: people submit for themselves. Defaults to the audience's mode.- Allowed values
"nominate_others", "self_only"
statusstringWorked out from the dates:
openwhile it is on the Awards Site and its nomination window is running,reviewingafter nominations close,closedwhen it has nominations and every date has passed.- Allowed values
"draft", "open", "reviewing", "closed", "archived"
decidedbooleanAt least one winner has been picked.
roundAwardsWorkspaceRound | any | nullShow child attributes
idstring<uuid>namestringsubmission_start_datestring<date-time> | nullsubmission_end_datestring<date-time> | nullThe nomination deadline.
review_start_datestring<date-time> | nullreview_end_datestring<date-time> | null
roundsintegerHow many Rounds the program has (one on self-serve).
categoriesAwardsWorkspaceCategory[]Show child attributes
idstring<uuid>namestring
categories_revisionstringSend this as
baseRevisionwhen replacing the categories.public_urlstring | nullThe program's sign-in page on the Awards Site, once it has been opened. Empty when the Site has no address yet.
countsAwardsWorkspaceProgramCountsShow child attributes
submittedintegerSubmitted nominations.
draftsintegerNominations started and not submitted.
reviewersintegerscorecardsintegerFinished scorecards.
reviewedintegerSubmitted nominations with at least one finished scorecard.
winnersinteger
created_atstring<date-time>
400application/json
VALIDATION_ERROR: the body or a path id does not match the schema. Unknown body fields are refused and named
in the message; source is always accepted.
Error body for the Awards workspace operations.
errorstringrequired- Allowed values
"VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
messagestringrequiredcodestringA more specific reason, when there is one (
trial_ended,plan_ended).
401
Missing, invalid or expired token.
403application/json
One of the codes in AwardsWorkspaceWriteForbidden, or FORBIDDEN with a message saying the plan does not
allow another awards program (Enterprise organizations have a program limit; self-serve Awards plans do not).
Error body for the Awards workspace operations.
errorstringrequired- Allowed values
"VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
messagestringrequiredcodestringA more specific reason, when there is one (
trial_ended,plan_ended).
404application/json
NOT_FOUND: orgId is not the token's organization.
Error body for the Awards workspace operations.
errorstringrequired- Allowed values
"VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
messagestringrequiredcodestringA more specific reason, when there is one (
trial_ended,plan_ended).
423application/json
A person has paused connected assistants for the organization, so writes from the API wait until they resume
it in Sessionboard. code is AGENT_WRITES_PAUSED.
Error body for 423.
statusintegersuccessbooleanmessagestringnamestringcodestringpaused_atstring<date-time>When assistants were paused.
429application/json
- The token's request limit (100 requests per 15 minutes by default, per bucket). Wait
Retry-Afterseconds. The body is theTooManyRequestsErrorshape — see Rate Limiting. - Writes only:
QUOTA_EXCEEDED, the token's daily write quota (10,000 writes a day). It resets at midnight UTC.
responseTooManyRequestsError | AwardsWorkspaceErrorname: TooManyRequestsError (TooManyRequestsError)
Body of a
429from the API's own request limits (per token, and per organization and user). WaitRetry-Afterseconds.statusinteger- Example
429
successboolean- Example
false
messagestringrequired- Example
"Error while trying to reach the endpoint: Too many requests"
namestringrequired- Allowed values
"TooManyRequestsError"
Option 2 (AwardsWorkspaceError)
Error body for the Awards workspace operations.
errorstringrequired- Allowed values
"VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
messagestringrequiredcodestringA more specific reason, when there is one (
trial_ended,plan_ended).
Retry-AfterintegerheaderSeconds to wait before retrying.
Response examples
{ "success": true, "payload": { "program": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "<string>", "nomenclature": "awards", "description": "<string>", "nomination_mode": "nominate_others", "status": "draft", "decided": true, "round": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "<string>", "submission_start_date": "2026-01-15T09:30:00Z", "submission_end_date": "2026-01-15T09:30:00Z", "review_start_date": "2026-01-15T09:30:00Z", "review_end_date": "2026-01-15T09:30:00Z" }, "rounds": 123, "categories": [ { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "<string>" } ], "categories_revision": "<string>", "public_url": "<string>", "counts": { "submitted": 123, "drafts": 123, "reviewers": 123, "scorecards": 123, "reviewed": 123, "winners": 123 }, "created_at": "2026-01-15T09:30:00Z" } }}{ "error": "VALIDATION_ERROR", "message": "Error on body parameter: data should NOT have additional properties: \"winners\""}{ "error": "FORBIDDEN", "message": "You have reached the maximum number of award programs (3) for your account. Contact your Sessionboard account manager to increase your limit."}{ "error": "NOT_FOUND", "message": "Organization not found"}{ "status": 423, "success": false, "message": "A person has paused connected assistants in Sessionboard. Ask them to resume it from their workspace before trying again.", "name": "AgentWritesPausedError", "code": "AGENT_WRITES_PAUSED", "paused_at": "2026-11-06T15:04:05.000Z"}{ "status": 429, "success": false, "message": "Error while trying to reach the endpoint: Too many requests", "name": "TooManyRequestsError"}