Digital Link
免费开始

DPP注册系统API:如何分步向欧盟注册电池护照

Mia

作者 Mia

专注于 GS1 标准与欧盟产品标签法规的撰稿人。

两名工程师在电池测试实验室里,一人指着笔记本电脑,另一人手持贴有小型二维码标签的电池模组

TL;DR

  • 2026 年 10 月 30 日,欧盟委员会发布了 DPP注册系统API 的技术规范:一份对接指南、OpenAPI 文件、服务账户与自托管认证指南,以及电池的语义数据模型。
  • 注册是异步的,并且要么全部成功、要么全部不成功:每次提交最多发送 100 份护照,注册系统从每份护照的网址抓取并校验它,只要有一项失败,就一项都不会被注册。
  • 电池是目前唯一已定义的产品组。电动汽车电池、LMT 电池以及容量超过 2 kWh 的工业电池,自 2027 年 2 月 18 日起需要一份已注册的护照,而你的组织必须先通过合格电子印章完成验证,任何 API 调用才能生效。

DPP注册系统API 是制造商、进口商或为其服务的平台向欧盟注册数字产品护照的方式,无需在网页表单里一件产品一件产品地点击操作。注册系统本身自 2026 年 7 月 20 日起已上线运行。10 月 30 日到来的,是开发人员据以构建对接所需的细节:端点、认证、错误代码、轮询规则,以及注册系统用来校验护照的数据模型。

本指南写给必须在 2 月之前让电池护照出现在注册系统中的人。它按照你会遇到这些文件的顺序展开,并把已经确定的内容与仍未决定的内容区分开来。关于注册系统是什么、为何存在,请参阅我们的欧盟 DPP 注册系统详解。下文所述内容均截至 2026 年 11 月。

欧盟委员会在 10 月 30 日发布了什么?

六份技术文件出现在欧盟委员会的 DPP 资源页面上,没有任何新闻稿宣布。它们与 2026 年 9 月发布的《经济经营者用户指南》并列。

文件版本它为你提供什么
面向经济经营者的 API 对接指南1.0注册流程、任务跟踪、请求头、轮询和错误处理
OpenAPI 规范(ZIP)1.0.0,EUPL-1.2三个 OpenAPI 3.1.0 文件:registry、dashboard(任务跟踪)和 common
语义数据指南1.0护照数据如何建模、序列化和校验
语义数据制品(ZIP)core 1.0.0,batteries 1.0.0JSON Schema、JSON-LD 上下文、SHACL 形状和 SKOS 词表,含电动汽车电池、LMT 电池和工业电池子组
服务账户技术对接指南1.0面向你自身系统的机器对机器认证
自托管认证指南1.0你的护照服务器必须如何处理来自注册系统的请求

10 月 19 日,欧盟委员会还发布了其电池护照指导文件的 3.2 版,按电池类别列出了各项数据点。我们在下文介绍。

具有约束力的部分是 2026 年 7 月 16 日的委员会实施法规 (EU) 2026/1778。第 3 条第 (b) 项规定了用于注册的 API,第 8 条第 6 款允许通过用户界面或 API 进行注册,第 8 条第 7 款要求对语义和粒度进行自动检查。这些规范就是欧盟委员会落实上述条款的方式。

注册系统如何处理你的护照?

注册系统是一个索引,而不是一个存储库。你为每份护照向它发送一个唯一产品标识符(UPI),而 API 要求该 UPI 必须是一个 HTTPS URL。提交时,注册系统会访问该 URL,抓取护照,并依据该产品组的数据模型对其进行校验。用对接指南的原话来说,注册系统「不会持久保存所抓取的 DPP 有效载荷内容」。

这一个设计选择决定了大部分工程工作。护照必须在你提交的那一刻就已在线、完整且有效,而不是之后。如果注册系统无法访问它,该项会以 UPI_NOT_RESOLVABLE 失败。如果内容与 schema 不符,则以 ITEM_NON_COMPLIANT 失败。先注册、后发布护照的工作流程是行不通的。

