Pular para o conteúdo
emitzadocs

Começando

Este guia leva você da chave de teste até a primeira NF-e autorizada em homologação, sem valor fiscal. Tudo aqui acontece no sandbox: nada vale como nota de verdade, e nada é cobrado.

1. Use a chave de teste no endereço do sandbox

Ao contratar a emitza você recebe duas chaves:

Chave Endereço Para quê
fsk_test_... https://api-sandbox.emitza.com.br Integração e testes. Emite só em homologação.
fsk_live_... https://api.emitza.com.br Produção, notas com valor fiscal.

Cada chave só funciona no seu endereço. Envie a chave no cabeçalho Authorization e confira:

Terminal
curl https://api-sandbox.emitza.com.br/v1/me \
  -H "Authorization: Bearer $EMITZA_KEY"

A resposta traz "mode": "test". Guarde a chave numa variável de ambiente ou num cofre de segredos, nunca no código.

2. Cadastre a empresa emitente

POST /v1/companies
{
  "cnpj": "11222333000181",
  "ie": "110042490114",
  "crt": 1,
  "legalName": "Calçados Exemplo Indústria Ltda",
  "address": {
    "street": "Rua das Indústrias", "number": "100", "district": "Distrito Industrial",
    "cityName": "Franca", "cityCode": "3516200", "uf": "SP", "zip": "14406000"
  }
}

crt é o regime: 1 Simples Nacional, 2 Simples com excesso de sublimite, 3 regime normal (Presumido ou Real), 4 MEI. cityCode é o código IBGE do município. A resposta traz o id da empresa: é o companyId de todas as emissões.

3. Envie o certificado digital A1

A SEFAZ só aceita nota assinada com o e-CNPJ da empresa. Envie o arquivo .pfx em base64 com a senha:

Terminal
curl -X PUT https://api-sandbox.emitza.com.br/v1/companies/$COMPANY_ID/certificate \
  -H "Authorization: Bearer $EMITZA_KEY" -H "Content-Type: application/json" \
  -d "{\"pfxBase64\": \"$(base64 -w0 empresa.pfx)\", \"password\": \"$PFX_PASSWORD\"}"

A emitza confere se o certificado é do mesmo CNPJ, se está dentro da validade e se é da ICP-Brasil, e guarda o arquivo cifrado. A senha não fica guardada em texto. Antes de vencer, você recebe os webhooks certificate.expiring (30, 15 e 7 dias antes).

4. Cadastre a série da NF-e

POST /v1/companies/{id}/nfe-series
{ "number": 1, "next": 1 }

Se a empresa já emitia por outro sistema, use uma série nova ou informe em next o próximo número que ainda não foi usado.

5. Emita a NF-e

POST /v1/nfe
{
  "externalId": "pedido-1234",
  "companyId": "6710a1b2c3d4e5f601234567",
  "operation": "sale",
  "natureOfOperation": "Venda de produção do estabelecimento",
  "recipient": {
    "cnpj": "11444777000161",
    "name": "Loja Exemplo Comércio de Calçados Ltda",
    "ieIndicator": "1",
    "ie": "123456785004",
    "address": {
      "street": "Avenida Paulista", "number": "1000", "district": "Bela Vista",
      "cityName": "São Paulo", "cityCode": "3550308", "uf": "SP", "zip": "01310100"
    }
  },
  "items": [{
    "code": "BOT-COURO-38", "description": "Bota de couro nº 38", "ncm": "64039190",
    "origin": "0", "cfop": "5101", "unit": "PAR", "quantity": "10", "unitPrice": "129.90",
    "taxes": { "icms": { "csosn": "101", "creditRate": "1.25" }, "pis": { "cst": "49" }, "cofins": { "cst": "49" } }
  }],
  "transport": { "mode": "9" },
  "payments": [{ "method": "17" }]
}

A resposta chega na hora, com status 202 e "status": "queued". A emitza calcula os impostos (o IBS/CBS inclusive), monta o XML, assina e envia à SEFAZ em segundo plano. Valores decimais vão sempre em texto, com ponto: "129.90".

6. Acompanhe o resultado

Consulte a nota até ela sair de queued, sending ou pending:

Terminal
curl https://api-sandbox.emitza.com.br/v1/nfe/$NFE_ID -H "Authorization: Bearer $EMITZA_KEY"

Em poucos segundos ela fica authorized, com accessKey (a chave de acesso de 44 dígitos) e protocol. Daí:

Em vez de consultar, prefira receber o resultado por webhook.

Próximos passos

Esta página em Markdown, para IA: index.md