Especificação da Nova API v2¶
O documento especifica a v2 da API para atuar como uma camada BFF (Backend For Frontend) do Painel AVA (/api/v2/),
integrando os frontends (web e mobile) e as diferentes instâncias do Moodle (AVAs). A API utiliza autenticação
baseada em JWT (Authorization: Bearer <token>) com suporte a revogação e renovação em cascata para quando for
mobile e session para quando for web.
Estrutura dos Módulos e Endpoints (22 Endpoints)¶
Módulo |
Endpoints |
Descrição Resumida |
|---|---|---|
Autenticação |
|
Gerenciamento de ciclo de vida do JWT (emissão, refresh, verificação e revogação em cascata no Painel e nos AVAs). |
Usuário |
|
Informações de perfil e preferências globais do usuário no Painel. |
Sala de Aula |
|
Listagem de tipos de salas (Home, Diários, Coordenações, Laboratórios, Auto-inscrições, Backups), filtros dinâmicos, progresso e ações de favoritar/ocultar salas. |
Notificação |
|
Sumário por AVA, listagem, detalhamento e marcação de lido/não lido. |
Conversa |
|
Sumário por AVA, conversas, mensagens e alteração de status de leitura. |
Autenticação¶
1. POST /token/pair/¶
Gera um novo par de tokens
Requisição de exemplo¶
Headers:
accept: application/jsonContent-Type: application/json
{
"password": "string",
"username": "string"
}
Respostas de exemplo¶
{
"username": "string",
"refresh": "jwt",
"access": "jwt"
}
{
"detail": "No active account found with the given credentials",
"code": "authentication_failed"
}
{
"detail": "Invalid input.",
"code": "invalid",
"username": "username is required",
"password": "password is required"
}
2. POST /token/refresh/¶
Gera um novo par de tokens no Painel AVA e nos AVA em que ocorreu a autenticação usando este token
Requisição de exemplo¶
Headers:
accept: application/jsonContent-Type: application/json
{
"refresh": "string"
}
Respostas de exemplo¶
{
"refresh": "string",
"access": "string"
}
{
"detail": "Token is invalid or expired",
"code": "token_not_valid"
}
{
"detail": "Invalid input.",
"code": "invalid",
"refresh": "token is required"
}
3. POST /token/verify/¶
Verifica se o token é válido
Requisição de exemplo¶
Headers:
accept: application/jsonContent-Type: application/json
{
"token": "string"
}
Respostas de exemplo¶
{
"refresh": "jwt",
"access": "jwt"
}
{
"detail": "Token is invalid or expired",
"code": "token_not_valid"
}
{
"detail": "Invalid input.",
"code": "invalid",
"token": "token is required"
}
4. POST /token/revoke/¶
Revoga o token no Painel AVA e nos AVA em que ocorreu a autenticação usando este token
Requisição de exemplo¶
Headers:
accept: application/jsonContent-Type: application/json
{
"token": "jwt"
}
Respostas de exemplo¶
{
"detail": "Token revoked",
"revoke_list": [
{"service_name": "<string>", "url": "<string>", "revoked": true, "duration": "<duration in ISO 8601 format>"}
]
}
{
"detail": "Token is invalid or expired",
"code": "token_not_valid"
}
{
"detail": "Invalid input.",
"code": "invalid",
"token": "token is required"
}
Usuário¶
5. GET /usuario/info/¶
Retorna informações do usuário
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
{
"id": 0,
"matricula": "",
"identificacao": "",
"nome_social": "",
"nome_registro": "",
"ultimo_nome": "",
"nome_usual": "",
"cpf": "",
"rg": "",
"passaporte": "",
"filiacao": [
"",
""
],
"sexo": "",
"data_nascimento": "",
"data_de_nascimento": "",
"naturalidade": "",
"email": "",
"email_secundario": "",
"email_google_classroom": "",
"email_academico": "",
"email_preferencial": "",
"foto": "",
"url_foto_75x100": "",
"url_foto_150x200": "",
"tipo_vinculo": "Servidor",
"tipo_usuario": "Servidor (Técnico-Administrativo)",
"vinculo": {
"turno": "",
"campus_curso": "ZL: 123456 - ASDF",
"campus": "",
"curso": "123456 - ASDF",
"matriz": "000 - ASDF",
"cargo": "",
"ingresso": "2015/2",
"ira": "100,00",
"categoria": "tecnico_administrativo",
"situacao": "",
"situacao_sistemica": "",
"matricula_regular": false
},
"vinculos": [
{
"detalhamento": {
"modalidade": "",
"nivel_ensino": "",
"ativo": false,
"cargo": "",
"categoria": "Técnico Administrativo"
},
"estrangeiro": false
}
]
}
6. GET /usuario/preferencia/¶
Retorna preferências do usuário
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
{
"zoom" : "100%",
"configuracao" : "Padrão"
}
7. PATCH /usuario/preferencia/¶
Atualiza preferências do usuário
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/jsonContent-Type: application/json
{
"zoom" : "100%"
}
Respostas de exemplo¶
{
"zoom" : "100%"
}
Sala de aula virtual¶
8. GET /sala/tipo/¶
Retorna os tipos de sala, sendo que /sala/tipo/*/ é o mesmo que /sala/tipo/ e /sala/tipo/<ava>/ é o
mesmo que /sala/tipo/ com o campo <ava> sempre *. Se for informado o campo <ava> serão consultados
apenas os dados daquele AVA pelo slug informado, inicio, backup e autoinscricoes ignoram este filtro
e sempre mostrarão todos os dados.
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
[
{
"slug": "inicio",
"rotulo_curto": "Início",
"rotulo_longo": "Início",
"dica": "Continue de onde você parou",
"icon": "fa-regular fa-house",
"ordem": 0,
"selecionado": false,
"ativo": true,
},
{
"slug": "diario",
"rotulo_curto": "Diários",
"rotulo_longo": "Meus diários",
"dica": "Diários de classe",
"icon": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-book-open h-4 w-4\" aria-hidden=\"true\" data-tsd-source=\"/src/components/govbr/BrNavbar.tsx:42:17\"><path d=\"M12 7v14\"></path><path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"></path></svg>",
"ordem": 1,
"selecionado": true,
"ativo": true,
},
{
"slug": "coordenacao",
"rotulo_curto": "Coordenações",
"rotulo_longo": "Salas de coordenações",
"dica": "Salas de coordenações dos cursos",
"icon": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-book-open h-4 w-4\" aria-hidden=\"true\" data-tsd-source=\"/src/components/govbr/BrNavbar.tsx:42:17\"><path d=\"M12 7v14\"></path><path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"></path></svg>",
"ordem": 2,
"selecionado": false,
"ativo": true,
},
{
"slug": "laboratorio",
"rotulo_curto": "Laboratórios",
"rotulo_longo": "Laboratórios de EaD",
"dica": "Laboratórios para práticas de EaD disponibilizados no Ambiente Virtual de Aprendizagem",
"icon": "fa-solid fa-flask",
"ordem": 3,
"selecionado": false,
"ativo": true,
},
{
"slug": "autoinscricoes",
"rotulo_curto": "Auto-inscrições",
"rotulo_longo": "Auto-inscrições",
"dica": "Cursos para auto-inscrição",
"subtitulo": "Cursos abertos em que você pode se inscrever sem aprovação prévia.",
"icon": "fa-brands fa-stripe-s",
"ordem": 4,
"selecionado": false,
"ativo": true,
},
{
"slug": "backup",
"rotulo_curto": "Backups",
"rotulo_longo": "Meus backups",
"dica": "Backups",
"subtitulo": "Backups dos seus diários ou compartilhados com você.",
"icon": "fa-solid fa-box-archive",
"ordem": 5,
"selecionado": false,
"ativo": true,
},
]
9. GET /sala/tipo/<tipo>/¶
Retorna as salas do tipo informado.
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
Home¶
A home é uma aba especial que server para orientar o usuário, não tem salas vinculadas a ela.
Pode mostrar as últimas N salas que o usuário acessou.
Pode ter cards com links rápidos para as outras abas (usuários não costumam olhar para as abas), servindo de CTA.
Não possui filtros.
Não possui ordenação.
Não possui quantidade de salas.
{
"slug": "inicio",
"rotulo_curto": "Início",
"rotulo_longo": "Início",
"dica": "Continue de onde você parou",
"icon": "fa-regular fa-house",
"ordem": 0,
"selecionado": false,
"ativo": true,
"quantidade_salas": null,
"suprimir": null,
"filtros": null,
"ordenacao": null
}
Meus diários¶
Em meus diários são listados os cursos que geram diário nos quais o usuário está vinculado. Eles vêm do Suap via Integrador AVA.
Possui filtros.
Possui ordenação.
Possui quantidade de salas.
A quantidade para alunos costuma ficar abaixo de 10, mas para professores fica acima de 100, chegando a 800.
Os maiores nomes dos cursos e disciplinas tem quase 250 caracteres.
O nome das turmas segue um padrão como “20261.1.0028.ZL.1E”, sempre tendo 5 segmentos separados por ponto.
Minicursos com ou sem auto-inscrição não têm diários, apenas turma, o código pode ser como 20261.1.0028.ZL.1E.20261.1.0028.ZL.1E#1689
O código de salas do tipo “diários” são como 20301.1.03905.1E.POS.0364#123456, onde 20301.1.03905.1E é a turma, POS.0364 é o código da disciplina, 20301.1.03905.1E.POS.0364 é o código do diário, #123456 é o ID do diário, isso se dá pois diários podem ser divididos então o código do diário pode gerar ambiguidade.
{
"slug": "diario",
"rotulo_curto": "Diários",
"rotulo_longo": "Meus diários",
"dica": "Diários de classe",
"icon": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-book-open h-4 w-4\" aria-hidden=\"true\" data-tsd-source=\"/src/components/govbr/BrNavbar.tsx:42:17\"><path d=\"M12 7v14\"></path><path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"></path></svg>",
"ordem": 1,
"selecionado": true,
"ativo": true,
"quantidade_salas": 503,
"suprimir": null,
"filtros": [
{
"slug": "situacao",
"tipo": "select",
"autocomplete": false,
"icone": "fa-solid fa-book",
"rotulo": "Situação",
"selecionado": "inprogress",
"opcoes": [
{"label": "Em andamento", "value": "inprogress" },
{"label": "Favoritos", "value": "favourites" },
{"label": "Não iniciados", "value": "future" },
{"label": "Arquivados", "value": "hidden" },
{"label": "Todos (lento)", "value": "all" },
]
},
{
"slug": "semestres",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-calendar-days",
"rotulo": "Semestres",
"selecionados": [],
"opcoes": [{"label": "2026.2", "value": "2026.2" }, {"label": "2023.1", "value": "2023.1" }]
},
{
"slug": "periodos",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-calendar-week",
"rotulo": "Períodos",
"selecionados": [],
"opcoes": [{"label": "1º", "value": "1º" }, {"label": "8º", "value": "8º" }]
},
{
"slug": "disciplinas",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-book-open",
"rotulo": "Disciplinas",
"selecionados": [],
"opcoes": [{"label": "Disciplina 1", "value": "1"}, {"label": "Disciplina 8", "value": "8"}]
},
{
"slug": "cursos",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-graduation-cap",
"rotulo": "Cursos",
"selecionados": [],
"opcoes": [{"label": "Curso 1", "value": "1"}, {"label": "Curso 8", "value": "8"}]},
{
"slug": "papeis",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-user-tag",
"rotulo": "Papéis",
"selecionados": [],
"opcoes": [{"label": "Aluno", "value": "student"}, {"label": "Professor", "value": "editingteacher"}]
},
{
"slug": "ambientes",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-person-military-to-person",
"rotulo": "Ambientes",
"selecionados": [],
"opcoes": [
{"label": "Acadêmico", "value": "academico", "cor": "#0d6efd", "icone": "fa-solid fa-door-open"},
{"label": "Presencial", "value": "presencial", "cor": "#0dcaf0", "icone": "fa-solid fa-chalkboard-user"},
{"label": "Projetos", "value": "projetos", "cor": "#198754", "icone": "fa-solid fa-flask"},
]
},
],
"ordenacao": {
"selecionada": "data_acesso",
"opcoes": [
{ "value": "data_acesso", "direcao": "DESC", "rotulo": "Acesso mais recente" },
{ "value": "data_inicio", "direcao": "DESC", "rotulo": "Início mais recente" },
{ "value": "data_fim", "direcao": "DESC", "rotulo": "Final mais recente" },
{ "value": "titulo", "direcao": "ASC", "rotulo": "Título" },
{ "value": "codigo", "direcao": "ASC", "rotulo": "Código" },
{ "value": "semestre", "direcao": "DESC", "rotulo": "Semestre mais recente" },
]
}
}
Salas de coordenações¶
Todo curso tem uma sala de coordenação, elas são usadas para reuniões, discussões e outras atividades administrativas.
Possui filtros.
Possui ordenação.
Possui quantidade de salas.
No AVA as salas são prefixadas com “Sala da Coordenação do Curso de “, mas aqui não faz sentido, por isso suprimimos esse prefixo.
O código das salas são como ZL.15806 , ou seja, sigla do campus e código do curso. Eles são usados como filtro.
Os nomes dos cursos podem chegar a 250 caracteres.
{
"slug": "coordenacao",
"rotulo_curto": "Coordenações",
"rotulo_longo": "Salas de coordenações",
"dica": "Salas de coordenações dos cursos",
"icon": "fa-solid fa-arrows-to-circle",
"ordem": 2,
"selecionado": false,
"ativo": true,
"quantidade_salas": 2,
"suprimir": "Sala da Coordenação do Curso de ",
"filtros": [
{
"slug": "cursos",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-graduation-cap",
"rotulo": "Cursos",
"selecionados": [],
"opcoes": [{"label": "Curso 1", "value": "1"}, {"label": "Curso 8", "value": "8"}]
},
{
"slug": "papeis",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-user-tag",
"rotulo": "Papéis",
"selecionados": [],
"opcoes": [{"label": "Aluno", "value": "student"}, {"label": "Professor", "value": "editingteacher"}]
},
{
"slug": "ambientes",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-person-military-to-person",
"rotulo": "Ambientes",
"selecionados": [],
"opcoes": [
{"label": "Acadêmico", "value": "academico", "cor": "#0d6efd", "icone": "fa-solid fa-door-open"},
{"label": "Presencial", "value": "presencial", "cor": "#0dcaf0", "icone": "fa-solid fa-chalkboard-user"},
{"label": "Projetos", "value": "projetos", "cor": "#198754", "icone": "fa-solid fa-flask"},
]
},
],
"ordenacao": null
}
Laboratórios de EaD¶
Para todo aluno do curso de Formação em EaD é criado um laboratório de EaD, ou seja, um curso dentro do AVA em que o aluno é professor editor e pode exercer a prática docente.
Possui filtros.
Possui ordenação.
Possui quantidade de salas.
O nome da sala é o nome do aluno.
O código da sala é a matrícula do aluno.
{
"slug": "laboratorio",
"rotulo_curto": "Laboratórios",
"rotulo_longo": "Laboratórios de EaD",
"dica": "Laboratórios para práticas de EaD disponibilizados no Ambiente Virtual de Aprendizagem",
"icon": "fa-solid fa-flask",
"ordem": 3,
"selecionado": false,
"ativo": true,
"quantidade_salas": 2,
"suprimir": "Laboratório do aluno ",
"filtros": [
{
"slug": "aluno",
"tipo": "autocomplete",
"icone": "fa-solid fa-user-graduate",
"rotulo": "Aluno"
},
{
"slug": "situacao",
"tipo": "select",
"autocomplete": false,
"icone": "fa-solid fa-book",
"rotulo": "Situação",
"selecionado": "inprogress",
"opcoes": [
{"label": "Em andamento", "value": "inprogress" },
{"label": "Favoritos", "value": "favourites" },
{"label": "Não iniciados", "value": "future" },
{"label": "Arquivados", "value": "hidden" },
{"label": "Todos (lento)", "value": "all" },
]
},
{
"slug": "semestres",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-calendar-days",
"rotulo": "Semestres",
"selecionados": [],
"opcoes": [
{"label": "2026.2", "value": "2026.2" },
{"label": "2026.1", "value": "2026.1" },
{"label": "2025.2", "value": "2025.2" },
{"label": "2025.1", "value": "2025.1" },
{"label": "2024.2", "value": "2024.2" },
{"label": "2024.1", "value": "2024.1" },
{"label": "2023.2", "value": "2023.2" },
{"label": "2023.1", "value": "2023.1" },
]
},
{
"slug": "periodos",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-calendar-week",
"rotulo": "Períodos",
"selecionados": [],
"opcoes": [
{"label": "1º", "value": "1º" },
{"label": "2º", "value": "2º" },
{"label": "3º", "value": "3º" },
{"label": "4º", "value": "4º" },
{"label": "5º", "value": "5º" },
{"label": "6º", "value": "6º" },
{"label": "7º", "value": "7º" },
{"label": "8º", "value": "8º" },
]
},
{
"slug": "papeis",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-user-tag",
"rotulo": "Papéis",
"selecionados": [],
"opcoes": [
{"label": "Gestor", "value": "1"},
{"label": "Professor", "value": "2"},
{"label": "Aluno", "value": "3"},
{"label": "Orientador", "value": "4"},
]
},
{
"slug": "ambientes",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-person-military-to-person",
"rotulo": "Ambientes",
"selecionados": [],
"opcoes": [
{"label": "Acadêmico", "value": "academico", "cor": "#0d6efd", "icone": "fa-solid fa-door-open"},
{"label": "Presencial", "value": "presencial", "cor": "#0dcaf0", "icone": "fa-solid fa-chalkboard-user"},
{"label": "Projetos", "value": "projetos", "cor": "#198754", "icone": "fa-solid fa-flask"},
]
},
],
"ordenacao": {
"selecionada": "data_acesso",
"opcoes": [
{ "value": "data_acesso", "direcao": "DESC", "rotulo": "Acesso mais recente" },
{ "value": "data_inicio", "direcao": "DESC", "rotulo": "Início mais recente" },
{ "value": "data_fim", "direcao": "DESC", "rotulo": "Final mais recente" },
{ "value": "titulo", "direcao": "ASC", "rotulo": "Título" },
{ "value": "codigo", "direcao": "ASC", "rotulo": "Código" },
{ "value": "semestre", "direcao": "DESC", "rotulo": "Semestre mais recente" },
]
}
}
Auto-inscrições¶
São cursos em que qualquer aluno pode se inscrever sem aprovação prévia.
Não possui filtros.
Não possui ordenação.
Possui quantidade de salas.
O nome da sala é o nome do curso.
O código da sala é o código da turma.
{
"slug": "autoinscricoes",
"rotulo_curto": "Auto-inscrições",
"rotulo_longo": "Auto-inscrições",
"dica": "Cursos para auto-inscrição",
"subtitulo": "Cursos abertos em que você pode se inscrever sem aprovação prévia.",
"icon": "fa-brands fa-stripe-s",
"ordem": 4,
"selecionado": false,
"ativo": true,
"quantidade_salas": 2,
"suprimir": null,
"filtros": null,
"ordenacao": null
}
Backup dos cursos¶
Dos cursos podem ser feitos backup, automáticos ou pelos professores, professores podem compartilhar os backups com outros professores.
Possui filtros.
Possui ordenação.
Possui quantidade de salas.
Os nomes e códigos seguem as regras dos diários, afinal, são apenas backups.
{
"slug": "backup",
"rotulo_curto": "Backups",
"rotulo_longo": "Meus backups",
"dica": "Backups",
"subtitulo": "Backups dos seus diários ou compartilhados com você.",
"icon": "fa-solid fa-box-archive",
"ordem": 5,
"selecionado": false,
"ativo": true,
"quantidade_salas": 200,
"suprimir": null,
"filtros": [
{
"slug": "posse",
"tipo": "select",
"autocomplete": false,
"icone": "fa-solid fa-box-archive",
"rotulo": "Posse",
"selecionado": "meu",
"opcoes": [{"label": "Meus backups", "value": "meu"}, {"label": "Compartilhados comigo", "value": "compartilhados"}]
},
{
"slug": "semestres",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-calendar-days",
"rotulo": "Semestres",
"selecionados": [],
"opcoes": [{"label": "2026.2", "value": "2026.2" }, {"label": "2023.1", "value": "2023.1" }]
},
{
"slug": "periodos",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-calendar-week",
"rotulo": "Períodos",
"selecionados": [],
"opcoes": [{"label": "1º", "value": "1º" }, {"label": "8º", "value": "8º" }]
},
{
"slug": "disciplinas",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-book-open",
"rotulo": "Disciplinas",
"selecionados": [],
"opcoes": [{"label": "Disciplina 1", "value": "1"}, {"label": "Disciplina 8", "value": "8"}]
},
{
"slug": "cursos",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-graduation-cap",
"rotulo": "Cursos",
"selecionados": [],
"opcoes": [{"label": "Curso 1", "value": "1"}, {"label": "Curso 800", "value": "800"}]
},
{
"slug": "papeis",
"tipo": "multiselect",
"autocomplete": true,
"icone": "fa-solid fa-user-tag",
"rotulo": "Papéis",
"selecionados": [],
"opcoes": [{"label": "Aluno", "value": "student"}, {"label": "Professor", "value": "editingteacher"}]
}
],
"ordenacao": {
"selecionada": "data_acesso",
"opcoes": [
{ "value": "data_inicio", "direcao": "DESC", "rotulo": "Início mais recente" },
{ "value": "data_fim", "direcao": "DESC", "rotulo": "Final mais recente" },
{ "value": "data_backup", "direcao": "DESC", "rotulo": "Backup mais recente" },
{ "value": "titulo", "direcao": "ASC", "rotulo": "Título" },
{ "value": "codigo", "direcao": "ASC", "rotulo": "Código" },
]
}
}
10. GET /sala/tipo/quantidades/¶
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
{
"inicio": 0,
"diario": 0,
"coordenacao": 0,
"laboratorio": 0,
"autoinscricoes": 0,
"backup": 0
}
11. GET /sala/tipo/<tipo>/<ava>/¶
Retorna as salas do tipo informado no AVA informado.
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
[
{
"sala_tipo": "",
"id": "",
"fullname": "",
"shortname": "",
"progress": null,
"hasprogress": false,
"isfavourite": false,
"visible": "1",
"can_set_visibility": 1,
"can_check_grades": true,
"viewurl": "",
"checkgradesurl": "",
"mensagemurl": "",
"suapsurl": "",
"gradesurl": "",
"disciplina": {"id": "", "descricao": "", "sigla": ""},
"curso": {"codigo": "", "nome": ""},
"turma": {"codigo": "", "ano_periodo": ""},
"diario": {"id": "", "id_clean": 0},
"autoinscricao": {"restricoes": "", "details_url": "", "is_enrolled": false},
"ambiente": {"label": "Acadêmico", "value": "academico", "cor": "#0d6efd", "icone": "fa-solid fa-door-open"}
}
]
12. GET /sala/progresso/<ava>/<id>{,<id>/}{,<id>}/¶
Retorna o progresso das salas solicitadas no AVA informado
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
[
{
"id": "",
"progress": null,
"hasprogress": false,
}
]
13. PATCH /sala/favorito/<ava>/<id>/¶
Adiciona ou remove a sala da lista de favoritos
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/jsonContent-Type: application/json
{
"favorite": true
}
Respostas de exemplo¶
{
"favorite": true
}
14. PATCH /sala/visivel/<ava>/<id>/¶
Oculta ou mostra a sala
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/jsonContent-Type: application/json
{
"visible": true
}
Respostas de exemplo¶
{
"visible": true
}
Notificação¶
15. GET /notificacao/¶
Retorna o sumário das notificações do usuário.
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
[
{
"ava": "<string>",
"unreadcount": 0
}
]
16. GET /notificacao/<ava>/¶
Retorna as notificações do usuário no AVA informado
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
{
"result": [
{
"id": 0,
"useridfrom": -10,
"useridto": 0,
"subject": "",
"shortenedsubject": "",
"text": "",
"fullmessage": "",
"fullmessageformat": 4,
"fullmessagehtml": "",
"smallmessage": "",
"contexturl": "",
"contexturlname": "",
"timecreated": "iso 8601",
"timecreatedpretty": "<relative_time>",
"timeread": "iso 8601 or null",
"read": false,
"deleted": false,
"iconurl": "url",
"component": "string",
"eventtype": "string",
"customdata": "string or null"
}
],
"unreadcount": 1
}
17. GET /notificacao/<ava>/<id>{,<id>/}{,<id>}/¶
Retorna o conteúdo das notificações solicitadas no AVA informado
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
{
"id": 0,
"useridfrom": -10,
"useridto": 0,
"subject": "",
"shortenedsubject": "",
"text": "",
"fullmessage": "",
"fullmessageformat": 4,
"fullmessagehtml": "",
"smallmessage": "",
"contexturl": "",
"contexturlname": "",
"timecreated": "iso 8601",
"timecreatedpretty": "<relative_time>",
"timeread": "iso 8601 or null",
"read": false,
"deleted": false,
"iconurl": "url",
"component": "string",
"eventtype": "string",
"customdata": "string or null"
}
18. PATCH /notificacao/<ava>/<id>{,<id>/}{,<id>}/¶
Marca as notificações como lida ou não lida no AVA informado
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/jsonContent-Type: application/json
{
"is_read": false
}
Respostas de exemplo¶
[
{
"error":false,
"data":{
"notificationid":0,
"warnings":[]
}
}
]
Conversa¶
19. GET /conversa/¶
Retorna o sumário das mensagens do usuário.
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
[
{
"ava": "<string>",
"unreadcount": 0,
"favourites": 0
}
]
20. GET /conversa/<ava>/¶
Retorna as mensagens do usuário no AVA informado
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
[
{
"id": 1,
"name": "",
"subname": null,
"imageurl": null,
"type": 3,
"membercount": 1,
"ismuted": false,
"isfavourite": true,
"isread": true,
"unreadcount": null,
"members": [
{
"id": 3,
"fullname": "",
"profileurl": "",
"profileimageurl": "",
"profileimageurlsmall": "",
"isonline": true,
"showonlinestatus": true,
"isblocked": false,
"iscontact": false,
"isdeleted": false,
"canmessageevenifblocked": null,
"canmessage": null,
"requirescontact": null,
"cancreatecontact": true,
"contactrequests": []
}
],
"messages": [
{
"id": 13259,
"useridfrom": 3,
"text": "",
"timecreated": 1677887869
}
],
"candeletemessagesforallusers": true
}
]
21. GET /conversa/<ava>/<id>{,<id>}{,<id>}/¶
Retorna o conteúdo das mensagens solicitadas no AVA informado
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/json
Respostas de exemplo¶
[
{
"id": 5309,
"members": [
{
"id": 8,
"fullname": "",
"profileurl": "",
"profileimageurl": "",
"profileimageurlsmall": "",
"isonline": false,
"showonlinestatus": true,
"isblocked": false,
"iscontact": false,
"isdeleted": false,
"canmessageevenifblocked": null,
"canmessage": null,
"requirescontact": null,
"cancreatecontact": true,
"contactrequests": []
}
],
"messages": [
{
"id": 14330,
"useridfrom": 8,
"text": "<p>Novo testes p\u00f3s DIGTI<\/p>",
"timecreated": 1678147989
}
]
}
]
22. PATCH /conversa/<ava>/<id>/¶
Marca as mensagens como lida ou não lida no AVA informado
Requisição de exemplo¶
Headers:
Authorization: Bearer <seu_token_jwt>accept: application/jsonContent-Type: application/json
{
"is_read": true
}
Respostas de exemplo¶
[{"error":false,"data":null}]