Skip to content

Get a course draft

GET/v1/organization/{orgId}/learning/drafts/{draftId}

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

While generating: status and progress. When ready: the bundle (lessons, the course, the certification), the diff publishing would make, warnings (questions left out because the clip doesn't answer them) and media — per clip, its status and a short-lived playable url. Requires read:learning. Also at GET /v1/learning/drafts/{draftId}.

Request example

Terminal window
curl --request GET \
--url 'https://public-api.sessionboard.com/v1/organization/{orgId}/learning/drafts/{draftId}' \
--header 'x-access-token: <api-token>'

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
GET

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.

  • draftIdstring<uuid>pathrequired

Responses

200application/json

OK

  • payloadobject
    Show child attributes
    • draftCourseDraft
      Show child attributes
      • idstring<uuid>
      • statusstring
        Allowed values
        "queued", "generating", "ready", "applying", "applied", "failed"
      • titlestring | null
      • media_item_idsstring<uuid>[]
      • progressobject | null
        Show child attributes
        • stepstring
        • doneinteger
        • totalinteger
      • errorstring | null
      • lesson_countinteger
      • applied_atstring<date-time> | null
      • created_atstring<date-time>
      • updated_atstring<date-time>

        Send back as baseUpdatedAt when you save.

      • bundleCourseBundle

        Lessons, the course and the certification. A lesson's watch step plays a clip (mediaItemId) and may carry checkpoints — questions with atSeconds, seconds into the clip. A question has prompt, type, options, answer (multi-select, ordering and matching answers are JSON strings), optional config and feedback (correct, incorrect, hint). Keys are permanent: publishing upserts by key.

        Show child attributes
        • lessonsobject[]required
        • coursesobject[]
        • certificationsobject[]
      • diffobject

        What publishing would do — created / updated / unchanged for lessons, courses and certifications.

      • warningsobject[]
        Show child attributes
        • lessoninteger
        • messagestring
      • mediaobject

        Per clip id — status (ready, processing, failed, missing), a short-lived url, duration_s, poster_url.

      • apply_resultobject | null

403

  • SCOPE_REQUIRED — the token lacks read:learning (reads) or write:learning (writes). Legacy tokens with no scopes cannot write.
  • FORBIDDEN — Learning is not on for the organization, or the token's user lacks the Lessons permission.

404

Not found — also returned for another organization's draft.

Response examples

{
"payload": {
"draft": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"title": "<string>",
"media_item_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"progress": {
"step": "<string>",
"done": 123,
"total": 123
},
"error": "<string>",
"lesson_count": 123,
"applied_at": "2026-01-15T09:30:00Z",
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:30:00Z",
"bundle": {
"lessons": [
{}
],
"courses": [
{}
],
"certifications": [
{}
]
},
"diff": {},
"warnings": [
{
"lesson": 123,
"message": "<string>"
}
],
"media": {},
"apply_result": {}
}
}
}

Get release notes by email

A short digest on the days something new goes live — each change with a link to its note in the release notes. No marketing, and one click to stop.

Company email addresses only. We’ll send one email to confirm it’s you. Already use Sessionboard? You can also turn this on under Community → What’s new.