TF Fiscal
开发文档

CT-e

代承运人开具 CT-e(模型 57,公路模态):接入流程、端点、Webhook 载荷、错误模型、支持范围与联调清单。

概述

CT-e 接口代承运人开具电子运输单据(CT-e,模型 57,公路模态),并支持查询状态、取消,以及登记授权后事件(信函更正、交付凭证、交付失败、服务不符)。主体注册、证书关联、Webhook 注册与 NF-e 完全共用,本文只引用不重复。

路径规范:资源段按单据大类 cte,所有单据级操作都挂在 /openapi/v2/empresas/{empresaId}/cte/{cteId} 之下,其中 cteId 就是发行时传入的 id

接入流程

步骤接口说明
1 注册主体注册主体与 NF-e 相同,承运人也是一个主体
2 关联证书关联证书与 NF-e 相同
3 登记回调注册 Webhook与 NF-e 相同;CT-e 结果复用同一回调地址
4 发行发行 CT-e受理即返回,异步向 SEFAZ 授权
5 查询查询 CT-e状态、票面、XML / DACTE 下载链接、事件列表
6 取消取消 CT-e授权后 168 小时内
7 事件见下方端点表信函更正 / 交付凭证 / 交付失败 / 服务不符及其撤销
8 事件列表事件列表全部已登记事件

前提

  • 主体须已审批通过、证书可用,且该 CNPJ 在其州税务局有 CT-e 发行资质(IE 登记为运输服务提供者并在 SEFAZ 完成 CT-e 认证)。资质缺失时 SEFAZ 返回 230 - IE do emitente não cadastrada,这是主体侧的税务登记问题,平台无法代为解决。
  • 主体须配置 CT-e 号段(模型 57);未配置或存在多个启用号段且请求未指定时返回 10017007
  • 一期只支持公路模态(Rodoviario),其余模态受理即拒(10017018)。
  • 请求里的 ambienteEmissao 必须与主体当前环境一致(10017010),见环境

鉴权

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

端点

以下路径均相对于 /openapi/v2/empresas/{empresaId}/cte

方法路径端点事件
POST``发行 CT-e异步授权
GET/{cteId}查询 CT-e
DELETE/{cteId}取消 CT-e110111
POST/{cteId}/carta-correcao信函更正110110
POST/{cteId}/comprovante-entrega交付凭证110180
DELETE/{cteId}/comprovante-entrega/{protocoloEvento}撤销交付凭证110181
POST/{cteId}/insucesso-entrega交付失败110190
DELETE/{cteId}/insucesso-entrega/{protocoloEvento}撤销交付失败110191
POST/{chaveAcesso}/desacordo服务不符610110
DELETE/{chaveAcesso}/desacordo/{protocoloEvento}撤销服务不符610111
GET/{cteId}/eventos事件列表

所有事件同步出站,成功返回事件对象(chaveAcessotipocodigosequenciastatusmotivoprotocolodatalinkXml)。文本字段会被净化(去变音、折叠空白)后校验长度;坐标按六位小数登记。

注意: 服务不符两个端点是唯一以他人开具的 CT-e 的 chave 寻址的端点:本主体作为该单据的收货方 / 承担方登记事件,事件送往该单据所属州。

Webhook 回调载荷

Webhook 登记与签名头复用 NF-e,见 Webhooks。CT-e 会发出四个事件码:

事件码触发cteStatus
cte.authorized授权 100Autorizada
cte.rejectedSEFAZ 驳回(cStat 非 100)NegadacteMotivoStatuscStat - 原因);任务终态失败(Falha)不发回调,请经查询接口获知
cte.canceled取消 135Cancelada
cte.event.registered其他事件登记成功平台信封,dataevent_code / n_seq / protocolo

cte.authorizedcte.rejectedcte.canceled

三个单据结果事件使用兼容载荷(tipo="CT-e",字段顺序固定),与 NF-e 的 nfe* 字段平行:

json
{ "tipo": "CT-e", "empresaId": "1934811222334455", "cteId": "CTE-ORD-1", "cteStatus": "Autorizada", "cteMotivoStatus": null,
"cteLinkDacte": "https://.../openapi/files/dacte/3526...?token=...", "cteLinkXml": "https://.../openapi/files/xml/7?token=...", "cteNumero": "1", "cteSerie": "1",
"cteChaveAcesso": "3526...", "cteDataEmissao": "2026-09-06T12:00:00Z", "cteDataAutorizacao": "2026-09-06T12:00:03Z",
"cteNumeroProtocolo": "135260000000001", "cteDigestValue": "..." }
字段类型说明
tipostring固定 CT-e
empresaIdstring主体标识
cteIdstring发行时传入的 id
cteStatusstringAutorizada / Negada / Cancelada
cteMotivoStatusstringNegada 时为 cStat - xMotivo;其余为 null
cteLinkDactestringDACTE PDF 下载链接(首次下载触发渲染)
cteLinkXmlstring授权 XML(cteProc)下载链接
cteNumerostringCT-e 号码
cteSeriestringCT-e 系列
cteChaveAcessostring44 位访问密钥
cteDataEmissaostring开具时间,ISO-8601 UTC
cteDataAutorizacaostring授权时间,ISO-8601 UTC
cteNumeroProtocolostringSEFAZ 授权协议号
cteDigestValuestringXML 签名的 DigestValue

