TF Fiscal
开发文档

发票邮件

保存邮件模板

新建集成商的邮件模板或整份覆盖已有模板;保存时校验变量与 HTML。

POST/openapi/v2/emails/templates
需要 token、timestamp、sign 三个签名头,参见认证与签名。

模板属于集成商而不属于某个主体:任何已注册主体都能用任何模板。不传 templateId 即新建;传了就替换整份模板。主题与正文可用 {{变量}},发送时用票的数据填充;变量名清单取决于 tipoDocumento,见页底枚举。模板与发送的关系见发票邮件。

请求体

templateId*
覆盖时必填。
string模板标识
tipoDocumento*
string发票类型
idioma*
string模板语言
nome*
string模板名
assunto*
string主题模板
corpoHtml*
string正文模板
padrao
bool是否默认模板
ativo
bool是否启用

* 必填字段

200
模板已保存,整份返回并带该类型允许的变量清单。
templateId
string模板标识
tipoDocumento
string发票类型
idioma
string模板语言
nome
string模板名
assunto
string主题模板
corpoHtml
string正文模板
padrao
bool是否默认模板
ativo
bool是否启用
variaveisDisponiveis
array可用变量清单
criadoEm
string创建时间
atualizadoEm
string更新时间

模板属于集成商,所有主体共用。同一发票类型可以有多份,例如每种语言一份;padrao 为 true 的那份在发送不传 templateId 时使用。保存即校验:变量不在白名单返回 10021003,HTML 超出白名单返回 10021004,消息会点名是哪一处。

最简模板

葡语 NF-e 模板:主题带票号与开票主体,正文有问候、摘要和 PDF 链接。不传 padrao 与 ativo:模板启用但不是默认。

json
{
"tipoDocumento": "NFe",
"idioma": "pt",
"nome": "NF-e simples",
"assunto": "Nota fiscal {{numero}} - {{emitente.nome}}",
"corpoHtml": "<p>Olá {{cliente.nome}},</p><p>Segue a nota fiscal {{numero}} emitida por {{emitente.nome}} em {{dataEmissao}}, no valor de R$ {{valorTotal}}.</p><p><a href='{{linkPdf}}'>Baixar DANFE (PDF)</a></p>"
}
tipoDocumento*
string发票类型
idioma*
string模板语言
nome*
string模板名
assunto*
string主题模板
corpoHtml*
string正文模板

* 必填字段

带 logo 与按钮的模板

葡语 NFS-e 模板并标为默认:页眉放 https 图片,表格用到 NFS-e 专属变量,两个按钮分别指向 {{linkPdf}} 与 {{linkXml}}。图片只能引用公网 https 地址,平台不提供上传。

