Skip to content

Pede a URL de envio direto de vídeo ou arquivo da aula

POST/api/courses/lesson/{lessonId}/media/upload-url

Auth
Requires a token
Who can call it:
owner
admin
moderator
finance
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.

Só owner e admin (moderador, financeiro e membro recebem 403). A aula precisa ser do tipo `video` ou `file` (senão 400 em `lessonId`). A API confere o tipo MIME e o tamanho **antes de assinar** e devolve uma URL assinada de escrita (`PUT`, vale 10 minutos) **amarrada à chave, ao `Content-Type` e ao tamanho exatos**: o S3 recusa envio diferente do declarado. O navegador envia o arquivo **direto ao S3** (sem passar pela API), com `Content-Type` igual ao de `headers` e o corpo com exatamente `size` bytes. Depois chame `POST .../media/confirm` com a `key`.

- **Vídeo** (aula `video`): `video/mp4`, `video/webm`, `video/quicktime`; até **500 MB**. Sem transcodificação: toca o que o navegador toca (MP4 H.264 é o seguro). - **Arquivo** (aula `file`): PDF, Word, Excel, PowerPoint (antigos e `.docx/.xlsx/.pptx`), ZIP, PNG, JPEG, GIF, WebP; até **50 MB**. SVG, HTML, JS e executáveis são recusados.

A chave (`courses/{communityId}/{courseId}/{lessonId}/{uuid}.{ext}`) nunca leva texto do usuário. Os limites de armazenamento da comunidade só avisam (veja a resposta do `confirm`), nunca recusam o envio. Nada muda na aula até a confirmação; cancelar ou falhar deixa tudo como estava.

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
namerequiredstringNome original, guardado só para exibir e para o download. · max 255
mimeTyperequiredstring
sizerequiredintegerBytes do arquivo. · ≥ 1

Responses

StatusDescription
200URL de envio.
400Requisição inválida — falha de validação.
401Token ausente, inválido ou expirado.
403Autenticado, mas sem permissão para esta operação.
404Recurso não encontrado.
500Erro interno do servidor.

curl example

curl -X POST "https://api.memberfy.net/api/courses/lesson/<lessonId>/media/upload-url" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","mimeType":"video/mp4","size":1}'