---
title: Criar Processo
description: Crie um processo de verificação. Retorna uma URL de jornada e tokens de SDK que direcionam o usuário para a experiência de captura hospedada pela Unico.
canonical: https://developer.unico.io/pt-BR/dual-api/developers/api-reference/web-sdk/post-process
locale: pt-BR
generated_by: markdown-export
---

- [/pt-BR/](/pt-BR/)
- [Referência de API](/pt-BR/dual-api/developers/api-reference/)
- [Web e Nativo](/pt-BR/dual-api/developers/api-reference/web-sdk/)
- Create Process

**Nesta página# Criar Processo

Este é o ponto de entrada de toda integração Web & SDK. Seu back-end o chama para criar um processo; seu front-end usa os tokens retornados para renderizar o iFrame, redirecionar o usuário ou inicializar um SDK nativo.
Para o fluxo completo de integração, veja [Visão Geral Web & SDK](/pt-BR/dual-api/developers/api-reference/web-sdk/).
### Endpoint​

AmbienteURL**Produção**`POST https://api.idcloud.unico.app/client/v1/process`**Sandbox**`POST https://api.idcloud.uat.unico.app/client/v1/process`
### Requisição​

Headers
HeaderValor`Authorization``Bearer <access_token>` (veja [Autenticação](/pt-BR/dual-api/developers/api-reference/authentication))`Content-Type``application/json`
Parâmetros do corpo
CampoTipoObrigatórioDescrição`callbackUri`stringsimURL para a qual o usuário é redirecionado após o término da jornada. Use `/` para fluxos de SDK nativo onde o callback é tratado no app.`flow`stringsimIdentificador do fluxo — determina quais capacidades são executadas. Exemplos: `idunicodocs`, `idunicosign`, `idchecktrust`, `idtoken`, `idsmart`. Veja [Fluxos disponíveis](/pt-BR/dual-api/capabilities/available-flows).`purpose`stringsimFinalidade de negócio. Valores aceitos: `creditprocess`, `biometryonboarding`, `carpurchase`, `ageverification`.`person.duiType`enumnãoTipo de documento. Valores aceitos: `DUI_TYPE_AR_PASSPORT`, `DUI_TYPE_AR_DNI`, `DUI_TYPE_AR_LNC`, `DUI_TYPE_AT_STNR`, `DUI_TYPE_BE_NN`, `DUI_TYPE_BR_CPF`, `DUI_TYPE_BR_PASSPORT`, `DUI_TYPE_BR_CNPJ`, `DUI_TYPE_CA_SIN`, `DUI_TYPE_CH_AHV`, `DUI_TYPE_CL_RUN`, `DUI_TYPE_CL_PASSPORT`, `DUI_TYPE_CL_LICENCIA_CONDUCIR`, `DUI_TYPE_CO_NIT`, `DUI_TYPE_CO_PASSPORT`, `DUI_TYPE_CO_LICENCIA_CONDUCCION`, `DUI_TYPE_CO_CC`, `DUI_TYPE_DE_IDNR`, `DUI_TYPE_DK_CPR`, `DUI_TYPE_EC_NI`, `DUI_TYPE_ES_NIE`, `DUI_TYPE_ES_DNI`, `DUI_TYPE_FI_HETU`, `DUI_TYPE_FR_SPI`, `DUI_TYPE_GB_NINO`, `DUI_TYPE_GT_CUI`, `DUI_TYPE_ID_NIK`, `DUI_TYPE_IE_PPSN`, `DUI_TYPE_IT_CF`, `DUI_TYPE_LU_MATRICULE`, `DUI_TYPE_MX_CURP`, `DUI_TYPE_MX_RFC_PERSONA_FISICA`, `DUI_TYPE_MX_LICENCIA_CONDUCIR`, `DUI_TYPE_NG_NIN`, `DUI_TYPE_NG_BVN`, `DUI_TYPE_NG_BVN_TOKEN`, `DUI_TYPE_NG_NIN_TOKEN`, `DUI_TYPE_NL_BSN`, `DUI_TYPE_NO_FNR`, `DUI_TYPE_PE_RUC`, `DUI_TYPE_PE_DNI`, `DUI_TYPE_PE_PASSPORT`, `DUI_TYPE_PL_PESEL`, `DUI_TYPE_PT_NIF`, `DUI_TYPE_SE_PNR`, `DUI_TYPE_SE_SAMORDNINGSNUMMER`, `DUI_TYPE_TR_TCKN`, `DUI_TYPE_US_SSN`, `DUI_TYPE_US_PASSPORT`, `DUI_TYPE_US_DRIVER_LICENSE`, `DUI_TYPE_US_PASSPORT_CARD`, `DUI_TYPE_US_POLYCARBONATE_PASSPORT`, `DUI_TYPE_US_ID_CARD`, `DUI_TYPE_UY_CI`, `DUI_TYPE_ZZ_EMAIL`, `DUI_TYPE_ZZ_PHONE_NUMBER`.`person.duiValue`stringnãoNúmero do documento, sem formatação.`person.friendlyName`stringnãoNome de exibição do usuário mostrado na interface da jornada. Máximo de 50 caracteres.`person.phone`stringnãoNúmero de telefone no formato DDI + DDD + número, sem separadores. Obrigatório ao enviar notificações via SMS ou WhatsApp.`person.email`stringnãoEndereço de e-mail. Obrigatório para fluxos com Assinatura Eletrônica.`person.notifications`arraynãoCanais de notificação para envio do link da jornada. Cada item possui `notificationChannel`: `NOTIFICATION_CHANNEL_WHATSAPP`, `NOTIFICATION_CHANNEL_SMS` ou `NOTIFICATION_CHANNEL_EMAIL`.`bioTokenId`string (UUID)condicional**Descontinuado.** Use `references` em vez disso. ID do processo biométrico de referência. Obrigatório para fluxos de Validação 1:1 (`idtoken`, `idtokentrust`, `idtokensign`) e Revalidação Inteligente (`idsmart`).`references`arraycondicionalEntradas de referência para fluxos de Validação 1:1 e Revalidação Inteligente, substituindo `bioTokenId`. Cada item contém `referenceType` (`REFERENCE_TYPE_IMAGE_BASE64` ou `REFERENCE_TYPE_PROCESS_ID`) e `referenceContent` (imagem codificada em base64 ou UUID de processo).`useCase`stringcondicionalCenário de Revalidação Inteligente. Obrigatório para `idsmart`. Exemplos: `USE_CASE_LOGIN`, `USE_CASE_IDENTITY_REVALIDATION_7_DAYS`, `USE_CASE_FIN_TRANSACTIONS`.`clientReference`stringcondicionalIdentificador único do usuário no seu sistema. **Obrigatório para a capacidade [Multi Contas](/pt-BR/capabilities/multi-accounts).** Único na sua base, máximo de 256 caracteres, sem espaços.`companyBranchId`string (UUID)nãoID da filial. Obrigatório apenas se a conta de serviço tiver mais de uma filial associada.`expiresIn`stringnãoJanela de validade do processo a partir da criação. Formato: `"3600s"`. Padrão de 7 dias se omitido.`flow_config`objectnãoSubstituições de configuração por fluxo.`flow_config.biometry_capture.enabled_back_camera`booleannãoUsar a câmera traseira do dispositivo. Não compatível com captura de documento ou fluxos de Assinatura Eletrônica.`contextualization`objectnãoContexto da transação exibido ao usuário durante a jornada para explicar a captura.`contextualization.company_name`stringnãoNome da empresa exibido durante a jornada. Máximo de 20 caracteres.`contextualization.currency`stringnãoCódigo da moeda exibido ao usuário. Valores aceitos: `BRL`, `MXN`, `USD`.`contextualization.price`numbernãoValor da transação exibido ao usuário.`contextualization.locale`objectnãoTexto localizado exibido durante a jornada. Chaves: `ptBr`, `enUs`, `esMx`.`contextualization.locale.{ptBr|enUs|esMx}.reason`stringnãoMotivo resumido da captura, exibido durante a jornada. Máximo de 50 caracteres.`contextualization.locale.{ptBr|enUs|esMx}.title`stringnãoTítulo do aviso ao cliente exibido durante a jornada. Máximo de 100 caracteres. Deve ser fornecido junto com `text`. Tags HTML são removidas.`contextualization.locale.{ptBr|enUs|esMx}.text`stringnãoCorpo do aviso ao cliente exibido durante a jornada. Máximo de 210 caracteres. Deve ser fornecido junto com `title`. Tags HTML são removidas.
### Exemplo​

