Pede a URL de envio direto de vídeo ou arquivo da aula
POST/api/courses/lesson/{lessonId}/media/upload-url
- Auth
- Requiere token
- Quién puede:
- owner
- admin
- moderator
- finance
- X-CommunityId
X-CommunityIdEnvía el X-CommunityId de la comunidad en la que ocurre la operación.
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.
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 |
|---|---|---|
nameobligatorio | string | Nome original, guardado só para exibir e para o download. · max 255 |
mimeTypeobligatorio | string | |
sizeobligatorio | integer | Bytes do arquivo. · ≥ 1 |
Respuestas
| Código | Descripción |
|---|---|
200 | URL de envio. |
400 | Requisição inválida — falha de validação. |
401 | Token ausente, inválido ou expirado. |
403 | Autenticado, mas sem permissão para esta operação. |
404 | Recurso não encontrado. |
500 | Erro interno do servidor. |
Ejemplo con curl
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}'