Aller au contenu

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-CommunityId Envoyez le X-CommunityId de la communauté où l’opération a lieu.
Les descriptions des endpoints viennent directement de la spécification de l’API et sont en portugais pour l’instant. L’interface autour est traduite.

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

NomEmplacementTypeDescription
courseIdobligatoirepathstring (uuid)
lessonIdobligatoirepathstring (uuid)

En-têtes

NomTypeDescription
X-CommunityIdfacultatifstring (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

NomTypeDescription
completedfacultatifboolean
progressPercentfacultatifinteger≥ 0, ≤ 100
sourcefacultatifmanual | autoQuem 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

StatutDescription
200Progresso gravado.
400Requisição inválida — falha de validação.
401Token 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`).
403Autenticado, mas sem permissão para esta operação.
404Recurso não encontrado.
409Aula travada pela sequência ou pela data do módulo.
500Erro 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 '{}'