Uma fonte única para dados do Orquestrador
Conecte as Edtechs a estudantes, turmas, professores e gestores do Orquestrador através de uma API pública baseada em Open Data Contract Standard (ODCS).
O que é o Orquestrador e como conectar as Edtechs
Antes de entrar na referência técnica campo-a-campo, veja o que a documentação do Orquestrador oferece e o caminho para conectar novas edtech a ela.
O Orquestrador é a plataforma que integra os sistemas acadêmicos do SESI e distribui esses dados tanto para o PENSE, onde estudantes, professores e gestores acessam tudo em um só lugar, quanto para qualquer Edtech parceira. Este portal é a porta de entrada para esses dados, construída a partir de um único contrato de dados público, então a documentação que você lê aqui nunca diverge do que a API realmente faz.
Como as entidades se relacionam
Comece em 3 etapas
Do cadastro à primeira chamada autenticada, sem precisar entender a arquitetura interna do Orquestrador.
Solicite credenciais
Cadastre sua edtech e receba um client_id e client_secret de sandbox.
Painel de parceiros > Nova aplicação > client_id: edt_8f2a...
Autentique via OAuth2
Troque suas credenciais por um token de acesso de curta duração.
POST /oauth/token grant_type=client_credentials scope=students:read classes:read
Consuma um recurso
Use o token no header Authorization para chamar qualquer endpoint da v1.
GET /students/{id}
Authorization: Bearer <token>
Governança Federada
Políticas e artefatos transversais, comuns a todos os módulos do Orquestrador
Manifesto de Dados
Documento estratégico que estabelece a filosofia de governança de dados do Orquestrador e cria um entendimento comum sobre como os dados devem ser tratados. Os Contratos de Dados (ver Registro de Contratos) são quem a implementa, um por interface. É quem norteia a conformidade das interações que acontecem em todo o sistema, sendo responsável pelos dados, como eles devem ser compartilhados, como se garante privacidade e segurança, como se trata interoperabilidade e como se promove IA responsável.
Conteúdo típico de um Manifesto de Dados
- Princípios de governança e papéis/responsabilidades.
- Classificação dos dados, expressa campo a campo via a coluna PII de cada Contrato de Dados.
- Regras de segurança, regras de LGPD e política de versionamento.
- Política de qualidade, interoperabilidade e metadados.
Segurança e credenciais
- TLS 1.2 ou superior em todo o tráfego; criptografia em repouso para dados pessoais.
- Credenciais de integração distintas por ambiente, armazenadas em cofre de segredos, nunca em código-fonte, logs ou URLs; rotação suportada sem janela de indisponibilidade.
LGPD
- Uso exclusivo para as finalidades do contrato; compartilhamento com terceiros é proibido sem aditivo formal.
- Campos sensíveis definidos em contrato devem ser mascarados em qualquer log (aplicação, requisição, integração, traces de erro).
- Direitos do titular: eliminação/anonimização de dados pessoais sob solicitação, em até 15 dias, preservando registros exigidos por lei.
- Incidentes de segurança ou privacidade devem ser notificados em até 24h pelo canal de incidentes, com relatório de impacto.
Política de mudanças (versionamento)
- Mudanças breaking (remover/renomear campo, mudar tipo, tornar obrigatório, alterar semântica) exigem aviso prévio de no mínimo 30 dias e geram nova versão MAJOR do contrato.
- Mudanças não-breaking (campo opcional novo) exigem aviso de 7 dias e geram versão MINOR. Nenhuma mudança de schema entra em produção sem atualização do contrato correspondente.
SLAs padrão (herdados por todos os Contratos de Dados, salvo desvio declarado)
Carregando…
Glossário Canônico
Um nome por conceito, sem sinônimos, vale para os módulos do Orquestrador.
Carregando…
Endpoints & modelos de dados
Gerada a partir do Open Data Contract Standard, cada endpoint expande para mostrar o contrato de dados, a requisição, a resposta e os erros possíveis, sempre em sincronia com o que está publicado.
O Contrato de Dados é operacional: especifica exatamente como um conjunto de dados deve se comportar, um acordo entre quem produz o dado e quem o consome. Ele responde a perguntas como qual o schema, quais campos existem, qual o tipo de cada campo, quais são obrigatórios, qual a frequência de atualização, qual SLA, quem é o owner, como mudanças serão feitas e quais regras de qualidade precisam ser atendidas. As entidades abaixo são, cada uma, um Contrato de Dados nesse sentido.
Definição conforme o Template de Governança de Dados (Manifesto · Contrato · Linhagem) — o Manifesto de Dados (ver Governança Federada) estabelece a política; o Contrato a implementa.
Sobre este contrato
Carregando…
Endpoints publicados
Nenhum campo ou endpoint encontrado para essa busca.
Representa a pessoa estudante, independentemente de suas matrículas, turmas e resultados acadêmicos.
Relacionamentos: o vínculo com Unit existe através de Profile (via userId). O vínculo com ClassRoom existe hoje só via Enrollment (studentId+classSectionId). É referenciada por Enrollment, Result (via studentId) e Profile (via userId).
Núcleo · obrigatório para qualquer Edtech
Retorna os dados de uma turma específica.
Relacionamentos: pertence a uma Unit (via unitId) e a um AcademicGrade (via academicGradeId). É referenciada por Student (contém), ClassSectionSubject (vínculo docente-turma-disciplina) e Result (ocorre em).
Núcleo · obrigatório para qualquer Edtech
Representa um docente responsável por componentes curriculares, turmas e atividades acadêmicas.
Relacionamentos: o vínculo com Unit existe através de Profile (via userId). Também está vinculado ao vínculo ClassSectionSubject (via teacherId). É referenciado por Profile (via userId).
Núcleo · obrigatório para qualquer Edtech
Representa o vínculo acadêmico do estudante com uma turma, unidade, período letivo ou programa educacional.
Relacionamentos: pertence a uma Student (via studentId) e referencia a ClassRoom correspondente (via classSectionId).
Núcleo · obrigatório para qualquer Edtech
Representa o componente curricular, disciplina ou área de conhecimento ofertada pela instituição.
Relacionamentos: é referenciada por ClassSectionSubject (via disciplineCode) e por Result (via subjectId), e agendada por ClassRoom.
Núcleo · obrigatório para qualquer Edtech
Representa um colaborador da instituição, independentemente de sua atuação acadêmica, vinculado a unidades e perfis de acesso.
Relacionamentos: não vinculado a turma ou aluno. O vínculo com Unit existe através de Profile (via userId). É referenciado por Profile (via userId).
Extensão opcional · Administrativo
Representa um resultado acadêmico do estudante em avaliação, período, disciplina, competência ou habilidade.
Relacionamentos: pertence a uma Student (via studentId), ocorre em uma ClassRoom (via classSectionId) e se refere a uma Discipline (via subjectId). Vínculo planejado, ainda não implementado, com Enrollment (via enrollmentId — matrícula vigente no momento da nota).
Extensão opcional · Avaliação & Competência
Representa uma unidade escolar, administrativa ou operacional pertencente a uma regional ou organização.
Relacionamentos: é referenciada por ClassRoom (via unitId), Enrollment (via unitId) e por Profile (via unitId) — é através de Profile que Student, Teacher e Employee se vinculam a uma unidade.
Núcleo · obrigatório para qualquer Edtech
Catálogo autônomo de tipos de perfil ou função (ex. Diretor, Professor, Secretário, Gestor Regional). Define os **tipos** de papel que um usuário (Student, Teacher ou Employee) pode exercer — a atribuição específica de um Role a um usuário em uma Unit é modelada na entidade Profile.
Relacionamentos: é referenciada por Profile (via roleId). Nenhuma outra referência.
Extensão opcional · Administrativo
Representa um perfil funcional ou de autorização atribuído a usuários e colaboradores em uma plataforma e unidade.
Relacionamentos: referencia um Student, Teacher ou Employee (via userId polimórfico), uma Unit (via unitId) e um Role (via roleId). É através de Profile que Student/Teacher/Employee se vinculam a uma unidade.
Extensão opcional · Administrativo
Representa o vínculo Docente-Turma-Disciplina.
Relacionamentos: referencia um Teacher (via teacherId), uma ClassRoom (via classId) e uma Discipline (via disciplineCode).
Núcleo · obrigatório para qualquer Edtech
Representa um ano, série ou nível acadêmico da trajetória escolar. Substitui o nome ambíguo Grade, que também pode significar nota.
Relacionamentos: é referenciada por ClassRoom (via academicGradeId).
Núcleo · obrigatório para qualquer Edtech
Identidade — Autenticação federada e SSO
O Orquestrador de Identidade gerencia autenticação e autorização de sessões no ecossistema SESI. Aqui a direção pode ser bidirecional: o Orquestrador/Hub e a EdTech parceira cada um pode precisar expor um mecanismo de SSO próprio, para que o acesso aconteça sem pedir novo login ao usuário, não faz parte do contrato de dados, é um requisito de integração à parte, definido pela especificação técnica abaixo.
Visão geral do módulo
Consiste em uma aplicação para o gerenciamento de identidades no processo de autenticação e autorização de sessões dos usuários no Hub de Integrações. Permite que usuários acessem os aplicativos do ecossistema educacional SESI com um único login, usando o Azure Active Directory como provedor de identidade (IDP), que autentica a sessão do usuário e em seguida autoriza o acesso a múltiplos aplicativos confiáveis, sem necessidade de login adicional. O método de autenticação é moderno: SSO baseado em OAuth/OpenID Connect.
Mecanismos
- SSO (Single Sign-On)
- Controle de sessões
- Controle de tokens
- Coleta de logs para monitoramento
- Autorização
- Autenticação
- Administração de usuários
- Interface para integração
- Single Logout
- Gestão Multi Tenant
- Recuperação de senha
Provisionamento de usuários
Além do provisionamento automático via integração (ver módulo Integrações), o Hub de Integrações oferece dois caminhos administrativos para cadastrar usuários diretamente:
- Cadastro manual — preenchimento linha a linha em uma tabela na própria interface.
- Upload em lote via CSV — a partir de um template disponibilizado para download, com link direto para a documentação da API.
Taxonomia de status de cadastro
| Status | Significado |
|---|---|
| Sucesso | Usuário provisionado sem pendências. |
| Atenção | Situação identificada e sinalizada antes de virar um problema para o usuário final — exemplo: senha expirada. |
| Erro | Falha que impede o provisionamento — exemplo: conflito de dados (registro divergente do já existente). |
Objetivo
Este documento define o contrato técnico e os requisitos de segurança para o acesso autenticado entre a plataforma Orquestrador/Hub da Big Brain e plataformas de EdTechs, sem que o usuário precise informar novamente suas credenciais.
O contrato é bidirecional e deve atender aos dois cenários:
| Fluxo | Consumidor dos serviços | Provedor dos serviços | Plataforma aberta ao usuário |
|---|---|---|---|
| Orquestrador/Hub → EdTech | Orquestrador/Hub | EdTech | EdTech |
| EdTech → Orquestrador/Hub | EdTech | Orquestrador/Hub | Orquestrador/Hub |
Responsabilidades por direção:
| Fluxo | Quem expõe os dois endpoints | Quem emite as credenciais | Quem consome os endpoints |
|---|---|---|---|
| Orquestrador/Hub → EdTech | EdTech | EdTech | Big Brain |
| EdTech → Orquestrador/Hub | Big Brain | Big Brain | EdTech |
Em ambos os casos, a plataforma de destino deve:
- autenticar a aplicação de origem e emitir um token de acesso de curta duração;
- validar o token e o identificador do usuário;
- criar uma autorização de uso único; e
- devolver uma URL temporária que estabeleça a sessão do usuário na plataforma de destino.
Classificação do mecanismo
O fluxo definido neste documento é um SSO por integração de API e URL de acesso único. Ele utiliza conceitos e formatos consolidados de autenticação HTTP e OAuth 2.0.
Terminologia
| Termo | Definição |
|---|---|
| Plataforma de origem | Plataforma na qual o usuário já possui uma sessão e a partir da qual inicia o acesso. |
| Plataforma de destino | Plataforma que será aberta ao usuário e que expõe os endpoints descritos neste documento. |
| Cliente | Componente servidor da plataforma de origem que consome os endpoints. |
| Provedor | Componente servidor da plataforma de destino que autentica o cliente, localiza o usuário e cria a sessão. |
| clientId | Identificador técnico da aplicação cliente, utilizado como usuário no Basic Auth. |
| clientSecret | Segredo da aplicação cliente, utilizado como senha no Basic Auth. |
| API key | Chave adicional que identifica o contrato, instituição, integração ou ambiente. |
| Access token | Credencial temporária do tipo Bearer, emitida pelo provedor para autorizar a criação de uma sessão SSO. |
| URL de acesso | URL HTTPS temporária e de uso único que autentica o usuário na plataforma de destino. |
| Identificador do usuário | Chave estável e previamente mapeada que identifica o usuário no contexto da integração. |
Visão geral do fluxo
As chamadas aos endpoints são server-to-server. API key, Basic Auth e Bearer Token não devem ser expostos ao navegador, ao código JavaScript do cliente ou a aplicações móveis sem backend confiável.
Para que o serviço de integração da EdTech parceira se conecte com a plataforma Orquestrador e seja disponibilizada no módulo Hub para os respectivos usuários, a sincronização das identidades deverá ocorrer, seja inserido da plataforma Orquestrador para a EdTech (configurado através do módulo de integração) ou consumido da Edtech para a plataforma Orquestrador através do barramento de dados.
Endereços
Cada provedor deve informar uma URL base por ambiente durante o onboarding.
Rotas canônicas propostas:
| Operação | Método e rota |
|---|---|
| Emitir access token | POST /api/v1/auth/token |
| Criar sessão SSO | POST /api/v1/sso/sessions |
Convenções gerais da API
Transporte e conteúdo
- Todas as requisições devem utilizar HTTPS, com TLS 1.2 ou superior; recomenda-se TLS 1.3.
- Requisições HTTP devem ser redirecionadas para HTTPS somente em páginas públicas. Os endpoints de autenticação não devem aceitar credenciais por HTTP nem depender de redirecionamento para protegê-las.
- Corpos de requisição e resposta devem utilizar UTF-8.
- O formato de dados deve ser JSON, exceto quando o endpoint não possuir corpo de requisição.
- O cliente deve enviar
Accept: application/json. - Quando houver corpo JSON, o cliente deve enviar
Content-Type: application/json. - Datas e horários devem utilizar UTC no formato ISO 8601, por exemplo,
2026-07-20T20:30:00Z. - Nomes de propriedades JSON devem utilizar
camelCase.
Endpoint 1 — emissão do access token
Finalidade
Autenticar a aplicação cliente por meio da combinação de:
- uma API key; e
- credenciais de aplicação no formato HTTP Basic Auth.
Após validação das duas credenciais, o provedor retorna um access token do tipo Bearer, limitado à criação de sessões SSO.
Requisição
POST /api/v1/auth/token HTTP/1.1 Host: api.exemplo.com Accept: application/json Authorization: Basic <base64(clientId:clientSecret)> X-API-Key: <api-key>
Este endpoint não exige corpo de requisição.
Cabeçalhos
| Cabeçalho | Obrigatório | Regra |
|---|---|---|
| Authorization | sim | Deve possuir o esquema Basic, conforme Basic base64(clientId:clientSecret). |
| X-API-Key | sim | Deve conter a chave emitida especificamente para a integração, direção e ambiente. |
| Accept | sim | application/json |
Resposta de sucesso
HTTP 200 OK
{
"success": true,
"result": {
"accessToken": "eyJhbGciOiJSUzI1NiIs...",
"tokenType": "Bearer",
"expiresIn": 300,
"expiresAt": "2026-07-20T20:35:00Z",
"scope": "sso:session:create"
},
"errors": null
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| accessToken | string | sim | Token de acesso. O consumidor deve tratá-lo como valor opaco. |
| tokenType | string | sim | Deve possuir o valor Bearer. |
| expiresIn | integer | sim | Tempo restante de validade, em segundos. |
| expiresAt | string/date-time | Recomendado | Data e hora UTC de expiração. |
| scope | string | Recomendado | Permissões concedidas. Deve conter apenas o necessário para criar a sessão SSO. |
Regras do token
- O token deve possuir vida curta. Recomenda-se 5 minutos, com limite máximo recomendado de 15 minutos.
- O endpoint não deve emitir refresh token para este fluxo.
- O token deve ser restrito ao provedor, ambiente, cliente e finalidade para os quais foi emitido.
- O token não deve conceder acesso a APIs de negócio, dados educacionais ou funções administrativas.
- O token não deve ser incluído em query string, fragmento de URL, logs ou mensagens de erro.
Exemplo com cURL
curl --request POST \ --url 'https://api.exemplo.com/api/v1/auth/token' \ --user '<clientId>:<clientSecret>' \ --header 'X-API-Key: <api-key>' \ --header 'Accept: application/json'
Endpoint 2 — criação da sessão SSO
Finalidade
Validar o access token, localizar e autorizar o usuário e criar uma URL temporária de uso único para acesso à plataforma de destino.
Requisição
POST /api/v1/sso/sessions HTTP/1.1
Host: api.exemplo.com
Accept: application/json
Content-Type: application/json
Authorization: Bearer <access-token>
X-Correlation-Id: 42e3da7c-63e9-46ec-9fd3-10e1ef8b9321
{
"userId": "7d3cce21-8412-4f1e-a9f5-0f893fa35c91"
}
Cabeçalhos
| Cabeçalho | Obrigatório | Regra |
|---|---|---|
| Authorization | sim | Bearer <access-token> retornado pelo endpoint anterior. |
| Content-Type | sim | application/json |
| Accept | sim | application/json |
Corpo
| Campo | Tipo | Obrigatório | Validação |
|---|---|---|---|
| userId | string | sim | Identificador estável do usuário, com 1 a 128 caracteres, no contexto do cliente/instituição autenticado. |
Regras do identificador:
- deve corresponder ao identificador acordado e provisionado entre as partes;
- deve ser único dentro do contexto identificado pelas credenciais da integração;
- e-mail, CPF, nome, matrícula mutável ou outro dado pessoal não deve ser adotado como chave canônica quando existir um identificador técnico estável;
- o provedor deve confirmar que o usuário pertence à instituição e ao contexto do cliente autenticado;
- receber um
userIdválido não é suficiente: o provedor deve verificar se o usuário está ativo e autorizado a acessar a plataforma; - o endpoint não deve permitir que credenciais de uma instituição criem sessões para usuários de outra instituição.
Resposta de sucesso
HTTP 200 OK
{
"success": true,
"result": {
"launchUrl": "https://app.exemplo.com/sso/consume?code=H1p3F5m7...",
"expiresIn": 60,
"expiresAt": "2026-07-20T20:31:00Z"
},
"errors": null
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| launchUrl | string/URI | sim | URL HTTPS temporária e de uso único para abertura da plataforma de destino. |
| expiresIn | integer | sim | Tempo restante de validade da URL, em segundos. |
| expiresAt | string/date-time | Recomendado | Data e hora UTC de expiração. |
Regras da URL de acesso
- A URL deve utilizar HTTPS.
- Recomenda-se validade de 60 segundos, com limite máximo recomendado de 5 minutos.
- A URL deve ser invalidada imediatamente após o primeiro uso bem-sucedido.
- O código presente na URL deve ser aleatório, imprevisível, de alta entropia e armazenado de forma protegida pelo provedor.
- O código deve estar associado ao usuário, cliente, instituição, ambiente, expiração e finalidade.
- A URL não deve carregar API key, Basic Auth, access token, e-mail, CPF, nome, matrícula ou outros dados pessoais.
- Após consumir o código, a aplicação deve criar sua sessão normal por cookie seguro e redirecionar o navegador para uma URL limpa, sem o código temporário.
- Uma tentativa de reutilização, expiração ou adulteração da URL deve falhar de forma segura e pode direcionar o usuário para a autenticação convencional ou para uma página de erro controlada.
- A URL não deve ser enviada automaticamente por e-mail, mensageria ou outro canal sem proteção adicional.
- A resposta que contém a URL não deve ser armazenada em cache nem registrada integralmente em logs.
Redirecionamento do usuário
A plataforma de origem pode:
- executar um redirecionamento HTTP para a
launchUrl; ou - abrir a
launchUrlapós uma ação explícita do usuário.
O backend da plataforma de origem deve obter a URL.
Exemplo com cURL
curl --request POST \
--url 'https://api.exemplo.com/api/v1/sso/sessions' \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{"userId":"7d3cce21-8412-4f1e-a9f5-0f893fa35c91"}'
Padrão de resposta
Todas as respostas com corpo devem seguir o envelope:
{
"success": true,
"result": {},
"errors": null
}
Regras do envelope
- Em respostas 2xx,
successdeve sertrue,resultdeve conter o resultado eerrorsdeve sernull. - Em respostas 4xx ou 5xx,
successdeve serfalse,resultdeve sernulleerrorsdeve ser um array com pelo menos um erro. - A API não deve retornar HTTP 200 com
success: false. - Mensagens de erro não devem revelar credenciais, tokens, existência de segredos, detalhes internos, stack traces, consultas ou componentes de infraestrutura.
Estrutura de erro
{
"success": false,
"result": null,
"errors": [
{
"code": "AUTH_INVALID_CREDENTIALS",
"message": "Não foi possível autenticar a aplicação cliente.",
"target": null,
"details": null
}
]
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| code | string | sim | Código estável e legível por máquina, em UPPER_SNAKE_CASE. |
| message | string | sim | Mensagem segura e compreensível. Não deve ser utilizada pelo consumidor como chave de decisão. |
| target | string/null | Recomendado | Campo ou elemento relacionado ao erro, quando aplicável. |
| details | object/array/null | Opcional | Detalhes estruturados e seguros, quando necessários. |
Catálogo mínimo de erros
| Código | HTTP | Endpoint | Situação |
|---|---|---|---|
| INVALID_REQUEST | 400 | Ambos | Requisição ausente ou malformada. |
| VALIDATION_ERROR | 400/422 | Ambos | Campo inválido ou regra semântica não atendida. |
| AUTH_INVALID_CREDENTIALS | 401 | Token | API key ou Basic Auth inválido. A resposta não deve indicar qual credencial falhou. |
| TOKEN_INVALID | 401 | Sessão | Bearer Token inválido, malformado ou revogado. |
| TOKEN_EXPIRED | 401 | Sessão | Bearer Token expirado. |
| INSUFFICIENT_SCOPE | 403 | Sessão | Token válido, mas sem permissão para criar sessão SSO. |
| USER_NOT_FOUND | 404 | Sessão | Usuário não localizado no contexto da integração. |
| USER_ACCESS_FORBIDDEN | 403 | Sessão | Usuário inativo, bloqueado ou não autorizado para a plataforma. |
| RATE_LIMIT_EXCEEDED | 429 | Ambos | Limite de chamadas excedido. |
| INTERNAL_ERROR | 500 | Ambos | Falha interna não prevista. |
| SERVICE_UNAVAILABLE | 503 | Ambos | Serviço temporariamente indisponível. |
Segurança e privacidade
Credenciais e segregação
- Cada direção da integração deve possuir credenciais próprias.
- Cada instituição, EdTech e ambiente deve possuir credenciais segregadas.
- Credenciais de homologação não devem acessar dados ou usuários de produção.
- API keys e segredos devem ser gerados com entropia adequada, armazenados em cofre de segredos e nunca mantidos em código-fonte, arquivos de configuração versionados, tickets ou documentação pública.
- Deve existir processo seguro de emissão, ativação, rotação, revogação e substituição de credenciais.
- A rotação deve permitir transição controlada quando necessária e deve ser imediata em caso de suspeita de comprometimento.
- Credenciais não devem ser compartilhadas por e-mail ou mensageria aberta. O canal de entrega deve ser acordado no onboarding.
- O provedor pode adotar allowlist de IP como defesa adicional, sem substituir autenticação e TLS.
Privilégio mínimo
- O token deve possuir apenas o escopo necessário para criar uma sessão SSO.
- O cliente deve conseguir criar sessões somente para as instituições e os usuários associados ao seu contrato.
- A plataforma de origem deve obter o
userIdda própria sessão autenticada e de dados confiáveis no backend. O navegador não deve conseguir substituir livremente o identificador do usuário enviado ao provedor. - Perfis, papéis e permissões do usuário devem ser resolvidos e aplicados pela plataforma de destino.
- O fluxo não deve elevar permissões nem permitir que o cliente informe livremente papéis administrativos.
- Criação automática de usuário, atualização cadastral e atribuição de papéis ficam fora deste contrato.
Proteção contra abuso
- Os endpoints devem possuir rate limiting e monitoramento de tentativas inválidas.
- Repetidas falhas de autenticação, acessos entre instituições, reuso de URL e padrões anômalos devem gerar eventos de segurança.
- Respostas de autenticação devem evitar diferenças que permitam descobrir qual parte da credencial está correta.
- O provedor deve proteger o endpoint de consumo contra replay, força bruta e manipulação do código.
- Relógios dos servidores devem ser sincronizados para validar expirações corretamente.
Auditoria e observabilidade
O provedor deve registrar, no mínimo:
- data e hora UTC;
X-Request-IdeX-Correlation-Id;- cliente, instituição, direção da integração e ambiente;
- operação solicitada;
- resultado e status HTTP;
- código de erro, quando houver;
- identificador técnico pseudonimizado do usuário, quando necessário;
- emissão, consumo, expiração, revogação ou tentativa de reuso da autorização de acesso;
- origem técnica da requisição, conforme políticas de privacidade e segurança.
Não devem ser registrados:
- API key;
clientSecret;- valor integral do cabeçalho
Authorization; - access token;
- URL de acesso completa ou seu código;
- cookies de sessão;
- dados pessoais sem necessidade operacional.
Tokens, chaves e códigos podem ser correlacionados por hash não reversível ou identificador interno seguro, desde que isso não permita sua reutilização.
Disponibilidade, timeout e novas tentativas
- Recomenda-se timeout de conexão de até 5 segundos e timeout total de até 15 segundos por chamada, ajustável por acordo de nível de serviço.
- O cliente deve aplicar backoff exponencial com jitter nas falhas transitórias.
- O cliente deve limitar o número de tentativas para evitar tempestades de requisições.
- A plataforma de origem deve apresentar erro controlado quando não for possível obter a URL.
- Falha na criação do SSO não deve resultar em acesso anônimo ou em sessão com usuário diferente.
- O provedor deve informar janelas planejadas de manutenção conforme os canais e prazos acordados.
Onboarding da integração
Cada parte deve fornecer, por ambiente e direção:
| Informação | Descrição |
|---|---|
| URL base | Endereço HTTPS da API. |
| URL da aplicação | Domínio no qual a sessão será estabelecida. |
| clientId | Identificador da aplicação cliente. |
| clientSecret | Segredo entregue por canal seguro. |
| API key | Chave segregada por instituição, direção e ambiente. |
| Formato do userId | Origem, tamanho, regras e exemplos sintéticos. |
| Validades | Duração do access token e da URL de acesso. |
| Limites | Rate limit, timeout e política de novas tentativas. |
| Rede | IPs de saída e allowlists, se aplicáveis. |
| Contatos | Responsáveis técnicos, segurança e suporte. |
| SLA | Disponibilidade e tempos de resposta acordados, se aplicáveis. |
Observação: exemplos de hosts, identificadores, chaves, tokens, códigos e datas apresentados nesta especificação são ilustrativos e não devem ser reutilizados em qualquer ambiente.
Integrações — Conectores com as EdTechs do ecossistema SESI
O Orquestrador de Integrações gerencia os conectores com as EdTechs do ecossistema SESI, garantindo que o fluxo de dados de entrada e saída esteja disponível, confiável e orquestrado. Esta seção formaliza os requisitos que toda EdTech deve atender para se conectar.
Visão geral do módulo
A integração segue o padrão de portas governadas por contrato: o Orquestrador é a única origem de provisionamento (fluxo outbound Orquestrador → EdTech) e a única consumidora oficial de resultados (fluxo inbound EdTech → Orquestrador). A EdTech não consome dados diretamente do sistema acadêmico de origem nem de outras EdTechs, todo tráfego passa pelas interfaces contratadas.
| Fluxo | Direção | Conteúdo | Gatilho |
|---|---|---|---|
| Provisionamento de usuários | Orquestrador → EdTech | Criação, atualização e desativação de usuários e vínculos | Rotinas agendadas do Orquestrador |
| Devolução de resultados | EdTech → Orquestrador | Notas, progresso, competências, certificações | Consulta agendada pelo Orquestrador ou push acordado em contrato |
| Verificação de disponibilidade | Orquestrador → EdTech | Health check da API | Contínuo, conforme contrato |
Premissas
- Fonte autoritativa: o cadastro (usuários, turmas, matrículas, vínculos) é sempre do Orquestrador. A EdTech não cria, altera ou reativa usuários provisionados por conta própria.
- Identidade federada: a autenticação do usuário final ocorre por SSO no provedor de identidade do Orquestrador (ver módulo Identidade). A EdTech não mantém senhas próprias para usuários provisionados.
- Contrato antes de tráfego: nenhum dado trafega sem Contrato de Dados assinado pelas duas partes, em homologação e em produção.
Granularidade por tipo de dado
Na prática, uma integração com uma EdTech não é monolítica: cada conexão é dividida em "produtos" de dados independentes, por exemplo, Tarefas, Usuários, Turmas e Notificações, cada um habilitado ou desabilitado separadamente para aquela EdTech. Isso permite religar só um tipo de dado sem afetar os demais em caso de incidente ou mudança de escopo.
Requisitos de Dados
Entidades e campos mínimos que toda integração deve enviar e aceitar. O schema exato (tipos físicos, tamanhos, enums) é formalizado no Contrato de Dados de cada interface.
| Entidade | Enviada por | Campos mínimos (genéricos) | PII |
|---|---|---|---|
| Usuário (estudante / docente / funcionário) | Orquestrador | identificador único imutável (uuid) · nome · e-mail institucional · e-mail pessoal (opcional) · perfil/papel · situação (ativo/inativo) · unidade/regional | Sim |
| Vínculo acadêmico | Orquestrador | uuid do usuário · turma/curso · unidade · papel no vínculo · vigência (início/fim) | Sim |
| Resultado acadêmico | EdTech | uuid do usuário · referência do curso/turma · tipo de resultado (nota, progresso, competência, certificação) · valor · data do evento · situação | Sim |
| Confirmação de operação | EdTech | código de status · mensagem estruturada · identificador de correlação da requisição | — |
| ID | Requisito |
|---|---|
| RD-01 | A EdTech deve aceitar e persistir o identificador único (uuid) fornecido pelo Orquestrador e usá-lo como chave de correlação em todas as trocas subsequentes. O uuid é imutável após a criação. |
| RD-02 | A EdTech deve aceitar o e-mail institucional como identificador alternativo de busca (check por uuid ou e-mail), para suportar reconciliação e reativação. |
| RD-03 | Todo resultado acadêmico devolvido deve referenciar o uuid do usuário e a referência de curso/turma recebidos no provisionamento, a EdTech não devolve resultados com identificadores próprios sem mapeamento. |
| RD-04 | Campos de data/hora devem usar ISO 8601 com timezone explícito (UTC recomendado). |
| RD-05 | Campos obrigatórios ausentes ou inválidos devem ser rejeitados item a item com erro estruturado, a EdTech não rejeita o lote inteiro por falha em um item, salvo acordo em contrato. |
| RD-06 | A EdTech deve respeitar a classificação de sensibilidade dos campos definida no Contrato de Dados (restrito / confidencial / interno / público) em armazenamento, exibição e logs. |
| RD-07 | Valores enumerados (perfil, situação, tipo de resultado) devem seguir o domínio de valores do Contrato de Dados; valores fora do domínio devem gerar erro funcional, nunca inferência silenciosa. |
| RD-08 | A EdTech não enriquece, deriva ou repassa a terceiros os dados recebidos fora das finalidades autorizadas no contrato. |
Requisitos de Interface
APIs mínimas que toda EdTech deve expor. Os nomes de endpoints abaixo são ilustrativos; o que é obrigatório é a capacidade — a EdTech pode expor nomes próprios desde que o Contrato de Dados os formalize.
| ID | Capacidade obrigatória | Semântica esperada |
|---|---|---|
| RI-01 | Health check (ex. GET /healthcheck) | Responde status de disponibilidade da API em até 5s, sem efeitos colaterais. |
| RI-02 | Consulta de usuário (ex. GET /check_user) | Busca por uuid ou e-mail; retorna existência, situação e dados mínimos para reconciliação. |
| RI-03 | Criação de usuário (ex. POST /import_user) | Cria usuário com vínculos; retorna uuid confirmado e situação. |
| RI-04 | Atualização de usuário (ex. POST /update_user) | Atualiza dados e vínculos preservando uuid; reativa usuário desativado quando aplicável. |
| RI-05 | Desativação de usuário (ex. POST /disable_user) | Revoga acesso sem excluir histórico acadêmico; operação reversível por update. |
| RI-06 | Consulta de resultados (ex. GET /results) | Retorna resultados por período/lote com paginação; janela máxima de consulta definida em contrato. |
Padrões técnicos
| ID | Requisito |
|---|---|
| RI-07 | Protocolo HTTPS (TLS 1.2+) com JSON (Content-Type: application/json; charset UTF-8). |
| RI-08 | Códigos HTTP semânticos: 200/201 sucesso; 400 requisição inválida; 401/403 autenticação/autorização; 404 não encontrado; 409 conflito/duplicidade; 422 erro de validação de negócio; 5xx falha do servidor. |
| RI-09 | Endpoints de listagem devem suportar paginação (pageSize/pageNumber ou cursor) com indicação de próxima página. |
| RI-10 | As APIs devem ser versionadas (ex. /api/v2/...); versões antigas convivem com novas pelo período definido na política de mudanças. |
| RI-11 | Autenticação de serviço: API Key em header dedicado, OAuth2 client credentials ou mTLS — com credenciais distintas por ambiente e rotação suportada sem indisponibilidade. |
| RI-12 | Limites operacionais (rate limit, tamanho máximo de lote, timeout) devem ser documentados no Contrato de Dados; ao atingi-los, a resposta deve ser explícita (ex. 429) e nunca truncamento silencioso. |
Requisitos de Comportamento
Idempotência e reprocessamento
| ID | Requisito |
|---|---|
| RC-01 | Todas as operações de escrita devem ser idempotentes: o Orquestrador opera no padrão check → update | disable → import e pode reenviar o mesmo item múltiplas vezes (retry com backoff e reprocessamento em ciclos). Reenvio não gera duplicidade. |
| RC-02 | Criação de usuário já existente deve resultar em 409 (ou atualização, conforme contrato), nunca em segundo registro. |
| RC-03 | Desativação de usuário já inativo e atualização sem mudanças devem ser aceitas como sucesso (no-op), não como erro. |
Processamento em lote e janelas
| ID | Requisito |
|---|---|
| RC-04 | O Orquestrador executa rotinas agendadas (tipicamente diárias, com janelas definidas em contrato). A EdTech deve suportar o volume da carga inicial (full) e das cargas incrementais (delta) declaradas no contrato, sem degradação além dos níveis de serviço. |
| RC-05 | O processamento deve ser resiliente a itens fora de ordem dentro de um lote; dependências de ordem, se existirem, devem estar declaradas no contrato. |
| RC-06 | Janelas de manutenção da EdTech devem ser comunicadas com antecedência mínima acordada em contrato (referência: 7 dias) pelo canal de anúncios, e refletidas no objeto support do contrato. |
Tratamento e taxonomia de erros
As respostas de erro alimentam a observabilidade do Orquestrador (logs de sumário e detalhe por execução). Erros são classificados em duas famílias, e a resposta da EdTech deve permitir essa classificação automática:
| Família | Exemplos | Resposta esperada da EdTech | Ação |
|---|---|---|---|
| Funcional (dados/cadastro) | perfil não elegível; vínculo inexistente; campo inválido | 4xx/422 com código de erro de negócio e mensagem por item | Item vai para fila de qualidade; correção na origem |
| Sistêmica (infraestrutura) | indisponibilidade; timeout; erro interno | 5xx com identificador de correlação | Retry automático com backoff; DLQ após esgotar tentativas |
| ID | Requisito |
|---|---|
| RC-07 | Toda resposta de erro deve ser estruturada: código de status, código de erro de negócio, mensagem legível, identificador de correlação, campo/item afetado. Mensagens genéricas ("erro interno") para falhas funcionais não são aceitas. |
| RC-08 | A EdTech deve devolver o identificador de correlação enviado pelo Orquestrador (header X-Correlation-Id) em todas as respostas, para rastreabilidade e linhagem de execução. |
| RC-09 | Erros funcionais em massa (ex. mesmo código para mais de 20% de um lote) devem ser tratados como incidente conjunto, com investigação pelo canal de incidentes. |
Contrato de Dados
Formalização obrigatória de cada interface, as regras gerais de contrato herdadas de todo o Orquestrador estão no Manifesto de Dados (ver Governança Federada); aqui ficam as obrigações específicas de Integrações.
| ID | Requisito |
|---|---|
| RG-01 | Cada interface deve ser formalizada em um Contrato de Dados no padrão ODCS v3.1.0, contendo: fundamentals (id, versão SemVer, status), schema completo com classificação de sensibilidade e exemplos, regras de qualidade verificáveis, service levels, lineage, team & roles com as duas partes nomeadas, canais de suporte e servers de homologação e produção. |
| RG-02 | Service levels devem declarar os objetos: availability, retention, latency, freshness, frequency, support e backup, com valores por ambiente e método de medição. |
| RG-03 | A linhagem deve ser declarada em nível de campo para os dados devolvidos pela EdTech (inputFields: namespace, name, field; transformations: type DIRECT/INDIRECT, subtype, description), permitindo ao Orquestrador rastrear a origem de cada resultado. |
| RG-04 | Mudanças breaking (remover/renomear campo, mudar tipo, tornar obrigatório, alterar semântica) devem ser comunicadas com no mínimo 30 dias e geram nova versão MAJOR do contrato, com período de convivência de versões definido em contrato. |
| RG-05 | Mudanças não-breaking (campo opcional novo) geram versão MINOR com comunicação de 7 dias. Nenhuma mudança de schema entra em produção sem atualização do contrato correspondente. |
| RG-06 | O ciclo de vida do contrato segue: draft → active → deprecated → retired. Tráfego em produção exige status active e aceite formal registrado das duas partes. |
Níveis de Serviço
Os valores mínimos por padrão são os do Manifesto de Dados (availability, latency, freshness, retention, support, backup). Cada interface de Integrações pode declarar desvios específicos no seu próprio Contrato de Dados, incluindo um objeto adicional não coberto pelo padrão-base:
| Objeto | Mínimo em produção | Mínimo em homologação | Medição |
|---|---|---|---|
| errorRate (sistêmico) | < 1% por execução | < 2% | razão 5xx/total por lote |
| frequency | suporta 1+ execução/dia por rotina | idem | agendador do Orquestrador |
Segurança e Privacidade
Os requisitos gerais de segurança e LGPD herdados de todo o Orquestrador estão no Manifesto de Dados (ver Governança Federada). Específico de Integrações:
| ID | Requisito |
|---|---|
| RS-03 | Os dados trafegados contêm PII de estudantes, incluindo menores de idade (LGPD art. 14), docentes e funcionários. Uso exclusivo para as finalidades do contrato; compartilhamento com terceiros é proibido sem aditivo formal. |
| RS-07 | A EdTech deve indicar encarregado/contato de proteção de dados (DPO) e evidenciar controles compatíveis com OWASP ASVS nível 2 ou equivalente quando solicitado. |
| RS-08 | Ao término do contrato, dados pessoais provisionados devem ser devolvidos e/ou eliminados conforme plano de encerramento, com evidência formal. |
Observabilidade
O Orquestrador registra, para cada execução, um log de sumário (totais processados, sucesso, atenção, erro) e logs de detalhe por item. Para que isso funcione, a EdTech deve:
| ID | Requisito |
|---|---|
| RO-01 | Responder por item (não apenas por lote), permitindo contabilizar sucesso/erro individual. |
| RO-02 | Ecoar o identificador de correlação em todas as respostas (ver RC-08). |
| RO-03 | Manter o health check (RI-01) fiel ao estado real da API, não responder saudável durante indisponibilidade parcial das operações principais. |
| RO-04 | Disponibilizar, quando solicitado em diagnóstico conjunto, logs do seu lado correlacionáveis pelo identificador de correlação, com PII mascarada. |
Onboarding
Fases e critérios de aceite para uma nova EdTech se conectar ao Orquestrador.
| Fase | Atividades | Critério de saída |
|---|---|---|
| 1. Alinhamento | Leitura dos requisitos; troca de contatos e canais; instrumentos jurídicos | Papéis e canais registrados |
| 2. Contrato (draft) | Elaboração conjunta do(s) Contrato(s) de Dados no template ODCS; definição de schemas, service levels e lineage | Contrato em draft revisado pelas duas partes |
| 3. Credenciais e homologação | Emissão de credenciais de homologação; exposição dos endpoints; smoke test (health check + ciclo criar/consultar/atualizar/desativar) | Todas as capacidades RI respondendo em homologação |
| 4. Testes de conformidade | Execução da suíte de conformidade: idempotência, erros estruturados, paginação, volumes de carga full/delta, taxonomia de erros | 100% dos requisitos RD/RI/RC verificados; evidências anexadas |
| 5. Homologação conjunta | Ciclo completo com dados de teste; validação de resultados devolvidos; ensaio de rotação de credenciais e de cenário de indisponibilidade | Aceite formal das duas partes; contrato → active |
| 6. Go-live | Credenciais de produção; carga inicial assistida; monitoramento intensivo pelo período acordado | Níveis de serviço atendidos no período de observação |
Checklist de Conformidade
Preenchido pela EdTech e verificado pelo Orquestrador na fase 4 do onboarding. Cada item referencia o requisito correspondente.
| Requisito | Evidência esperada |
|---|---|
| RD-01 a RD-08 (dados) | Payloads de exemplo aceitos/rejeitados |
| RI-01 a RI-12 (interface) | Coleção de testes das APIs + spec OpenAPI |
| RC-01 a RC-09 (comportamento) | Relatório da suíte de conformidade (idempotência, erros) |
| RG-01 a RG-06 (contrato) | Contrato ODCS em draft com todas as seções |
| RN (níveis de serviço) | Valores propostos por ambiente + método de medição |
| RS (segurança/LGPD) | Declaração de conformidade + contato DPO |
| RO-01 a RO-04 (observabilidade) | Exemplos de resposta com correlação e erro por item |
Níveis de serviço (SLA)
Compromissos operacionais da plataforma que sustenta a Partner API.
| Propriedade | Valor | Elemento | Driver | Descrição |
|---|---|---|---|---|
| availability | 99.8 percent | PartnerAPI | operational | Disponibilidade da plataforma Orquestrador (da qual o PENSE faz parte) — fonte: Documentação Técnica do Produto, §8.2. Não há SLA específico e isolado da Partner API ainda; usar este valor de plataforma até que exista um SLA dedicado. |
| timeToNotify | 24 hour | PartnerAPI | regulatory | Prazo para notificação de incidente de segurança — fonte: ANEXO 0 TERMO DE REFERENCIA, item 27.22. |
| timeToRepair | 48 hour | PartnerAPI | regulatory | Prazo para submissão de plano de resposta ao incidente — fonte: ANEXO 0 TERMO DE REFERENCIA, item 27.23; corroborado pela Documentação Técnica, §7.3. |
| rpo | 0 hour | PartnerAPI | operational | TODO — Recovery Point Objective ainda não confirmado com o SESI DN. Valor placeholder, não usar. |
| rto | 0 hour | PartnerAPI | operational | TODO — Recovery Time Objective ainda não confirmado com o SESI DN. Valor placeholder, não usar. |
Canais de suporte
Privacidade, Segurança & Governança
Políticas do contrato de dados que regem como a Partner API trata privacidade, segurança e mudanças.
| Propriedade | Valor |
|---|---|
| Contém PII | true |
| Campos sensíveis | Ver coluna PII de cada tabela de campo no portal e o piiTag de cada propriedade no schema deste contrato — ex. Employee.nationalId (PII-Sensitive), Employee.raceCode/raceDescription (SensitivePersonalData), Employee.birthDate/genderCode (PII), Employee.name/socialName/institutionalEmail/personalEmail/motherName (PII-Direct). |
| Base legal (LGPD) | TODO — confirmar artigo específico da LGPD com o jurídico. ATENÇÃO: desde a reversão de 2026-07-21, este contrato publica dados pessoais sensíveis (LGPD art. 11) — a base legal para esse tratamento específico ainda não foi confirmada e é uma pendência mais urgente do que antes. |
| Princípio de minimização | Revogado em 2026-07-21 por instrução direta do usuário — ver containsPII acima. |
| Política de segurança | Acesso via OAuth2 client_credentials; geração deste contrato roda safety-net de PII recursivo (ver ARCHITECTURE-SPINE.md AD-4) que aborta se qualquer campo bater padrão conhecido de PII. |
| Política de logging | Revertido em 2026-07-21: desde a reversão do princípio de minimização, este contrato tem campos PII/sensíveis (ver containsPII/sensitiveFields acima) e passa a exigir a mesma política de mascaramento em logs já usada no Tier 1 para campos equivalentes (ex. nationalId/raceCode/birthDate). |
| Política de uso de dados | Uso exclusivo por edtechs parceiras autorizadas via OAuth2 client_credentials, para personalização de experiências de aprendizagem — nunca para fins alheios ao propósito pedagógico declarado no cadastro da parceria. |
| Política de backup | Dados são normalizados e servidos sob demanda a partir dos sistemas de origem (TOTVS/Fênix) — este contrato não define política de backup própria, que é responsabilidade dos sistemas de origem internos (Tier 1). |
| Prazo de aviso prévio | P30D |
| Política de mudanças breaking | SemVer-like: MAJOR quebra (remove campo/entidade, muda tipo/obrigatoriedade), MINOR adiciona (campo/entidade novo, compatível), PATCH corrige texto sem mudança estrutural. |
Changelog
Toda mudança de contrato é registrada aqui antes de entrar em produção.
- Lançamento público da Orquestrador Partner API, baseada em um único contrato de dados público (ODCS v3.1.0).
- 12 entidades publicadas:
Student,ClassRoom,Teacher,Enrollment,Discipline,Unit,ClassSectionSubject,AcademicGrade(núcleo),Employee,Role,ProfileeResult.Roleé o catálogo de tipos de perfil/função;Profileé a atribuição de umRolea umEmployeeem umaUnit. Tabelas de campo com colunas de tipo, obrigatoriedade, exemplo, PII, descrição e características, mantidas dinamicamente a partir de um banco de dados próprio (db/).