注册成功后,依据实施法规第 9 条,你会获得一份加盖欧盟委员会合格电子印章的注册证明,可在 90 天内获取。请下载并存档;它是你的护照已被注册以及注册时间的证据。

在第一次 API 调用之前,需要准备好什么?

比大多数团队预想的要多,而且几乎都与代码无关。

一个已验证的组织。 用户通过 EU Login 登录,但 API 会以 403 拒绝来自未经验证组织的请求。依据实施法规第 4 条,法人通过合格电子印章(或属性电子证明)证明其身份和设立地;个体经营者可以使用合格电子签名,或 eIDAS 保证级别为「高」的 eID。在实务中,注册系统会给你一份由欧盟委员会盖章的声明,由你进行签名或盖章。验证状态持续到你的身份识别手段到期为止,最长不超过三年,之后你必须重新验证。

合格印章由合格信任服务提供者颁发,并有其自身的身份核验程序。如果你的公司还没有,就从这里开始。

一名管理员和一个服务账户。 你组织的管理员在注册系统界面中创建服务账户。服务账户是绑定到你已验证组织的非人类身份,它需要具备允许注册 DPP 的角色。组织信息取自访问令牌,因此你永远不需要在请求中传递组织 ID。

产品分类。 每次提交都要指明一个产品组和子组,你应从 GET /api/v1/dpp/product-groups 获取它们,而不是硬编码。目前该调用只返回一个组,即 BATTERIES,含电动汽车电池、LMT 电池和工业电池子组。

服务账户如何进行认证?

注册系统使用 OAuth 2.0 客户端凭证模式,配合 private_key_jwt。指南说得很直接:「不支持共享客户端密钥。」你的系统持有一把私钥,签署一个短期有效的断言,并用它换取访问令牌。

容易让人踩坑的细节:

  • 仅限椭圆曲线密钥(ES256、ES384 或 ES512)。不接受 RSA 密钥。你以 JWK 或 PEM 格式上传公钥,指南建议将私钥保存在硬件安全模块中。
  • 短时效断言。 客户端断言应在 60 至 120 秒内过期,绝不超过 5 分钟,并且每次都使用新的 jti。
  • 资源指示符。 令牌请求必须将注册系统指定为资源,使用为每个环境公布的值。
  • 短时效令牌。 访问令牌最长有效 15 分钟,因此你的客户端必须在长时间的批量运行中刷新令牌。
  • 限制。 每个组织最多 5 个服务账户,每个账户最多 2 个有效凭证,这使得不停机轮换密钥成为可能。建议凭证有效期为一年,最长两年。

如果由某个平台替你注册护照,1.0 版文件所描述的模式是:在你已验证的组织内部设立一个服务账户。这是目前对接的运作方式,但并不是法律允许的唯一途径。实施法规还规定了代表经营者行事的已验证第三方:第 6 条第 1 款允许已验证的经营者在欧盟法律有此规定时将访问权限委托给第三方,第 8 条第 2 款允许已验证的第三方在此情况下执行注册操作,第 19 条第 4 款要求经营者授权的第三方完成其自身的验证。注册系统还将保存一份已验证 DPP 服务提供者名单(第 3 条第 (f) 项)。这种委托在技术上将如何运作,对接指南尚未说明。无论采用哪种途径,经济经营者都对合规负全部责任。

注册提交如何运作?

该流程包含四次调用。你先获取产品组,然后提交,再通过欧盟委员会所称的 Activity Dashboard API(活动仪表板 API)跟踪任务。

POST /api/v1/dpp/submission
Authorization: Bearer <access token>
Idempotency-Key: 7f3c9a2e-batch-2027-02-01-001
Content-Type: application/json

{
  "productGroup": "BATTERIES",
  "productSubGroup": "EV",
  "submissionItems": [
    {
      "uniqueProductIdentifier": "https://example.com/dpp/battery/0001",
      "granularity": "item",
      "batchIdentifier": "xxx-000",
      "modelIdentifier": "yyy-111"
    }
  ]
}

该请求体沿用官方示例。每一项都必须提供 uniqueProductIdentifier 和 granularity(item、batch 或 model);批次标识符和型号标识符是可选的。

