Monólito modular
Uma aplicação implantável, com fronteiras organizadas por domínio em vez de camadas globais.
Um mapa do sistema Spring: arquitetura, autenticação, autorização, domínios, políticas, automações, persistência e cada operação HTTP disponível hoje.
01 · Visão geral
O backend é um monólito modular orientado aos fluxos do INAT. Cada pacote concentra controller, DTOs, serviços, repositórios e modelos do seu assunto; as regras que cruzam assuntos ficam explícitas em políticas transversais.
Uma aplicação implantável, com fronteiras organizadas por domínio em vez de camadas globais.
O filtro exige autenticação e o Method Security decide papel, identidade e vínculo com o objeto.
Agendadores reconciliam contratos, aulas, atividades, documentos, contas e entregas de e-mail.
02 · Arquitetura
Os controllers cuidam do contrato HTTP. Serviços coordenam casos de uso e transações; políticas concentram invariantes que atravessam agregados; repositórios isolam a persistência. Integrações externas permanecem nas bordas.
Dados relacionais, schema versionado e Hibernate apenas validando o mapeamento.
Binários fora do banco; metadados, checksum e relacionamentos dentro da transação.
Códigos e notificações por e-mail, processados de forma desacoplada dos fluxos principais.
03 · Contratos HTTP
A API usa /api como prefixo, JSON para operações comuns e multipart apenas nos uploads. Em desenvolvimento, o backend escuta a porta 8080; o frontend real acessa-o pelo BFF do Next.js.
{
"timestamp": "2026-09-20T17:30:00Z",
"status": "OK",
"message": "Resource found",
"data": { ... }
}{
"content": [ ... ],
"page": 0,
"size": 20,
"totalElements": 48,
"totalPages": 3,
"first": true,
"last": false
}ULID de 26 caracteres nos agregados; catálogos pequenos usam short.
Instantes persistidos em UTC; datas civis críticas usam America/Sao_Paulo.
page começa em 0; size usa 20 por padrão e aceita no máximo 100.
400 validação, 401 autenticação, 403 acesso, 404 ausência, 409 conflito e 422 regra.
Documentos de pessoa, documentos contratuais e materiais de atividade recebemmetadataem JSON efilecomo binário. Anexos de entrega precisam apenas de file. O limite padrão é 25 MB.
04 · Segurança
Spring Security opera sem sessão de servidor. Um JWT válido identifica o ator; a autorização por método avalia papel, identidade, organização, aula, aprendiz ou outro objeto antes de executar o caso de uso.
Login valida a credencial e cria o desafio.
Seis dígitos, validade de 10 min e até 5 tentativas.
A confirmação emite access e refresh token.
Estado e versão de sessão são conferidos no banco.
Mesmo domínio, transporte adequado a cada cliente.
Refresh token em cookie HttpOnly, SameSite=Lax e Secure por padrão.
Refresh token devolvido e recebido no corpo da requisição.
São públicos os sete POSTs de autenticação e o POST de contato. Todo o restante exige JWT; regras mais restritas são aplicadas nos controllers.
8 de 151 operações
| Área | ADMIN | INSTRUCTOR | LEARNER | EMPLOYER_MANAGER |
|---|---|---|---|---|
| Pessoas e documentos | Gerencia | Participantes | Próprio contexto | Contratados |
| Organizações e vínculos | Gerencia | — | — | Própria empresa |
| Contratos | Gerencia | — | Próprios | Da empresa |
| Aulas e frequência | Gerencia | Aulas atribuídas | Próprias | — |
| Atividades e entregas | Gerencia | Cria e corrige | Entrega | — |
| Comunicações | Compõe e acompanha | Caixa própria | Caixa própria | Caixa própria |
| Usuários e papéis | Gerencia | Própria conta | Própria conta | Própria conta |
05 · Módulos
Os 18 pacotes de primeiro nível incluem domínios de negócio, capacidades transversais e integrações de infraestrutura. Abra um módulo para ver modelos e responsabilidades centrais.
activityAtividades pedagógicas, materiais, entregas, anexos e avaliação.ActivityActivityFileActivitySubmissionSubmissionFileaddressEndereço postal reutilizado nos cadastros de pessoas e organizações.AddressauthJWT, refresh token, cookies, desafios por código, bloqueio de conta e autorização por objeto.AuthChallengeRefreshTokencohortTurmas, calendário-base, matrículas e ciclo do treinamento.CohortCohortEnrollmentcontactMensagens públicas da landing page e fluxo administrativo de leitura e arquivamento.ContactMessagecontractRelação de aprendizagem entre jovem, empregador e escola, incluindo documentos e histórico escolar.ContractContractDocumentContractSchoolChangedocumentCatálogo documental, arquivos, verificação, validade e histórico de mudanças.DocumentTypePersonDocumentPersonDocumentStatusHistoryStoredFilelearnerPerfil do aprendiz, onboarding e relações com responsáveis.LearnerLearnerGuardianlessonAulas, participantes esperados, remanejamento, frequência e reconciliação temporal.LessonLessonFileLessonParticipantAttendanceRecordmailContrato de envio e adaptação SMTP usados por códigos de autenticação e notificações.EmailSenderSmtpEmailSenderEmailDeliveryExceptionnotificationComposição, audiência, destinatários, leitura e entrega multicanal.NotificationNotificationRecipientorganizationEmpresas, escolas e vínculos funcionais das pessoas.OrganizationOrganizationTypeEntryOrganizationMembershippersonIdentidade civil compartilhada por usuários, aprendizes, instrutores, gestores e responsáveis.PersonPersonTypeprojectRegras INAT que atravessam contratos, aulas, atividades e frequência.ApprenticeshipPolicyOnlineAttendanceClosingPolicysearchPesquisa paginada e lookups pequenos, sempre filtrados pelo contexto do ator.PortalSearchControllerPortalSearchServicePageResponse<Object>sharedContratos de paginação, enums, histórico de ciclo de vida, ULIDs e abstrações CRUD.PageResponseLifecycleStatusHistoryUlidGeneratoruserConta de acesso, papéis do sistema e contexto atual do portal.UserRoleUserRolewebEnvelope de respostas e tradução centralizada de exceções para a API.ApiResponseGlobalExceptionHandlerBusinessRuleException06 · Regras de negócio
As invariantes abaixo são os pontos em que o backend faz mais do que persistir formulários. Elas coordenam estados, prazos, vínculos e efeitos automáticos.
Horários são parte do domínio, não apenas informação visual.
As políticas em project conectam diferentes agregados.
O scheduler reconhece a presença depois da correção de todas as atividades.
O estado da aula, da atividade e da entrega trabalha em conjunto.
Metadados transacionais no banco, binários protegidos no filesystem.
A audiência é resolvida no momento da criação.
07 · Automações
Os agendadores usam fixed delay configurável. Cada serviço revalida o estado dentro da transação, trabalha em lotes quando necessário e registra apenas mudanças efetivas.
AccountLockSchedulerDesbloqueia contas cujo bloqueio automático expirou.
TrainingLifecycleSchedulerEncerra contratos e conclui turmas e matrículas vencidas.
AcademicLifecycleSchedulerMove aulas/atividades, cria lembretes e registra ausências online pendentes.
PersonDocumentLifecycleSchedulerExpira, em lote, documentos verificados cuja validade terminou.
NotificationEmailSchedulerBusca destinatários de e-mail pendentes e tenta a entrega via SMTP.
08 · Referência da API
Pesquise por rota, ação, DTO ou regra; filtre por domínio e nível de acesso. Cada item mostra parâmetros, cabeçalhos, payload esperado, resposta e um exemplo completo com curl.
151 operações encontradas
Conta, MFA por código, recuperação de senha, renovação e encerramento de sessão.
/api/auth/loginValidar credenciais e iniciar MFAValidar credenciais e iniciar MFAPúblicoValidar credenciais e iniciar MFA
Não exige access token.
Retorna 202 e envia um código. Tokens só são emitidos após a verificação do desafio.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
X-Client-Type | web | mobile | opcionalPadrão: web. Define se o refresh token usa cookie ou corpo. |
{
"email": "usuario@example.com",
"password": "SenhaSegura123!"
}curl --request POST \
--url 'http://localhost:8080/api/auth/login' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Client-Type: web' \
--data '{
"email": "usuario@example.com",
"password": "SenhaSegura123!"
}'/api/auth/registerCriar conta vinculada a uma pessoaCriar conta vinculada a uma pessoaPúblicoCriar conta vinculada a uma pessoa
Não exige access token.
Cria a conta como INVITED e retorna um desafio de verificação de e-mail.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
X-Client-Type | web | mobile | opcionalPadrão: web. Define se o refresh token usa cookie ou corpo. |
{
"name": "Maria da Silva",
"email": "maria@example.com",
"regulationAccepted": true,
"regulationAcceptedAt": "2026-09-22T12:00:00Z",
"password": "SenhaSegura123!"
}curl --request POST \
--url 'http://localhost:8080/api/auth/register' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Client-Type: web' \
--data '{
"name": "Maria da Silva",
"email": "maria@example.com",
"regulationAccepted": true,
"regulationAcceptedAt": "2026-09-22T12:00:00Z",
"password": "SenhaSegura123!"
}'/api/auth/forgot-passwordSolicitar recuperação de senhaSolicitar recuperação de senhaPúblicoSolicitar recuperação de senha
Não exige access token.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
X-Client-Type | web | mobile | opcionalPadrão: web. Define se o refresh token usa cookie ou corpo. |
{
"email": "usuario@example.com"
}curl --request POST \
--url 'http://localhost:8080/api/auth/forgot-password' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Client-Type: web' \
--data '{
"email": "usuario@example.com"
}'/api/auth/reset-passwordRedefinir a senha com código válidoRedefinir a senha com código válidoPúblicoRedefinir a senha com código válido
Não exige access token.
Invalida as sessões existentes e não autentica automaticamente.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"challengeId": "01K5X3M8Y7ABCD1234EFGH5687",
"code": "123456",
"newPassword": "NovaSenha123!"
}curl --request POST \
--url 'http://localhost:8080/api/auth/reset-password' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
"challengeId": "01K5X3M8Y7ABCD1234EFGH5687",
"code": "123456",
"newPassword": "NovaSenha123!"
}'/api/auth/challenge/verifyConfirmar código de autenticaçãoConfirmar código de autenticaçãoPúblicoConfirmar código de autenticação
Não exige access token.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
X-Client-Type | web | mobile | opcionalPadrão: web. Define se o refresh token usa cookie ou corpo. |
{
"challengeId": "01K5X3M8Y7ABCD1234EFGH5687",
"code": "123456"
}curl --request POST \
--url 'http://localhost:8080/api/auth/challenge/verify' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Client-Type: web' \
--data '{
"challengeId": "01K5X3M8Y7ABCD1234EFGH5687",
"code": "123456"
}'/api/auth/refreshRenovar o par de tokensRenovar o par de tokensPúblicoRenovar o par de tokens
Não exige access token.
No navegador, o refresh token pode vir do cookie HttpOnly; em cliente mobile, vem no corpo.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
X-Client-Type | web | mobile | opcionalPadrão: web. Define se o refresh token usa cookie ou corpo. |
Cookie | refresh_token=<refresh_token> | opcionalAlternativa usada pelo cliente web ao refreshToken no corpo. |
{
"refreshToken": "<refresh_token_de_43_caracteres>"
}curl --request POST \
--url 'http://localhost:8080/api/auth/refresh' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Client-Type: web' \
--data '{
"refreshToken": "<refresh_token_de_43_caracteres>"
}'/api/auth/logoutRevogar o refresh tokenRevogar o refresh tokenPúblicoRevogar o refresh token
Não exige access token.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
X-Client-Type | web | mobile | opcionalPadrão: web. Define se o refresh token usa cookie ou corpo. |
Cookie | refresh_token=<refresh_token> | opcionalAlternativa usada pelo cliente web ao refreshToken no corpo. |
{
"refreshToken": "<refresh_token_de_43_caracteres>"
}curl --request POST \
--url 'http://localhost:8080/api/auth/logout' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-Client-Type: web' \
--data '{
"refreshToken": "<refresh_token_de_43_caracteres>"
}'Contexto do ator atual e consultas enxutas usadas por listas e seletores do portal.
/api/meObter o contexto do usuário atualObter o contexto do usuário atualAutenticadoObter o contexto do usuário atual
Exige JWT válido, sem papel específico nesta rota.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/me' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/search/{resource}Pesquisar recursos do portalPesquisar recursos do portalAutenticadoPesquisar recursos do portal
Exige JWT válido, sem papel específico nesta rota.
O serviço aplica o escopo permitido ao ator para cada resource. O filtro status aceita os valores do enum do recurso em people, learners, organizations, contracts, cohorts, lessons, activities e users.
resource (string) — Recurso de busca aceito pelo catálogo do backendCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/search/people?q=maria&startDate=2026-09-01&endDate=2026-09-30&learnerId=01K5X3M8Y7ABCD1234EFGH5680&organizationId=01K5X3M8Y7ABCD1234EFGH5681&personType=LEARNER&verificationStatus=VERIFIED&page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/dashboardObter contadores e próximas aulasObter contadores e próximas aulasAutenticadoObter contadores e próximas aulas
Exige JWT válido, sem papel específico nesta rota.
Contadores calculados no banco; no máximo cinco aulas e quatro avisos.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/dashboard' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/organizations/{id}/summaryContar vínculos acessíveis da organizaçãoContar vínculos acessíveis da organizaçãoContextualContar vínculos acessíveis da organização
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/organizations/01K5X3M8Y7ABCD1234EFGH5678/summary' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lessons/{id}/summaryContar participantes, presenças e atividadesContar participantes, presenças e atividadesContextualContar participantes, presenças e atividades
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678/summary' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contracts/{id}/document-types/{typeId}/summaryConsultar próxima versão e versão atualConsultar próxima versão e versão atualADMINConsultar próxima versão e versão atual
Exige o papel ADMIN.
id (ULID) — ULID do recursotypeId (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contracts/01K5X3M8Y7ABCD1234EFGH5678/document-types/01K5X3M8Y7ABCD1234EFGH5678/summary' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lessons/{lessonId}/attendance/missing-countContar participantes elegíveis sem presençaContar participantes elegíveis sem presençaContextualContar participantes elegíveis sem presença
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678/attendance/missing-count' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lessons/{lessonId}/attendance/batchSalvar rascunhos de presençaSalvar rascunhos de presençaContextualSalvar rascunhos de presença
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Até 100 alterações por requisição; confirmação ou erro por participante.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"items": [
{
"values": {
"lessonParticipantId": "01K5X3M8Y7ABCD1234EFGH5685",
"status": "PRESENT",
"checkInAt": "2026-09-10T13:00:00Z",
"checkOutAt": "2026-09-10T15:00:00Z",
"notes": null
},
"recordId": null,
"expectedUpdatedAt": null
}
]
}curl --request POST \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678/attendance/batch' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"items": [
{
"values": {
"lessonParticipantId": "01K5X3M8Y7ABCD1234EFGH5685",
"status": "PRESENT",
"checkInAt": "2026-09-10T13:00:00Z",
"checkOutAt": "2026-09-10T15:00:00Z",
"notes": null
},
"recordId": null,
"expectedUpdatedAt": null
}
]
}'/api/lessons/{lessonId}/attendance/fill-missingPreencher participantes sem registro do filtroPreencher participantes sem registro do filtroContextualPreencher participantes sem registro do filtro
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Processa até 100 participantes elegíveis; repetir enquanto remaining > 0. Não sobrescreve presenças.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"q": "Maria",
"status": "EXPECTED"
}curl --request POST \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678/attendance/fill-missing' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"q": "Maria",
"status": "EXPECTED"
}'/api/lookups/{resource}Buscar opções para campos de seleçãoBuscar opções para campos de seleçãoAutenticadoBuscar opções para campos de seleção
Exige JWT válido, sem papel específico nesta rota.
resource (string) — Recurso de busca aceito pelo catálogo do backendCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lookups/people?q=maria&personType=LEARNER&purpose=selector&contextId=01K5X3M8Y7ABCD1234EFGH5678&page=0&size=5' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Contas de acesso, catálogo fechado de papéis e concessões explícitas.
/api/usersCriar usuárioCriar usuárioADMINCriar usuário
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"displayName": "Maria da Silva",
"loginEmail": "maria@example.com",
"password": "SenhaSegura123!",
"status": "ACTIVE"
}curl --request POST \
--url 'http://localhost:8080/api/users' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"displayName": "Maria da Silva",
"loginEmail": "maria@example.com",
"password": "SenhaSegura123!",
"status": "ACTIVE"
}'/api/users/{id}Consultar usuárioConsultar usuárioContextualConsultar usuário
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/users/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/usersListar usuáriosListar usuáriosADMINListar usuários
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/users?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/users/{id}Atualizar usuárioAtualizar usuárioADMINAtualizar usuário
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"displayName": "Maria da Silva",
"loginEmail": "maria@example.com",
"password": null,
"status": "ACTIVE"
}curl --request PUT \
--url 'http://localhost:8080/api/users/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "Maria da Silva",
"loginEmail": "maria@example.com",
"password": null,
"status": "ACTIVE"
}'/api/users/{id}Excluir usuárioExcluir usuárioADMINExcluir usuário
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/users/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/rolesCriar papelCriar papelADMINCriar papel
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"code": "INSTRUCTOR",
"name": "Instructor",
"description": "Assigned lesson management"
}curl --request POST \
--url 'http://localhost:8080/api/roles' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"code": "INSTRUCTOR",
"name": "Instructor",
"description": "Assigned lesson management"
}'/api/roles/{id: short}Consultar papelConsultar papelADMINConsultar papel
Exige o papel ADMIN.
id (short) — Identificador numérico do catálogoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/roles/1' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/rolesListar papéisListar papéisADMINListar papéis
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/roles?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/roles/{id: short}Atualizar papelAtualizar papelADMINAtualizar papel
Exige o papel ADMIN.
id (short) — Identificador numérico do catálogoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"code": "INSTRUCTOR",
"name": "Instructor",
"description": "Assigned lesson management"
}curl --request PUT \
--url 'http://localhost:8080/api/roles/1' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"code": "INSTRUCTOR",
"name": "Instructor",
"description": "Assigned lesson management"
}'/api/roles/{id: short}Excluir papelExcluir papelADMINExcluir papel
Exige o papel ADMIN.
id (short) — Identificador numérico do catálogoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/roles/1' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/users/{userId}/rolesListar papéis do usuárioListar papéis do usuárioContextualListar papéis do usuário
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
userId (ULID) — ULID do usuárioCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/users/01K5X3M8Y7ABCD1234EFGH5678/roles' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/users/{userId}/rolesConceder papel ao usuárioConceder papel ao usuárioADMINConceder papel ao usuário
Exige o papel ADMIN.
A pessoa vinculada deve possuir o personType compatível; LEARNER também exige perfil ativo.
userId (ULID) — ULID do usuárioCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"roleId": 2
}curl --request POST \
--url 'http://localhost:8080/api/users/01K5X3M8Y7ABCD1234EFGH5678/roles' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"roleId": 2
}'/api/users/{userId}/roles/{roleId}Revogar papel do usuárioRevogar papel do usuárioADMINRevogar papel do usuário
Exige o papel ADMIN.
userId (ULID) — ULID do usuárioroleId (short) — Identificador short do papelCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/users/01K5X3M8Y7ABCD1234EFGH5678/roles/1' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Cadastro civil central, tipos de pessoa e endereço associado.
/api/peopleCriar pessoaCriar pessoaADMINCriar pessoa
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"fullName": "Maria da Silva",
"taxId": "12345678901",
"contactEmail": "maria@example.com",
"phoneNumber": "41987654321",
"birthDate": "2005-01-25",
"gender": "F",
"status": "ACTIVE",
"personTypes": [
"LEARNER"
]
}curl --request POST \
--url 'http://localhost:8080/api/people' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"fullName": "Maria da Silva",
"taxId": "12345678901",
"contactEmail": "maria@example.com",
"phoneNumber": "41987654321",
"birthDate": "2005-01-25",
"gender": "F",
"status": "ACTIVE",
"personTypes": [
"LEARNER"
]
}'/api/people/{id}Consultar pessoaConsultar pessoaADMINConsultar pessoa
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/people/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/peopleListar pessoasListar pessoasADMINListar pessoas
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/people?personType=LEARNER&page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/people/{id}Atualizar pessoaAtualizar pessoaADMINAtualizar pessoa
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"fullName": "Maria da Silva",
"taxId": "12345678901",
"contactEmail": "maria@example.com",
"phoneNumber": "41987654321",
"birthDate": "2005-01-25",
"gender": "F",
"status": "ACTIVE",
"personTypes": [
"LEARNER"
]
}curl --request PUT \
--url 'http://localhost:8080/api/people/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"fullName": "Maria da Silva",
"taxId": "12345678901",
"contactEmail": "maria@example.com",
"phoneNumber": "41987654321",
"birthDate": "2005-01-25",
"gender": "F",
"status": "ACTIVE",
"personTypes": [
"LEARNER"
]
}'/api/people/{id}Excluir pessoaExcluir pessoaADMINExcluir pessoa
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/people/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Organizações podem atuar como empresas, escolas ou ambos; vínculos ligam pessoas a cada organização.
/api/organizationsCriar organizaçãoCriar organizaçãoADMINCriar organização
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"parentOrganizationId": null,
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"organizationTypes": [
"EMPLOYER",
"SCHOOL"
],
"legalName": "EMPRESA EXEMPLO LTDA.",
"tradeName": "EMPRESA EXEMPLO",
"taxId": "12345678000195",
"contactEmail": "contato@empresa.example",
"phoneNumber": "4134567890",
"attendanceClosingDay": 25,
"status": "ACTIVE"
}curl --request POST \
--url 'http://localhost:8080/api/organizations' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"parentOrganizationId": null,
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"organizationTypes": [
"EMPLOYER",
"SCHOOL"
],
"legalName": "EMPRESA EXEMPLO LTDA.",
"tradeName": "EMPRESA EXEMPLO",
"taxId": "12345678000195",
"contactEmail": "contato@empresa.example",
"phoneNumber": "4134567890",
"attendanceClosingDay": 25,
"status": "ACTIVE"
}'/api/organizations/{id}Consultar organizaçãoConsultar organizaçãoContextualConsultar organização
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/organizations/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/organizationsListar organizaçõesListar organizaçõesADMINListar organizações
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/organizations?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/organizations/{id}Atualizar organizaçãoAtualizar organizaçãoADMINAtualizar organização
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"parentOrganizationId": null,
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"organizationTypes": [
"EMPLOYER",
"SCHOOL"
],
"legalName": "EMPRESA EXEMPLO LTDA.",
"tradeName": "EMPRESA EXEMPLO",
"taxId": "12345678000195",
"contactEmail": "contato@empresa.example",
"phoneNumber": "4134567890",
"attendanceClosingDay": 25,
"status": "ACTIVE"
}curl --request PUT \
--url 'http://localhost:8080/api/organizations/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"parentOrganizationId": null,
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"organizationTypes": [
"EMPLOYER",
"SCHOOL"
],
"legalName": "EMPRESA EXEMPLO LTDA.",
"tradeName": "EMPRESA EXEMPLO",
"taxId": "12345678000195",
"contactEmail": "contato@empresa.example",
"phoneNumber": "4134567890",
"attendanceClosingDay": 25,
"status": "ACTIVE"
}'/api/organizations/{id}Excluir organizaçãoExcluir organizaçãoADMINExcluir organização
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/organizations/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/organization-membershipsCriar vínculo organizacionalCriar vínculo organizacionalADMINCriar vínculo organizacional
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"organizationId": "01K5X3M8Y7ABCD1234EFGH5681",
"membershipRole": "EMPLOYER_MANAGER",
"jobTitle": "Gestora de pessoas",
"startDate": "2026-01-15",
"endDate": null,
"status": "ACTIVE"
}curl --request POST \
--url 'http://localhost:8080/api/organization-memberships' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"organizationId": "01K5X3M8Y7ABCD1234EFGH5681",
"membershipRole": "EMPLOYER_MANAGER",
"jobTitle": "Gestora de pessoas",
"startDate": "2026-01-15",
"endDate": null,
"status": "ACTIVE"
}'/api/organization-memberships/{id}Consultar vínculo organizacionalConsultar vínculo organizacionalADMINConsultar vínculo organizacional
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/organization-memberships/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/organization-membershipsListar vínculos organizacionaisListar vínculos organizacionaisADMINListar vínculos organizacionais
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/organization-memberships?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/organization-memberships/{id}Atualizar vínculo organizacionalAtualizar vínculo organizacionalADMINAtualizar vínculo organizacional
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"organizationId": "01K5X3M8Y7ABCD1234EFGH5681",
"membershipRole": "EMPLOYER_MANAGER",
"jobTitle": "Gestora de pessoas",
"startDate": "2026-01-15",
"endDate": null,
"status": "ACTIVE"
}curl --request PUT \
--url 'http://localhost:8080/api/organization-memberships/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"organizationId": "01K5X3M8Y7ABCD1234EFGH5681",
"membershipRole": "EMPLOYER_MANAGER",
"jobTitle": "Gestora de pessoas",
"startDate": "2026-01-15",
"endDate": null,
"status": "ACTIVE"
}'/api/organization-memberships/{id}Excluir vínculo organizacionalExcluir vínculo organizacionalADMINExcluir vínculo organizacional
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/organization-memberships/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Perfil pedagógico do aprendiz, onboarding atômico e responsáveis legais.
/api/learners/{id}Consultar aprendizConsultar aprendizContextualConsultar aprendiz
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Inclui fullName e registrationNumber para identificação do aprendiz dentro do contexto autorizado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/learners/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/learnersListar aprendizesListar aprendizesADMINListar aprendizes
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/learners?personId=01K5X3M8Y7ABCD1234EFGH5678&page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/learners/{id}Atualizar aprendizAtualizar aprendizADMINAtualizar aprendiz
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"hasCompletedHighSchool": false,
"status": "ACTIVE"
}curl --request PUT \
--url 'http://localhost:8080/api/learners/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"hasCompletedHighSchool": false,
"status": "ACTIVE"
}'/api/learners/{id}Excluir aprendizExcluir aprendizADMINExcluir aprendiz
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/learners/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/learner-onboardingsCadastrar pessoa e perfil de aprendizCadastrar pessoa e perfil de aprendizADMINCadastrar pessoa e perfil de aprendiz
Exige o papel ADMIN.
Executa o onboarding completo em uma única transação.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"person": {
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"fullName": "Maria da Silva",
"taxId": "12345678901",
"contactEmail": "maria@example.com",
"phoneNumber": "41987654321",
"birthDate": "2005-01-25",
"gender": "F",
"status": "ACTIVE",
"personTypes": [
"LEARNER"
]
},
"learner": {
"hasCompletedHighSchool": false,
"status": "ACTIVE"
},
"guardians": [
{
"guardianPersonId": "01K5X3M8Y7ABCD1234EFGH5688",
"relationshipType": "MOTHER",
"legalGuardian": true,
"primaryContact": true
}
]
}curl --request POST \
--url 'http://localhost:8080/api/learner-onboardings' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"person": {
"address": {
"postalCode": "83252000",
"street": "RUA JOÃO TEIXEIRA",
"streetNumber": "1257",
"addressLine2": "CASA 2",
"district": "VILA BELA",
"city": "PARANAGUÁ",
"stateCode": "PR",
"countryCode": "BR"
},
"fullName": "Maria da Silva",
"taxId": "12345678901",
"contactEmail": "maria@example.com",
"phoneNumber": "41987654321",
"birthDate": "2005-01-25",
"gender": "F",
"status": "ACTIVE",
"personTypes": [
"LEARNER"
]
},
"learner": {
"hasCompletedHighSchool": false,
"status": "ACTIVE"
},
"guardians": [
{
"guardianPersonId": "01K5X3M8Y7ABCD1234EFGH5688",
"relationshipType": "MOTHER",
"legalGuardian": true,
"primaryContact": true
}
]
}'/api/learners/{learnerId}/guardiansVincular responsávelVincular responsávelADMINVincular responsável
Exige o papel ADMIN.
learnerId (ULID) — ULID do aprendizCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"guardianPersonId": "01K5X3M8Y7ABCD1234EFGH5688",
"relationshipType": "MOTHER",
"legalGuardian": true,
"primaryContact": true
}curl --request POST \
--url 'http://localhost:8080/api/learners/01K5X3M8Y7ABCD1234EFGH5678/guardians' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"guardianPersonId": "01K5X3M8Y7ABCD1234EFGH5688",
"relationshipType": "MOTHER",
"legalGuardian": true,
"primaryContact": true
}'/api/learners/{learnerId}/guardiansListar responsáveisListar responsáveisADMINListar responsáveis
Exige o papel ADMIN.
learnerId (ULID) — ULID do aprendizCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/learners/01K5X3M8Y7ABCD1234EFGH5678/guardians' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/learners/{learnerId}/guardians/{guardianPersonId}Atualizar vínculo do responsávelAtualizar vínculo do responsávelADMINAtualizar vínculo do responsável
Exige o papel ADMIN.
learnerId (ULID) — ULID do aprendizguardianPersonId (ULID) — ULID da pessoa responsávelCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"guardianPersonId": "01K5X3M8Y7ABCD1234EFGH5688",
"relationshipType": "MOTHER",
"legalGuardian": true,
"primaryContact": true
}curl --request PUT \
--url 'http://localhost:8080/api/learners/01K5X3M8Y7ABCD1234EFGH5678/guardians/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"guardianPersonId": "01K5X3M8Y7ABCD1234EFGH5688",
"relationshipType": "MOTHER",
"legalGuardian": true,
"primaryContact": true
}'/api/learners/{learnerId}/guardians/{guardianPersonId}Desvincular responsávelDesvincular responsávelADMINDesvincular responsável
Exige o papel ADMIN.
learnerId (ULID) — ULID do aprendizguardianPersonId (ULID) — ULID da pessoa responsávelCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/learners/01K5X3M8Y7ABCD1234EFGH5678/guardians/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Contrato de aprendizagem, empresa empregadora, escola, carga horária e documentos versionados.
/api/contractsCriar contratoCriar contratoADMINCriar contrato
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"employerId": "01K5X3M8Y7ABCD1234EFGH5681",
"schoolId": null,
"startDate": "2026-02-02",
"endDate": "2027-01-31",
"monthlySalary": 1518,
"weeklyWorkloadMinutes": 1800,
"status": "DRAFT",
"statusReason": null
}curl --request POST \
--url 'http://localhost:8080/api/contracts' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"employerId": "01K5X3M8Y7ABCD1234EFGH5681",
"schoolId": null,
"startDate": "2026-02-02",
"endDate": "2027-01-31",
"monthlySalary": 1518,
"weeklyWorkloadMinutes": 1800,
"status": "DRAFT",
"statusReason": null
}'/api/contracts/{id}Consultar contratoConsultar contratoContextualConsultar contrato
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contracts/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contractsListar contratosListar contratosADMINListar contratos
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contracts?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contracts/{id}Atualizar contratoAtualizar contratoADMINAtualizar contrato
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"employerId": "01K5X3M8Y7ABCD1234EFGH5681",
"schoolId": null,
"startDate": "2026-02-02",
"endDate": "2027-01-31",
"monthlySalary": 1518,
"weeklyWorkloadMinutes": 1800,
"status": "DRAFT",
"statusReason": null
}curl --request PUT \
--url 'http://localhost:8080/api/contracts/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"employerId": "01K5X3M8Y7ABCD1234EFGH5681",
"schoolId": null,
"startDate": "2026-02-02",
"endDate": "2027-01-31",
"monthlySalary": 1518,
"weeklyWorkloadMinutes": 1800,
"status": "DRAFT",
"statusReason": null
}'/api/contracts/{id}Excluir contratoExcluir contratoADMINExcluir contrato
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/contracts/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contracts/learner/{learnerId}Listar contratos do aprendizListar contratos do aprendizContextualListar contratos do aprendiz
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
learnerId (ULID) — ULID do aprendizCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contracts/learner/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contracts/organization/{organizationId}Listar contratos da organizaçãoListar contratos da organizaçãoContextualListar contratos da organização
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
organizationId (ULID) — ULID da organizaçãoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contracts/organization/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contract-documentsEnviar documento contratualEnviar documento contratualADMINEnviar documento contratual
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | multipart/form-data; boundary=<automático> | obrigatórioDeixe o cliente HTTP gerar o boundary; no curl, use --form. |
{
"contractId": "01K5X3M8Y7ABCD1234EFGH5683",
"documentTypeId": 1,
"versionNumber": 1,
"current": true
}metadata (application/json) — obrigatório. ContractDocumentDtos.Request serializado em JSONfile (tipo MIME do arquivo) — obrigatório. Documento contratual; tamanho e extensões seguem a política de uploadcurl --request POST \
--url 'http://localhost:8080/api/contract-documents' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--form 'metadata={"contractId":"01K5X3M8Y7ABCD1234EFGH5683","documentTypeId":1,"versionNumber":1,"current":true};type=application/json' \
--form 'file=@/caminho/arquivo.pdf'/api/contract-documents/{id}Consultar metadados do documentoConsultar metadados do documentoADMINConsultar metadados do documento
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contract-documents/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contract-documents/{id}/contentBaixar documento contratualBaixar documento contratualADMINBaixar documento contratual
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/octet-stream | opcionalO tipo real do arquivo também pode ser negociado. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contract-documents/01K5X3M8Y7ABCD1234EFGH5678/content' \
--header 'Accept: application/octet-stream' \
--header 'Authorization: Bearer <access_token>'/api/contract-documentsListar documentos contratuaisListar documentos contratuaisADMINListar documentos contratuais
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contract-documents?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contract-documents/{id}Atualizar metadados do documentoAtualizar metadados do documentoADMINAtualizar metadados do documento
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"contractId": "01K5X3M8Y7ABCD1234EFGH5683",
"documentTypeId": 1,
"versionNumber": 2,
"current": true
}curl --request PUT \
--url 'http://localhost:8080/api/contract-documents/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"contractId": "01K5X3M8Y7ABCD1234EFGH5683",
"documentTypeId": 1,
"versionNumber": 2,
"current": true
}'/api/contract-documents/{id}Excluir documento contratualExcluir documento contratualADMINExcluir documento contratual
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/contract-documents/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Catálogo de tipos, uploads, verificação, validade e histórico de status documental.
/api/document-typesCriar tipo de documentoCriar tipo de documentoADMINCriar tipo de documento
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"code": "IDENTITY_DOCUMENT",
"name": "Documento de identidade",
"description": "Documento oficial com foto",
"scope": "PERSON"
}curl --request POST \
--url 'http://localhost:8080/api/document-types' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"code": "IDENTITY_DOCUMENT",
"name": "Documento de identidade",
"description": "Documento oficial com foto",
"scope": "PERSON"
}'/api/document-types/{id: short}Consultar tipo de documentoConsultar tipo de documentoADMINConsultar tipo de documento
Exige o papel ADMIN.
id (short) — Identificador numérico do catálogoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/document-types/1' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/document-typesListar tipos de documentoListar tipos de documentoADMINListar tipos de documento
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/document-types?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/document-types/{id: short}Atualizar tipo de documentoAtualizar tipo de documentoADMINAtualizar tipo de documento
Exige o papel ADMIN.
id (short) — Identificador numérico do catálogoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"code": "IDENTITY_DOCUMENT",
"name": "Documento de identidade",
"description": "Documento oficial com foto",
"scope": "PERSON"
}curl --request PUT \
--url 'http://localhost:8080/api/document-types/1' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"code": "IDENTITY_DOCUMENT",
"name": "Documento de identidade",
"description": "Documento oficial com foto",
"scope": "PERSON"
}'/api/document-types/{id: short}Excluir tipo de documentoExcluir tipo de documentoADMINExcluir tipo de documento
Exige o papel ADMIN.
id (short) — Identificador numérico do catálogoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/document-types/1' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/person-documentsEnviar documento de pessoaEnviar documento de pessoaADMINEnviar documento de pessoa
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | multipart/form-data; boundary=<automático> | obrigatórioDeixe o cliente HTTP gerar o boundary; no curl, use --form. |
{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"documentTypeId": 1,
"documentNumber": "123456789",
"issuedOn": "2024-01-10",
"expiresOn": "2034-01-10"
}metadata (application/json) — obrigatório. PersonDocumentDtos.Request serializado em JSONfile (tipo MIME do arquivo) — obrigatório. Documento da pessoa; tamanho e extensões seguem a política de uploadcurl --request POST \
--url 'http://localhost:8080/api/person-documents' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--form 'metadata={"personId":"01K5X3M8Y7ABCD1234EFGH5678","documentTypeId":1,"documentNumber":"123456789","issuedOn":"2024-01-10","expiresOn":"2034-01-10"};type=application/json' \
--form 'file=@/caminho/arquivo.pdf'/api/person-documents/{id}Consultar metadados do documentoConsultar metadados do documentoADMINConsultar metadados do documento
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/person-documents/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/person-documents/{id}/contentBaixar documento de pessoaBaixar documento de pessoaADMINBaixar documento de pessoa
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/octet-stream | opcionalO tipo real do arquivo também pode ser negociado. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/person-documents/01K5X3M8Y7ABCD1234EFGH5678/content' \
--header 'Accept: application/octet-stream' \
--header 'Authorization: Bearer <access_token>'/api/person-documentsListar documentos de pessoaListar documentos de pessoaADMINListar documentos de pessoa
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/person-documents?personId=01K5X3M8Y7ABCD1234EFGH5678&verificationStatus=VERIFIED&page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/person-documents/{id}Atualizar e verificar documentoAtualizar e verificar documentoADMINAtualizar e verificar documento
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"documentTypeId": 1,
"documentNumber": "123456789",
"issuedOn": "2024-01-10",
"expiresOn": "2034-01-10"
}curl --request PUT \
--url 'http://localhost:8080/api/person-documents/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"personId": "01K5X3M8Y7ABCD1234EFGH5678",
"documentTypeId": 1,
"documentNumber": "123456789",
"issuedOn": "2024-01-10",
"expiresOn": "2034-01-10"
}'/api/person-documents/{id}Excluir documento de pessoaExcluir documento de pessoaADMINExcluir documento de pessoa
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/person-documents/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Planejamento das turmas e vínculo temporal entre contrato e turma.
/api/cohortsCriar turmaCriar turmaADMINCriar turma
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"code": "TURMA-2026-A",
"name": "Aprendizagem 2026 — Turma A",
"defaultWeekday": 2,
"shiftCode": "AFTERNOON",
"startDate": "2026-02-02",
"endDate": "2026-12-18",
"maxLearners": 30,
"status": "PLANNED",
"statusReason": null
}curl --request POST \
--url 'http://localhost:8080/api/cohorts' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"code": "TURMA-2026-A",
"name": "Aprendizagem 2026 — Turma A",
"defaultWeekday": 2,
"shiftCode": "AFTERNOON",
"startDate": "2026-02-02",
"endDate": "2026-12-18",
"maxLearners": 30,
"status": "PLANNED",
"statusReason": null
}'/api/cohorts/{id}Consultar turmaConsultar turmaADMINConsultar turma
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/cohorts/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/cohortsListar turmasListar turmasADMINListar turmas
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/cohorts?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/cohorts/{id}Atualizar turmaAtualizar turmaADMINAtualizar turma
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"code": "TURMA-2026-A",
"name": "Aprendizagem 2026 — Turma A",
"defaultWeekday": 2,
"shiftCode": "AFTERNOON",
"startDate": "2026-02-02",
"endDate": "2026-12-18",
"maxLearners": 30,
"status": "PLANNED",
"statusReason": null
}curl --request PUT \
--url 'http://localhost:8080/api/cohorts/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"code": "TURMA-2026-A",
"name": "Aprendizagem 2026 — Turma A",
"defaultWeekday": 2,
"shiftCode": "AFTERNOON",
"startDate": "2026-02-02",
"endDate": "2026-12-18",
"maxLearners": 30,
"status": "PLANNED",
"statusReason": null
}'/api/cohorts/{id}Excluir turmaExcluir turmaADMINExcluir turma
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/cohorts/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/cohort-enrollmentsCriar matrículaCriar matrículaADMINCriar matrícula
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"contractId": "01K5X3M8Y7ABCD1234EFGH5683",
"cohortId": "01K5X3M8Y7ABCD1234EFGH5682",
"startDate": "2026-02-02",
"endDate": "2026-12-18",
"status": "PENDING",
"statusReason": null
}curl --request POST \
--url 'http://localhost:8080/api/cohort-enrollments' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"contractId": "01K5X3M8Y7ABCD1234EFGH5683",
"cohortId": "01K5X3M8Y7ABCD1234EFGH5682",
"startDate": "2026-02-02",
"endDate": "2026-12-18",
"status": "PENDING",
"statusReason": null
}'/api/cohort-enrollments/{id}Consultar matrículaConsultar matrículaADMINConsultar matrícula
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/cohort-enrollments/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/cohort-enrollmentsListar matrículasListar matrículasADMINListar matrículas
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/cohort-enrollments?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/cohort-enrollments/{id}Atualizar matrículaAtualizar matrículaADMINAtualizar matrícula
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"contractId": "01K5X3M8Y7ABCD1234EFGH5683",
"cohortId": "01K5X3M8Y7ABCD1234EFGH5682",
"startDate": "2026-02-02",
"endDate": "2026-12-18",
"status": "PENDING",
"statusReason": null
}curl --request PUT \
--url 'http://localhost:8080/api/cohort-enrollments/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"contractId": "01K5X3M8Y7ABCD1234EFGH5683",
"cohortId": "01K5X3M8Y7ABCD1234EFGH5682",
"startDate": "2026-02-02",
"endDate": "2026-12-18",
"status": "PENDING",
"statusReason": null
}'/api/cohort-enrollments/{id}Excluir matrículaExcluir matrículaADMINExcluir matrícula
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/cohort-enrollments/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Agenda presencial/online, descrição, materiais, chamada esperada, conflitos de horário e remanejamento.
/api/lessonsCriar aulaCriar aulaADMINCriar aula
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"cohortId": "01K5X3M8Y7ABCD1234EFGH5682",
"instructorPersonId": "01K5X3M8Y7ABCD1234EFGH5678",
"title": "Fundamentos de cidadania",
"description": "Direitos, deveres e participação cidadã: objetivos e orientações da aula.",
"startsAt": "2026-10-05T16:00:00Z",
"endsAt": "2026-10-05T18:00:00Z",
"deliveryMode": "ONLINE",
"room": null,
"meetingUrl": "https://meet.example.com/aula-01",
"externalLessonUrl": null,
"status": "SCHEDULED"
}curl --request POST \
--url 'http://localhost:8080/api/lessons' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"cohortId": "01K5X3M8Y7ABCD1234EFGH5682",
"instructorPersonId": "01K5X3M8Y7ABCD1234EFGH5678",
"title": "Fundamentos de cidadania",
"description": "Direitos, deveres e participação cidadã: objetivos e orientações da aula.",
"startsAt": "2026-10-05T16:00:00Z",
"endsAt": "2026-10-05T18:00:00Z",
"deliveryMode": "ONLINE",
"room": null,
"meetingUrl": "https://meet.example.com/aula-01",
"externalLessonUrl": null,
"status": "SCHEDULED"
}'/api/lessons/{id}Consultar aulaConsultar aulaContextualConsultar aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Inclui description, cohortCode, cohortName e instructorName. Participantes incluem learnerName e learnerRegistrationNumber.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lessonsListar aulasListar aulasADMINListar aulas
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lessons?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lessons/meListar aulas acessíveis ao atorListar aulas acessíveis ao atorAutenticadoListar aulas acessíveis ao ator
Exige JWT válido, sem papel específico nesta rota.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lessons/me' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lessons/{id}Atualizar aulaAtualizar aulaContextualAtualizar aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"cohortId": "01K5X3M8Y7ABCD1234EFGH5682",
"instructorPersonId": "01K5X3M8Y7ABCD1234EFGH5678",
"title": "Fundamentos de cidadania",
"description": "Direitos, deveres e participação cidadã: objetivos e orientações da aula.",
"startsAt": "2026-10-05T16:00:00Z",
"endsAt": "2026-10-05T18:00:00Z",
"deliveryMode": "ONLINE",
"room": null,
"meetingUrl": "https://meet.example.com/aula-01",
"externalLessonUrl": null,
"status": "SCHEDULED"
}curl --request PUT \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"cohortId": "01K5X3M8Y7ABCD1234EFGH5682",
"instructorPersonId": "01K5X3M8Y7ABCD1234EFGH5678",
"title": "Fundamentos de cidadania",
"description": "Direitos, deveres e participação cidadã: objetivos e orientações da aula.",
"startsAt": "2026-10-05T16:00:00Z",
"endsAt": "2026-10-05T18:00:00Z",
"deliveryMode": "ONLINE",
"room": null,
"meetingUrl": "https://meet.example.com/aula-01",
"externalLessonUrl": null,
"status": "SCHEDULED"
}'/api/lessons/{id}Excluir aulaExcluir aulaContextualExcluir aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Somente aulas SCHEDULED sem participantes, atividades ou materiais podem ser removidas fisicamente.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lessons/{lessonId}/filesAnexar material à aulaAnexar material à aulaContextualAnexar material à aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
ADMIN ou instrutor da aula. Mesma política de tamanho, formatos e inspeção dos materiais de atividades.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | multipart/form-data; boundary=<automático> | obrigatórioDeixe o cliente HTTP gerar o boundary; no curl, use --form. |
{
"sortOrder": 0
}metadata (application/json) — obrigatório. LessonFileDtos.Request serializado em JSONfile (tipo MIME do arquivo) — obrigatório. Material da aula; tamanho e extensões seguem a política de materiais de atividadescurl --request POST \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678/files' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--form 'metadata={"sortOrder":0};type=application/json' \
--form 'file=@/caminho/arquivo.pdf'/api/lessons/{lessonId}/files/{fileId}/contentBaixar material da aulaBaixar material da aulaContextualBaixar material da aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
lessonId (ULID) — ULID da aulafileId (ULID) — ULID do arquivoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/octet-stream | opcionalO tipo real do arquivo também pode ser negociado. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678/files/01K5X3M8Y7ABCD1234EFGH5678/content' \
--header 'Accept: application/octet-stream' \
--header 'Authorization: Bearer <access_token>'/api/lessons/{lessonId}/filesListar materiais da aulaListar materiais da aulaContextualListar materiais da aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678/files' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lessons/{lessonId}/files/{fileId}Remover material da aulaRemover material da aulaContextualRemover material da aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
lessonId (ULID) — ULID da aulafileId (ULID) — ULID do arquivoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/lessons/01K5X3M8Y7ABCD1234EFGH5678/files/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lesson-participantsAdicionar participanteAdicionar participanteContextualAdicionar participante
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"lessonId": "01K5X3M8Y7ABCD1234EFGH5684",
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"sourceEnrollmentId": null,
"participationType": "REGULAR",
"status": "EXPECTED",
"assignmentReason": null
}curl --request POST \
--url 'http://localhost:8080/api/lesson-participants' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"lessonId": "01K5X3M8Y7ABCD1234EFGH5684",
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"sourceEnrollmentId": null,
"participationType": "REGULAR",
"status": "EXPECTED",
"assignmentReason": null
}'/api/lesson-participants/{id}Consultar participanteConsultar participanteContextualConsultar participante
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lesson-participants/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lesson-participantsListar todos os participantesListar todos os participantesADMINListar todos os participantes
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lesson-participants?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lesson-participants/lesson/{lessonId}Obter chamada da aulaObter chamada da aulaContextualObter chamada da aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/lesson-participants/lesson/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lesson-participants/{id}Atualizar participanteAtualizar participanteContextualAtualizar participante
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"lessonId": "01K5X3M8Y7ABCD1234EFGH5684",
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"sourceEnrollmentId": null,
"participationType": "REGULAR",
"status": "EXPECTED",
"assignmentReason": null
}curl --request PUT \
--url 'http://localhost:8080/api/lesson-participants/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"lessonId": "01K5X3M8Y7ABCD1234EFGH5684",
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"sourceEnrollmentId": null,
"participationType": "REGULAR",
"status": "EXPECTED",
"assignmentReason": null
}'/api/lesson-participants/{id}Excluir participanteExcluir participanteContextualExcluir participante
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/lesson-participants/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lesson-participants/lesson/{lessonId}/generate-rosterGerar chamada regularGerar chamada regularContextualGerar chamada regular
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request POST \
--url 'http://localhost:8080/api/lesson-participants/lesson/01K5X3M8Y7ABCD1234EFGH5678/generate-roster' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/lesson-participants/reassignRemanejar aprendiz entre aulasRemanejar aprendiz entre aulasADMINRemanejar aprendiz entre aulas
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"sourceParticipantId": "01K5X3M8Y7ABCD1234EFGH5685",
"targetLessonId": "01K5X3M8Y7ABCD1234EFGH5689",
"reason": "Reposição em outra data"
}curl --request POST \
--url 'http://localhost:8080/api/lesson-participants/reassign' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"sourceParticipantId": "01K5X3M8Y7ABCD1234EFGH5685",
"targetLessonId": "01K5X3M8Y7ABCD1234EFGH5689",
"reason": "Reposição em outra data"
}'Presença, ausência, atraso e frequência automática das aulas online.
/api/attendance-recordsRegistrar frequênciaRegistrar frequênciaContextualRegistrar frequência
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"lessonParticipantId": "01K5X3M8Y7ABCD1234EFGH5685",
"status": "PRESENT",
"checkInAt": "2026-10-05T16:00:00Z",
"checkOutAt": "2026-10-05T18:00:00Z",
"notes": null
}curl --request POST \
--url 'http://localhost:8080/api/attendance-records' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"lessonParticipantId": "01K5X3M8Y7ABCD1234EFGH5685",
"status": "PRESENT",
"checkInAt": "2026-10-05T16:00:00Z",
"checkOutAt": "2026-10-05T18:00:00Z",
"notes": null
}'/api/attendance-records/{id}Consultar frequênciaConsultar frequênciaContextualConsultar frequência
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/attendance-records/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/attendance-recordsPesquisar frequênciasPesquisar frequênciasContextualPesquisar frequências
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
ADMIN consulta qualquer combinação; INSTRUCTOR deve informar learnerId e recebe apenas registros de suas aulas.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/attendance-records?startDate=2026-09-01&endDate=2026-09-30&learnerId=01K5X3M8Y7ABCD1234EFGH5680&organizationId=01K5X3M8Y7ABCD1234EFGH5681&activeContractsOnly=true&page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/attendance-records/lesson/{lessonId}Listar frequências da aulaListar frequências da aulaContextualListar frequências da aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/attendance-records/lesson/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/attendance-records/{id}Corrigir frequênciaCorrigir frequênciaContextualCorrigir frequência
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"lessonParticipantId": "01K5X3M8Y7ABCD1234EFGH5685",
"status": "PRESENT",
"checkInAt": "2026-10-05T16:00:00Z",
"checkOutAt": "2026-10-05T18:00:00Z",
"notes": null
}curl --request PUT \
--url 'http://localhost:8080/api/attendance-records/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"lessonParticipantId": "01K5X3M8Y7ABCD1234EFGH5685",
"status": "PRESENT",
"checkInAt": "2026-10-05T16:00:00Z",
"checkOutAt": "2026-10-05T18:00:00Z",
"notes": null
}'/api/attendance-records/{id}Excluir frequênciaExcluir frequênciaContextualExcluir frequência
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/attendance-records/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Atividades da aula, publicação, prazos, notas máximas e materiais anexos.
/api/activitiesCriar atividadeCriar atividadeContextualCriar atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"lessonId": "01K5X3M8Y7ABCD1234EFGH5684",
"title": "Atividade de fixação",
"description": "Responda às questões propostas.",
"availableAt": "2026-10-05T18:00:00Z",
"dueAt": "2026-10-12T23:59:59Z",
"maxScore": 10,
"status": "DRAFT"
}curl --request POST \
--url 'http://localhost:8080/api/activities' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"lessonId": "01K5X3M8Y7ABCD1234EFGH5684",
"title": "Atividade de fixação",
"description": "Responda às questões propostas.",
"availableAt": "2026-10-05T18:00:00Z",
"dueAt": "2026-10-12T23:59:59Z",
"maxScore": 10,
"status": "DRAFT"
}'/api/activities/{id}Consultar atividadeConsultar atividadeContextualConsultar atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activities/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activitiesListar todas as atividadesListar todas as atividadesADMINListar todas as atividades
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activities?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activities/lesson/{lessonId}Listar atividades da aulaListar atividades da aulaContextualListar atividades da aula
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Rascunhos só são incluídos para quem pode gerenciar a aula.
lessonId (ULID) — ULID da aulaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activities/lesson/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activities/{id}Atualizar atividadeAtualizar atividadeContextualAtualizar atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"lessonId": "01K5X3M8Y7ABCD1234EFGH5684",
"title": "Atividade de fixação",
"description": "Responda às questões propostas.",
"availableAt": "2026-10-05T18:00:00Z",
"dueAt": "2026-10-12T23:59:59Z",
"maxScore": 10,
"status": "DRAFT"
}curl --request PUT \
--url 'http://localhost:8080/api/activities/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"lessonId": "01K5X3M8Y7ABCD1234EFGH5684",
"title": "Atividade de fixação",
"description": "Responda às questões propostas.",
"availableAt": "2026-10-05T18:00:00Z",
"dueAt": "2026-10-12T23:59:59Z",
"maxScore": 10,
"status": "DRAFT"
}'/api/activities/{id}Excluir atividadeExcluir atividadeContextualExcluir atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/activities/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activities/{activityId}/filesAnexar material à atividadeAnexar material à atividadeContextualAnexar material à atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
activityId (ULID) — ULID da atividadeCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | multipart/form-data; boundary=<automático> | obrigatórioDeixe o cliente HTTP gerar o boundary; no curl, use --form. |
{
"sortOrder": 0
}metadata (application/json) — obrigatório. ActivityFileRequest serializado em JSONfile (tipo MIME do arquivo) — obrigatório. Material da atividade; tamanho e extensões seguem a política de uploadcurl --request POST \
--url 'http://localhost:8080/api/activities/01K5X3M8Y7ABCD1234EFGH5678/files' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--form 'metadata={"sortOrder":0};type=application/json' \
--form 'file=@/caminho/arquivo.pdf'/api/activities/{activityId}/files/{fileId}/contentBaixar material da atividadeBaixar material da atividadeContextualBaixar material da atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
activityId (ULID) — ULID da atividadefileId (ULID) — ULID do arquivoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/octet-stream | opcionalO tipo real do arquivo também pode ser negociado. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activities/01K5X3M8Y7ABCD1234EFGH5678/files/01K5X3M8Y7ABCD1234EFGH5678/content' \
--header 'Accept: application/octet-stream' \
--header 'Authorization: Bearer <access_token>'/api/activities/{activityId}/filesListar materiais da atividadeListar materiais da atividadeContextualListar materiais da atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
activityId (ULID) — ULID da atividadeCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activities/01K5X3M8Y7ABCD1234EFGH5678/files' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activities/{activityId}/files/{fileId}Remover material da atividadeRemover material da atividadeContextualRemover material da atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
activityId (ULID) — ULID da atividadefileId (ULID) — ULID do arquivoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/activities/01K5X3M8Y7ABCD1234EFGH5678/files/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Resposta do aprendiz, atraso, devolução, correção, nota e arquivos da entrega.
/api/activity-submissionsCriar entregaCriar entregaContextualCriar entrega
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"activityId": "01K5X3M8Y7ABCD1234EFGH5686",
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"textAnswer": "Minha resposta para a atividade.",
"status": "SUBMITTED"
}curl --request POST \
--url 'http://localhost:8080/api/activity-submissions' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"activityId": "01K5X3M8Y7ABCD1234EFGH5686",
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"textAnswer": "Minha resposta para a atividade.",
"status": "SUBMITTED"
}'/api/activity-submissions/{id}Consultar entregaConsultar entregaContextualConsultar entrega
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
Inclui learnerName e learnerRegistrationNumber; learnerId continua sendo a referência utilizada nas operações.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activity-submissions/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activity-submissionsListar todas as entregasListar todas as entregasADMINListar todas as entregas
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activity-submissions?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activity-submissions/activity/{activityId}Listar entregas da atividadeListar entregas da atividadeContextualListar entregas da atividade
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
activityId (ULID) — ULID da atividadeCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activity-submissions/activity/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activity-submissions/learner/{learnerId}Listar entregas do aprendizListar entregas do aprendizContextualListar entregas do aprendiz
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
learnerId (ULID) — ULID do aprendizCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activity-submissions/learner/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activity-submissions/{id}Editar entregaEditar entregaContextualEditar entrega
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"activityId": "01K5X3M8Y7ABCD1234EFGH5686",
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"textAnswer": "Minha resposta para a atividade.",
"status": "SUBMITTED"
}curl --request PUT \
--url 'http://localhost:8080/api/activity-submissions/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"activityId": "01K5X3M8Y7ABCD1234EFGH5686",
"learnerId": "01K5X3M8Y7ABCD1234EFGH5680",
"textAnswer": "Minha resposta para a atividade.",
"status": "SUBMITTED"
}'/api/activity-submissions/{id}/gradeAvaliar ou devolver entregaAvaliar ou devolver entregaContextualAvaliar ou devolver entrega
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"score": 8.5,
"feedback": "Boa resposta; revise o segundo tópico.",
"status": "GRADED"
}curl --request PATCH \
--url 'http://localhost:8080/api/activity-submissions/01K5X3M8Y7ABCD1234EFGH5678/grade' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"score": 8.5,
"feedback": "Boa resposta; revise o segundo tópico.",
"status": "GRADED"
}'/api/activity-submissions/{id}Excluir entrega editávelExcluir entrega editávelContextualExcluir entrega editável
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/activity-submissions/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activity-submissions/{submissionId}/filesAnexar arquivo à entregaAnexar arquivo à entregaContextualAnexar arquivo à entrega
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
submissionId (ULID) — ULID da entregaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | multipart/form-data; boundary=<automático> | obrigatórioDeixe o cliente HTTP gerar o boundary; no curl, use --form. |
file (tipo MIME do arquivo) — obrigatório. Arquivo anexado à entregacurl --request POST \
--url 'http://localhost:8080/api/activity-submissions/01K5X3M8Y7ABCD1234EFGH5678/files' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--form 'file=@/caminho/arquivo.pdf'/api/activity-submissions/{submissionId}/files/{fileId}/contentBaixar anexo da entregaBaixar anexo da entregaContextualBaixar anexo da entrega
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
submissionId (ULID) — ULID da entregafileId (ULID) — ULID do arquivoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/octet-stream | opcionalO tipo real do arquivo também pode ser negociado. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activity-submissions/01K5X3M8Y7ABCD1234EFGH5678/files/01K5X3M8Y7ABCD1234EFGH5678/content' \
--header 'Accept: application/octet-stream' \
--header 'Authorization: Bearer <access_token>'/api/activity-submissions/{submissionId}/filesListar anexos da entregaListar anexos da entregaContextualListar anexos da entrega
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
submissionId (ULID) — ULID da entregaCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/activity-submissions/01K5X3M8Y7ABCD1234EFGH5678/files' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/activity-submissions/{submissionId}/files/{fileId}Remover anexo da entregaRemover anexo da entregaContextualRemover anexo da entrega
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
submissionId (ULID) — ULID da entregafileId (ULID) — ULID do arquivoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/activity-submissions/01K5X3M8Y7ABCD1234EFGH5678/files/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Composição, audiência materializada, caixa pessoal e entrega por canal.
/api/notificationsCriar e materializar notificaçãoCriar e materializar notificaçãoADMINCriar e materializar notificação
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"notificationType": "LESSON_REMINDER",
"title": "Aula amanhã",
"message": "Sua próxima aula começa amanhã às 13h.",
"actionUrl": "/sistema/aulas/01K5X3M8Y7ABCD1234EFGH5684",
"contextType": "LESSON",
"contextId": "01K5X3M8Y7ABCD1234EFGH5684",
"payload": "{\"lessonId\":\"01K5X3M8Y7ABCD1234EFGH5684\"}",
"priority": "NORMAL",
"scheduledAt": null,
"expiresAt": "2026-10-06T18:00:00Z",
"audience": {
"type": "COHORT",
"targetId": "01K5X3M8Y7ABCD1234EFGH5682"
},
"channels": [
"IN_APP",
"EMAIL"
]
}curl --request POST \
--url 'http://localhost:8080/api/notifications' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"notificationType": "LESSON_REMINDER",
"title": "Aula amanhã",
"message": "Sua próxima aula começa amanhã às 13h.",
"actionUrl": "/sistema/aulas/01K5X3M8Y7ABCD1234EFGH5684",
"contextType": "LESSON",
"contextId": "01K5X3M8Y7ABCD1234EFGH5684",
"payload": "{\"lessonId\":\"01K5X3M8Y7ABCD1234EFGH5684\"}",
"priority": "NORMAL",
"scheduledAt": null,
"expiresAt": "2026-10-06T18:00:00Z",
"audience": {
"type": "COHORT",
"targetId": "01K5X3M8Y7ABCD1234EFGH5682"
},
"channels": [
"IN_APP",
"EMAIL"
]
}'/api/notifications/{id}Consultar notificaçãoConsultar notificaçãoADMINConsultar notificação
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/notifications/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/notificationsListar notificaçõesListar notificaçõesADMINListar notificações
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/notifications?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/notifications/context/{contextType}/{contextId}Listar notificações por contextoListar notificações por contextoADMINListar notificações por contexto
Exige o papel ADMIN.
contextType (string) — Tipo do contexto, por exemplo LESSONcontextId (ULID) — ULID do recurso usado como contextoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/notifications/context/LESSON/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/notifications/{id}Atualizar conteúdo e agendamentoAtualizar conteúdo e agendamentoADMINAtualizar conteúdo e agendamento
Exige o papel ADMIN.
Só é permitido antes de qualquer destinatário ter sido processado; audiência e canais são imutáveis.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"notificationType": "LESSON_REMINDER",
"title": "Aula amanhã — horário atualizado",
"message": "Sua próxima aula começa amanhã às 14h.",
"actionUrl": "/sistema/aulas/01K5X3M8Y7ABCD1234EFGH5684",
"contextType": "LESSON",
"contextId": "01K5X3M8Y7ABCD1234EFGH5684",
"payload": null,
"priority": "HIGH",
"scheduledAt": null,
"expiresAt": "2026-10-06T19:00:00Z"
}curl --request PUT \
--url 'http://localhost:8080/api/notifications/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"notificationType": "LESSON_REMINDER",
"title": "Aula amanhã — horário atualizado",
"message": "Sua próxima aula começa amanhã às 14h.",
"actionUrl": "/sistema/aulas/01K5X3M8Y7ABCD1234EFGH5684",
"contextType": "LESSON",
"contextId": "01K5X3M8Y7ABCD1234EFGH5684",
"payload": null,
"priority": "HIGH",
"scheduledAt": null,
"expiresAt": "2026-10-06T19:00:00Z"
}'/api/notifications/{id}Excluir notificaçãoExcluir notificaçãoADMINExcluir notificação
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/notifications/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/notification-recipients/{id}Consultar item da caixaConsultar item da caixaContextualConsultar item da caixa
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/notification-recipients/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/notification-recipientsListar todos os destinatáriosListar todos os destinatáriosADMINListar todos os destinatários
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/notification-recipients?page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/notification-recipients/meAbrir a própria caixaAbrir a própria caixaAutenticadoAbrir a própria caixa
Exige JWT válido, sem papel específico nesta rota.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/notification-recipients/me?channel=IN_APP&page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/notification-recipients/me/unread-countContar notificações não lidasContar notificações não lidasAutenticadoContar notificações não lidas
Exige JWT válido, sem papel específico nesta rota.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/notification-recipients/me/unread-count' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/notification-recipients/{id}/deliveryAlterar estado da entregaAlterar estado da entregaADMINAlterar estado da entrega
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"deliveryStatus": "FAILED",
"failureReason": "Caixa postal indisponível"
}curl --request PATCH \
--url 'http://localhost:8080/api/notification-recipients/01K5X3M8Y7ABCD1234EFGH5678/delivery' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"deliveryStatus": "FAILED",
"failureReason": "Caixa postal indisponível"
}'/api/notification-recipients/{id}/readMarcar notificação como lidaMarcar notificação como lidaContextualMarcar notificação como lida
Acesso decidido pelo objeto e pelo vínculo do usuário autenticado.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request PATCH \
--url 'http://localhost:8080/api/notification-recipients/01K5X3M8Y7ABCD1234EFGH5678/read' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'Entrada pública da landing page e triagem administrativa das mensagens recebidas.
/api/contact-messagesEnviar mensagem de contatoEnviar mensagem de contatoPúblicoEnviar mensagem de contato
Não exige access token.
Único endpoint de domínio público fora do conjunto /api/auth.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"name": "Maria da Silva",
"email": "maria@example.com",
"phone": "41987654321",
"contactType": "YOUTH_INTERESTED",
"message": "Gostaria de saber mais sobre o programa de aprendizagem."
}curl --request POST \
--url 'http://localhost:8080/api/contact-messages' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
"name": "Maria da Silva",
"email": "maria@example.com",
"phone": "41987654321",
"contactType": "YOUTH_INTERESTED",
"message": "Gostaria de saber mais sobre o programa de aprendizagem."
}'/api/contact-messagesPesquisar mensagensPesquisar mensagensADMINPesquisar mensagens
Exige o papel ADMIN.
Cabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contact-messages?search=maria&status=NEW&contactType=YOUTH_INTERESTED&page=0&size=20' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contact-messages/{id}Consultar mensagemConsultar mensagemADMINConsultar mensagem
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request GET \
--url 'http://localhost:8080/api/contact-messages/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'/api/contact-messages/{id}/statusAtualizar status da mensagemAtualizar status da mensagemADMINAtualizar status da mensagem
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
Content-Type | application/json | obrigatórioO corpo deve ser enviado como JSON UTF-8. |
{
"status": "READ"
}curl --request PATCH \
--url 'http://localhost:8080/api/contact-messages/01K5X3M8Y7ABCD1234EFGH5678/status' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"status": "READ"
}'/api/contact-messages/{id}Excluir mensagemExcluir mensagemADMINExcluir mensagem
Exige o papel ADMIN.
id (ULID) — ULID do recursoCabeçalhos, corpo e exemplo executável para o ambiente local.
http://localhost:8080| Nome | Valor | Uso |
|---|---|---|
Accept | application/json | opcionalFormato padrão das respostas da API. |
Authorization | Bearer <access_token> | obrigatórioJWT de acesso emitido após a verificação do desafio. |
curl --request DELETE \
--url 'http://localhost:8080/api/contact-messages/01K5X3M8Y7ABCD1234EFGH5678' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <access_token>'09 · Persistência e operação
O banco nasce pelas migrations e o Hibernate apenas confere se as entidades correspondem ao schema. Isso torna estrutura e catálogos reproduzíveis, revisáveis e independentes do ambiente.
MySQL em produção, H2/Testcontainers nos testes.
ddl-auto: validate em todos os ambientes.O próprio banco guarda flyway_schema_history, com versão, checksum, data e resultado de cada migration.
Segredos e infraestrutura chegam por variáveis de ambiente.
A rota /documentacao é renderizada pelo Next.js com um catálogo versionado no código. Ela não cria endpoint no Spring, não chama o backend e continua disponível mesmo com a API desligada.