A hierarquia
Curso é uma entidade estática definida pelo admin do tenant, no mesmo espírito de Grupos e Espaços. A criação de estrutura (curso, módulo, aula) exige escopo administrativo. Veja Comunidades e espaços para a regra completa de quem cria o quê.
Acesso ao curso: badge libera
Assim como Grupos, um Curso é liberado por badge. O aluno só matricula e consome as aulas se tiver o badge exigido pelo curso. Isso é configurado no painel admin, não pela API do parceiro.Base e autenticação
Todas as chamadas usam a base pública da API:Os IDs são ULIDs (ex:
01HQ5ABCDEF1234567890XYZ). Não invente o formato dos payloads de resposta a partir dos exemplos aqui. Para o schema exato de cada campo, consulte a aba API Reference e filtre pelas tags Course e Certificate.Ler cursos
Criar um curso
A criação de curso exige escopo administrativo. Chaves de parceiro com escopo padrão não enxergam essa categoria. O fluxo natural é o admin montar a estrutura no painel, mas o endpoint existe para automações administrativas.PUT /education/courses/{courseId} (atualização geral) ou PATCH /admin/courses/{courseId} (ajuste administrativo pontual). Para remover, DELETE /admin/courses/{courseId}.
Módulos e aulas (admin)
A estrutura interna do curso é gerenciada sob o prefixo/admin/education/courses/{courseId}:
Do curso vazio ao aluno matriculado
1
Criar o curso (admin)
POST /education/courses com groupId e título. Guarde o courseId retornado.2
Adicionar módulos e aulas (admin)
POST /admin/education/courses/{courseId}/modules cria o módulo; depois POST .../modules/{moduleId}/lessons cria cada aula. Repita até montar a trilha.3
Liberar o acesso via badge
O acesso do aluno vem do badge exigido pelo curso (configurado no painel). Atribua esse badge ao usuário (tipicamente via compra ou assinatura). Veja Liberar acesso via compra.
4
Matricular e concluir (aluno)
Com o badge, o usuário chama
POST .../enroll, avança marcando PUT .../lessons/{lessonId}/complete e, ao fechar todas as aulas, recebe o certificado.Matrícula e progresso (aluno)
Do lado do aluno, o ciclo é matricular, acompanhar progresso e concluir aula por aula.progressPercentage deriva de completedLessons / totalLessons:
userId no body. Se o usuário não tiver o badge exigido pelo curso, a matrícula retorna 403 forbidden.
Quando todas as aulas estão concluídas, o curso é dado por concluído e o certificado é emitido. O aluno pode baixar o PDF do certificado do próprio curso:
Certificados
Ao concluir o curso, um certificado é emitido para o aluno. Cada certificado carrega um código de verificação.Verificação pública por código (anônimo)
Este é o único endpoint da família que não exige chave. Ele confirma a autenticidade de um certificado pelo seu código, ideal para uma página pública de “validar certificado” onde qualquer pessoa cola o código e confere se é legítimo.url aponta o PDF do certificado, e code é o mesmo código validado:
Como é anônimo, exponha esse fluxo direto no seu site sem passar a API Key para o navegador. O código é o único dado necessário.
Outras leituras de certificado
Administração de certificados (admin)
O template e a emissão manual vivem sob/admin/certificates:
Não montamos aqui o schema de cada campo de resposta de certificado. Consulte a aba API Reference com a tag Certificate para os contratos exatos de emissão, template e validação.
Antipattern: um curso por cliente
Erros comuns e dúvidas
403 forbidden ao matricular o aluno
403 forbidden ao matricular o aluno
Falta o badge que o curso exige. Matrícula não é o mecanismo de acesso: o acesso é do badge. Atribua ao usuário o badge configurado no curso (tipicamente via compra/assinatura) e repita o
enroll. Veja Liberar acesso via compra.Matriculei o mesmo aluno duas vezes
Matriculei o mesmo aluno duas vezes
A matrícula é idempotente por usuário e curso: matricular de novo não cria uma segunda matrícula nem zera o progresso. Pode dar retry com segurança em jobs de sincronização.
Todas as aulas concluídas mas o certificado não saiu
Todas as aulas concluídas mas o certificado não saiu
O certificado é emitido quando o progresso chega a 100% (todas as aulas com
complete). Confira o progress do usuário: se completedLessons for menor que totalLessons, ainda falta marcar aula. Aulas adicionadas ao curso depois entram na conta e podem reabrir a pendência.Preciso da API Key para validar um certificado no meu site?
Preciso da API Key para validar um certificado no meu site?
Não.
GET /certificates/validate/{code} é o único endpoint da família sem chave. Chame direto do navegador, na sua landing page de “validar certificado”. Nunca coloque a API Key no frontend para os demais endpoints (esses são de servidor).Devo criar um curso por cliente que compra?
Devo criar um curso por cliente que compra?
Não. Curso é conteúdo estático, não um container por usuário. Um único curso serve todos; quem personaliza o acesso é o badge atribuído aos alunos certos. Um curso por cliente vira duplicata morta e quebra a matrícula.
Próximos passos
Badges como permissão
Como o acesso ao curso é liberado por badge, sem criar estrutura nova.
Liberar acesso via compra
O fluxo típico: compra externa atribui o badge que matricula o aluno.
Eventos
Como eventos e lives se encaixam ao lado dos cursos na comunidade.
