Portal do Parceiro
O Portal do Parceiro é onde você cria a sua conta de desenvolvedor, registra os apps que integram com a To Aqui Escola e gerencia as credenciais de cada um. Todo app começa no sandbox, um ambiente com dados de demonstração, e só acessa escolas reais depois de aprovado pela equipe To Aqui e liberado por cada cliente.
Do cadastro à produção
O caminho de uma integração nova tem seis etapas. As três primeiras você faz sozinho, em minutos; as demais dependem de aprovação.
-
1
Crie a conta
Cadastre-se no portal e confirme o e-mail. O acesso ao painel só é liberado depois da confirmação.
-
2
Crie um app
Cada integração é um app, com chaves, conexões, webhooks e logs próprios. O app nasce no status Sandbox.
-
3
Teste no sandbox
Na aba Credenciais, gere uma chave toaqui_test_… e chame a API com a escola de demonstração. Nada do que você faz ali chega à produção.
-
4
Peça a aprovação para produção
Na aba Visão geral, descreva como o app usa a API: quais dados lê e grava, com que frequência, quem são os usuários finais e como os dados de alunos são protegidos (LGPD). A equipe To Aqui revisa cada app e você recebe a decisão por e-mail.
-
5
Peça acesso a cada cliente
Aprovado o app, informe na aba Clientes o CNPJ de uma escola do cliente que contratou a sua integração. A equipe To Aqui confirma com o cliente e libera o acesso.
-
6
Gere o token da conexão
Com o acesso liberado, gere uma chave toaqui_live_… e o token da conexão com aquele cliente. A partir daí o app chama a API com os dados reais da escola.
Sandbox e produção
O sandbox é uma instância separada da To Aqui Escola, com banco de dados, filas e arquivos próprios, em
https://sandbox.toakiescola.com.br.
Chaves de teste só funcionam lá; chaves de produção só funcionam em produção. Os endpoints e o formato das
respostas são os mesmos nos dois.
| Sandbox | Produção | |
|---|---|---|
| Endereço da API | https://sandbox.toakiescola.com.br/api/v1 |
https://toakiescola.com.br/api/v1 |
| X-Partner | toaqui_test_… |
toaqui_live_…, disponível após a aprovação do app |
| X-Client | Slug de um dos clientes de teste do app, mostrado na aba Credenciais | Slug do cliente, mostrado na aba Clientes |
| X-Authorization | Token desse cliente de teste, mostrado na aba Credenciais | Token da conexão com o cliente (toaqui_conn_…) |
| Dados | Uma rede privada e uma pública (SEDUC) só do app, cada uma com uma escola cheia de dados de demonstração | Somente os clientes que liberaram o app |
| Efeitos externos | Nada sai do sandbox: e-mails, SMS, WhatsApp e push vão para a Caixa de saída; cobranças e assinaturas são simuladas. Só os webhooks chegam ao seu endpoint de teste | Os mesmos de uma ação feita na própria To Aqui |
| Limite | 60 requisições por minuto | 300 requisições por minuto, ajustável por app na aprovação |
| Webhooks | Endpoint de teste do app, para tudo o que acontece nos clientes de teste: chamadas à API, ações no sistema e rotinas automáticas | Endpoint de produção do app |
| Sistema web | Você entra como a rede de ensino (botão "Entrar no sandbox") e cadastra o que quiser, inclusive novos usuários | — |
- Toda resposta traz o cabeçalho
X-ToAqui-Environment(testoulive) e os cabeçalhosX-RateLimit-*. O limite é contado por app e por ambiente. - Na aba Credenciais, crie o cliente de teste da rede privada e/ou da rede pública (SEDUC). Cada um vem com uma escola, o Colégio Demonstração, com dados em todos os módulos da referência da API: turmas, alunos, responsáveis, professores, notas, frequência, diário, conselho de classe, ocorrências, fotos e os módulos de ERP (financeiro, CRM e RH só na rede privada).
- O quadro Dados de teste de cada cliente traz um valor pronto para cada parâmetro dos endpoints (CNPJ, turma, matrícula, CPF, aula, nota…) e o ID de um registro de cada recurso endereçado por
{id}. - Os clientes de teste são só do seu app: nenhum outro parceiro os vê, e os dados ficam como você deixou. Para voltar ao estado inicial, use "Recriar dados" — o cliente é apagado e criado de novo, com novo
X-Client,X-Authorizatione login. - No sandbox, pagamentos e assinaturas eletrônicas são simulados: o link de uma cobrança abre uma página onde você "paga" (PIX, boleto ou cartão), e o link de assinatura abre uma página onde você "assina". A escola recebe a confirmação como receberia em produção, e os webhooks correspondentes são enviados.
- Uma chave de teste usada em produção recebe
403com"code": "SANDBOX_HOST"e o endereço do sandbox.
Primeira chamada no sandbox
Com uma chave de teste e o slug e o token de um cliente de teste copiados da aba Credenciais, liste as escolas desse cliente no sandbox:
-H "X-Partner: toaqui_test_{sua_chave}" \
-H "X-Client: {slug_do_cliente_de_teste}" \
-H "X-Authorization: {token_do_cliente_de_teste}"
use GuzzleHttp\Client; $client = new Client(); $response = $client->get('https://sandbox.toakiescola.com.br/api/v1/partners/schools/all', [ 'headers' => [ 'X-Partner' => 'toaqui_test_{sua_chave}', 'X-Client' => '{slug_do_cliente_de_teste}', 'X-Authorization' => '{token_do_cliente_de_teste}', ], ]); $environment = $response->getHeaderLine('X-ToAqui-Environment'); // "test"
const response = await fetch('https://sandbox.toakiescola.com.br/api/v1/partners/schools/all', { headers: { 'X-Partner': 'toaqui_test_{sua_chave}', 'X-Client': '{slug_do_cliente_de_teste}', 'X-Authorization': '{token_do_cliente_de_teste}', }, }); const environment = response.headers.get('X-ToAqui-Environment'); // "test"
Para ir à produção, troque os três valores: a chave toaqui_live_…,
o slug do cliente e o token da conexão, ambos mostrados na aba Clientes. O código da integração não muda.
Status do app
Chaves de teste funcionam em qualquer status, exceto quando o app está suspenso. Chaves de produção só funcionam com o app em Produção.
Status inicial. Só chaves de teste, só dados de demonstração.
A equipe To Aqui está revisando o pedido de aprovação. Continue testando no sandbox enquanto isso.
Aprovado. O app pode gerar chaves toaqui_live_… e pedir acesso a clientes.
A revisão foi recusada, com o motivo informado no portal. Ajuste o app e peça uma nova revisão.
Um app, ou a conta inteira do desenvolvedor, pode ser suspenso pela equipe To Aqui. Enquanto
estiver suspenso, todas as chaves respondem 403,
inclusive as de teste.
Chaves e tokens
Exibidos uma única vez
Chaves, tokens de conexão e o segredo de webhooks aparecem só no momento em que são gerados. A To Aqui guarda apenas um hash. Se perder um valor, gere outro.
Até 5 chaves por ambiente
Use chaves separadas por servidor ou ambiente seu (homologação, produção) e dê um nome a cada uma, para saber qual revogar se uma vazar.
Rotação sem indisponibilidade
Rotacionar gera uma chave nova e mantém a antiga funcionando por mais 24 horas, tempo para você publicar a troca. Revogar desativa a chave na hora.
Token de conexão
Existe um token por cliente conectado. Gerar um novo token invalida o anterior imediatamente. Remover a conexão revoga o acesso àquele cliente na hora.
Prefixos detectáveis
Os prefixos toaqui_test_, toaqui_live_ e toaqui_conn_ permitem que scanners de segredos identifiquem um valor vazado em um repositório. Nunca coloque credenciais no código do app.
Excluir o app
Revoga todas as chaves e conexões do app de uma vez. Não pode ser desfeito.
Erros de acesso
Além dos erros gerais da API, requisições feitas com chaves do portal podem receber:
| Status | Mensagem | O que fazer |
|---|---|---|
400 |
Missing required headers. | Envie X-Client e X-Authorization junto com a chave. |
401 |
Invalid or revoked API key. | A chave foi digitada errado, revogada ou expirou após uma rotação. Gere uma nova. |
401 |
Unauthorized. | X-Client e X-Authorization não correspondem. Em produção, confira se o token é da conexão com esse cliente e se não foi substituído. |
403 |
This app is still under review for production. … | O app está Em análise. Use uma chave de teste até a aprovação. |
403 |
This app is not approved for production. … | Chave toaqui_live_ num app que não está em Produção. Peça a revisão no portal. |
403 |
This app is suspended. … | O app ou a conta foi suspenso. Fale com o suporte To Aqui. |
429 |
Too Many Attempts. | Limite por minuto excedido. Aguarde o tempo indicado em Retry-After. |
503 |
The sandbox environment is unavailable. … | O sandbox está em manutenção ou sendo recriado. Tente de novo em alguns minutos. |
/v1/partner-portal/account-recovery
Recuperação de acesso (2FA)
Perdeu o aplicativo autenticador? Na tela de recuperação do Portal do Parceiro, uma das formas de provar que a
conta é sua é chamar este endpoint a partir do servidor onde a sua integração guarda a chave do app. O portal mostra
um desafio (rec_…); envie-o com a chave no cabeçalho
X-Partner — só ele, sem
X-Client nem
X-Authorization. Assim a chave nunca passa pelo navegador.
- A chave precisa ser de um app da mesma conta que está sendo recuperada.
- Se a conta tem chaves de produção, use uma chave
toaqui_live_. - Limite de 10 tentativas por minuto por IP. Depois da confirmação, volte ao portal para concluir a recuperação.
Códigos de resposta
200
Chave confirmada.
401
Chave inválida ou revogada.
403
O app da chave está suspenso ou não aprovado para produção.
422
Desafio inválido, expirado ou de outra conta — ou a conta exige uma chave de produção.
429
Muitas tentativas — aguarde um minuto.
-X POST \
-H "X-Partner: toaqui_live_…" \
-H "Content-Type: application/json" \
-d '{"challenge":"rec_…"}'
$client->post('https://toakiescola.com.br/api/v1/partner-portal/account-recovery', [ 'headers' => ['X-Partner' => getenv('TOAQUI_KEY')], 'json' => ['challenge' => 'rec_…'], ]);
await fetch('https://toakiescola.com.br/api/v1/partner-portal/account-recovery', { method: 'POST', headers: { 'X-Partner': process.env.TOAQUI_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify({ challenge: 'rec_…' }), });
{ "success": true, "message": "API key confirmed. Go back to the Portal do Parceiro to follow your recovery request." }
{ "success": false, "message": "Invalid or expired recovery challenge." }
Webhooks e logs
Webhooks
Cada app configura um endpoint de teste e um de produção, escolhe os eventos que quer receber (nenhum selecionado equivale a todos), envia eventos de teste e reenvia entregas. As entregas são assinadas no padrão Standard Webhooks.
Como validar a assinatura →Logs de requisições
A aba Logs lista toda chamada feita com as chaves do app nos últimos 30 dias: método, caminho, status, duração, ambiente e IP, com filtros por ambiente, resultado e caminho. Corpos de requisição e resposta não são guardados.