cURLNode.js```
curl -X POST https://api.idcloud.unico.app/client/v1/process \  -H "Authorization: Bearer $TOKEN" \  -H "Content-Type: application/json" \  -d '{    "callbackUri": "https://app.client.com/callback",    "flow": "idunicodocs",    "purpose": "biometryonboarding",    "person": {      "duiType": "DUI_TYPE_BR_CPF",      "duiValue": "12345678909",      "friendlyName": "Luke Skywalker",      "phone": "5511912345678",      "email": "luke@example.com"    }  }'
```

```
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({    callbackUri: 'https://app.client.com/callback',    flow: 'idunicodocs',    purpose: 'biometryonboarding',    person: {      duiType: 'DUI_TYPE_BR_CPF',      duiValue: '12345678909',      friendlyName: 'Luke Skywalker',      phone: '5511912345678',      email: 'luke@example.com'    }  })});const { process: proc } = await res.json();// proc.userRedirectUrl, proc.token, proc.webAppToken
```

### Respostas​

200 OK
```
{  "process": {    "id": "53060f52-f146-4c12-a234-5bb5031f6f5b",    "state": "PROCESS_STATE_CREATED",    "flow": "idunicosign",    "purpose": "biometryonboarding",    "callbackUri": "https://app.client.com/callback",    "clientReference": "your-internal-id-123",    "companyBranchId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",    "userRedirectUrl": "https://cadastro.unico.app/process/53060f52-f146-4c12-a234-5bb5031f6f5b",    "token": "eyJhbGciOiJSUzI1NiIs...",    "webAppToken": "eyJhbGciOiJSUzI1NiIs...",    "createdAt": "2023-10-09T09:15:25.417105Z",    "expiresAt": "2023-10-09T16:15:25.417105Z",    "capacities": [],    "authenticationInfo": {},    "person": {      "duiType": "DUI_TYPE_BR_CPF",      "duiValue": "12345678909",      "friendlyName": "Luke Skywalker",      "phone": "5511912345678",      "email": "luke@example.com",      "notifications": []    },    "companyData": {      "branchId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",      "countryCode": "BR"    }  }}
```