注册系统以 202 Accepted 和一个 taskId 作为响应。202 仅表示请求已被接受、等待处理。随后你轮询 GET /api/v1/tasks/{taskId};当你需要知道哪些项通过时,再调用 GET /api/v1/tasks/{taskId}/items,它返回 JSON 或 CSV。

有两个状态字段很重要,而且含义不同。任务的 status 依次经历 PENDING、PROCESSING,最终为 COMPLETED 或 ERROR。完成后,outcomeResult 显示 SUCCEEDED 或 FAILED。一个任务可以是 COMPLETED,而结果为 FAILED:处理过程正常,但你的数据没有通过。ERROR 则是注册系统一方的技术故障。

没有 webhook。指南建议在第 1、1、2、3、5、8、13、21、34 和 55 秒时轮询,此后最多每 60 秒一次,并且 Retry-After 响应头始终优先于你自己的轮询时间表。

应当决定你批次设计的规则是原子性。一次提交包含 1 至 100 份属于同一产品组和子组的护照,只要其中任何一份不合规,就一份都不会被注册,包括那些已经通过的。100 份中的一条坏记录,会拖住 99 条好记录。我们的做法会是:在提交前依据已发布的 schema 在本地校验每一份护照;在数据尚未稳定时把批次控制得小一些;失败后迅速重新提交干净的条目。

Idempotency-Key 请求头是必需的,最长 128 个字符。使用同一个键重试会返回原有任务,而不会创建重复任务,这正是超时或 500 之后你想要的结果。内容发生变化的提交需要新的键;对不同内容重复使用同一个键会返回 409。

限制或规则数值
每次提交的护照数量1 至 100,同一产品组和子组
请求体上限10 MB
批次行为要么全部成功,要么全部不成功
UPI 格式HTTPS URL,提交时可访问
粒度必需:item、batch 或 model
Idempotency-Key必需,最长 128 个字符
访问令牌有效期最长 15 分钟
客户端断言有效期建议 60 至 120 秒,最长 5 分钟
密钥类型仅限 EC:ES256、ES384、ES512
服务账户每个组织最多 5 个,每个账户 2 个有效凭证
状态更新仅轮询,无 webhook
抓取护照时跟随的重定向整条链最多 3 次
注册证明由欧盟委员会盖章,可在 90 天内获取

错误代码是常规的(400、403、409、413、422、429、500),指南逐一说明了应使用同一个键还是新键重试。403 通常意味着组织未经验证,或服务账户缺少注册角色。

如果你自行托管护照,会有什么不同?

电池护照包含公开数据和受限数据,注册系统在校验时会读取这两类数据。如果护照位于你自己的服务器上,该服务器就必须能识别注册系统,并向它展示比公众所见更多的内容。

你的护照托管服务器充当 OAuth 2.0 资源服务器。注册系统首先在不带凭证的情况下请求 UPI,并期望获得公开护照。随后,它携带由欧盟委员会认证服务签发的 bearer 令牌请求同一个 URL,并期望获得公开数据加受限数据。该令牌时效很短(ES384,最长 120 秒),带有 scope dpp:registry:read,其受众为你托管服务器的 HTTPS 源。你只能依据欧盟委员会公布的 JWKS 中的密钥来校验它,绝不能依据令牌内部引用的密钥。

响应规则很严格。没有令牌:返回公开护照。令牌有效且请求方已获授权:返回公开数据加受限数据。令牌存在但无效:返回 401,不得回退到公开视图。令牌有效但 scope 或请求方不对:返回 403。发送 Vary: Authorization,让缓存将这两个版本区分开来,并使用 TLS 1.2 或更高版本。JSON 是基准响应格式;JSON-LD 和 XML 也可以接受。

该指南只描述了一个调用方,即注册系统本身。它没有说明主管机关、回收商或其他具有合法利益的各方将如何进行认证,因此你需要为他们另行准备方案;我们关于数字产品护照访问权限的指南说明了谁有权获取什么。唯一经营者标识符目前也尚未得到处理;指南计划在未来版本中加入。

