Multitenancy
Arquitetura B2B2B da Engine API. Como Partners gerenciam múltiplos CNPJs com isolamento completo de dados.
Multitenancy
A Engine API foi projetada como uma plataforma B2B2B (Business-to-Business-to-Business). Isso significa que você, como Software House, integra a Engine API na sua plataforma e oferece emissão fiscal para seus clientes finais. Sem que eles saibam que a Engine API existe.
Hierarquia de dados
Partner
Sua Software House. Uma conta, múltiplos CNPJs. Autenticação via API Key.
Issuer
Cada CNPJ do seu cliente. Certificado A1 próprio, dados isolados.
Documents
Notas, boletos e documentos. Cada um vinculado a um Issuer específico.
Isolamento de dados
Cada Issuer opera em isolamento completo:
| Aspecto | Isolamento | |---------|-----------| | Certificado digital | Cada Issuer tem seu próprio A1, encriptado em repouso | | Documentos fiscais | NFe, CTe, etc. são vinculados ao Issuer. Impossível acessar de outro | | Configurações | Regime tributário, série, ambiente (produção/homologação) são independentes | | DFe | Consulta ao SEFAZ Nacional filtrada por CNPJ do Issuer |
Um Partner com 500 Issuers tem garantia de que o Issuer A nunca acessa dados do Issuer B, mesmo usando a mesma API Key. O isolamento é enforced no backend por filtros automáticos.
Fluxo típico de onboarding
Criar conta de Partner
Registre-se no dashboard ou via API. Você recebe credenciais de acesso.
POST /v1/auth/register-partner
Gerar API Key
Crie uma API Key para integração server-to-server.
POST /v1/auth/api-keys
Cadastrar Issuers
Para cada CNPJ do seu cliente, crie um Issuer:
const empresa = await client.companies.criar({
cnpj: '11222333000144',
razaoSocial: 'Cliente Final Ltda',
regime: 'SIMPLES',
endereco: { ... },
});
Upload de certificado
Envie o certificado A1 (.pfx) do cliente:
await client.companies.uploadCertificado(empresa.data.id, {
certificado: certBuffer,
senha: 'senha-do-pfx',
});
Emitir documentos
Pronto. Use o issuerId em qualquer emissão:
await client.nfe.emitir({
emitente: { issuerId: empresa.data.id },
...
});
Gerenciando múltiplos CNPJs
Listar todos os Issuers
const empresas = await client.companies.listar();
empresas.data.forEach(emp => {
console.log(`${emp.cnpj} | ${emp.razaoSocial} (${emp.regime})`);
});
Emitir para um Issuer específico
O issuerId é o campo que determina qual CNPJ emite o documento:
// NFe para o Issuer A
await client.nfe.emitir({ emitente: { issuerId: 'ISSUER_A_UUID' }, ... });
// DFe do Issuer C
await client.dfe.consultar({ issuerId: 'ISSUER_C_UUID' });
Certificados independentes
Cada Issuer precisa do seu próprio certificado A1:
// Upload para Issuer A
await client.companies.uploadCertificado('ISSUER_A_UUID', { ... });
// Upload para Issuer B (certificado diferente)
await client.companies.uploadCertificado('ISSUER_B_UUID', { ... });
Limites por plano
| Plano | CNPJs (Issuers) | Documentos/mês | API calls/min | |-------|----------------|----------------|--------------| | Dev | 1 | Sandbox ilimitado | 5 | | Starter | 3 | 500 | 60 | | Growth | 15 | 3.000 | 300 | | Scale | Ilimitados | 10.000 | 600 | | Enterprise | Ilimitados | Ilimitado | Ilimitado |
Para planos Enterprise com necessidades específicas, entre em contato pelo email suporte@engineapi.com.br.