Facebook Pixel
Fit'DistanceDocumentation
Open the app

Courses

1 route

GET /courses/progress

Progress of each student in each course they have an access row for: lesson completions and quiz attempts. A student of a course shared with everyone gets a row when they first open it. An undone completion leaves no trace.

  • Scope courses:read
  • 1 credit
  • Read
  • Stable

Parameters

NameTypeDescription
limitqueryinteger1–200, default 50
cursorquerystringOpaque cursor: next_cursor of the previous page.
sincequerydate-timeISO 8601. Returns the objects with updated_at >= since.
include_deletedquerybooleandefault false
student_idqueryinteger≥ 1
curl "https://api.fitdistance.io/api/partner/v1/courses/progress?limit=50" \
  -H "Authorization: Bearer fd_live_xxxxxxxx"
200 · a page of CourseProgress
{
  "data": [
    {
      "id": 4821,
      "course_id": "7c1d1e2a-9b3f-4c5d-8e6f-1a2b3c4d5e6f",
      "course_title": "string",
      "student_id": 4821,
      "granted_at": "2026-10-24T09:12:00Z",
      "revoked_at": "2026-10-24T09:12:00Z",
      "is_active": true,
      "lessons_count": 3,
      "completed_lessons_count": 3,
      "last_completed_at": "2026-10-24T09:12:00Z",
      "quiz_attempts_count": 3,
      "quiz_passed_count": 3,
      "completed_lessons": [
        {
          "lesson_id": "7c1d1e2a-9b3f-4c5d-8e6f-1a2b3c4d5e6f",
          "completed_at": "2026-10-24T09:12:00Z"
        }
      ],
      "quiz_attempts": [
        {
          "id": "7c1d1e2a-9b3f-4c5d-8e6f-1a2b3c4d5e6f",
          "lesson_id": "7c1d1e2a-9b3f-4c5d-8e6f-1a2b3c4d5e6f",
          "score_percent": 80,
          "passed": true,
          "attempted_at": "2026-10-24T09:12:00Z"
        }
      ],
      "updated_at": "2026-10-24T09:12:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
403 · SCOPE_MISSING
{
  "error": {
    "name": "PARTNER_API",
    "message": "SCOPE_MISSING"
  }
}

200 · a page of CourseProgress

NameTypeDescription
id requiredintegerThe id of the access row of the student to the course.
course_id requiredstring
course_title requiredstring
student_id requiredinteger
granted_at requireddate-time
revoked_at requireddate-time | null
is_active requiredbooleanFalse once the access is revoked.
lessons_count requiredintegerThe visible lessons of the course.
completed_lessons_count requiredintegerThe visible lessons of the course the student completed.
last_completed_at requireddate-time | null
quiz_attempts_count requiredinteger
quiz_passed_count requiredinteger
completed_lessons requiredCourseLessonCompletion[]The completions of the visible lessons. Empty when deleted.
quiz_attempts requiredCourseQuizAttempt[]The quiz attempts, oldest first, without the answers. Empty when deleted.
updated_at requireddate-timeThe latest change of the access, a revocation, a completion or a quiz attempt included. Also moves when the course changes (its title) or is deleted, when one of its lessons changes, is hidden or deleted, and when a quiz is deleted.
deleted_atdate-time | nullPresent when include_deleted is true: the deletion of the course.

Errors

StatusCodeWhen
400VALIDATIONInvalid parameters or body.billed
401UNAUTHORIZEDKey missing, unknown or revoked.not billed
402CREDITS_EXHAUSTEDNo credits left this month and no reserve.not billed
403SCOPE_MISSINGThe key doesn't have the required scope.not billed
403PLAN_NOT_ELIGIBLEYour plan doesn't include the API.not billed
429RATE_LIMITEDToo many calls: 10 per second, 300 per minute, 60 writes and 20 deletes per minute.not billed