Saltar al contenido

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-CommunityId Envía el X-CommunityId de la comunidad en la que ocurre la operación.
Las descripciones de los endpoints vienen de la especificación de la API y, por ahora, están en portugués. La interfaz alrededor está traducida.

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

NombreDóndeTipoDescripción
lessonIdobligatoriopathstring (uuid)

Headers

NombreTipoDescripción
X-CommunityIdopcionalstring (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

NombreTipoDescripción
positionSecondsobligatoriointegerSegundo atual do vídeo. · ≥ 0, ≤ 86400
durationSecondsopcionalintegerDuração do vídeo; sem ela vale a última informada. · ≥ 1, ≤ 86400

Respuestas

CódigoDescripción
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.

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}'