Get the credits overview
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
The Credits overview: whether credits are on for the workspace, the organization's credit types (the ones picked in setup first, marked chosen), credit issued by type, the 25 latest claims, events whose credit claiming is open, the credit goals per type and suggested goals (what a learner earned in the last 12 months, median and top quarter). Amounts are never added across credit types. Reads only. Requires read:learning; refused for a key restricted to particular events. Also at GET /v1/learning/workspace/credits.
Request example
curl --request GET \ --url 'https://public-api.sessionboard.com/v1/organization/{orgId}/learning/workspace/credits' \ --header 'x-access-token: <api-token>'const response = await fetch('https://public-api.sessionboard.com/v1/organization/{orgId}/learning/workspace/credits', { 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}/learning/workspace/credits", 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}/learning/workspace/credits", 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}/learning/workspace/credits", 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}/learning/workspace/credits")) .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.
Responses
200application/json
OK
successbooleanpayloadLearningCreditsOverviewShow child attributes
enabledbooleanWhether credits are on for the workspace.
doorstring- Allowed values
"associations", "companies"
typesobject[]Up to 100 credit types, those picked in setup first.
Show child attributes
idstring<uuid>keystringnamestringunitstringincrementstringSmallest step credit is rounded down to
chosenboolean
totalsobject[]Live credit claimed by credit type, largest first.
Show child attributes
credit_type_idstring<uuid> | nullnamestring | nullamountnumberclaimsintegerpeopleinteger
recentobject[]The 25 latest live claims.
Show child attributes
idstring<uuid>amountnumberclaimed_atstring<date-time>methodstring- Allowed values
"earned", "admin_granted", "imported", "self_reported"
credit_typestring | nullpersonstring | nullemailstring | nullperson_idstring<uuid> | nulllesson_idstring<uuid> | nullactivitystring | nullThe course or session title.
has_certificateboolean
claim_sitesobject[]Up to 20 events whose credit claiming is open.
Show child attributes
idstring<uuid>event_idintegerevent_namestringclaiming_enabledboolean
goalsobject[]Credit goals, one per credit type.
Show child attributes
credit_type_idstring<uuid> | nullcredit_typestring | nullamountnumbercycle_monthsinteger
goal_suggestionsobject[]What a learner earned of each type in the last 12 months, rounded up to a quarter.
Show child attributes
credit_type_idstring<uuid>mediannumberp75numberpeopleinteger
401
Missing, invalid or expired token.
403application/json
SCOPE_REQUIRED— the token lacksread:learning(reads) orwrite:learning(writes). Legacy tokens with no scopes cannot write.ORG_WIDE_TOKEN_REQUIRED— the token is restricted to particular events: "The Learning workspace covers every event and learner in the organization, so this API key (restricted to particular events) cannot use it. Use a key without an event restriction."FEATURE_NOT_ENABLED(feature: lessons_credits) — Learning is not on for the organization.FORBIDDEN— the token's user is not an active member of the organization, or lacks the Lessons permission the operation needs.
Gateway errors carry error (a code) and message. Errors from Learning itself carry status, success: false, message, name, and sometimes code (and feature or paused_at).
errorstring | objectThe gateway's error code (
SCOPE_REQUIRED,ORG_WIDE_TOKEN_REQUIRED,NOT_FOUND, …).messagestringstatusintegersuccessbooleannamestringcodestringFEATURE_NOT_ENABLED,AGENT_WRITES_PAUSED, …featurestringpaused_atstring<date-time>
404application/json
orgId is not your organization (error: NOT_FOUND, message: Organization not found).
Gateway errors carry error (a code) and message. Errors from Learning itself carry status, success: false, message, name, and sometimes code (and feature or paused_at).
errorstring | objectThe gateway's error code (
SCOPE_REQUIRED,ORG_WIDE_TOKEN_REQUIRED,NOT_FOUND, …).messagestringstatusintegersuccessbooleannamestringcodestringFEATURE_NOT_ENABLED,AGENT_WRITES_PAUSED, …featurestringpaused_atstring<date-time>
429application/json
- The token's request limit (100 requests per 15 minutes per bucket by default — see Rate Limiting). Wait
Retry-Afterseconds. QUOTA_EXCEEDED(writes) — the token's daily write quota (10,000 a day). Resets at midnight UTC.
Gateway errors carry error (a code) and message. Errors from Learning itself carry status, success: false, message, name, and sometimes code (and feature or paused_at).
errorstring | objectThe gateway's error code (
SCOPE_REQUIRED,ORG_WIDE_TOKEN_REQUIRED,NOT_FOUND, …).messagestringstatusintegersuccessbooleannamestringcodestringFEATURE_NOT_ENABLED,AGENT_WRITES_PAUSED, …featurestringpaused_atstring<date-time>
Retry-AfterintegerheaderSeconds to wait before retrying.
Response examples
{ "success": true, "payload": { "enabled": true, "door": "associations", "types": [ { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "key": "<string>", "name": "<string>", "unit": "<string>", "increment": "<string>", "chosen": true } ], "totals": [ { "credit_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "<string>", "amount": 123.45, "claims": 123, "people": 123 } ], "recent": [ { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "amount": 123.45, "claimed_at": "2026-01-15T09:30:00Z", "method": "earned", "credit_type": "<string>", "person": "<string>", "email": "<string>", "person_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "lesson_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "activity": "<string>", "has_certificate": true } ], "claim_sites": [ { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "event_id": 123, "event_name": "<string>", "claiming_enabled": true } ], "goals": [ { "credit_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "credit_type": "<string>", "amount": 123.45, "cycle_months": 123 } ], "goal_suggestions": [ { "credit_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "median": 123.45, "p75": 123.45, "people": 123 } ] }}{ "error": "ORG_WIDE_TOKEN_REQUIRED", "message": "The Learning workspace covers every event and learner in the organization, so this API key (restricted to particular events) cannot use it. Use a key without an event restriction."}{ "error": "SCOPE_REQUIRED", "message": "This operation requires the 'write:learning' scope."}{ "status": 403, "success": false, "message": "Feature 'lessons_credits' is not enabled for this organization", "name": "FeatureNotEnabledError", "code": "FEATURE_NOT_ENABLED", "feature": "lessons_credits"}{ "error": "NOT_FOUND", "message": "Organization not found"}{ "error": "<string>", "message": "<string>", "status": 123, "success": true, "name": "<string>", "code": "<string>", "feature": "<string>", "paused_at": "2026-01-15T09:30:00Z"}