engineAPIengine·API

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

PartnerSoftware House · API KeyIssuer A11.111.111/0001-11Issuer B22.222.222/0001-22+N Issuers33.333.333/0001-33NFeNFCeNFSeCTeMDFeNFeNFCeNFSeCTeMDFeCada Issuer = 1 CNPJ com certificado A1 próprio · dados isolados por tenant🔒 Isolamento total — Issuer A não acessa dados do Issuer B
handshake

Partner

Sua Software House. Uma conta, múltiplos CNPJs. Autenticação via API Key.

building

Issuer

Cada CNPJ do seu cliente. Certificado A1 próprio, dados isolados.

file-invoice

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.

bash
POST /v1/auth/register-partner
·

Gerar API Key

Crie uma API Key para integração server-to-server.

bash
POST /v1/auth/api-keys
·

Cadastrar Issuers

Para cada CNPJ do seu cliente, crie um Issuer:

typescript
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:

typescript
await client.companies.uploadCertificado(empresa.data.id, {
  certificado: certBuffer,
  senha: 'senha-do-pfx',
});
·

Emitir documentos

Pronto. Use o issuerId em qualquer emissão:

typescript
await client.nfe.emitir({
  emitente: { issuerId: empresa.data.id },
  ...
});

Gerenciando múltiplos CNPJs

Listar todos os Issuers

typescript
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:

typescript
// 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:

typescript
// 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.


Próximos passos