NFS-e emitida pelo seu código

API REST para empresas Ext. Você manda valor e descrição — a Ext resolve competência, tributação, certificado, XML assinado e o PDF da nota.

  • Emissor Nacional
  • Certificado custodiado
  • PDF e XML
# valor em CENTAVOS: R$ 1.250,50 = 125050
# reference: o id da fatura no seu sistema — reencontra a nota e recusa a segunda
# cnae: opcional — sem ele a nota sai na atividade principal da empresa
curl -X POST https://api.extcontabilidade.com.br/v1/nfse \
  -H "Authorization: Bearer $EXT_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "amount_in_cents": 125050,
    "description": "Licenciamento de uso da plataforma — plano mensal",
    "customer": { "document": "12345678000190" },
    "reference": "INV-2026-0042",
    "cnae": "6202300"
  }'

Da liberação à primeira nota

Só o primeiro passo depende de nós.

01

Peça a liberação

A API entra em parte dos planos. O suporte confirma o seu e libera a empresa.

02

Gere a chave

Em Minha conta → API, de produção ou de teste. Ela aparece uma única vez.

03

Emita

Authorization: Bearer ext_sk_… e um POST em /v1/nfse. Comece pela chave de teste — o código é o mesmo.

Superfície

A superfície inteira, e o contrato

POST/v1/nfseEmite uma NFS-e. Responde 202 com Location e Retry-After. Chave de teste responde livemode: false.
GET/v1/nfse?reference=Busca a nota pela SUA referência. A query é obrigatória — não é listagem. Devolve um envelope de lista com no máximo uma nota; sem resultado, 200 com data vazio.
GET/v1/nfse/{id}Consulta a nota inteira, incluindo o erro.
GET/v1/activitiesLista as atividades em que a empresa pode emitir — o cnae e o service_code que o POST aceita.
POST/v1/nfse/{id}/cancelCancela a nota, dentro do mês da emissão. Responde 202 — acompanhe o objeto cancellation. É irreversível: não repita o POST.
GET/v1/nfse/{id}/pdfBaixa o PDF da nota (DANFSe).
GET/v1/nfse/{id}/xmlBaixa o XML autorizado.
Campo a campo na referência

O contrato em formato de máquina

Gerados do código a cada montagem, sem chave para ler. Aponte o seu agente ou o gerador de cliente para eles, não para esta página.

Do POST à nota

Você manda o essencial. A Ext faz o resto.

amount_in_cents e description. Competência, tributação, certificado, XML assinado e PDF da nota ficam fora do seu backend — é o mesmo pipeline que já emite as suas notas.

01

Antes de emitir

A Ext resolve o que a nota declara

  • Tributação pelo CNAE

    O código de tributação da nota sai do CNAE — o principal da empresa, ou o que você mandar em cnae.

  • Alíquota calculada

    A efetiva do Simples Nacional, pelo faturamento dos últimos 12 meses. Optante não destaca ISS na nota: ele é apurado no imposto mensal.

  • Município pelo cadastro

    Cidade e UF viram código IBGE contra a tabela oficial dos 5.571 municípios.

  • Tomador pelo CNPJ

    Mande só o documento — o nome sai do cadastro. Ou omita customer: sai nota sem destinatário.

02

Na emissão

A DPS é montada, assinada e transmitida

  • Certificado no cofre

    O e-CNPJ assina o XML e faz o TLS mútuo com o SEFIN. Sem upload, sem senha no seu código.

  • XML assinado

    DPS 1.01 na ordem do XSD, assinada com XMLDSig/RSA-SHA256 e transmitida ao Emissor Nacional.

  • Sequencial sem colisão

    O número da DPS é reservado atomicamente por empresa.

03

Depois de autorizada

O que a nota disponibiliza

  • PDF da nota (DANFSe)

    Gerado do XML autorizado, com o QR code oficial. Vem como bytes na resposta, não como link.

  • XML autorizado e access_key

    Os dois saem pela API assim que a nota chega a issued.

  • A mesma nota do painel

    A mesma entidade da tela: aparece na sua lista e aceita cancelar, substituir e baixar. A de teste também, marcada e com prazo, em coleção separada — fora de faturamento e imposto.

MCP

A mesma API, no seu agente

/v1/mcp é um servidor MCP: as operações desta página publicadas como ferramentas. A chave é a que você já tem, e o catálogo sai do mesmo contrato — rota nova na API vira ferramenta sem release do seu lado.

  • issue_nfse

    Emite a nota. Devolve o mesmo 202 do POST — o agente consulta antes de anunciar que saiu.

  • get_nfse

    Consulta a nota inteira pelo id, incluindo o erro quando houver.

  • find_nfse_by_reference

    Reencontra a nota pela sua referência, sem guardar o id da Ext.

  • cancel_nfse

    Cancela a nota, dentro do mês da emissão. É irreversível.

  • list_activities

    Lista as atividades em que a empresa pode emitir.

