Skip to main content

Autenticação e descoberta

Estas operações correspondem à área do produtor no app v2, não à descoberta de telas do app legado. Elas pertencem ao domínio catalog e ao toolset MCP catalog. Troque a chave e o segredo da empresa por um token em POST /auth, usando Basic Authentication. Todas as chamadas abaixo usam Authorization: Bearer TOKEN. Tokens de vendedor do app e de aluno não dão acesso. A empresa vem exclusivamente do token. Não envie companyId ou company_id no corpo ou na query. GET /v1/member-courses?page=1&pageSize=10 lista cursos em rascunho e publicados. O filtro opcional productId restringe o produto. A resposta é {success:true,data:[],pagination:{page,pageSize,total,totalPages}}, com o total do conjunto filtrado. As demais operações retornam {success:true,data:...}. Erros usam {success:false,message:...}. Recurso inexistente, de outra empresa ou de outro curso/aula responde 404. No MCP, comece com ephra_member_courses_list. Depois use ephra_member_courses_get para obter a árvore e os IDs de módulos, aulas, materiais e comentários. Nunca reutilize um ID de outra árvore.
Use um produto com entrega ephraMembers. O curso começa em rascunho e só publica depois de receber conteúdo válido.

Criar e publicar

Editor do curso com módulos e aulas

Editor do curso na área de membros

O produto deve ser da empresa autenticada, não excluído e ter deliveryType: "ephraMembers". Descubra seu productId com GET /v1/products ou ephra_products_list.
  1. Guarde o courseId de data.id.
  2. POST /v1/member-courses/COURSE_ID/modules com {"title":"Introdução"}. Guarde o módulo retornado na árvore.
  3. POST /v1/member-courses/COURSE_ID/modules/MODULE_ID/lessons com {"slug":"boas-vindas","title":"Boas-vindas","kind":"video","youtubeVideoId":"dQw4w9WgXcQ"}.
  4. PATCH /v1/member-courses/COURSE_ID com {"status":"published"}.
Vídeos aceitam apenas ID ou URL do YouTube. Configure-os como não listados. A API valida o endereço, mas não verifica a privacidade no YouTube. Uma aula de leitura usa kind: "reading" e body: ["Primeiro parágrafo"], sem vídeo. Publicação exige pelo menos um módulo e uma aula, e cada aula deve ter conteúdo válido. Alterações de um curso publicado também preservam essa regra. PATCH /v1/member-courses/COURSE_ID altera os campos enviados. DELETE no mesmo caminho exclui permanentemente o curso, módulos, aulas, materiais, comentários, notas, progresso e certificados. Não revoga as matrículas do produto. Confirme a exclusão antes de chamar.

Conteúdo e moderação

Cada criação ou alteração de conteúdo devolve a árvore completa atualizada. Consulte o OpenAPI para os campos de cada corpo. Materiais são links HTTP/HTTPS, classificados como link, pdf ou sheet. Esta operação não faz upload de arquivos. Exemplo de criação: {"title":"Referência","kind":"link","url":"https://example.com/referencia"}. Reordenação exige {"ids":["ID_1","ID_2"]} com todos os IDs do conjunto exatamente uma vez. O array substitui a ordem completa. Um módulo excluído leva suas aulas e dependentes; uma aula excluída leva materiais, comentários, notas e progresso. Exclusões são permanentes. Comentários vivem em /v1/member-courses/{courseId}/lessons/{lessonId}/comments. GET lista com page/pageSize; POST cria um comentário da equipe com {"body":"Bem-vindos!"}. PATCH /{commentId} edita somente comentários da equipe. DELETE /{commentId} modera comentários de alunos ou da equipe. Nenhuma operação publica como aluno.

Imagens

Um curso tem uma capa opcional. Uma aula tem uma imagem opcional. Não há galeria nem imagem embutida em texto.
  • Capa: /v1/member-courses/{courseId}/cover.
  • Imagem da aula: /v1/member-courses/{courseId}/lessons/{lessonId}/image.
Para qualquer um desses caminhos:
  1. POST CAMINHO/upload com {"contentType":"image/webp"}. A resposta contém uploadUrl, key e expiresIn: 900.
  2. Faça PUT dos bytes em uploadUrl, com o mesmo Content-Type. A ferramenta MCP só devolve a URL; seu cliente precisa enviar os bytes fora do MCP.
  3. POST CAMINHO/finalize com a key retornada e alt opcional. Exemplo: {"key":"KEY_RETORNADA","alt":"Diagrama do fluxo"}. A API valida o arquivo antes de substituir a imagem anterior.
  4. Para remover, DELETE CAMINHO. Repetir a remoção é seguro.
A capa é pública. Não envie informação confidencial nela. A imagem da aula é privada e sua URL de leitura expira em 300 segundos. Alunos sem matrícula ou com a aula ainda bloqueada não recebem a imagem. Recarregue o curso para renovar uma URL expirada. O retorno é {url,alt,expiresAt} ou null. Para mudar somente o texto alternativo, use PATCH do curso com coverAlt ou da aula com imageAlt. O limite é 500 caracteres; null remove o texto.

Matrículas

Matrículas são do produto, não de um curso individual. Os caminhos são:
  • GET /v1/products/{productId}/member-enrollments?page=1&pageSize=10.
  • POST /v1/products/{productId}/member-enrollments com {"email":"aluno@example.com","name":"Ana"}.
  • DELETE /v1/products/{productId}/member-enrollments/{enrollmentId}.
A listagem contém origens ativas separadas, manual, purchase e subscription. Um aluno pode ter várias origens para o mesmo produto. A concessão manual reutiliza a mesma matrícula e envia e-mail de acesso. A revogação permite somente matrícula manual do produto indicado e não remove acesso de compra ou assinatura. Repetir a revogação é seguro. O MCP usa ephra_products_member_enrollments_list, ephra_products_member_enrollments_grant e ephra_products_member_enrollments_revoke. Não confunda matrícula manual com estorno ou cancelamento de assinatura.