TF Fiscal
开发文档

DC-e

代电商平台 / 企业开具 DC-e(模型 99,Declaração de Conteúdo Eletrônica):接入流程、Webhook 载荷、错误模型、状态机与联调清单。

能力概述与接入流程

DC-e(模型 99,Declaração de Conteúdo Eletrônica,Ajuste SINIEF 05/2021)是随非纳税人寄件货物流转的电子内容申报单,由电商平台代其发件,或由企业自发。主体注册、证书关联、Webhook 登记与 NF-e 完全共用;资源段沿用文档原文 dc-e,所有单据级操作都挂在 /dc-e/{dceId} 之下。

步骤接口说明
1 注册主体POST /openapi/v2/empresas与 NF-e 相同,新增可选 emissaoDCeemissaoNFeProduto / emissaoDCe 至少传一个,只做 DC-e 可不传 NF-e 块;请求体带 id 即更新
2 关联证书POST /openapi/v1/empresas/{empresaId}/certificadoDigital与 NF-e 相同
3 登记回调POST /openapi/v1/webhooks与 NF-e 相同;DC-e 结果复用同一回调地址
4 发行POST /openapi/v2/empresas/{empresaId}/dc-e受理即返回 200 无内容,异步向 SEFAZ 授权
5 查询GET /openapi/v2/empresas/{empresaId}/dc-e/{dceId}状态、协议、XML / DACE 下载链接、入参回显
6 取消DELETE /openapi/v2/empresas/{empresaId}/dc-e/{dceId}授权后 24 小时内,异步:200 无内容,结果经 Webhook

鉴权与 NF-e 完全相同:请求头 token / timestamp / signsign = MD5(token + path + body + timestamp) 小写十六进制;path/openapi 前缀与路径变量、不含查询串;GET / DELETE 无 body 时取空串;有 body 的 DELETE(取消带理由)按 JSON 原文去 CR/LF 参与签名。参见认证与签名

前提

  • 主体须已审批通过、证书可用(否则 DCe00008)。DC-e 的授权方为 SEFAZ-PR(DC-e 国家门户列出的唯一授权方),任何 UF 的主体都送 PR 授权方。
  • 主体须配置 DC-e 发行参数:emissaoDCe.tipoEmitente 与模型 99 号段(sequencialDCe / serieDCe),缺一即 DCe00004
  • 一期支持两种主体类型:Marketplace(电商平台代非纳税人卖家 / 个人发件)与 OwnIssuer(企业自发)。Carrier 可登记但发行被拒(10019013),待 SVRS 发布新 schema 包后放开。
  • 请求里的 ambiente 必须与主体当前环境一致,否则 DCe00004(文档语义 "not configured for the informed environment")。注册后主体处于认证测试环境Homologacao);切生产是运营动作、不开 API,切换前传 ambiente=Producao 会收到 DCe00004
  • 一期只支持正常发行(tpEmis=1),离线应急二期。

主体注册:emissaoDCe 配置段

注册开票主体请求体新增可选段(其余字段不变):

json
"emissaoDCe": {
"ambienteProducao": {
"tipoEmitente": "Marketplace",
"sequencialDCe": 1,
"serieDCe": "1",
"siteMarketplace": "https://loja.exemplo.com.br"
}
}
字段类型必填说明
tipoEmitentestringMarketplace / OwnIssuer(文档别名 EmissorProprio)/ Carrier(别名 Transportadora,登记可、发行拒)
sequencialDCeinteger起始 nDC(1-999999999),平台从该号起连续取号
serieDCestring系列(0-999,不超过 3 位)
siteMarketplacestringMarketplace 必填平台站点(2-120 字符),进 XML Marketplace/Site 与 DACE
  • 未传 emissaoDCe 的主体不会开通 DC-e:注册仍成功,但响应 dceHabilitado=false,发行时收到 DCe00004。请在注册当场核对该字段。
  • 补开 DC-e、抬高起始号或修正联系信息:带 id 重传注册报文。模型 99 号段只升不降;完整更新规则见注册开票主体

端点

