创建流程
这是每个 Unico API 集成的入口点。你的后端调用它来创建流程;你的前端使用返回的令牌来渲染 iFrame、重定向用户,或初始化原生 SDK。
完整的集成流程请参见流程。
端点
| 环境 | URL |
|---|---|
| 生产环境 | POST https://api.idcloud.unico.app/client/v1/process |
| 沙箱环境 | POST https://api.idcloud.uat.unico.app/client/v1/process |
请求
Headers
| Header | 值 |
|---|---|
Authorization | Bearer <access_token>(参见身份验证) |
Content-Type | application/json |
Body parameters
字段要求取决于所使用的 flow
某个字段是必填、可选还是不适用,取决于你所集成的 flow——在仅凭这张表判断某个字段的要求之前,先到流程中查看你所使用的具体配方。
| 字段 | 类型 | 描述 |
|---|---|---|
callbackUri | string | 旅程结束后用户被重定向到的 URL。对于回调在应用内处理的原生 SDK 流程,使用 /。 |
flow | string | Flow 标识符——决定运行哪些能力。示例:idunicodocs、idunicosign、idchecktrust、idtoken、idsmart。参见可用流程。 |
purpose | string | 业务用途。可接受的值:creditprocess、biometryonboarding、carpurchase、ageverification。 |
person.duiType | enum | 证件类型。参见下方的 duiType 值。 |
person.duiValue | string | 证件号码,不带格式。 |
person.friendlyName | string | 在旅程界面中显示的用户展示名称。最多 50 个字符。 |
person.phone | string | 电话号码,格式为国际区号 + 区 域码 + 号码,不含分隔符。通过 SMS 或 WhatsApp 发送通知时为必填项。 |
person.email | string | 邮箱地址。对于包含电子签名的流程为必填项。 |
person.notifications | array | 用于发送旅程链接的通知渠道。每个条目都带有 notificationChannel:NOTIFICATION_CHANNEL_WHATSAPP、NOTIFICATION_CHANNEL_SMS 或 NOTIFICATION_CHANNEL_EMAIL。 |
references | array | 1:1 验证和智能重新验证流程的参照输入。每个条目包含 referenceType(REFERENCE_TYPE_IMAGE_BASE64 或 REFERENCE_TYPE_PROCESS_ID)和 referenceContent(base64 编码的图像或流程 UUID)。最多只能发送一个条目——数组更长会被以 400 拒绝,且 referenceContent 不能为空。 |
useCase | string | 智能重新验证场景。对于 🇧🇷 的 idsmart、idsmart_r2、idsmart_tp1 为必填项。示例:USE_CASE_LOGIN、USE_CASE_FIN_TRANSACTIONS。 |
clientReference | string | 你系统中该用户的唯一标识符。多账号能力的必填项。 在你的数据库中唯一,最多 256 个字符,不含空格。 |
companyBranchId | string (UUID) | 分支机构 ID。仅当服务账号关联了多个分支机构时才需要。 |
expiresIn | string | 流程从创建起的有效期窗口。格式:"3600s"。若省略,默认为 7 天。 |
flowConfig | object | 按流程覆盖的配置项。 |
flowConfig.biometryCapture.enabledBackCamera | boolean | 使用设备的后置摄像头。与证件采集或电子签名流程不兼容。 |
contextualization | object | 旅程期间向用户展示的交易背景信息,用于解释采集目的。适用于任何地区的客户 — 不限于特定国家。 |
contextualization.company_name | string | 旅程期间展示的公司名称。最多 20 个字符。 |
contextualization.currency | string | 向用户展示的货币代码。可接受的值:BRL、MXN、USD。 |
contextualization.price | number | 向用户展示的交易金额。 |
contextualization.locale | object | 旅程期间展示的本地化文本。键:ptBr、enUs、esMx — 无论客户所在地区如何,这些都是文本仅支持的语言。 |
contextualization.locale.{ptBr|enUs|esMx}.reason | string | 旅程期间展示的采集简要原因。最多 50 个字符。 |
contextualization.locale.{ptBr|enUs|esMx}.title | string | 旅程期间展示的客户提示标题。最多 100 个字符。必须与 text 一起提供。HTML 标签会被剥离。 |
contextualization.locale.{ptBr|enUs|esMx}.text | string | 旅程期间展示的客户提示正文。最多 210 个字符。必须与 title 一起提供。HTML 标签会被剥离。 |
imageBase64 | string | 直接发送的自拍照。可接受 SDK 的采集 JWT。 |
document.purpose | enum | 证件的用途。固定取值:DOCUMENT_PURPOSE_ONBOARDING、DOCUMENT_PURPOSE_CREDIT_PROCESS、DOCUMENT_PURPOSE_CAR_PURCHASE、DOCUMENT_PURPOSE_PAY_BY_PAYCHECK、DOCUMENT_PURPOSE_FGTS。仅在 Face Document Match 流程中使用。 |
document.files[].data | bytes | 新的证件采集,base64 编码。全球可用,不限于巴西。与 document.documentId 互斥。 |
document.documentId | string (UUID) | 重用同一人此前已采集的证件,而不进行新的采集。与 document.files[] 互斥。 |
expectedResult | object | 在测试/沙箱环境中模拟某项能力的结果,并将响应标记为 simulated: true。参见模拟结果(Test Mock)。 |
duiType 值
| 国家 | 值 | 描述 |
|---|---|---|
| AR | DUI_TYPE_AR_PASSPORT | 阿根廷护照 |
| AR | DUI_TYPE_AR_DNI | 阿根廷 DNI |
| AR | DUI_TYPE_AR_LNC | 阿根廷驾驶证(Licencia Nacional de Conducir) |
| AT | DUI_TYPE_AT_STNR | 奥地利税号(STNR) |
| BE | DUI_TYPE_BE_NN | 比利时国家号码(NN) |
| BR | DUI_TYPE_BR_CPF | 巴西 CPF |
| BR | DUI_TYPE_BR_PASSPORT | 巴西护照 |
| BR | DUI_TYPE_BR_CNPJ | 巴西 CNPJ |
| CA | DUI_TYPE_CA_SIN | 加拿大 SIN |
| CH | DUI_TYPE_CH_AHV | 瑞士 AHV/AVS 号码 |
| CL | DUI_TYPE_CL_RUN | 智利 RUN |
| CL | DUI_TYPE_CL_PASSPORT | 智利护照 |
| CL | DUI_TYPE_CL_LICENCIA_CONDUCIR | 智利驾驶证(Licencia de Conducir) |
| CO | DUI_TYPE_CO_NIT | 哥伦比亚 NIT |
| CO | DUI_TYPE_CO_PASSPORT | 哥伦比亚护照 |
| CO | DUI_TYPE_CO_LICENCIA_CONDUCCION | 哥伦比亚驾驶证(Licencia de Conducción) |
| CO | DUI_TYPE_CO_CC | 哥伦比亚公民身份证(Cédula de Ciudadanía) |
| DE | DUI_TYPE_DE_IDNR | 德国税务识别号码(IdNr) |
| DK | DUI_TYPE_DK_CPR | 丹麦 CPR |
| EC | DUI_TYPE_EC_NI | 厄瓜多尔 NI |
| ES | DUI_TYPE_ES_NIE | 西班牙外国人身份号码(NIE) |
| ES | DUI_TYPE_ES_DNI | 西班牙国民身份证(DNI) |
| FI | DUI_TYPE_FI_HETU | 芬兰个人身份代码(HETU) |
| FR | DUI_TYPE_FR_SPI | 法国税务参考号码(SPI) |
| GB | DUI_TYPE_GB_NINO | 英国国民保险号码(NINO) |
| GT | DUI_TYPE_GT_CUI | 危地马拉 CUI |
| ID | DUI_TYPE_ID_NIK | 印度尼西亚 NIK |
| IE | DUI_TYPE_IE_PPSN | 爱尔兰个人公共服务号码(PPSN) |
| IT | DUI_TYPE_IT_CF | 意大利税务代码(CF) |
| LK | DUI_TYPE_LK_NIC | 斯里兰卡 NIC |
| LU | DUI_TYPE_LU_MATRICULE | 卢森堡国民身份号码(Matricule) |
| MX | DUI_TYPE_MX_CURP | 墨西哥 CURP |
| MX | DUI_TYPE_MX_RFC_PERSONA_FISICA | 墨西哥 RFC(自然人) |
| MX | DUI_TYPE_MX_LICENCIA_CONDUCIR | 墨西哥驾驶证(Licencia de Conducir) |
| NG | DUI_TYPE_NG_NIN | 尼日利亚 NIN |
| NG | DUI_TYPE_NG_BVN | 尼日利亚银行验证号码(BVN) |
| NG | DUI_TYPE_NG_BVN_TOKEN | 尼日利亚 BVN 令牌(哈希) |
| NG | DUI_TYPE_NG_NIN_TOKEN | 尼日利亚 NIN 令牌(哈希) |
| NL | DUI_TYPE_NL_BSN | 荷兰公民服务号码(BSN) |
| NO | DUI_TYPE_NO_FNR | 挪威国民身份号码(Fødselsnummer) |
| PE | DUI_TYPE_PE_RUC | 秘鲁 RUC |
| PE | DUI_TYPE_PE_DNI | 秘鲁 DNI |
| PE | DUI_TYPE_PE_PASSPORT | 秘鲁护照 |
| PL | DUI_TYPE_PL_PESEL | 波兰 PESEL |
| PT | DUI_TYPE_PT_NIF | 葡萄牙税务识别号码(NIF) |
| SE | DUI_TYPE_SE_PNR | 瑞典个人号码(PNR) |
| SE | DUI_TYPE_SE_SAMORDNINGSNUMMER | 瑞典协调号码(Samordningsnummer) |
| TR | DUI_TYPE_TR_TCKN | 土耳其身份证号码(TCKN) |
| US | DUI_TYPE_US_SSN | 美国 SSN |
| US | DUI_TYPE_US_PASSPORT | 美国护照 |
| US | DUI_TYPE_US_DRIVER_LICENSE | 美国驾驶执照 |
| US | DUI_TYPE_US_PASSPORT_CARD | 美国护照卡 |
| US | DUI_TYPE_US_POLYCARBONATE_PASSPORT | 美国聚碳酸酯护照 |
| US | DUI_TYPE_US_ID_CARD | 美国身份证 |
| UY | DUI_TYPE_UY_CI | 乌拉圭 CI |
| ZZ | DUI_TYPE_ZZ_EMAIL | 电子邮件地址 |
| ZZ | DUI_TYPE_ZZ_PHONE_NUMBER | 电话号码 |
创建不带证件的流程
当 flow 允许可选证件时,你可以省略 person.duiType 和 person.duiValue。采集完成后,流程会停留在 AWAITING_FOR_DOCUMENT 状态,直到你的后端通过设置流程证件发送证件。
示例
- cURL
- Node.js
curl -X POST https://api.idcloud.unico.app/client/v1/process \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"flow": "idunicodocs_r2",
"purpose": "biometryonboarding",
"clientReference": "pedido-88216",
"callbackUri": "https://your-app.example.com/onboarding/callback",
"person": {
"duiType": "DUI_TYPE_BR_CPF",
"duiValue": "12345678909"
}
}'
import fetch from 'node-fetch';
const res = await fetch('https://api.idcloud.unico.app/client/v1/process', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.UNICO_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
flow: 'idunicodocs_r2',
purpose: 'biometryonboarding',
clientReference: 'pedido-88216',
callbackUri: 'https://your-app.example.com/onboarding/callback',
person: {
duiType: 'DUI_TYPE_BR_CPF',
duiValue: '12345678909',
},
}),
});
const { process: proc } = await res.json();
// proc.userRedirectUrl, proc.token, proc.webAppToken
响应
200 OK
{
"process": {
"id": "b7c1f0a2-63d4-4f3e-9a17-2c8e5d41b0aa",
"flow": "idunicodocs_r2",
"state": "PROCESS_STATE_CREATED",
"result": "PROCESS_RESULT_UNSPECIFIED",
"purpose": "biometryonboarding",
"clientReference": "pedido-88216",
"person": {
"duiType": "DUI_TYPE_BR_CPF",
"duiValue": "12345678909"
},
"capacities": [
"PROCESS_CAPACITY_IDLIVE",
"PROCESS_CAPACITY_IDUNICO",
"PROCESS_CAPACITY_IDDOCS"
],
"authenticationInfo": {
"authenticationId": ""
},
"companyData": {
"branchId": "",
"countryCode": "BRA"
},
"callbackUri": "https://your-app.example.com/onboarding/callback",
"userRedirectUrl": "https://cadastro.unico.app/flow?id=b7c1f0a2-63d4-4f3e-9a17-2c8e5d41b0aa",
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…",
"webAppToken": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0…",
"simulated": false
}
}