注册系统会跟随重定向,整个解析过程最多三次,并且它在不带凭证的情况下解析 UPI 及每一次重定向,因此每一步都必须可公开访问。这与解析器是兼容的。位于你自有域名上的 GS1 Digital Link URI,例如 https://id.yourbrand.com/01/09520123456788/21/SN0001,是为每块电池提供一个持久 HTTPS 标识符的一种方式:它通向该电池的护照,同时也可以作为产品上的 QR 码使用。这并非必需;任何稳定的 HTTPS URL 都符合 API 的格式规则。如果你使用解析器,请数清跳转次数:从 QR 域名到解析器、再到托管服务商、再到最终 URL 的一条链,已经用完全部三次。指南还建议在认证之后避免重定向,以便经授权的请求直接落到护照上。

注册系统依据哪些数据模型进行校验?

语义数据制品 ZIP 包含注册系统所检查的模型。目前只有两个:一个核心模型和一个电池模型,版本均为 1.0.0,并带有电动汽车电池、LMT 电池和工业电池的子组 schema。每个模型都以 JSON Schema(draft 2020-12)、JSON-LD 上下文、SHACL 形状和 SKOS 词表的形式提供,另附一份 DCAT-AP 目录。指南还描述了 XSD,但本次发布中未包含。

这些 schema 按访问级别划分:一个公开视图(pub)和三个受限视图(res1、res2、res3)。你的护照必须向正确的请求方展示正确的字段,而 schema 会告诉你哪些字段位于哪一层。ZIP 中还包含符合各 schema 的示例实例,非常适合作为第一批测试用例。

文件描述了四种序列化格式(JSON、JSON-LD、XML 和 RDF),但依照 EN 18216:2026,JSON 是注册时唯一强制要求的格式。指南还引用了关于互操作性的 EN 18223:2026。我们在CEN DPP 标准指南中解释了这两项标准,并在关于机器可读的数字产品护照的指南中说明了结构化数据为何重要。实施法规第 12 条还规定,语义存储库免费使用,并提供公开 API。

电池指导文件 3.2 版增加了什么?

《指导文件:数字电池护照,按类别划分的数据点》3.2 版发布于 2026 年 10 月 19 日,为电动汽车电池、LMT 电池和工业电池列出了 71 个数据点。它属于指导性文件,并自称不具有法律约束力;相关义务来自《电池法规》,即第 (EU) 2023/1542 号法规。

对于每个数据点和每个电池类别,它给出一种状态:强制;可选,在数据可得时填写;如适用;仅适用于特定电池类型;或截至 2027 年 2 月不填写、不显示。最后这种状态对规划最有用。例如,碳足迹声明和标签被标为 2027 年 2 月不填写,因为其格式仍有待一项实施法案确定;使用说明则因等待 Omnibus 而暂缓。每个数据点还带有一个访问级别:公开;仅限具有合法利益的人员、公告机构、成员国主管机关和欧盟委员会;或范围更窄的受限级别。pub 和 res 这些 schema 视图实现的正是这些级别。

我们的电池护照指南涵盖了法律要求。在对接工作中,请把 3.2 版用作你的产品数据与 schema 字段之间的映射表。

哪些已经确定,哪些仍未决定?

已确定的:端点、认证模式、原子批次规则、轮询、电池数据模型,以及提交时护照必须在线的要求。通过合格印章进行验证,则写在实施法规本身之中。

截至 2026 年 11 月仍未决定的:已验证第三方代表经营者进行注册在技术上将如何运作、电池以外任何产品的数据模型、碳足迹格式、其他各方如何对自托管护照进行认证,以及唯一经营者标识符。实施法规还涵盖建筑产品、玩具和洗涤剂,它们目前尚无数据模型;对于电池以外的产品,义务最早在各项授权法案之后 18 个月开始。成员国必须在 2027 年 2 月 18 日前指定其国家注册系统管理员(第 7 条)。

1.0 版文件中的粗糙之处

