Get review progress
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
The program's review pass: each Reviewer with how many nominations they are assigned and how many scorecards they have finished, the totals, how many Reviewers have not started, and every submitted nomination with its average score (scale questions only), highest first. A scorecard counts as finished when every required question shown for that nomination is answered, or the Reviewer abstained. Reads only. Requires read:awards; the token's user needs the Awards read permission and must manage the program. Refused for a key restricted to particular events. Also at GET /v1/awards/workspace/programs/{programId}/review.
Request example
curl --request GET \ --url 'https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs/{programId}/review' \ --header 'x-access-token: <api-token>'const response = await fetch('https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs/{programId}/review', { method: 'GET', headers: { "x-access-token": "<api-token>" },});
const data = await response.json();console.log(data);import requests
response = requests.request( "GET", "https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs/{programId}/review", headers={ "x-access-token": "<api-token>" },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs/{programId}/review", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "x-access-token: <api-token>", ],]);
$response = curl_exec($curl);curl_close($curl);
echo $response;package main
import ( "fmt" "io" "net/http")
func main() { req, _ := http.NewRequest("GET", "https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs/{programId}/review", nil) req.Header.Add("x-access-token", "<api-token>")
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/{programId}/review")) .header("x-access-token", "<api-token>") .method("GET", HttpRequest.BodyPublishers.noBody()) .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.programIdstring<uuid>pathrequiredThe Awards program ID.
Responses
200application/json
OK
successbooleanpayloadobjectShow child attributes
reviewAwardsWorkspaceReviewProgressShow child attributes
reviewersobject[]Show child attributes
user_idintegernamestringemailstring<email>assignedintegerNominations assigned, not counting abstentions.
doneintegerFinished scorecards.
assignedintegerdoneintegernot_startedintegerReviewers with assignments and no finished scorecard.
submissionsAwardsWorkspaceSubmission[]Show child attributes
idstring<uuid>friendly_idstring | nullnomineestringThe nominee's name, else their organization, else the friendly id.
organizationstring | nullThe nominee's organization.
categorystring | nullstatusstring | null- Allowed values
"draft", "pending_payment", "submitted", "under_review", "accepted", "rejected", null
submitted_atstring<date-time>average_scorenumber | nullAverage of the scale questions across Reviewers, to one decimal.
reviewsintegerReviewers who saved any answer.
winnerobject | nullShow child attributes
winner_type_idstring<uuid>namestring- Example
"Winner"
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
SCOPE_REQUIRED: the token lacksread:awards. A write scope does not grant reads; a legacy token with no scopes may read.ORG_WIDE_TOKEN_REQUIRED: the key is restricted to particular events. The Awards workspace covers every awards program in the organization, so use a key without an event restriction.FORBIDDEN: the token's user is not an active member of the organization, lacks the Awards read permission, or does not manage the program.
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, or the program is not in it.
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).
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": { "review": { "reviewers": [ { "user_id": 123, "name": "<string>", "email": "jane@example.com", "assigned": 123, "done": 123 } ], "assigned": 123, "done": 123, "not_started": 123 }, "submissions": [ { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "friendly_id": "<string>", "nominee": "<string>", "organization": "<string>", "category": "<string>", "status": "draft", "submitted_at": "2026-01-15T09:30:00Z", "average_score": 123.45, "reviews": 123, "winner": { "winner_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "Winner" } } ] }}{ "error": "VALIDATION_ERROR", "message": "Error on body parameter: data should NOT have additional properties: \"winners\""}{ "error": "SCOPE_REQUIRED", "message": "Token missing required scope: read:awards"}{ "error": "ORG_WIDE_TOKEN_REQUIRED", "message": "The Awards workspace covers every awards program in the organization, so this API key (restricted to particular events) cannot use it. Use a key without an event restriction."}{ "error": "NOT_FOUND", "message": "Awards Program could not be found"}{ "status": 429, "success": false, "message": "Error while trying to reach the endpoint: Too many requests", "name": "TooManyRequestsError"}