Cours
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.
- Périmètre courses:read
- 1 crédit
- Lecture
- Stable
Paramètres
| Nom | Type | Description |
|---|---|---|
limitquery | integer1–200, default 50 | |
cursorquery | string | Opaque cursor: next_cursor of the previous page. |
sincequery | date-time | ISO 8601. Returns the objects with updated_at >= since. |
include_deletedquery | booleandefault false | |
student_idquery | integer≥ 1 |
curl "https://api.fitdistance.io/api/partner/v1/courses/progress?limit=50" \
-H "Authorization: Bearer fd_live_xxxxxxxx"200 · une page de 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 · une page de CourseProgress
| Nom | Type | Description |
|---|---|---|
id requis | integer | The id of the access row of the student to the course. |
course_id requis | string | |
course_title requis | string | |
student_id requis | integer | |
granted_at requis | date-time | |
revoked_at requis | date-time | null | |
is_active requis | boolean | False once the access is revoked. |
lessons_count requis | integer | The visible lessons of the course. |
completed_lessons_count requis | integer | The visible lessons of the course the student completed. |
last_completed_at requis | date-time | null | |
quiz_attempts_count requis | integer | |
quiz_passed_count requis | integer | |
completed_lessons requis | CourseLessonCompletion[] | The completions of the visible lessons. Empty when deleted. |
quiz_attempts requis | CourseQuizAttempt[] | The quiz attempts, oldest first, without the answers. Empty when deleted. |
updated_at requis | date-time | The 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_at | date-time | null | Present when include_deleted is true: the deletion of the course. |
Erreurs
| Statut | Code | Quand |
|---|---|---|
400 | VALIDATION | Paramètres ou corps invalides.facturé |
401 | UNAUTHORIZED | Clé absente, inconnue ou révoquée.non facturé |
402 | CREDITS_EXHAUSTED | Plus de crédits ce mois-ci et aucune réserve.non facturé |
403 | SCOPE_MISSING | La clé n'a pas le périmètre demandé.non facturé |
403 | PLAN_NOT_ELIGIBLE | Ton offre n'ouvre pas l'API.non facturé |
429 | RATE_LIMITED | Trop d'appels : 10 par seconde, 300 par minute, 60 écritures et 20 suppressions par minute.non facturé |