TF Fiscal
Documentação

E-mail de notas

Enviar e-mail da nota

Aceita o envio de uma nota autorizada por e-mail ao cliente; a entrega é assíncrona.

POST/openapi/v2/empresas/{empresaId}/emails
Requer os cabeçalhos de assinatura token, timestamp e sign, veja Autenticação.

Manda uma nota já autorizada (NF-e, NFS-e, CT-e ou DC-e) por e-mail, com o corpo do modelo e, se pedido, o PDF e o XML anexos. A chamada é assíncrona: HTTP 200 devolve o emailId e o status de aceitação; o resultado chega por email.sent / email.failed ou pela consulta. id é a chave de idempotência; enquanto um e-mail da mesma nota está em andamento, outro envio responde 409. A nota só é enviada quando você chama este endpoint: nada sai automaticamente na autorização.

Parâmetros de caminho

empresaId*
stringIdentificador da empresa

* Campo obrigatório

Corpo da requisição

id*
stringIdentificador da requisição
tipoDocumento*
stringTipo de documento
documentoId*
stringIdentificador da nota
templateId
stringIdentificador do modelo
enviarPdf*
boolAnexar PDF
enviarXml*
boolAnexar XML
destinatarios
arrayDestinatários

* Campo obrigatório

200
Recibo de aceitação. Guarde o emailId para a consulta; acompanhe o resultado pelo webhook ou pela consulta.
emailId
stringIdentificador do e-mail
id
stringIdentificador da requisição
status
stringStatus na aceitação
tipoDocumento
stringTipo de documento
documentoId
stringIdentificador da nota
templateId
stringModelo usado
destinatarios
arrayDestinatários efetivos
anexos
arrayAnexos pedidos

O HTTP 200 é só a aceitação: o e-mail é montado e enviado depois, por uma tarefa da plataforma. O remetente é o endereço da plataforma (não dá para usar o seu domínio); o nome exibido é a razão social da empresa e o responder-para é o e-mail cadastrado da empresa. O resultado chega por email.sent / email.failed (assinatura explícita, veja Registrar webhook) ou pela consulta.

Só o corpo e o XML

NFS-e com modelo escolhido e destinatário informado; enviarPdf = false evita gerar o DANFSe. O XML anexo se chama NFSe-{chave}.xml.

json
{
"id": "mail-nfse-000123",
"tipoDocumento": "NFSe",
"documentoId": "PED-20260918-001",
"templateId": "2103150000000000002",
"enviarPdf": false,
"enviarXml": true,
"destinatarios": ["financeiro@cliente.com.br"]
}
id*
stringIdentificador da requisição
tipoDocumento*
stringTipo de documento
documentoId*
stringIdentificador da nota
templateId
stringIdentificador do modelo
enviarPdf*
boolAnexar PDF
enviarXml*
boolAnexar XML
destinatarios
arrayDestinatários

* Campo obrigatório

PDF e XML para o e-mail da nota

Sem destinatarios a plataforma usa o e-mail do cliente informado na emissão; só NF-e e NFS-e o têm, CT-e e DC-e exigem destinatarios. Sem templateId usa o modelo padrão do tipo. Se o PDF ou o XML ainda não estiver disponível, o e-mail espera em Aguardando em vez de sair incompleto.

json
{
"id": "email-pedido-8842-1",
"tipoDocumento": "NFe",
"documentoId": "pedido-8842",
"enviarPdf": true,
"enviarXml": true
}
id*
stringIdentificador da requisição
tipoDocumento*
stringTipo de documento
documentoId*
stringIdentificador da nota
enviarPdf*
boolAnexar PDF
enviarXml*
boolAnexar XML

* Campo obrigatório

NFS-e de São Paulo aguardando a chave

A NFS-e do sistema municipal de São Paulo recebe a chave de 50 dígitos depois, pelo ambiente nacional. Enquanto ela não chega, o envio é aceito como Aguardando com motivoEspera = chaveAcesso e reconferido a cada 30 segundos, por até 120 minutos; passado esse prazo vira Falha e motivoFalha diz o que faltou. A resposta abaixo é a da aceitação.

json
{
"emailId": "2103160000000000002",
"id": "mail-sp-000045",
"status": "Aguardando",
"tipoDocumento": "NFSe",
"documentoId": "SP-20260928-045",
"templateId": "2103150000000000002",
"destinatarios": ["financeiro@cliente.com.br"],
"anexos": ["pdf", "xml"]
}
status*
stringStatus na aceitação

* Campo obrigatório

Mesma nota em andamento: 409

Enquanto um e-mail da mesma nota (mesma empresa, tipoDocumento e documentoId) não chega a Enviado ou Falha, um novo envio com outro id é recusado com HTTP 409 e 10021015; a mensagem traz o emailId e o status do e-mail em andamento. Espere o callback ou consulte, e então reenvie com um id novo.

json
[
{
"codigo": "10021015",
"mensagem": "O e-mail anterior desta nota ainda não foi concluído: emailId=2103160000000000001 status=Enfileirado"
}
]

Reenvio idempotente

Repetir uma chamada com o mesmo id (na mesma empresa) devolve o resultado original sem criar outro e-mail, mesmo que o corpo seja diferente; status reflete o estado atual. Para mandar de novo a mesma nota use um id novo depois do estado terminal.

json
{
"emailId": "2103160000000000001",
"id": "email-pedido-8842-1",
"status": "Enviado",
"tipoDocumento": "NFe",
"documentoId": "pedido-8842",
"templateId": "2103150000000000001",
"destinatarios": ["comprador@exemplo.com"],
"anexos": ["pdf", "xml"]
}
status*
stringStatus na aceitação

* Campo obrigatório