cteLinkDactecteLinkXml 在授权回调里即可用(DACTE 首次下载才渲染);链接不需要签名头、302 跳转,有效期与错误码见文件下载

cte.event.registered

取消以外的任一授权后事件登记成功时发出(信函更正、交付凭证、交付失败、服务不符及其撤销)。使用平台信封(version / event_id / event_type / occurred_at / data):

json
{
"version": "1.0",
"event_id": "7312345678901234567",
"event_type": "cte.event.registered",
"occurred_at": "2026-09-06T13:00:00Z",
"data": {
"cte_id": "1001",
"chave": "35260940673061000134570010000000011000000010",
"external_ref": "CTE-ORD-1",
"event_code": "110110",
"n_seq": 1,
"protocolo": "135260000000099"
}
}
字段类型说明
versionstring载荷版本,1.0
event_idstring事件标识;重试时保持不变,用于去重
event_typestringcte.event.registered
occurred_atstring登记时间,ISO-8601 UTC
data.cte_idstring平台内部单据标识
data.chavestring44 位访问密钥
data.external_refstring发行时传入的 id
data.event_codestringSEFAZ 事件码(110110110180110181110190110191610110610111
data.n_seqinteger事件序号
data.protocolostring事件协议号

错误模型

错误形状与 NF-e 相同:业务错误为 [{ "codigo", "mensagem" }](HTTP 400;单据 / 任务不存在 HTTP 404,codigoCTe0001),鉴权层错误为平台信封(401 / 403 / 429,见认证与签名)。

codigo场景处置
CTe0001cteId 不存在或非本主体核对 id 与 empresaId
10003000empresaId 不存在核对 empresaId
10017004主体不可发行(未审批 / 证书未就绪)等待审批 / 关联证书
10017005 / 10017006同请求并发重复 / 该 CNPJ 待处理任务超限稍后重试
10017007号段无法确定(未配置或多个启用号段未指定)配置模型 57 号段
10017010ambienteEmissao 与主体环境不一致按主体环境提交
10017011市政 IBGE 码不存在核对 codigoIbge
10017012 / 10017013参与方缺失 / 承担方与 IE 指示不符补参与方或改 indicadorIeTomador
10017014单据引用不合法(缺失、chave 校验位错、三种类型混用、前序单据与服务类型不符)按发行字段表调整
10017015单据类型与引用不符(补充 / 替代)tipoctesComplementados / cteSubstituido
10017016运费组成合计不等于总额,或 aReceber > 总额修正金额
10017017 / 10017018 / 10017019RNTRC 非法 / 模态不支持 / 枚举或格式非法(mensagem 点名字段)按 mensagem 修正
10017020 / 10017021 / 10017022 / 10017023 / 10017024 / 10017025税参缺失 / 禁传 / 与税制不符 / 跨州非纳税人缺 icmsUfFim / 税率表缺项 / CST 不支持发行 CT-e 的税参小节
10017030id 报文不同换 id 或沿用原报文
10017031生产环境同 id 已有在途 / 已授权单据查询原单
10017040 / 10017041 / 10017042 / 10017043 / 10017044 / 10017045状态不允许事件 / 超取消窗口 / 事件文本非法 / SEFAZ 拒绝事件 / 更正序号超限 / 被撤销事件不存在见取消与各事件端点
10017048 / 10017049已登记信函更正不可取消 / 信函更正超 720 小时窗口见取消与信函更正端点
10001001请求字段校验失败(每字段一条)按 mensagem 修正

发行阶段的 SEFAZ 驳回不走 HTTP 错误,而是查询结果 Negada + Webhook cte.rejected

支持范围与限制

  • 模型 57 CT-e 4.00,公路模态;正常 / 补充 / 替代单;服务类型全部五种。
  • 税组 ICMS 00 / 20 / 40 / 41 / 51 / 60 / 90 / OutraUF / SN + ICMSUFFim + vTotTrib;IBS/CBS 二期。
  • 应急:SVC(SVC-RS / SVC-SP)与 EPEC 由平台按州配置切换,集成商无感知,查询 tipoEmissao 可见;应急授权的单据其后续事件仍送本州正常授权方。
  • 不支持:其他模态、多式联运、GTV、CT-e OS(模型 67)、收票(DistDFe)。

联调清单

  1. 认证测试环境完成主体注册、证书关联、CT-e 号段配置。
  2. 发行一张最小 CT-e(发行 CT-e 中的示例),查询到 Autorizada,下载 XML 与 DACTE。
  3. id 重发一次,确认返回 200 且未产生第二张单据。
  4. 登记一条信函更正与一条交付凭证,事件列表可见;撤销交付凭证。
  5. 取消单据,查询到 Cancelada,收到 cte.canceled 回调。
  6. 故意传错(模态 Aereo、组成合计不符),确认收到 400 错误数组。