端点用途
发行 DC-ePOST /openapi/v2/empresas/{empresaId}/dc-e,受理返回 HTTP 200 无内容;按 id 幂等
查询 DC-eGET /openapi/v2/empresas/{empresaId}/dc-e/{dceId},状态、协议、下载链接与入参回显
取消 DC-eDELETE /openapi/v2/empresas/{empresaId}/dc-e/{dceId},异步,授权后 24 小时内

Webhook 回调载荷

复用 NF-e 的 Webhook 登记与签名头,回调地址通过注册 Webhook登记。投递请求头:平台签名五头(X-Tffiscal-Event / X-Tffiscal-Event-Id / X-Tffiscal-Delivery-Id / X-Tffiscal-Timestamp / X-Tffiscal-Signature)之外,同时带 tokenx-token 两个同值头(登记 webhook 时的令牌原样回传),接收端校验任一即可。

事件码与兼容载荷(tipo="DC-e",14 个字段顺序固定):

事件码触发dceStatus
dce.authorized授权 100Autorizada
dce.rejectedSEFAZ 驳回或任务终局失败(含单据编号前的失败,此时无 chave)NegadadceMotivoStatuscStat - 原因;终局失败无 cStat 时只有原因)
dce.canceled取消登记成功(135 / 136 / 155)CanceladadceDataAutorizacao 为取消登记时刻、dceNumeroProtocolo 为取消事件协议号)
dce.cancel_rejected取消被 SEFAZ 拒绝或取消任务终局失败CancelamentoNegado(单据仍为已授权,带授权协议号 / 摘要 / XML 链接)

载荷字段

字段类型说明
tipostring固定 DC-e
empresaIdstring主体标识
dceIdstring发行时传入的 id,请以此字段关联回调
dceStatusstringAutorizada / Negada / Cancelada / CancelamentoNegado
dceMotivoStatusstring驳回或取消被拒时为 cStat - xMotivo,终局失败时为失败原因;其余为 null
dceLinkDacestring按 chave 懒渲染的 DACE 链接(授权 / 取消回调);驳回时为 null
dceLinkXmlstringXML 下载链接;无授权 XML 时为 null
dceNumerostringDC-e 号;单据未编号时为 null
dceSeriestringDC-e 系列;单据未编号时为 null
dceChaveAcessostring44 位访问密钥;单据未编号时为 null
dceDataEmissaostring开票时刻;编号前失败时为受理时刻
dceDataAutorizacaostring授权时刻;dce.canceled 中为取消登记时刻;其余为 null
dceNumeroProtocolostring授权协议号;dce.canceled 中为取消事件协议号;驳回时为 null
dceDigestValuestring已授权单据的签名摘要;驳回与 dce.canceled 中为 null

dce.authorized

json
{ "tipo": "DC-e", "empresaId": "1934811222334455", "dceId": "DCe-000012333", "dceStatus": "Autorizada", "dceMotivoStatus": null,
"dceLinkDace": "https://api.v2.tffiscal.com/openapi/files/dace/35260940673061000134990010000000011100000012?token=...", "dceLinkXml": "https://api.v2.tffiscal.com/openapi/files/xml/7?token=...",
"dceNumero": "1", "dceSerie": "1", "dceChaveAcesso": "41260940673061000134990010000000011101234567",
"dceDataEmissao": "2026-09-06T12:00:00Z", "dceDataAutorizacao": "2026-09-06T12:00:03Z",
"dceNumeroProtocolo": "141260000000001", "dceDigestValue": "tasG40Ic6Zh7PIBiLEEH7Hb940Y=" }

dce.rejected

json
{ "tipo": "DC-e", "empresaId": "1934811222334455", "dceId": "DCe-000012333", "dceStatus": "Negada",
"dceMotivoStatus": "225 - Rejeicao: Falha no schema XML", "dceLinkDace": null, "dceLinkXml": null,
"dceNumero": "1", "dceSerie": "1", "dceChaveAcesso": "4126...", "dceDataEmissao": "2026-09-06T12:00:00Z",
"dceDataAutorizacao": null, "dceNumeroProtocolo": null, "dceDigestValue": null }

