You are absolutely right. Looking at the validateUserAndGroupInOrg method in your service, it explicitly calls addGroups and addUsers if they are missing from the Org. This is a side effect that the API consumer must be aware of, as it changes the state of the User/Group relationships, not just the Enrollment.
Here is the updated documentation with a clearer warning about this auto-association behavior.
Esta seção permite inscrever ou remover usuÔrios de grupos (também chamados de turmas ou conteúdos) dentro da plataforma.
As inscrições determinam quais usuÔrios têm acesso aos conteúdos da sua escola.
š Funcionalidades disponĆveis
| Método | Endpoint | Descrição |
|---|---|---|
GET | /enrollments | Lista inscrições existentes com paginação |
POST | /enrollments | Inscreve um usuƔrio em um grupo |
DELETE | /enrollments | Expira (remove) a inscrição de um usuÔrio em um grupo |
š Autenticação e CabeƧalhos
Todas as requisiƧƵes exigem um token de API vƔlido no cabeƧalho:
Authorization: Bearer {SEU_TOKEN_AQUI}
X-Requested-With: XMLHttpRequest
Content-Type: application/json
š Listar inscriƧƵes (GET /enrollments)
GET /enrollments)Retorna uma lista paginada de inscrições existentes, conforme o **recurso InscriptionIndexResource**. Agora inclui dados da organização.
š ParĆ¢metros de Query
| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
org | integer | ā | - | ID da Organização (filial) para filtrar. |
page | integer | ā | 1 | NĆŗmero da pĆ”gina. |
per_page | integer | ā | 15 | Quantidade de itens por pĆ”gina. |
š” Exemplo de requisição
GET https://sua-plataforma.ensinio.cloud/public/api/v1/enrollments?org=1&page=1&per_page=15
ā
Exemplo de resposta
{
"data": [
{
"id": 501,
"group": {
"id": 12,
"name": "Curso Completo de Marketing"
},
"user": {
"id": 9001,
"first_name": "Ana",
"last_name": "Silva",
"email": "[email protected]",
"phone": "+55 11 99999-0000"
},
"org": {
"id": 1,
"name": "Filial SĆ£o Paulo"
},
"completion_rate": 0.92,
"inscription_date": "2025-03-01",
"expiration_date": "2026-03-01"
}
],
"links": { ... },
"meta": { ... }
}
š Criar inscrição (POST /enrollments)
POST /enrollments)Inscreve um usuƔrio jƔ existente em um grupo/turma da plataforma.
Atenção ao uso do parâmetro
org:Caso você envie o ID de uma organização e o usuÔrio ou o grupo ainda não pertençam a ela, o sistema irÔ adicionÔ-los automaticamente à organização antes de criar a inscrição.
š¦ ParĆ¢metros esperados (Body JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
org | integer | ā Opcional | ID da Organização (filial/contexto) |
email | string | ā Sim | E-mail do usuĆ”rio jĆ” existente no sistema |
group_id | integer | ā Sim | ID do grupo para inscrição |
expires_at | datetime | ā Opcional | Data de expiração da inscrição (ISO-8601) |
š” Exemplo de requisição
{
"org": 1,
"email": "[email protected]",
"group_id": 12,
"expires_at": "2026-03-01T10:00:00Z"
}
ā
Exemplo de resposta
{
"message": "UsuƔrio inscrito no grupo com sucesso"
}
āļø Notificação por E-mail
Ao inscrever um usuƔrio com sucesso:
- A plataforma envia automaticamente um e-mail informando que o usuƔrio foi adicionado a um grupo.
- O envio é automÔtico e não requer nenhuma ação adicional.
- O e-mail só serÔ enviado se o usuÔrio possuir um endereço de e-mail vÔlido.
𧹠Expirar inscrição (DELETE /enrollments)
DELETE /enrollments)Remove uma inscrição existente, revogando imediatamente o acesso do usuÔrio ao conteúdo do grupo.
š¦ ParĆ¢metros esperados (Body JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
org | integer | ā Opcional | ID da Organização (filial/contexto) |
email | string | ā Sim | E-mail do usuĆ”rio a ser removido |
group_id | integer | ā Sim | ID do grupo do qual o usuĆ”rio serĆ” removido |
š” Exemplo de requisição
{
"org": 1,
"email": "[email protected]",
"group_id": 12
}
ā
Exemplo de resposta
{
"message": "Inscrição expirada com sucesso"
}
š§ ObservaƧƵes importantes
- O usuƔrio precisa estar previamente criado para ser inscrito.
- A expiração da inscrição revoga imediatamente o acesso ao conteúdo.
- VĆnculo AutomĆ”tico (
org): Se um ID de organização for fornecido na criação e o usuÔrio (ou grupo) não fizer parte dela, ele serÔ vinculado automaticamente. - Inscrições criadas via API são marcadas internamente como do tipo
"manual". - Se o usuÔrio jÔ estiver inscrito, apenas a data de expiração serÔ atualizada.
- Caso nenhuma data de expiração seja informada, a inscrição serĆ” considerada vitalĆcia.
š« Códigos de Erro
| Código | Descrição |
|---|---|
400 | Erro de validação nos parâmetros enviados |
401 | Token invƔlido ou ausente |
403 | Recurso não habilitado no plano do tenant |
404 | UsuÔrio, Grupo ou Organização não encontrado |
429 | Limite de requisiƧƵes excedido (rate limit) |
500 | Erro interno inesperado |
š§ Resumo visual
| Ação | Método | Endpoint | Retorno esperado |
|---|---|---|---|
| Listar inscriƧƵes | GET | /enrollments | Lista paginada de inscriƧƵes existentes |
| Criar nova inscrição | POST | /enrollments | Mensagem de sucesso ou erro |
| Expirar/remover inscrição | DELETE | /enrollments | Mensagem de sucesso ou erro |