claude mcp add --transport http --scope user ext \
  https://api.extcontabilidade.com.br/v1/mcp \
  --header "Authorization: Bearer SUA_CHAVE"

Roda no terminal. Com --scope user o conector vale em qualquer diretório, não só no atual.

Onde isso conecta hoje

Em clientes que aceitam header de autenticação — os cinco das abas acima. Claude na web, no celular e o ChatGPT só instalam conector por OAuth, que ainda não publicamos: até lá, a conexão é local.

As regras fiscais antes de integrar

Nenhuma delas se desfaz com um retry.

ext_sk_live_ emite na primeira chamada

Documento fiscal já no primeiro POST, sem confirmação e sem desfazer. Integre com ext_sk_test_ (mesmo código, livemode: false) e vá a produção trocando a variável de ambiente.

A competência é sempre o mês corrente

Competência é o mês fiscal da nota, e você não a envia: é a data da chamada. Não há emissão retroativa — mês fechado obrigaria a retificar a declaração daquele mês, e o SEFIN rebaixa em silêncio competência posterior à emissão.

Cancelamento é pela API, só no mês da emissão

A janela é o mês-calendário da emissão: nota de 31/07 percebida em 01/08 já está fora. Dentro dela, POST /v1/nfse/{id}/cancel; fora dela, é o suporte. Substituir continua fora do v1 — só pelo painel ou pelo suporte.

Sem ISS retido e sem MEI

O ISS sai sempre como não retido, e o regime vem do cadastro da empresa. Operação com retenção na fonte, ou empresa MEI, não sai representada corretamente.

Exportação de serviço pede o payload dela

Serviço prestado ao exterior sai por aqui, mas só quando declarado: customer.type "foreign", com o endereço completo do tomador, a identificação fiscal dele (ou o motivo da ausência) e o valor na moeda do faturamento. Sem isso a nota é tratada como doméstica — e a divergência só aparece na apuração.

failed e indeterminate pedem ações opostas

Em failed nada foi emitido: corrigir e reemitir é seguro. Em indeterminate pode existir NFS-e autorizada na prefeitura sem registro aqui — nunca reemita automaticamente, porque nota em duplicidade só se desfaz com cancelamento formal, e cancelamento tem prazo.

O suporte é pelos canais que você já usa com a Ext.

Perguntas de quem vai integrar

O que costuma aparecer antes da primeira chamada — e depois dela.

Preciso ser cliente da Ext para usar a API?

Sim. A emissão usa o certificado e-CNPJ que a Ext custodia e a habilitação da empresa no Emissor Nacional — os dois só existem para quem já é cliente. Não é um gateway aberto de notas.

Como consigo uma chave?

A API entra em parte dos planos, e quem confirma e libera a empresa é o suporte. Liberada, você cria e revoga as chaves em Minha conta → API, escolhendo produção (ext_sk_live_) ou teste (ext_sk_test_).

São até cinco chaves ativas por modo, não cinco no total. A chave aparece uma única vez, na criação.

Dá para entregar o contrato ao meu agente de IA?

Dá, e é o caminho recomendado: os três arquivos são gerados do próprio código a cada montagem, então não envelhecem como um trecho copiado desta página.

llms.txt traz o resumo na convenção llmstxt.org; llms-full.txt traz campo a campo, operação a operação; openapi.json é o documento OpenAPI 3.1 completo, que também abre em Postman, Insomnia ou num gerador de cliente.

Os três são públicos e não exigem chave para ler.

Tem cobrança por nota emitida pela API?

Não. A emissão pela API é benefício do plano: contabilizada, não cobrada. Nenhuma quota bloqueia emissão — barrar a nota de um serviço prestado atrapalharia uma obrigação sua.

A nota emitida pela API entra na minha apuração?

Entra, pelo mesmo caminho de qualquer NFS-e sua — é a mesma nota que a Ext emitiria pela tela. Ela é capturada do ambiente nacional e alimenta a sua apuração de impostos junto com as demais, sem nada a fazer do seu lado.

Qual é o suporte?

Pelos canais que você já usa com a Ext. Ao abrir chamado, cite o request_id: ele vem no corpo de toda falha e no header Request-Id das rotas de /v1/nfse, e é o que localiza a requisição exata nos nossos logs.

Pronto para a primeira chamada?

A referência é aberta, sem cadastro.