Skip to content
cursareDocs
Sign inGet started
Documentation
  • Overview
  • Index2
  • Organization17
  • Sales6
  • Insights8
  • Reports and safety7
  • Minor accounts8
  • Minor safety3
  • Offers11
  • Media1
  • Contents10
  • Learner delivery1
  • Learner runtime5
  • Learners12
  • Cohorts12
  • Intake forms5
  • Campaigns4
  • Teams8
  • Affiliates7
  • Links7
  • Reviews1
  • Integrations26
  • MCP2
  • Webhooks6

Learner runtime

Learner runtime operations.

5 endpoints

Create a learner runtime session

POST/learner-runtime/sessions

Exchanges a trusted organization credential for a short-lived browser token after verifying the learner's current access. Call this endpoint from a trusted server only.

Request body

originstringrequired

The browser origin allowed to use the learner token, such as https://app.example.com.

rootContentIdstringrequired

The enrolled root course id.

userIdstringrequired

The enrolled learner's user id.

Responses

200Create a learner runtime session.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/learner-runtime/sessions \
  --request POST \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "origin": "string",
  "rootContentId": "string",
  "userId": "string"
}'
{
  "data": {
    "expiresAt": "2026-01-31T12:00:00.000Z",
    "origin": "string",
    "token": "string",
    "tokenType": "string"
  }
}

Get an enrolled course node and progress

GET/learner-runtime/{rootContentId}

Uses a learner runtime token. Returns learner-safe published content plus the canonical course graph, release state, completion progress, and estimated duration.

Path parameters

rootContentIdstring

The root course id bound to the learner token.

Query parameters

contentIdstring

A referenced content id in the enrolled graph. Defaults to the root course.

Responses

200Get an enrolled course node and progress.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/learner-runtime/{rootContentId} \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "content": "string",
    "progress": "string"
  }
}

Update learner section progress

PATCH/learner-runtime/{rootContentId}/progress

Uses a learner runtime token and applies the course's canonical release and completion rules.

Path parameters

rootContentIdstring

The root course id bound to the learner token.

Request body

contentIdstringrequired

The content node containing the section.

donebooleanrequired

Whether the learner completed the section.

sectionIdstringrequired

The stable section id to update.

Responses

200Update learner section progress.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/learner-runtime/{rootContentId}/progress \
  --request PATCH \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "contentId": "string",
  "done": true,
  "sectionId": "string"
}'
{
  "data": {
    "completed": true,
    "completedAt": "2026-01-31T12:00:00.000Z",
    "courseMap": "string",
    "currentIndex": 0,
    "rootCompleted": true,
    "rootSteps": [
      {
        "available": true,
        "current": true,
        "done": true,
        "id": "string",
        "kind": "section",
        "locked": true,
        "lockReason": "string",
        "routeSegment": "string",
        "sectionIndex": 0,
        "targetContentId": "string",
        "title": "string",
        "unlockAt": 0
      }
    ],
    "steps": [
      {
        "available": true,
        "current": true,
        "done": true,
        "id": "string",
        "kind": "section",
        "locked": true,
        "lockReason": "string",
        "routeSegment": "string",
        "sectionIndex": 0,
        "targetContentId": "string",
        "title": "string",
        "unlockAt": 0
      }
    ],
    "estimatedSeconds": 0,
    "justCompleted": true,
    "reviewHints": [
      {
        "routeSegment": "string",
        "score": 0,
        "targetContentId": "string",
        "title": "string",
        "total": 0
      }
    ]
  }
}

Record a learner quiz attempt

POST/learner-runtime/{rootContentId}/attempts

Uses a learner runtime token and accepts quiz content only from the enrolled course graph.

Path parameters

rootContentIdstring

The root course id bound to the learner token.

Request body

answersobjectrequired

Quiz activity ids mapped to selected option ids.

contentIdstringrequired

The content node containing the quiz.

Responses

200Record a learner quiz attempt.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/learner-runtime/{rootContentId}/attempts \
  --request POST \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "answers": {},
  "contentId": "string"
}'
{
  "data": {
    "recorded": true,
    "results": [
      {
        "correct": true,
        "correctOptionId": "string",
        "questionId": "string"
      }
    ],
    "score": 0,
    "total": 0
  }
}

Get the learner certificate credential

GET/learner-runtime/{rootContentId}/certificate

Uses a learner runtime token and returns a credential only after the root course is complete.

Path parameters

rootContentIdstring

The root course id bound to the learner token.

Responses

200Get the learner certificate credential.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/learner-runtime/{rootContentId}/certificate \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "completedAt": "2026-01-31T12:00:00.000Z",
    "id": "string",
    "theme": "classic"
  }
}

Your privacy choices

The technical Tag Manager container is required to apply your choices. Analytics and marketing cookies and storage remain optional and stay off until you authorize them. Privacy Policy.

Sign-in, security, core functions and consent enforcement.

Audience measurement such as Google Analytics.

Marketing storage, campaign attribution and optional tags.