Pular para o conteúdo
Docs

Quickstart: primeira emissão pela API no sandbox

Atualizado em

Nesta página

Em quatro chamadas você emite uma NFS-e no sandbox da Emitra: sem certificado, sem Sefin e sem consumir cota. Depois é só trocar a chave para produção.

Antes de começar#

  • Uma conta na Emitra com o papel owner ou admin (só eles criam chaves).
  • curl, Python 3.10+, Node.js 18+ ou PHP 8.1+.

1. Crie uma chave de teste#

  1. No painel, abra Notas › Automação › Integrações › Chaves de API.
  2. Clique em Nova chave, escolha o ambiente Teste e marque os escopos customers:write, nfse:emit e nfse:read.
  3. Copie a chave. Ela aparece uma única vez e começa com emt_test_.

Guarde a chave numa variável de ambiente:

Terminal
export EMITRA_API_KEY="emt_test_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

2. Cadastre um tomador#

cURL
curl https://emitra.com.br/api/v1/integracao/tomadores \
  -H "Authorization: Bearer $EMITRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo_pessoa": "PJ",
    "documento": "11444777000161",
    "nome": "Padaria Silva Ltda",
    "email": "financeiro@padariasilva.com.br",
    "endereco": {
      "logradouro": "Rua das Flores", "numero": "100", "bairro": "Centro",
      "cep": "01001000", "municipio_ibge": "3550308", "uf": "SP"
    }
  }'

A resposta traz o id do tomador: 5f0c2a8e-1b7d-4c3e-9a51-2d6e8f4b7c10.

3. Emita a nota#

A emissão exige o header Idempotency-Key. Se a conexão cair e você reenviar a mesma requisição com a mesma chave, a Emitra devolve a resposta original em vez de criar outra nota.

cURL
curl https://emitra.com.br/api/v1/integracao/nfse \
  -H "Authorization: Bearer $EMITRA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-2026-11-0001" \
  -d '{
    "tomador_id": "5f0c2a8e-1b7d-4c3e-9a51-2d6e8f4b7c10",
    "competencia": "2026-11-10",
    "servico": {
      "codigo_tributacao_nacional": "010601",
      "descricao": "Consultoria em tecnologia da informação - novembro/2026",
      "valor": "1500.00"
    },
    "external_ref": "pedido-2026-11-0001"
  }'
Resposta 202
{
  "status": "success",
  "message": "DPS recebida e enfileirada",
  "data": {
    "id": "3c9b7e1a-6d42-4f8e-a0b3-7e2f5d1c9a84",
    "status": "queued",
    "external_ref": "pedido-2026-11-0001",
    "is_test": true,
    "created_at": "2026-11-11T10:15:30-03:00"
  }
}

Note que o valor vai como string decimal ("1500.00"), nunca como número de ponto flutuante.

4. Acompanhe o status#

A emissão é assíncrona. Consulte a nota até o status sair de queued/signed/sent:

cURL
curl https://emitra.com.br/api/v1/integracao/nfse/3c9b7e1a-6d42-4f8e-a0b3-7e2f5d1c9a84 \
  -H "Authorization: Bearer $EMITRA_API_KEY"
Resposta 200 (trecho)
{
  "status": "success",
  "message": "Operação realizada com sucesso",
  "data": {
    "id": "3c9b7e1a-6d42-4f8e-a0b3-7e2f5d1c9a84",
    "status": "authorized",
    "numero_nfse": "42",
    "chave_acesso": "35503082211222333000181000000000004226114829130573",
    "ambiente": "sandbox",
    "is_test": true
  }
}

Quer ver uma rejeição? No sandbox, emita com um valor terminado em .13 (ex.: "1500.13"). A tabela completa está em Sandbox e números mágicos.

5. Vá para produção#

  1. Envie o certificado A1 e ajuste a configuração fiscal.
  2. Crie uma chave Produção (emt_live_) com os mesmos escopos.
  3. Troque a variável EMITRA_API_KEY. A URL base é a mesma.

Próximos passos#

Esta página foi útil?