单据编号前失败(主体未配置 DC-e / 号段缺失 / 报文映射失败等终局失败,单据未编号、无 chave):同样收到 dce.rejected,单据事实字段为 nulldceMotivoStatus 为失败原因,dceDataEmissao 为受理时刻。请以 dceId 关联,不要假定 dceChaveAcesso 一定有值:

json
{ "tipo": "DC-e", "empresaId": "1934811222334455", "dceId": "DCe-000012333", "dceStatus": "Negada",
"dceMotivoStatus": "Empresa não configurada para emissão de DC-e", "dceLinkDace": null, "dceLinkXml": null,
"dceNumero": null, "dceSerie": null, "dceChaveAcesso": null, "dceDataEmissao": "2026-09-06T12:00:00Z",
"dceDataAutorizacao": null, "dceNumeroProtocolo": null, "dceDigestValue": null }

dce.canceled

json
{ "tipo": "DC-e", "empresaId": "1934811222334455", "dceId": "DCe-000012333", "dceStatus": "Cancelada", "dceMotivoStatus": null,
"dceLinkDace": "https://.../openapi/files/dace/35260940673061000134990010000000011100000012?token=...", "dceLinkXml": "https://.../openapi/files/xml/7?token=...",
"dceNumero": "1", "dceSerie": "1", "dceChaveAcesso": "4126...", "dceDataEmissao": "2026-09-06T12:00:00Z",
"dceDataAutorizacao": "2026-09-06T15:00:00Z", "dceNumeroProtocolo": "141260000000099", "dceDigestValue": null }

dce.cancel_rejected

json
{ "tipo": "DC-e", "empresaId": "1934811222334455", "dceId": "DCe-000012333", "dceStatus": "CancelamentoNegado",
"dceMotivoStatus": "594 - Rejeicao: O numero de sequencia do evento informado e maior que o permitido",
"dceLinkDace": null, "dceLinkXml": "https://.../openapi/files/xml/7?token=...", "dceNumero": "1", "dceSerie": "1",
"dceChaveAcesso": "4126...", "dceDataEmissao": "2026-09-06T12:00:00Z", "dceDataAutorizacao": null,
"dceNumeroProtocolo": "141260000000001", "dceDigestValue": "tasG40Ic6Zh7PIBiLEEH7Hb940Y=" }

dceLinkDace 在授权 / 取消回调里为按 chave 懒渲染的 DACE 链接(投递时刻不渲染,首次下载才渲染归档);两个链接与查询接口同形(/openapi/files/{kind}/{ref}?token=…),有效期取租户级设置(缺省 7 天)。参见文件下载

错误模型

错误形状与 NF-e 相同:业务错误为 [{ "codigo", "mensagem" }](HTTP 400;单据 / 任务不存在 HTTP 404,codigoDCe0001),鉴权层错误为平台信封(401 / 403 / 429,见认证与签名)。文档给出示例码的情形沿用文档码值,其余 codigo 为平台错误码数字串,mensagem 随请求语言本地化(葡语为文档原文)。

codigoHTTP场景处置
DCe0001404dceId 不存在、非本主体,或取消时单据尚未物化核对 id 与 empresaId;Pendente 单据待授权后再取消
10003000404empresaId 不存在核对 empresaId
DCe00004400主体未配置 DC-e 发行(缺 tipoEmitente / 模型 99 号段 / Marketplace 站点),或 ambiente 与主体当前环境不一致注册时传 emissaoDCe 或带 id 更新补配;按主体当前环境提交,切生产联系运营
DCe00005 / DCe00006 / DCe00007400Marketplace / Carrier 主体未传 remetente / remetente.endereco 缺失 / 巴西发件方缺 cpfCnpj补发件方信息
DCe00008400主体不可发行(未审批 / 证书未就绪)等待审批 / 关联证书
DCe00009400巴西收件方缺 cpfCnpj补收件方证件
GW001400市政 IBGE 码不存在或与 uf 不一致核对 cidade / uf
10019005 / 10019006400同请求并发重复 / 该 CNPJ 待处理任务超限稍后重试
10019007400号段无法确定(多个启用号段)联系运营收敛号段
10019013400主体类型 Carrier 当前不支持发行改用 Marketplace / OwnIssuer 主体
1001901810019022400明细不合法 / 枚举或格式非法 / 承运商 CNPJ 不合法 / 附加信息超长 / autorizacaoDownloadXml 不合法按 mensagem 修正
10019030 / 10019031400id 报文不同 / 生产环境同 id 已有在途或已授权单据换 id 或沿用原报文 / 查询原单
10019040 / 10019041 / 10019042 / 10019043400状态不允许取消 / 超 24 小时窗口 / 取消已受理 / 理由不合法取消 DC-e
10019048400dataEmissao 超出允许窗口(超前 > 5 分钟或回溯 > 30 天)改用当前时刻或省略 dataEmissao
10001001400请求字段校验失败(每字段一条);注册 / 更新契约错误按 mensagem 修正

