Sim, dá para emitir NFS-e por API sem certificado A1 ou A3. O padrão nacional da NFS-e aceita que a empresa entre no Emissor Nacional com o CNPJ e uma senha, e é com essas credenciais que o emissaoja emite. Para integrar, você precisa de uma chave de API e do CNPJ e da senha do portal de cada cliente; o certificado só volta a ser necessário em cidades fora do padrão nacional.
Por que funciona sem certificado
O Emissor Nacional é o portal do governo onde MEI e empresas do Simples Nacional emitem NFS-e nos municípios que adotaram o padrão nacional. Nele a empresa escolhe como entrar: com certificado digital ou com CNPJ e senha. Para o fisco as duas formas valem o mesmo, e a nota sai com a mesma validade.
O emissaoja usa a segunda forma. O seu sistema manda os dados da nota para a API, o emissaoja monta o documento no padrão nacional, entra no portal com as credenciais da empresa e devolve número, chave de acesso, PDF e XML. Não há certificado no caminho porque o padrão não o exige para esse acesso.
A primeira nota no sandbox
O sandbox em https://sandbox.emissaoja.com.br é o mesmo emissaoja ligado a um Emissor Nacional simulado: nada existe no fisco e nada é cobrado. Crie a conta com o Google, gere uma chave ej_test_ em Conta → API e conecte uma empresa de exemplo.
# Conectar a empresa de exemplo (MEI pronto para emitir); a senha pode ser qualquer uma
curl -X PUT https://sandbox.emissaoja.com.br/v1/empresa/credencial \
-H "Authorization: Bearer ej_test_SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"cnpj":"11111111000191","senha":"qualquer"}'
# Criar o tomador pelo CNPJ (nome e endereço vêm da Receita)
curl -X POST https://sandbox.emissaoja.com.br/v1/tomadores \
-H "Authorization: Bearer ej_test_SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"documento":"12345678000195"}'
Com o id do tomador em mãos, a emissão é uma chamada:
curl -X POST https://sandbox.emissaoja.com.br/v1/notas \
-H "Authorization: Bearer ej_test_SUA_CHAVE" \
-H "Idempotency-Key: pedido-2026-10-0001" \
-H "Content-Type: application/json" \
-d '{"tomador_tipo":"pj","tomador_id":"<id do tomador>","valor":1500,"descricao":"Consultoria de outubro"}'
A resposta é 202 com um pedido. Acompanhe em GET /v1/emissoes/{id} até o estado virar autorizada, recusada ou incerta; a resposta final traz numero, chave_acesso e o par nota: { origem, id } que baixa o PDF em GET /v1/notas/{origem}/{id}/pdf. O Idempotency-Key é obrigatório: repetir a mesma chave devolve o mesmo pedido, nunca uma segunda nota. Campos, códigos de erro e os valores com significado no sandbox (13,13, 77,77 e 99,99) estão em /docs/.
O que você precisa do cliente
Cada conta do emissaoja tem uma empresa, e cada empresa precisa de:
- CNPJ e senha do Emissor Nacional. O emissaoja confere a senha no portal antes de guardar. Durante a verificação ela fica só na memória do servidor; depois, cifrada no motor fiscal. Ela nunca aparece em resposta nem em log, e encerrar a conta a apaga. Para não bloquear a conta do cliente no portal, são no máximo 3 tentativas com falha por CNPJ a cada 24 horas.
- Consentimento. Os termos de uso pedem que quem conecta a empresa tenha poderes para isso. Se você integra em nome de clientes, formalize essa autorização com cada um antes de pedir a senha.
- Guarda da chave de API. A chave vale para a empresa e o plano da conta; quem a tem emite em nome da empresa. Guarde no servidor, nunca em navegador ou app de celular. Uma conta aceita até 5 chaves ativas, e revogar uma vale na hora.
- Uma conta por empresa. Para vários clientes, uma conta Google e uma chave por CNPJ. Cada CNPJ só pode estar ativo em uma conta.
O plano Grátis dá 1 nota por mês por empresa, sem cartão. Os pagos vão de 5 notas (R$ 19,90) a ilimitado (R$ 199,90) por mês. Nota recusada não conta no limite.
Com certificado x sem certificado
| APIs com certificado | emissaoja (sem certificado) | |
|---|---|---|
| Onboarding | Emitir o A1 ou A3, exportar, enviar o .pfx e a senha dele à API | CNPJ e senha do Emissor Nacional; a verificação leva segundos |
| Custo do certificado | Anual, pago a uma autoridade certificadora | Zero: não há certificado |
| Renovação | Todo ano ou a cada 3 anos, com nota parada se vencer | Não há vencimento; só a senha do portal, que o cliente controla |
| Quem pode usar | Qualquer empresa com certificado | MEI, ME e EPP do Simples Nacional, em um município |
| Cobertura | Padrão nacional e sistemas municipais próprios | Só municípios no padrão nacional (Emissor Nacional) |
| Senha do portal | Não é necessária | Necessária, conferida e cifrada |
Quando o certificado ainda é necessário
O certificado continua obrigatório quando a prefeitura do seu cliente emite pelo sistema próprio, e não pelo Emissor Nacional. Também fica fora do emissaoja quem não é optante do Simples Nacional, quem emite em mais de um município e quem tem CNPJ com letras. Isenção, imunidade e exportação não são atendidas. A lista em /emitir-nfse/ mostra as cidades que emitem pelo Emissor Nacional, e /como/preciso-de-certificado-digital explica o caso de quem emite sozinho.
Para entender o padrão por trás da API, leia /api-nfse-nacional. Se preferir emitir conversando com um assistente, veja /emitir-nota-fiscal-por-ia.
Perguntas frequentes
A nota emitida com senha vale o mesmo que com certificado?
Sim. Quem autoriza a nota é o Emissor Nacional, e ele aceita as duas formas de acesso. O número, a chave de acesso, o PDF e o XML são os mesmos.
O cliente precisa trocar a senha do portal depois de conectar?
Não. A senha fica cifrada e só é usada quando você pede uma emissão. Se o cliente trocar a senha, o estado da credencial muda e GET /v1/empresa/credencial devolve proximo_passo: "corrigir_senha"; basta enviar a nova em PUT /v1/empresa/credencial.
Posso integrar vários clientes numa chave só?
Não. Uma conta tem uma empresa e as chaves daquela conta emitem só para ela. Para cada cliente, crie uma conta, conecte o CNPJ e gere a chave. Isso isola a senha e o plano de cada empresa.
Tem webhook para saber quando a nota foi autorizada?
Ainda não. Acompanhe o pedido em GET /v1/emissoes/{id} respeitando o proxima_consulta_ms da resposta. Webhooks assinados estão no plano.