CampoTipoDescrição`process.id`string (UUID)Identificador do processo. Use-o para buscar o resultado via [Obter Processo](/pt-BR/dual-api/developers/api-reference/web-sdk/get-process).`process.state`enum`PROCESS_STATE_CREATED` — processo criado, jornada ainda não iniciada. `PROCESS_STATE_FAILED` — falha na criação do processo.`process.flow`stringIdentificador do fluxo enviado na criação.`process.purpose`stringFinalidade de negócio enviada na criação.`process.callbackUri`stringURI de callback enviada na criação.`process.clientReference`stringSeu identificador interno enviado na criação. Presente apenas se fornecido na requisição.`process.companyBranchId`string (UUID)ID da filial. Presente apenas se fornecido na requisição.`process.userRedirectUrl`stringURL para redirecionar o usuário (integrações Web Redirect e iFrame). Não modifique esta URL.`process.token`stringJWT para inicializar o **iFrame do Web SDK**.`process.webAppToken`stringJWT para inicializar **SDKs nativos** (Android, iOS, Flutter).`process.createdAt`string (date-time)Timestamp de quando o processo foi criado.`process.expiresAt`string (date-time)Timestamp após o qual o processo expira e não pode mais ser concluído.`process.capacities`arrayCapacidades configuradas para este processo.`process.authenticationInfo`objectInformações de autenticação do processo (vazias no momento da criação).`process.person`objectEco do objeto `person` enviado na criação.`process.companyData.branchId`string (UUID)ID da filial associada ao processo.`process.companyData.countryCode`stringCódigo do país associado à filial (ex.: `BR`, `MX`).
### Códigos de Erro​

