Skip to content

Ask to open nominations

POST/v1/organization/{orgId}/awards/workspace/programs/{programId}/open

US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com

Asks a person to open nominations. Opening puts the program on the organization's Awards Site (its public page and nomination form) and starts the nomination window now, until deadline (or the current deadline when it is still ahead, else 30 days from now). Because it makes the program public, an API call never opens it directly: it answers 202 with status: needs_approval and a link, and nothing changes until a person approves it in Sessionboard Awards. It then runs as that person. Do not call again for the same change. If it cannot run when approved, the approval records why: the program has no categories (no_categories), or the plan is read-only (trial_ended, plan_ended). A trial opens without a card; during the trial each program takes up to 50 nominations before the person is asked to choose a plan, and nominations past that are still accepted. Requires write:awards; the token's user needs the Awards update permission and must manage the program. Refused for a key restricted to particular events. Also at POST /v1/awards/workspace/programs/{programId}/open.

Request example

Terminal window
curl --request POST \
--url 'https://public-api.sessionboard.com/v1/organization/{orgId}/awards/workspace/programs/{programId}/open' \
--header 'x-access-token: <api-token>' \
--header 'Content-Type: application/json' \
--data '{
"deadline": "2026-01-15T09:30:00Z",
"source": {
"client": "<string>",
"version": "<string>",
"run_id": "<string>",
"prompt": "<string>"
}
}'

Try it

Authorization

Your token stays in this page. It is sent only to the region above and is never saved; it is gone when you leave or reload the page.

Path parameters
Body application/json
POST

Authorizations

  • x-access-tokenstringheader

    Organization API token. Generate from Organization Settings → API Tokens.

  • AuthorizationBearer <token>headeror

    OAuth 2.1 access token. Obtained via the OAuth PKCE flow at /oauth/token.

Send one of these. See Authentication.

Path parameters

  • orgIdstringpathrequired

    Your organization ID. Any other organization returns 404.

  • programIdstring<uuid>pathrequired

    The Awards program ID.

Request body

application/json

  • deadlinestring<date-time>

    When nominations close, as a full date and time with a time zone. A date alone is refused.

  • sourceAwardsWorkspaceSource

    Optional 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
    • clientstring

      The assistant's client name (for example Claude or ChatGPT).

    • versionstring
    • run_idstring

      Your own id for the conversation.

    • promptstring

      What the person asked the assistant.

      Max length
      2000
{
"deadline": "2026-01-15T09:30:00Z",
"source": {
"client": "<string>",
"version": "<string>",
"run_id": "<string>",
"prompt": "<string>"
}
}

Responses

202application/json

Waiting for a person: nothing was sent or published. payload.url opens the request in Sessionboard Awards, where a person approves or declines it. An approved request runs as that person; if it cannot run, the approval's status becomes failed with the reason in error.

  • successboolean
  • payloadAwardsWorkspaceApprovalRequest
    Show child attributes
    • statusstring
      Allowed values
      "needs_approval"
    • approval_idstring<uuid>
    • urlstring<uri>

      Where a person approves or declines the request in Sessionboard Awards (the workspace's approvals page, /awards/{orgId}/approvals?id={approval_id}).

    • messagestring

      Waiting for your OK in Sessionboard: followed by url.

    • notestring
      Example
      "Nothing was sent or published. A person approves or declines this in Sessionboard Awards; it then runs as them. Do not call again."
    • approvalAwardsWorkspaceApproval

      A request from an assistant that waits for a person.

      Show child attributes
      • idstring<uuid>
      • statusstring
        Allowed values
        "pending", "approved", "declined", "failed"
      • actionstring
        Allowed values
        "open_awards_program", "invite_reviewers", "announce_winners"
      • surfacestring
        Allowed values
        "award_programs", "award_review", "award_winners"
      • titlestring
        Example
        "Open nominations for “Volunteer Awards 2027”"
      • summarystring

        The person's request to the assistant, when source.prompt was sent.

      • targetobject | null
        Show child attributes
        • typestring
          Example
          "awards_program"
        • idstring
      • event_idinteger | null
      • assistantobject
        Show child attributes
        • vendorstring
        • labelstring
        • clientstring | null
        • viastring | null
          Allowed values
          "api_token", "oauth", null
      • requested_byobject
        Show child attributes
        • user_idinteger | null
        • namestring | null
      • decided_byobject | null
        Show child attributes
        • user_idinteger
        • namestring | null
      • decided_atstring<date-time> | null
      • errorstring | null

        Why an approved request could not run.

      • remedyobject | null

        A one-step fix offered next to Retry, when there is one.

      • can_retryboolean
      • created_atstring<date-time>
      • productstring
        Allowed values
        "awards"
      • urlstring

        Where a person approves or declines it.

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"
  • messagestringrequired
  • codestring

    A more specific reason, when there is one (trial_ended, plan_ended).

401

Missing, invalid or expired token.

403application/json

  • SCOPE_REQUIRED: the token lacks write:awards. Legacy tokens with no scopes cannot write.
  • 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 with code: trial_ended or code: plan_ended: the organization's self-serve Awards plan is read-only (the trial ended, or the plan was canceled or is unpaid). Everything can still be read; choose a plan to make changes.
  • FORBIDDEN with no code: the token's user is not an active member of the organization, lacks the Awards permission the operation needs, does not manage the program, or (for the setup answers) is not an organization admin.

These operations do not return enterprise_only; the Enterprise-only items are listed by GET /v1/organization/{orgId}/awards/workspace/enterprise.

Error body for the Awards workspace operations.

  • errorstringrequired
    Allowed values
    "VALIDATION_ERROR", "SCOPE_REQUIRED", "ORG_WIDE_TOKEN_REQUIRED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "QUOTA_EXCEEDED"
  • messagestringrequired
  • codestring

    A 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"
  • messagestringrequired
  • codestring

    A 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.

  • statusinteger
  • successboolean
  • messagestring
  • namestring
  • codestring
  • paused_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-After seconds. The body is the TooManyRequestsError shape — see Rate Limiting.
  • Writes only: QUOTA_EXCEEDED, the token's daily write quota (10,000 writes a day). It resets at midnight UTC.
  • responseTooManyRequestsError | AwardsWorkspaceError
    name: TooManyRequestsError (TooManyRequestsError)

    Body of a 429 from the API's own request limits (per token, and per organization and user). Wait Retry-After seconds.

    • 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"
    • messagestringrequired
    • codestring

      A more specific reason, when there is one (trial_ended, plan_ended).

  • Retry-Afterintegerheader

    Seconds to wait before retrying.

Response examples

{
"success": true,
"payload": {
"status": "needs_approval",
"approval_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "https://example.com",
"message": "<string>",
"note": "Nothing was sent or published. A person approves or declines this in Sessionboard Awards; it then runs as them. Do not call again.",
"approval": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"action": "open_awards_program",
"surface": "award_programs",
"title": "Open nominations for “Volunteer Awards 2027”",
"summary": "<string>",
"target": {
"type": "awards_program",
"id": "<string>"
},
"event_id": 123,
"assistant": {
"vendor": "<string>",
"label": "<string>",
"client": "<string>",
"via": "api_token"
},
"requested_by": {
"user_id": 123,
"name": "<string>"
},
"decided_by": {
"user_id": 123,
"name": "<string>"
},
"decided_at": "2026-01-15T09:30:00Z",
"error": "<string>",
"remedy": {},
"can_retry": true,
"created_at": "2026-01-15T09:30:00Z",
"product": "awards",
"url": "<string>"
}
}
}