各端点的错误码清单见发行 DC-e查询 DC-e取消 DC-e。发行阶段的 SEFAZ 驳回不走 HTTP 错误,而是查询结果 Negada + Webhook dce.rejected;取消阶段的 SEFAZ 拒绝同理走 dce.cancel_rejected

状态机

text
受理(POST 200)─→ Pendente ─取号 + 送 SEFAZ─┬─ cStat 100 ─→ Autorizada ─DELETE 200─→ CancelamentoPendente ─┬─ 135/136/155 ─→ Cancelada
│ └─ SEFAZ 拒绝 ─→ Autorizada(Webhook CancelamentoNegado)
├─ 其他终局 cStat ─→ Negada
└─ 参数无法解析 / 重投超限 ─→ Falha(可同 id 重提)
  • Pendente 期间 SEFAZ 瘫痪(108 / 109)由平台退避重试,一期无应急改道;重复发行(451 / 452 / 539)由平台先查采认。
  • Negada / Falha 后同一 id 可重新提交(按新报文重开);Autorizada 后同一 id 再提交只会命中幂等。

注意事项

  • chave 的 CNPJ 是平台主体:第 7-20 位永远是授权发行方(Marketplace 主体或自发企业)的 CNPJ,CPF 发件人只出现在 XML 的 emit 组与 DACE 的 REMETENTE 块。
  • 认证测试环境收件人名固定tpAmb=2 时 XML 与 DACE 的收件人名为 DCE EMITIDA EM AMBIENTE DE HOMOLOGACAO(SEFAZ 校验 598),查询回显仍为原文。
  • 24 小时取消窗口:自授权时刻起算,超时只能保留单据;DC-e 官方只有取消事件,没有更正信函与作废号段。
  • Carrier 暂不支持:当前官方 schema 的 tpEmit 只允许 Marketplace / 企业自发,承运商主体登记后发行会被 10019013 拒绝。
  • DACE:A4 纵向,按需渲染并缓存;取消后重渲染带 CANCELADA 水印;认证测试环境带 SEM VALOR FISCAL - HOMOLOGAÇÃO 水印。
  • 授权方:全部 UF 的 DC-e 送 SEFAZ-PR 授权方,二维码指向 https://www.fazenda.pr.gov.br/dce/qrcode?chDCe={chave}&tpAmb={tpAmb}

联调清单

  1. 认证测试环境完成主体注册(带 emissaoDCe,确认响应 dceHabilitado=true)、证书关联、Webhook 登记(收端同时接受 token / x-token)。
  2. 发行一张最小 DC-e(发行 DC-e页面的示例),查询到 Autorizada,下载 XML 与 DACE,收到 dce.authorized 回调。
  3. id 重发一次,确认返回 200 且未产生第二张单据;改一条明细重发,确认 10019030
  4. 取消单据,确认 200 无内容、查询到 CancelamentoPendenteCancelada,收到 dce.canceled 回调,DACE 带水印。
  5. 对已取消单据再次取消,确认 10019040;对不存在的 id 查询,确认 404 DCe0001
  6. 故意传错(ambiente=Producaocidade=9999999、缺 remetente),确认收到 400 错误数组且码值为 DCe00004 / GW001 / DCe00005
  7. 对未开通 DC-e 的主体发行,确认 DCe00004;带 id 重传注册报文把 sequencialDCe 抬高,确认 200 且后续单据从新号起;再传更小的号,确认 400 10001001