Quickstart
Siga os 4 passos abaixo. Tempo estimado: 5 minutos .
Precisa testar sem afetar produção? Use "environment": 2 na empresa emissora para emitir em homologação SEFAZ .
Crie sua conta de parceiro
Registre sua software house na Engine API. curl -X POST https://api.engineapi.com.br/auth/register-partner \
-H "Content-Type: application/json" \
-d '{
"name": "Minha Software House",
"email": "dev@minhaempresa.com",
"password": "senhaSegura123"
}'
const response = await fetch ( 'https://api.engineapi.com.br/auth/register-partner' , {
method: 'POST' ,
headers: { 'Content-Type' : 'application/json' },
body: JSON . stringify ({
name: 'Minha Software House' ,
email: 'dev@minhaempresa.com' ,
password: 'senhaSegura123' ,
}),
});
const { token } = await response . json ();
// Guarde este token — você vai usá-lo nos próximos passos
import httpx
resp = httpx.post( 'https://api.engineapi.com.br/auth/register-partner' , json = {
'name' : 'Minha Software House' ,
'email' : 'dev@minhaempresa.com' ,
'password' : 'senhaSegura123' ,
})
token = resp.json()[ 'token' ]
Guarde o token retornado. Você vai precisar dele em todas as chamadas da API.
Cadastre uma empresa emissora
Registre o CNPJ que vai emitir os documentos fiscais. Cada empresa tem seu próprio issuerId. curl -X POST https://api.engineapi.com.br/companies \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cnpj": "11222333000144",
"name": "Empresa Exemplo Ltda",
"tradeName": "Exemplo",
"ie": "123456789",
"taxRegime": 1,
"environment": 2,
"address": {
"street": "Rua Exemplo",
"number": "100",
"district": "Centro",
"city": "São Paulo",
"cityCode": "3550308",
"state": "SP",
"zipCode": "01001000"
}
}'
const resp = await fetch ( 'https://api.engineapi.com.br/companies' , {
method: 'POST' ,
headers: {
'Authorization' : `Bearer ${ token } ` ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({
cnpj: '11222333000144' ,
name: 'Empresa Exemplo Ltda' ,
tradeName: 'Exemplo' ,
ie: '123456789' ,
taxRegime: 1 , // 1=Lucro Real, 3=Simples Nacional
environment: 2 , // 2=Homologação, 1=Produção
address: {
street: 'Rua Exemplo' , number: '100' ,
district: 'Centro' , city: 'São Paulo' ,
cityCode: '3550308' , state: 'SP' , zipCode: '01001000' ,
},
}),
});
const { id : issuerId } = await resp . json ();
resp = httpx.post( 'https://api.engineapi.com.br/companies' ,
headers = { 'Authorization' : f 'Bearer { token } ' },
json = {
'cnpj' : '11222333000144' ,
'name' : 'Empresa Exemplo Ltda' ,
'tradeName' : 'Exemplo' ,
'ie' : '123456789' ,
'taxRegime' : 1 ,
'environment' : 2 ,
'address' : {
'street' : 'Rua Exemplo' , 'number' : '100' ,
'district' : 'Centro' , 'city' : 'São Paulo' ,
'cityCode' : '3550308' , 'state' : 'SP' , 'zipCode' : '01001000' ,
},
},
)
issuer_id = resp.json()[ 'id' ]
Campo Valores taxRegime1 = Lucro Real, 2 = Lucro Presumido, 3 = Simples Nacionalenvironment1 = Produção, 2 = Homologação (SEFAZ de teste)
Faça upload do certificado digital
Envie o certificado .pfx (A1) da empresa emissora. Ele será criptografado e armazenado com segurança. curl -X POST https://api.engineapi.com.br/companies/ISSUER_ID/certificate \
-H "Authorization: Bearer SEU_TOKEN" \
-F "certificate=@certificado.pfx" \
-F "password=senhaDoCertificado"
import { readFileSync } from 'fs' ;
const form = new FormData ();
form . append ( 'certificate' , new Blob ([ readFileSync ( 'certificado.pfx' )]));
form . append ( 'password' , 'senhaDoCertificado' );
await fetch ( `https://api.engineapi.com.br/companies/ ${ issuerId } /certificate` , {
method: 'POST' ,
headers: { 'Authorization' : `Bearer ${ token } ` },
body: form ,
});
with open ( 'certificado.pfx' , 'rb' ) as f:
resp = httpx.post(
f 'https://api.engineapi.com.br/companies/ { issuer_id } /certificate' ,
headers = { 'Authorization' : f 'Bearer { token } ' },
files = { 'certificate' : ( 'cert.pfx' , f, 'application/x-pkcs12' )},
data = { 'password' : 'senhaDoCertificado' },
)
Não tem certificado digital para testes? Em homologação, você pode usar um certificado de teste emitido por qualquer AC (Autoridade Certificadora) habilitada. Veja nosso guia de certificados .
Emita sua primeira NFe
Com issuerId e certificado configurados, emita a nota. curl -X POST https://api.engineapi.com.br/nfe/emitir \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"issuerId": "ISSUER_ID",
"naturezaOperacao": "VENDA DE MERCADORIA",
"destinatario": {
"cnpj": "99888777000155",
"nome": "Cliente Exemplo SA",
"endereco": {
"logradouro": "Av Brasil", "numero": "500",
"bairro": "Centro", "codigoMunicipio": "3550308",
"municipio": "São Paulo", "uf": "SP", "cep": "01001000"
},
"indicadorIE": 1
},
"itens": [{
"numero": 1,
"codigo": "PROD001",
"descricao": "Produto Teste",
"ncm": "84713012",
"cfop": "5102",
"unidade": "UN",
"quantidade": 2,
"valorUnitario": 150.00,
"valorTotal": 300.00,
"icms": { "origem": 0, "cst": "00", "aliquota": 18, "baseCalculo": 300.00, "valor": 54.00 }
}],
"pagamento": { "forma": "01", "valor": 300.00 }
}'
const resp = await fetch ( 'https://api.engineapi.com.br/nfe/emitir' , {
method: 'POST' ,
headers: {
'Authorization' : `Bearer ${ token } ` ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({
issuerId ,
naturezaOperacao: 'VENDA DE MERCADORIA' ,
destinatario: {
cnpj: '99888777000155' ,
nome: 'Cliente Exemplo SA' ,
endereco: {
logradouro: 'Av Brasil' , numero: '500' ,
bairro: 'Centro' , codigoMunicipio: '3550308' ,
municipio: 'São Paulo' , uf: 'SP' , cep: '01001000' ,
},
indicadorIE: 1 ,
},
itens: [{
numero: 1 , codigo: 'PROD001' , descricao: 'Produto Teste' ,
ncm: '84713012' , cfop: '5102' , unidade: 'UN' ,
quantidade: 2 , valorUnitario: 150.00 , valorTotal: 300.00 ,
icms: { origem: 0 , cst: '00' , aliquota: 18 , baseCalculo: 300.00 , valor: 54.00 },
}],
pagamento: { forma: '01' , valor: 300.00 },
}),
});
const { invoice } = await resp . json ();
console . log ( 'NFe autorizada:' , invoice . accessKey );
resp = httpx.post( 'https://api.engineapi.com.br/nfe/emitir' ,
headers = { 'Authorization' : f 'Bearer { token } ' },
json = {
'issuerId' : issuer_id,
'naturezaOperacao' : 'VENDA DE MERCADORIA' ,
'destinatario' : {
'cnpj' : '99888777000155' ,
'nome' : 'Cliente Exemplo SA' ,
'endereco' : {
'logradouro' : 'Av Brasil' , 'numero' : '500' ,
'bairro' : 'Centro' , 'codigoMunicipio' : '3550308' ,
'municipio' : 'São Paulo' , 'uf' : 'SP' , 'cep' : '01001000' ,
},
'indicadorIE' : 1 ,
},
'itens' : [{
'numero' : 1 , 'codigo' : 'PROD001' , 'descricao' : 'Produto Teste' ,
'ncm' : '84713012' , 'cfop' : '5102' , 'unidade' : 'UN' ,
'quantidade' : 2 , 'valorUnitario' : 150.00 , 'valorTotal' : 300.00 ,
'icms' : { 'origem' : 0 , 'cst' : '00' , 'aliquota' : 18 , 'baseCalculo' : 300.00 , 'valor' : 54.00 },
}],
'pagamento' : { 'forma' : '01' , 'valor' : 300.00 },
},
)
invoice = resp.json()[ 'invoice' ]
print ( f "NFe autorizada: { invoice[ 'accessKey' ] } " )
{
"success" : true ,
"invoice" : {
"id" : "3fa85f64-5717-4562-b3fc-2c963f66afa6" ,
"accessKey" : "35260211222333000144550010000000011000000019" ,
"number" : 1 ,
"series" : 1 ,
"status" : "AUTHORIZED" ,
"danfeUrl" : "/nfe/3fa85f64.../danfe"
}
}
🎉 Pronto! Sua primeira nota fiscal foi emitida e autorizada pelo SEFAZ.
Próximos passos
Autenticação JWT, API Keys e multi-tenancy explicados
Primeira Emissão Todos os campos obrigatórios detalhados
Webhooks Notificações em tempo real de cada evento