> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 公司登记 API：自动化 KYB 数据提取

> Didit 提供覆盖 220+ 个国家/地区的公司登记查询、企业状态核验和数据提取，按国家和等级计费，每次检查起价 $2.00，无需签约。

当企业验证会话开始时，Didit 会查询官方公司登记机构，以获取并核验公司信息。这一自动查询为整个企业验证流程奠定基础。

## 公司登记查询

Didit 连接支持的国家/地区的公司登记机构，获取官方数据。在托管流程中，用户选择注册国家/地区，并填写企业名称、注册号，或两者都填。两者至少需填其一。公司登记机构有要求时，注册号会做标准化处理（例如，英国公司编号会补零至八位）。同时提供两个标识符时，公司登记查询会将两者结合使用。

### 使用 `expected_details` 预填搜索

如果您已经知道目标企业，可在[创建会话](https://docs.didit.me/zh/sessions-api/create-session.md)时传入 `expected_details`（`company_name`、`registry_country`、`registration_number`）。托管流程会预先选择并锁定国家/地区（对于 `US-CA` 这类按州划分的注册局，还会锁定州），预填对应的搜索字段，并自动执行该预设搜索，用户会直接看到该企业的查询结果。两个字段均可编辑，以便用户更正错误的预设信息。预填仅为辅助：若用户选择的企业与预设不同，不会产生警告。

### 搜索类型

公司登记搜索支持两种模式：

| 模式 | 说明 |
| - | - |
| **精确** | 按企业名称或注册号精确匹配 |
| **包含** | 匹配名称中包含搜索词的企业，适用于不知道确切法定名称的情况 |

### 搜索流程

公司登记查询采用异步工作流：

**1. 搜索**

Didit 使用所选国家/地区及所提供的标识符（企业名称、注册号，或两者结合）查询公司登记机构。响应中的 `searched_by` 字段会说明结果的匹配方式（`name`、`registration_number` 或 `registration_number_and_name`）。对于按注册号返回的结果，托管界面提供一键“改按企业名称搜索”的切换选项。搜索异步执行。

**2. 轮询结果**

轮询搜索状态，直到结果处理完成。大型公司登记机构可能需要数秒才能返回结果。

**3. 选择企业**

查看返回的企业列表，并选择正确的匹配项。Didit 会将所选企业关联到企业验证（KYB），并填充所有可用数据。

**4. 确认并继续**

确认或更正企业信息，然后继续进入下一个已配置的步骤。
部分公司登记机构会在股权报告准备就绪前返回企业档案；该报告将在后台继续处理，同时申请人可以完成其他独立步骤，例如上传证件。
公司登记预填不会阻塞关键人员表单：申请人可以手动录入人员信息，公司登记机构数据中可用的人员信息会在报告返回时于提交前显示。
依赖报告的自定义决策仍会等待报告返回，而不会猜测结果。
报告返回时，您的更正内容会被保留。
待处理的报告不计为已完成的公司登记检查，也不构成自动通过。公司登记计费以实际交付的等级为准。

**5. 手动提交**

如果公司登记机构中找不到该企业，请手动提交企业数据。会话将使用所提供的数据继续进行，并且 `is_from_registry` 会被设为 `false`。

### 返回的数据

| 字段 | 说明 |
| - | - |
| `company_name` | 在主管机构登记的法定名称 |
| `registration_number` | 官方公司注册号或设立编号 |
| `country_code` | 设立国家/地区（ISO 3166-1 alpha-3） |
| `company_type` | 法律实体类型（Ltd、LLC、PLC、SA、GmbH、SL 等） |
| `registry_status` | 公司登记机构记录的当前企业状态（`active`、`dissolved`、`struck_off` 等） |
| `incorporation_date` | 企业最初注册的日期 |
| `registered_address` | 官方注册办公地址 |
| `tax_number` | 税务识别号（如有） |
| `alternative_names` | 商号、dba、曾用法定名称或原始语言名称，以文本形式返回 |
| `legal_entity_identifier` | LEI，适用于金融机构和上市实体 |
| `nature_of_business` | 业务简述（使用公司登记机构的语言） |
| `registered_capital` | 授权资本/已发行资本，以 `{amount, currency}` 对象形式返回 |
| `location_of_registration` | 登记所在地的城市或行政区划 |
| `control_scheme` | 公司登记机构提供的控制或治理方案（如有） |
| `website`、`email`、`phone` | 公司登记机构存档的联系方式 |
| `addresses[]` | 其他注册地址或经营地址 |
| `industries[]` | 行业分类代码（SIC、NACE 或当地等效代码） |
| `accounts` | 公司登记机构报告的备案日期，包括 `last_annual_return_date` 和 `last_agm_date`。年度申报和会议与财务报表是不同的内容。 |
| `financial_summary` | 公司登记机构公布时的财务摘要数据（收入、员工人数、备案状态） |
| `confirmed_by_user_at` | 终端用户确认或编辑注册表数据的时间戳 |
| `last_console_edit_at` | 分析师最后一次在控制台编辑的时间戳 |
| `is_editable` | 在托管流程中，公司登记来源的数据仍可由终端用户编辑时为 `true` |
| `is_from_registry` | 公司登记来源的企业为 `true`，手动录入的企业为 `false` |
| `fetch_status` | `pending`、`resolved` 或 `failed`，表示公司登记查询状态 |
| `verification_status` | `verified`、`failed` 或 `unknown` |

### 企业状态

| 状态 | 说明 |
| - | - |
| **活跃** | 企业当前处于活跃状态，状态良好 |
| **已解散** | 企业已正式解散 |
| **已注销** | 已从登记册中除名（例如因不合规） |
| **清算中** | 企业正在清算过程中 |
| **休眠** | 已注册，但目前未开展经营 |

> [!WARNING]
>
> 状态非“活跃”的企业可能会根据您的工作流配置被自动标记或拒绝。

### 数据来源指示器

每条公司记录都包含 `is_from_registry` 标志：

* **`true`**：数据从官方公司登记获取
* **`false`**：因公司未在公司登记中找到，数据由人工提交

`fetch_status` 字段用于跟踪登记查询已完成、已失败还是仍在进行中。

## 数据层级与定价

在托管流程中，选择公司即会产生登记查询费用，即使申请人在确认信息或完成验证之前离开。
如果选择公司时报告已就绪，则按交付的层级立即收费。
如果股权信息仍在处理中，则在选择公司时按 Lite 收费；当交付更高层级时，仅收取两者的差价。
如果股权信息不可用，则不收取股权信息附加费。
总费用按选择时报出的价格计算，且绝不会超过所请求层级的报价。
选择公司及之后的任何股权信息调整合计计为一次登记查询；查看已购买的报告或确认其中的信息不会再次收费。
现有固定费率合同在选择公司时计入一次登记查询，后续交付股权信息不再额外计入一个合同单位。
托管工作流中的查询不另收查询费。
单独调用 API 进行的查询，每次成功的请求可能产生 \$0.50 费用；请参阅[查询计费](https://docs.didit.me/zh/standalone-apis/kyb-registry-search.md)。完整的各国家/地区价格表请参阅 [KYB 登记定价](https://docs.didit.me/zh/getting-started/kyb-registry-pricing.md)。

| 层级 | 包含内容 |
| - | - |
| **Lite** | 上述字段：公司概况、标识信息、状态、注册地址、经营活动和高管信息 |
| **股东** | Lite 加上直接股东（自然人和企业实体）及其持股区间 |
| **实际受益人** | 股东加上通过股权链解析出的最终实际受益人 |

托管工作流会按国家/地区从 *Workflows → KYB Registry Check → Countries* 中选择层级。如果公司登记没有某公司的股权记录，则股东或实际受益人请求会按该国公司登记可提供的最高层级交付和计费，通常为 Lite。

未找到且手动录入的公司（`is_from_registry: false`）按固定的 **\$0.75** 计费：即使未返回登记记录，查询仍已执行。

> [accordion] 示例：Lite 层级响应
>
> Lite 仅返回公司概况，不包含股东、实际受益人或股权结构：
>
> ```json theme={null}
> {
>   "company_name": "ACME HOLDINGS PTY LTD",
>   "registration_number": "094447122",
>   "country_code": "AU",
>   "registry_status": "active",
>   "incorporation_date": "2000-09-12",
>   "company_type": "Proprietary Limited",
>   "registered_address": "Sydney, NSW, 2000",
>   "tax_number": null,
>   "vat_number": null,
>   "website": null,
>   "is_from_registry": true
> }
> ```
>
> 股东层级会增加 `ownership_structure` 和股东条目，以及董事/高管信息。实际受益人层级还会解析出带有持股比例的实际受益人。请参阅 [股权结构](https://docs.didit.me/zh/business-verification/ownership.md)和 [高管与董事](https://docs.didit.me/zh/business-verification/officers.md)。

## 登记数据与用户提供数据

Didit 将公司登记返回的数据与用户确认的数据分别保存为**独立的审计记录**，并提供合并后的标准视图供后续检查使用。每家公司都包含三个相关数据块：

| 字段 | 说明 |
| - | - |
| `registry_data` | Didit 标准化后的登记详情：股权结果（`ownership_error`、`section_errors`、`ubo_resolution`）、通过 [update-data](https://docs.didit.me/zh/sessions-api/update-data.md) 所做的更正，以及没有专属字段的登记事实。其键名因公司而异，并非稳定的约定。 |
| `user_provided_data` | 终端用户在托管流程的登记确认步骤中确认或编辑的内容。 |
| 顶层标准字段（`company_name`、`registration_number`、`country_code`、`incorporation_date` 等） | 合并后的权威数据：存在用户确认数据时以其为准，否则回退到登记数据。后续功能（证件 OCR 交叉检查、AML 筛查、风险评估）均基于标准视图运行。 |

`confirmed_by_user_at` 时间戳记录终端用户确认或编辑登记数据的时间。在该时间戳为空且 `is_editable` 为 `true` 期间，终端用户可以继续在托管流程中修改字段。

对于**手动录入的公司**（`is_from_registry: false`），`user_provided_data` 是唯一来源，用户提交后 `is_editable` 变为 `false`。

分析人员可以在 [Business Console](https://docs.didit.me/zh/business-verification/console.md) 的会话审核中并排查看两种来源，比对公司登记的记录与用户确认的内容。

## 可配置的登记表单字段

您可以控制托管验证流程在登记确认步骤中要求用户填写哪些企业数据字段。请在 Business Console 中进行配置：打开工作流编辑器，选择 **KYB Registry check** 节点，然后切换到 **字段** 选项卡。

每个字段都有以下三种状态之一：

| 状态 | 行为 |
| - | - |
| **已隐藏** | 该字段不会显示在托管流程中，也不会被收集。 |
| **可选** | 该字段会显示，用户可以留空。 |
| **必填** | 该字段会显示，用户必须填写后才能提交。 |

以下三个字段始终显示且始终为必填，因为它们用于标识企业，无法配置：`company_name`、`country_code` 和 `region`（州/地区，适用于按地区划分的登记库）。

共有 16 个可配置字段：

`registration_number`, `incorporation_date`, `legal_address`, `vat_number`, `alternative_names`, `tax_number`, `company_type`, `legal_entity_identifier`, `location_of_registration`, `nature_of_business`, `registered_capital_amount`, `registered_capital_currency`, `website`, `email`, `phone`, `control_scheme`

默认情况下（对所有现有工作流也是如此），只有 `incorporation_date` 为 **必填**，其余可配置字段均为 **可选**，因此表单的行为与该设置出现之前完全一致。

必填性由服务端强制执行：若提交登记表单时某个必填字段为空，将返回 `400` 及各字段的错误信息。托管界面只会渲染已启用的字段。在工作流 API 中，该设置位于 KYB Registry 节点的 `kyb_registry_fields_config` 对象中，其结构请参阅 [功能配置](https://docs.didit.me/zh/management-api/workflows/feature-configs.md#kyb-公司登记)。

> [!NOTE]
>
> 当 `vat_number` 被设为 **必填** 时，仅对在适用欧盟增值税的国家/地区注册成立的企业强制执行（见下文）。对于其他国家/地区的企业，即使该字段设为必填，也按可选处理，因为无需收集欧盟增值税号。其 `tax_number` 在提供时仍会进行验证。

## VAT 号码与税号验证

提交注册核验步骤后，Didit 会将公司的 `vat_number` 与其所在国家/地区的官方来源进行核对。没有 `vat_number` 的公司，则改为验证其 `tax_number`。
号码可以带或不带国家前缀，也可以包含任意分隔符。对于德国公司而言，`DE 123 456 789`、`DE123456789` 和 `123456789` 是等效的。

**官方登记册。** 在以下国家/地区，号码会实时与政府或官方商业登记机构核对，登记机构同时返回注册名称（大多数还会返回注册地址）：

| 国家/地区 | 来源 |
| - | - |
| 27 个欧盟成员国和北爱尔兰（`XI`） | 欧盟委员会 [VIES](https://ec.europa.eu/taxation_customs/vies/) |
| 波兰 | 先查询 VIES，若 VIES 未列出该公司，则查询财政部增值税纳税人登记册（“白名单”） |
| 挪威 | Brønnøysund 登记中心（法人实体中央协调登记册） |
| 瑞士 | 联邦统计局 UID 登记册 |
| 巴西 | 联邦税务局 CNPJ 登记册 |
| 哥伦比亚 | RUES，即商会统一商业与社会登记册 |
| 哥斯达黎加 | 财政部（Hacienda）纳税人登记册 |
| 厄瓜多尔 | 国家税务局（SRI）纳税人登记册 |
| 巴拉圭 | 国家税务总局（DNIT）RUC 登记册 |

若将法国 SIREN 或 SIRET、荷兰 RSIN，或完整的匈牙利税号作为 VAT 号码提交，系统会先将其转换为对应的 VAT 号码，然后再进行核对。
希腊的 VAT 号码会自动以 `EL` 前缀进行核对。

**校验位规则。** 在以下国家/地区，无法查询任何登记机构，因此号码将依据该国官方格式和校验位规则进行核对：阿尔巴尼亚、安道尔、阿根廷、澳大利亚、阿塞拜疆、白俄罗斯、加拿大、智利、中国、多米尼加共和国、埃及、萨尔瓦多、加纳、危地马拉、冰岛、印度、印度尼西亚、以色列、日本、肯尼亚、列支敦士登、墨西哥、摩尔多瓦、摩纳哥、黑山、摩洛哥、莫桑比克、新西兰、北马其顿、秘鲁、俄罗斯、圣马力诺、塞尔维亚、新加坡、南非、韩国、台湾、泰国、突尼斯、土耳其、乌克兰、英国、美国、乌拉圭、委内瑞拉和越南。
当 `tax_number` 是没有可核对 VAT 号码的国家税务识别号时（例如德国 Steuernummer），欧盟境内也适用这些规则。
`tax_number` 仅声明一个税务识别号，而非增值税登记。因此，当 VIES 未列出该号码时，结果会回落到这些规则，而不是 `invalid`。

来自其他任何国家/地区的公司会获得 `vat_validation_status: "not_applicable"`。
沙盒会话同样如此，因为沙盒会话从不联系税务登记机构。

结果会保存在公司记录上，并在 [KYB 决策 payload](https://docs.didit.me/zh/business-verification/response-schema.md#company-块) 中返回：

| 字段 | 说明 |
| - | - |
| `vat_number` | 提交时的 VAT 号码 |
| `vat_validation_status` | `valid`、`invalid`、`format_valid`、`invalid_format`、`could_not_validate` 或 `not_applicable` |
| `vat_validated_number` | 实际核对的号码，按来源方所记录的形式返回（例如由 SIREN 推导出的 VAT 号码） |
| `vat_validation_source` | 决定该状态的来源（见下文） |
| `vat_validated_name` | 来源方登记的名称，前提是来源方披露该名称 |
| `vat_validated_address` | 来源方登记的地址，前提是来源方披露该地址 |
| `vat_checked_at` | 核对的时间戳 |

| 状态 | 含义 |
| - | - |
| `valid` | 官方登记机构确认该号码已注册且处于有效状态 |
| `invalid` | 官方登记机构没有该号码的有效注册记录。在欧盟，VIES 只列出注册用于欧盟内部贸易的公司 |
| `format_valid` | 号码符合该国的格式和校验位规则；未查询任何登记机构 |
| `invalid_format` | 号码不符合该国的格式或校验位规则 |
| `could_not_validate` | 登记机构不可用，因此无法核对该号码。下次运行登记核对时会再次核对 |
| `not_applicable` | 未提供 VAT 号码或税号，该国家/地区没有登记机构或规则，或会话为沙盒会话 |

`vat_validation_source` 的取值为 `eu_vies`、`pl_vat_white_list`、`no_brreg`、`ch_uid_register`、`br_receita_federal`、`co_rues`、`cr_hacienda`、`ec_sri`、`py_dnit` 或 `format_rules` 之一。

一旦号码的状态为 `valid`、`invalid`、`format_valid` 或 `invalid_format`，该结果会在整个会话期间保留，除非号码发生变化，否则不会再次查询登记机构。

**名称交叉核对。** 当号码状态为 `valid` 且来源方披露了注册名称时，Didit 会将该名称与提交的公司名称进行模糊比对。
若存在有意义的差异，系统会触发 `KYB_COMPANY_VAT_NAME_MISMATCH` 警告，但不会更改会话状态。这只是供审核员参考的软性信号。
其 `additional_data` 包含 `registry_name`、`registry_source` 和 `submitted_name`；当来源为 VIES 时，还包含 `vies_name`。
部分欧盟成员国不披露名称或地址，相应字段将为空，并且不会进行比对。

**可配置操作。** KYB 注册核验节点上的两项设置决定了核验未通过时对会话的影响（取值为 `REVIEW`、`DECLINE`、`NO_ACTION`）：

| 设置 | 触发条件 | 默认值 |
| - | - | - |
| `kyb_vat_invalid_action` | `vat_validation_status` 为 `invalid`，或 `vat_number` 为 `invalid_format` | `REVIEW`，会话进入“审核中” |
| `kyb_vat_unverified_action` | `vat_validation_status` 为 `could_not_validate` | `NO_ACTION`，对会话无影响 |

状态为 `invalid_format` 的 `tax_number` 会在 payload 中返回，但不会触发任何操作，因为自由文本的税号字段通常包含其他公司标识符。

每种结果还会在注册核验中触发相应的警告（`KYB_COMPANY_VAT_INVALID`、`KYB_COMPANY_VAT_COULD_NOT_VALIDATE`）。参见 [企业验证警告](https://docs.didit.me/zh/business-verification/warnings.md#kyb-公司登记警告)。

## 数据交叉比对

Didit 会自动将用户提供的数据/标准数据与登记机构返回的数据进行比对，并与从上传证件中提取的 OCR 数据进行比对：

* **公司名称**：采用模糊匹配，以兼容缩写和格式差异
* **注册号**：进行精确匹配验证
* **国家**：检查提供的国家与登记机构记录的国家是否一致
* **地址**：进行地理编码和标准化，以便比较

任何不一致之处都会在会话中标记为警告，并在控制台中对分析师可见。

## 财务摘要

在可获取的情况下，Didit 会从登记机构检索摘要财务数据：

* 营业收入或营业额
* 员工人数
* SIC/NACE 行业代码
* 申报日期和合规状态

## 其他登记字段

根据司法辖区的覆盖范围，登记机构的响应还可能包含以下内容：

* `alternative_names` - 商号、DBA 名称、曾用法定名称
* `legal_entity_identifier`（LEI）- 适用于金融机构和上市实体
* `website`、`email`、`phone` - 登记机构存档的联系信息
* `nature_of_business` - 简短的业务描述（使用登记机构的语言）
* `registered_capital` - 核定资本或已发行资本，为 `{amount, currency}` 对象

所有字段都会写入 KYB 决策的 [`business`](https://docs.didit.me/zh/business-verification/response-schema) 块中。

## 置信度与验证状态

每条登记响应都包含 `verification_status`：

| 值 | 含义 |
| - | - |
| `VERIFIED` | 登记机构返回了匹配结果，且已成功获取数据。 |
| `FAILED` | 登记机构返回了匹配结果，但数据获取失败（例如响应不完整）。 |
| `UNKNOWN` | 在任何登记机构中都找不到该公司。 |

结合 `is_from_registry` 使用，可驱动您自己的后续逻辑：

| `is_from_registry` | `verification_status` | 含义 |
| - | - | - |
| true | VERIFIED | 已通过官方登记机构完全验证 |
| true | FAILED | 部分结果：部分字段可能已过期或缺失 |
| false | UNKNOWN | 仅有用户提供的数据；未在登记机构中找到匹配 |

## 交叉比对输出

每项交叉比对按字段逐项运行，并返回以下结果之一：

* `MATCH`：提供的数据与登记机构一致。
* `MISMATCH`：存在实质性差异，将标记为警告。
* `NO_DATA`：一方数据为空，无法进行比较。

不一致情况可在控制台的会话审查中按字段查看。

## 结果的决定因素

公司状态、注册成立国家、AML 结果以及与申报数据的匹配情况，会以警告标签的形式体现在登记检查和 AML 筛查中，作为决策的依据。您的工作流决定每个警告是通过、进入人工审核还是拒绝。相关信号以及控制这些信号的工作流键，请参阅[风险评估](https://docs.didit.me/zh/business-verification/risk-assessment.md)。

## 支持的国家/地区

各国家/地区的覆盖范围有所不同，各地区的层级细分请参阅[支持的国家/地区](https://docs.didit.me/zh/business-verification/supported-countries.md)。

## 后续步骤

> [card] [股权结构](https://docs.didit.me/zh/business-verification/ownership.md)
>
> UBO 识别与股权链。

> [card] [响应结构](https://docs.didit.me/zh/business-verification/response-schema.md)
>
> 每个字段在 payload 中的位置。

> [card] [支持的国家/地区](https://docs.didit.me/zh/business-verification/supported-countries.md)
>
> 按地区查看覆盖范围。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.