Skip to content

Salva a posição do vídeo da aula (para continuar de onde parou)

PUT/api/courses/lesson/{lessonId}/progress

Auth
Requires a token
Who can call it:
owner
admin
moderator
API key:
courses:write
X-CommunityId
X-CommunityId Send the X-CommunityId of the community the operation happens in.
Endpoint descriptions come straight from the API specification and are in Portuguese for now. The interface around them is translated.

Aluno **matriculado** (`enrolled` ou `completed`) com papel owner, admin, moderador ou membro; sem matrícula, 403. Aula de outra comunidade ou excluída, 404; quem não pode abrir o espaço do curso, 403. Na **primeira** posição da aula, aula travada (sequência ou data do módulo) recebe **409** com o motivo, como em `POST .../progress`.

Feita para o player chamar periodicamente, sem custo: - **Uma linha por aula e pessoa** (a mesma do progresso): grava `positionSeconds`, `durationSeconds` e o acesso. - **Escritas a menos de ~10 s da última aceita são ignoradas** no servidor: a resposta é 200 com `saved: false` e `ignored: throttled`, e nada muda. Mande a posição a cada 10–15 s e ao pausar ou sair. - **Aula concluída não guarda posição**: 200 com `ignored: completed` e `resumeAt: null`. - **Perto do fim** (nos últimos 5% de `durationSeconds`, ou além) conta como fim: a posição fica `null` e a próxima abertura começa do início. A aula **não** é concluída por aqui: ao fim do vídeo, chame `POST /api/courses/{courseId}/lesson/{lessonId}/progress` com `completed: true` e `source: auto`. - Com a duração, `progressPercent` acompanha o quanto foi assistido (no máximo 99; nunca diminui). Não gera pontos nem evento.

A posição volta em `GET /api/courses/{identifier}`, em cada aula, como `resumeAt` (segundos, ou `null`).

Parameters

NameInTypeDescription
lessonIdrequiredpathstring (uuid)

Headers

NameTypeDescription
X-CommunityIdoptionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Request body application/json

NameTypeDescription
positionSecondsrequiredintegerSegundo atual do vídeo. · ≥ 0, ≤ 86400
durationSecondsoptionalintegerDuração do vídeo; sem ela vale a última informada. · ≥ 1, ≤ 86400

Responses

StatusDescription
200Posição salva ou ignorada (`saved` diz qual).
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 (só na primeira posição).
500Erro interno do servidor.

curl example

curl -X PUT "https://api.memberfy.net/api/courses/lesson/<lessonId>/progress" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{"positionSeconds":0}'