首个版本总会有不一致之处,以下几点值得在你编写代码之前了解:

  • 服务账户指南给出的 API 基础地址是 reg.product-passport.ec.europa.eu,而 OpenAPI 文件使用的是 registry.product-passport.ec.europa.eu(验收环境为 registry.acc.product-passport.ec.europa.eu)。在配置生产环境之前,请在注册系统中确认当前的值。
  • 100 项的上限写在指南中,但 OpenAPI schema 并未强制执行,因此依据该 schema 生成的客户端会毫无阻拦地构建出一个包含 101 项的请求。
  • 对接指南称错误以 traceId 返回标识符,而 OpenAPI 错误 schema 将其称为 correlationId。两者都要记录。
  • API 使用子组代码 EV,而语义制品在其路径中使用 evb。请显式地进行映射。

这些都不会阻碍对接,但每当文件发布新版本时,都请重新核对。

现在该做什么

  1. 获取合格电子印章:如果你的公司尚未持有,请向合格信任服务提供者申请,并在注册系统中验证你的组织。这是本清单中所需准备时间最长的一项。
  2. 注册验收环境,并指定一名可以创建服务账户的管理员。
  3. 决定护照存放在哪里: 放在你自己的服务器上,那么该服务器必须实施自托管认证规则;或者交给已经做到这一点的服务商。
  4. 确定你的 UPI。 为每块电池选择一个稳定的 HTTPS URL 模式,决定采用 item、batch 还是 model 粒度,并数清链路中的重定向次数。
  5. 将你的数据映射到 3.2 版和电池 schema, 逐个字段进行,包括公开视图和受限视图。标出 2027 年 2 月不要求的内容,以免有人在上面浪费时间。
  6. 提交前先在本地校验, 依据随附的 JSON Schema 进行,并设计好批次,让一条坏记录不会拖住其余记录。
  7. 把客户端做扎实: 将 EC 密钥保存在 HSM 中、刷新令牌、使用可复现的幂等键、采用斐波那契轮询,并存储每一份注册证明。
  8. 在验收环境中进行完整测试,务必远早于 2027 年 2 月 18 日,并包括一次失败的批次和一次密钥轮换。

Digital Link 是 GS1 解决方案合作伙伴,我们的平台基于每件产品一个持久的 GS1 Digital Link 标识符来构建电池护照和产品护照,公开数据和受限数据由同一条记录提供。我们正在准备自己与注册系统的对接。这涉及三个独立的步骤:获取我们的合格电子印章、完成我们在注册系统中的验证,以及构建并测试 API 连接。我们目前尚未与注册系统连接。如果你想规划自己与注册系统的对接,或检查你的护照数据能否通过校验,请联系我们,我们的团队会审视你的情况。

常见问题

DPP注册系统API 是强制性的吗?

不是。委员会实施法规 (EU) 2026/1778 第 8 条第 6 款允许通过用户界面或 API 进行注册。在实践中,任何需要注册不止少量护照的人都会希望使用 API。

注册系统会存储我的护照数据吗?

不会。它在提交时从护照的 URL 抓取护照以进行校验,对接指南明确表示它不会持久保存所抓取的内容。护照仍然留在你托管它的地方,这也是它在提交时必须可访问的原因。

我的服务账户可以使用 RSA 密钥或客户端密钥吗?

不可以。服务账户使用椭圆曲线密钥(ES256、ES384 或 ES512),通过 private_key_jwt 进行认证。不支持共享客户端密钥和 RSA 密钥。

如果批次中有一份护照未通过校验,会发生什么?

整个提交失败,其中的护照一份都不会被注册。任务以结果 FAILED 完成,逐项结果会告诉你是哪些项导致了失败。修正它们,并使用新的幂等键重新提交。

不需要。唯一产品标识符必须是一个能解析到护照的 HTTPS URL。位于你自有域名上的 GS1 Digital Link URI 是满足这一要求的一种方式,并且可以同时作为产品的 QR 码,但任何稳定的 HTTPS URL 都会被接受。

电池护照必须在什么时候注册?

对于电动汽车电池、LMT 电池以及容量超过 2 kWh 的工业电池,第 (EU) 2023/1542 号法规规定的电池护照义务自 2027 年 2 月 18 日起适用。注册系统及其验收环境现已开放,因此还有时间先进行测试。

引领从条形码到 GS1 二维码的转型