Ir para o conteúdo principal

Quickstart

Da API Key à primeira NFS-e em menos de 5 minutos.

1

Crie sua conta e obtenha a API Key

Acesse o cadastro, envie seu certificado A1 e copie a API Key gerada — ela é exibida apenas uma vez.

⚠️ Guarde sua chave em um gerenciador de segredos (ex.: variável de ambiente). Nunca comite no código.

Prefira testar primeiro? Use o sandbox público com a chave sk_test_sandbox_demo — sem cadastro.

2

Emita sua primeira nota

Faça um POST /v1/nfse. A API responde com 202 Accepted— o processamento na Receita Federal é assíncrono.

curl -X POST https://api.emitirnotafacil.com.br/v1/nfse \
  -H "Authorization: Bearer sk_live_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "servico": {
      "codigo_nbs": "01.01.01.10",
      "discriminacao": "Desenvolvimento de software",
      "valor": 1500.00,
      "aliquota_iss": 2.0
    },
    "tomador": {
      "tipo": "PJ",
      "documento": "12345678000190",
      "razao_social": "Empresa Cliente LTDA",
      "email": "financeiro@empresa.com"
    },
    "competencia": "2026-04",
    "webhook_url": "https://seu-erp.com/webhooks/nfse"
  }'

Resposta esperada:

{
  "nota_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "PROCESSANDO",
  "mensagem": "Nota enviada para processamento"
}
3

Verifique o status

Consulte o status com o nota_id recebido. Em poucos segundos (ou minutos, dependendo da Receita) o status muda para AUTORIZADA.

curl https://api.emitirnotafacil.com.br/v1/nfse/NOTA_ID \
  -H "Authorization: Bearer sk_live_SUA_CHAVE"

Quando autorizada:

{
  "id": "550e8400-...",
  "status": "AUTORIZADA",
  "numero_nfse": "000123",
  "codigo_verificacao": "ABC12345",
  "emitida_em": "2026-04-26T14:30:00Z"
}
4

Configure um webhook

Em vez de fazer polling, passe um webhook_url na emissão. A API entrega o resultado assim que a Receita responde. Valide a assinatura HMAC para garantir autenticidade:

import crypto from 'crypto'

function verifyWebhook(rawBody: string, signature: string, secret: string): boolean {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex')
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))
}

// No handler do webhook:
app.post('/webhooks/nfse', (req, res) => {
  const sig = req.headers['x-nota-signature'] as string
  const raw = req.rawBody // body cru (não parseado)

  if (!verifyWebhook(raw, sig, process.env.WEBHOOK_SECRET!)) {
    return res.status(401).send('Assinatura inválida')
  }

  const { event, nota_id, status } = req.body
  console.log(`Nota ${nota_id}: ${event} → ${status}`)
  res.sendStatus(200)
})

Veja o guia completo em Webhooks →

5

Vá para produção

Troque a chave sk_test_ pela sk_live_ gerada no cadastro. A URL base é a mesma. Veja as diferenças em Ambientes →

✓ Checklist de produção disponível em docs/deploy-checklist.md no repositório.