Skip to content

Read learners' results back

Authoring writes content; reading results pulls back what learners did with it. That is the itera-api pull-only REST surface, authenticated with a per-tenant API key (never a user-JWT, never for writes).

Ask your Itera admin to mint one for your tenant. The raw key (itera_<prefix>_<secret>) is shown once — store it in your secret manager. See Authentication → reading results.

Terminal window
curl "https://api.iterahq.dev/v1/activity-results?limit=50" \
-H "Authorization: Bearer itera_<prefix>_<secret>"
response
{
"data": [
{ "id": "…", "activity_id": "…", "lesson_id": "…", "itera_user_id": "…",
"status": "completed", "score": 90, "completed_at": "…", "artifact_ids": ["…"] }
],
"next_cursor": "eyJ…"
}

Keyset pagination over (created_at, id). Pass the next_cursor back until it’s null:

Terminal window
curl "https://api.iterahq.dev/v1/activity-results?limit=200&cursor=eyJ…" \
-H "Authorization: Bearer itera_<prefix>_<secret>"
  • By activity: ?activity_id=<uuid> on /v1/activity-results and /v1/artifacts.
  • By user: ?user_id=<uuid> on /v1/artifacts.
  • A single result/artifact by id: /v1/activity-results/:id, /v1/artifacts/:id (returns 404 if it isn’t your tenant’s — no cross-tenant enumeration).
Terminal window
curl "https://api.iterahq.dev/v1/progress" \
-H "Authorization: Bearer itera_<prefix>_<secret>"
response
{
"data": [
{ "itera_user_id": "…", "program_id": "…",
"completed_count": 7, "total_count": 12, "percent": 58, "last_activity_at": "…" }
],
"next_cursor": null
}

See Reading results (itera-api) for every endpoint, query param, and the ActivityResult / Progress / Artifact / Error schemas.