json
{
"tipoDocumento": "NFSe",
"idioma": "pt",
"nome": "NFS-e com logotipo",
"assunto": "Nota Fiscal de Serviço nº {{numero}} - {{emitente.nome}}",
"corpoHtml": "<div style='background:#f3f4f6;padding:24px 0;font-family:Arial,Helvetica,sans-serif;color:#1f2937'><div style='max-width:640px;margin:0 auto;background:#ffffff;border-radius:12px;overflow:hidden;border:1px solid #e5e7eb'><div style='padding:20px 28px;border-bottom:1px solid #e5e7eb'><img src='https://v2.tffiscal.com/logo.png' alt='TF Fiscal' width='160' style='display:block;height:auto;border:0'></div><div style='padding:24px 28px'><h2 style='margin:0 0 16px;color:#1a56db;font-size:20px'>Nota Fiscal de Serviço nº {{numero}}</h2><p>Olá <strong>{{cliente.nome}}</strong>,</p><p>Segue a nota fiscal de serviço emitida por <strong>{{emitente.nome}}</strong> (CNPJ {{emitente.cnpj}}) em {{dataEmissao}}.</p><table style='border-collapse:collapse;width:100%;font-size:14px'><tbody><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb;width:40%'>Número / Série</td><td style='padding:8px;border:1px solid #e5e7eb'>{{numero}} / {{serie}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>Serviço</td><td style='padding:8px;border:1px solid #e5e7eb'>{{descricaoServico}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>Valor total</td><td style='padding:8px;border:1px solid #e5e7eb'>R$ {{valorTotal}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>ISS</td><td style='padding:8px;border:1px solid #e5e7eb'>R$ {{valorIss}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>Município</td><td style='padding:8px;border:1px solid #e5e7eb'>{{municipio}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>Chave de acesso</td><td style='padding:8px;border:1px solid #e5e7eb;font-family:monospace;font-size:12px'>{{chaveAcesso}}</td></tr></tbody></table><p style='margin-top:20px'><a href='{{linkPdf}}' style='display:inline-block;padding:10px 18px;background:#1a56db;color:#ffffff;text-decoration:none;border-radius:6px;font-weight:bold'>Baixar DANFSe (PDF)</a>&nbsp;&nbsp;<a href='{{linkXml}}' style='display:inline-block;padding:10px 18px;border:1px solid #1a56db;color:#1a56db;text-decoration:none;border-radius:6px;font-weight:bold'>Baixar XML</a></p></div><div style='padding:16px 28px;background:#f9fafb;color:#6b7280;font-size:12px;border-top:1px solid #e5e7eb'>E-mail automático enviado pela plataforma TF Fiscal. Em caso de dúvidas, responda a este e-mail.</div></div></div>",
"padrao": true
}
tipoDocumento*
string发票类型
idioma*
string模板语言
nome*
string模板名
assunto*
string主题模板
corpoHtml*
string正文模板
padrao
bool是否默认模板

* 必填字段

按发票类型的专属变量

英文 CT-e 模板,用到 remetente.nome、destinatario.nome 与 valorFrete。这三个名字只在 CTe 存在,放进 NFe 模板会被 10021003 拒绝。idioma 为 en 时金额格式为 1,234.56,日期为 yyyy-MM-dd HH:mm。

json
{
"tipoDocumento": "CTe",
"idioma": "en",
"nome": "CT-e english",
"assunto": "Transport document {{numero}} from {{emitente.nome}}",
"corpoHtml": "<p>Hello {{cliente.nome}},</p><p>Transport document {{numero}} issued by {{emitente.nome}} on {{dataEmissao}}.</p><ul><li>Sender: {{remetente.nome}}</li><li>Recipient: {{destinatario.nome}}</li><li>Freight: R$ {{valorFrete}}</li></ul><p><a href='{{linkPdf}}'>Download DACTE (PDF)</a> | <a href='{{linkXml}}'>Download XML</a></p>"
}
tipoDocumento*
string发票类型
idioma*
string模板语言
nome*
string模板名
assunto*
string主题模板
corpoHtml*
string正文模板

* 必填字段

整份覆盖并停用

传 templateId 时请求体替换整份模板:所有字段都要重传。可选字段不传就回到缺省,所以覆盖默认模板时不带 padrao = true 它就不再是默认。这里同时用 ativo = false 停用;停用的模板一定不是默认。

json
{
"templateId": "2103150000000000001",
"tipoDocumento": "NFe",
"idioma": "pt",
"nome": "NF-e simples (antigo)",
"assunto": "Nota fiscal {{numero}} - {{emitente.nome}}",
"corpoHtml": "<p>Olá {{cliente.nome}},</p><p>Segue a nota fiscal {{numero}} emitida por {{emitente.nome}} em {{dataEmissao}}, no valor de R$ {{valorTotal}}.</p><p><a href='{{linkPdf}}'>Baixar DANFE (PDF)</a></p>",
"ativo": false
}
templateId*
string模板标识
tipoDocumento*
string发票类型
idioma*
string模板语言
nome*
string模板名
assunto*
string主题模板
corpoHtml*
string正文模板
ativo
bool是否启用

* 必填字段