Registra o acesso ou a conclusão de uma aula
POST/api/courses/{courseId}/lesson/{lessonId}/progress
- Auth
- Jeton requis
- Clé d’API:
- courses:write
- X-CommunityId
X-CommunityIdEnvoyez le X-CommunityId de la communauté où l’opération a lieu.
Owner, admin, moderador ou membro **matriculado** (`enrolled` ou `completed`) no curso; sem matrícula, 403. Quem não pode abrir o espaço do curso também recebe 403; curso de outra comunidade, 404.
**Aula travada, 409:** se a aula está travada para quem chama (sequência: falta concluir a anterior; data: o módulo ainda não abriu), a chamada é recusada com **409** e `errors[0]` diz o que falta (`param = lessonId`), sem gravar acesso, progresso nem pontos. A equipe (owner, admin, moderador, financeiro, SuperAdmin) passa; aula já concluída nunca trava.
- `completed: true` conclui a aula. Sem o campo, ou com `completed: false`, a chamada só **grava o acesso** (`lastAccessed`, e `progressPercent` se vier) e **nunca desmarca** uma aula já concluída. É a chamada para "abrir a aula" (o "Continuar" usa isso). - Repetir a chamada, ou duas ao mesmo tempo, não duplica a linha (uma por aula e perfil) e concede `COMPLETE_LESSON` uma única vez por conclusão. - Quando todas as aulas ativas estão concluídas, a matrícula vira `completed` (`courseJustCompleted` fica `true` só nessa requisição). Curso sem aulas não conclui. Uma matrícula `completed` nunca volta atrás, nem se uma aula for excluída ou entrar uma nova. - **Idempotente:** o player pode chamar `completed: true` ao fim do vídeo mesmo que a pessoa já tenha concluído pelo botão; a segunda chamada responde 200 com o mesmo registro e não soma pontos. Concluir apaga a posição do vídeo (`resumeAt` volta a `null`). - A resposta traz o registro da aula mais `courseCompleted`, `courseJustCompleted`, `courseCompletedAt` e `courseProgress`.
Paramètres
| Nom | Emplacement | Type | Description |
|---|---|---|---|
courseIdobligatoire | path | string (uuid) | |
lessonIdobligatoire | path | string (uuid) |
En-têtes
| Nom | Type | Description |
|---|---|---|
X-CommunityIdfacultatif | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Corps de la requête application/json
| Nom | Type | Description |
|---|---|---|
completedfacultatif | boolean | |
progressPercentfacultatif | integer | ≥ 0, ≤ 100 |
sourcefacultatif | manual | auto | Quem concluiu: `manual` (botão "Concluir", MCP) ou `auto` (o player, ao fim do vídeo). Fica gravado só na chamada que conclui a aula; repetir não muda. A conclusão pelo quiz grava `quiz`. |
Réponses
| Statut | Description |
|---|---|
200 | Progresso gravado. |
400 | Requisição inválida — falha de validação. |
401 | Token ausente, inválido ou expirado; token de outra comunidade (o `X-CommunityId` ou o `communityId` do corpo não é o do token); token antigo ou de uma sessão encerrada (troca de senha, convite aceito). Nesses casos a mensagem pede para entrar de novo (`auth.signInAgain`). |
403 | Autenticado, mas sem permissão para esta operação. |
404 | Recurso não encontrado. |
409 | Aula travada pela sequência ou pela data do módulo. |
500 | Erro interno do servidor. |
Exemple curl
curl -X POST "https://api.memberfy.net/api/courses/<courseId>/lesson/<lessonId>/progress" \
-H "Authorization: Bearer $TOKEN" \
-H "X-CommunityId: $COMMUNITY_ID" \
-H "Content-Type: application/json" \
-d '{}'