Salva a posição do vídeo da aula (para continuar de onde parou)
PUT/api/courses/lesson/{lessonId}/progress
- Auth
- Requiere token
- Quién puede:
- owner
- admin
- moderator
- Clave de API:
- courses:write
- X-CommunityId
X-CommunityIdEnvía el X-CommunityId de la comunidad en la que ocurre la operación.
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`).
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|---|---|---|
lessonIdobligatorio | path | string (uuid) |
Headers
| Nombre | Tipo | Descripción |
|---|---|---|
X-CommunityIdopcional | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Cuerpo de la solicitud application/json
| Nombre | Tipo | Descripción |
|---|---|---|
positionSecondsobligatorio | integer | Segundo atual do vídeo. · ≥ 0, ≤ 86400 |
durationSecondsopcional | integer | Duração do vídeo; sem ela vale a última informada. · ≥ 1, ≤ 86400 |
Respuestas
| Código | Descripción |
|---|---|
200 | Posição salva ou ignorada (`saved` diz qual). |
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 (só na primeira posição). |
500 | Erro interno do servidor. |
Ejemplo con curl
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}'