400 Bad Request401 Unauthorized429 Too Many Requests500 Internal Server ErrorCódigoMensagemDescrição`3`invalid flowQuando o fluxo especificado não existe.`3`invalid person: friendly name exceeds 50 characters.Quando o nome amigável excede 50 caracteres.`3`invalid purposeQuando a finalidade fornecida é inválida.`3`invalid callbackUri: unable to parse callbackUri: parse "": empty url, invalid callbackUri: url:Quando a callbackUri fornecida é inválida.`3`invalid person: email required for notification channel NOTIFICATION_CHANNEL_EMAIL, invalid email address for notification channel NOTIFICATION_CHANNEL_EMAILQuando o e-mail fornecido é inválido e a notificação por e-mail está configurada.`3`invalid person: phone number required for notification channel NOTIFICATION_CHANNEL_WHATSAPP, phone number does not contain 13 chars for notification channel NOTIFICATION_CHANNEL_WHATSAPPQuando o número de telefone fornecido é inválido e a notificação por SMS ou WhatsApp está configurada.`3`idnsv2/GetPublicID request error: rpc error: code = InvalidArgument desc = invalid dui valueQuando o identificador fornecido (duiValue) é inválido.`3`invalid expiresIn argumentQuando o valor de `expiresIn` é inválido.`3`invalid company_name argument in process contextualization, max length is 20Quando `contextualization.company_name` excede 20 caracteres.`3`title and text must be provided together in process contextsQuando apenas um de `title` ou `text` é fornecido em um locale.`3`invalid title argument in process contexts, max length is 100Quando o `title` de um locale excede 100 caracteres.`3`invalid text argument in process contexts, max length is 210Quando o `text` de um locale excede 210 caracteres.`3`invalid reason argument in process contexts, max length is 50Quando o `reason` de um locale excede 50 caracteres.`9`XX ID Apikeys are not setQuando a API Key não está devidamente configurada.Bearer token ausente, expirado ou inválido. Veja [Autenticação](/pt-BR/dual-api/developers/api-reference/authentication).MensagemDescriçãoJwt header is an invalid JSONQuando o access token utilizado contém caracteres incorretos.Jwt is expiredQuando o access token utilizado expirou.Limite de requisições atingido. Quando seu sistema recebe um erro HTTP 429, você deve implementar mecanismos para prevenir falhas em cascata e evitar agravar a restrição.**Boas práticas:**
**Período de espera (backoff):** Interrompa ou limite imediatamente as requisições subsequentes do seu sistema. Não tente reenviar requisições falhas continuamente em um loop apertado.
**Enfileiramento e controle de fluxo:** Armazene ou enfileire as requisições de saída do seu lado para controlar o fluxo de tráfego antes de reenviá-las.
**Backoff exponencial com jitter:** Ao tentar novamente, aumente o tempo de espera exponencialmente entre as tentativas (ex.: 1 s, 2 s, 4 s, 8 s) e adicione um pequeno atraso aleatório ("jitter") para evitar um efeito manada onde todas as requisições enfileiradas tentam novamente no exato mesmo milissegundo.
avisoContinuar acessando um endpoint com limite de taxa sem aplicar backoff pode **prolongar o período de restrição** e impactar severamente a taxa de transferência operacional do seu sistema. Controlar adequadamente as requisições do seu lado garante uma integração mais suave e resiliente.Para limites padrão, aumento de requisições e detalhes adicionais, veja [Limites de Taxa](/pt-BR/dual-api/developers/api-reference/rate-limits).CódigoMensagemDescrição`99999`Internal failure! Try again laterQuando há um erro interno.
### Próximos passos​

Após o usuário finalizar a jornada, chame [Obter Processo](/pt-BR/dual-api/developers/api-reference/web-sdk/get-process) para buscar o resultado, ou aguarde o [webhook](/pt-BR/developers/webhooks-and-events).
Para ver todas as combinações de receitas e seus valores de resultado possíveis, veja [Fluxos](/pt-BR/dual-api/developers/api-reference/web-sdk/flows).
Última atualização em 8 de out. de 2026**