Fluxo de Assinaturas (Docsign)
Orientações para clientes que utilizam a nossa solução de fluxo de assinatura.
Introdução
Este documento tem como objetivo apoiar o cliente a compreender a integração com o produto de assinatura de contratos. Nesse documento iremos explicar o Fluxo, a autenticação e os Endpoints da integração. Para utilização destes serviços é necessário realizar a contratação do produto.
Pré requisitos para implementação:
-
Possuir uma chave API da Celcoin, essa chave API é enviada após contratar o serviço conosco. link.
-
Ter familiaridade com APIs Rest usando o protocolo OAuth 2.0.
-
Ter o produto/solução contratada, caso queira usar a funcionalidade em ambiente produtivo, por favor entre em contato com a nossa equipe comercial através do e-mail [email protected]. Para dúvidas técnicas, basta entrar em contato com o suporte através do link.
-
Após finalizar a integração, realizar a homologação.
Fluxo de integração
Antes de iniciar a integração, defina em quais momentos do seu processo o fluxo de assinatura será utilizado.
No response da requisição, você receberá uma URL de Webview. Essa URL deve ser disponibilizada ao seu cliente final, que irá acessá-la para realizar o processo completo.
Criar Link para fluxo de assinatura
A criação do processo de assinatura deve ser realizada através do endpoint
Link para fluxo de assinatura de documentos
URL Sandbox: https://sandbox.openfinance.celcoin.com.br/onboarding/v1/docsign
Exemplo Request:
{ "flow": "DOC_SIGN", //Tipo de flow (DOC_SIGN ou DOC_SIGN_SERPRO) "clientCode": "a7e9ea3f-69e4-4599-92b4-6cb8a79c3512", //Código único cliente "documentNumber": "37167700002", // CPF do usuário "fullName": "José da Silva", //Nome Completo do usuário que será autenticado "docToSign": [ { "docName": "string", //Nome do documento "doc": "string" //Conteúdo do documento em base64 } ], "metadata": { //Campo aberto para envio de dados adicionais, como finalidade para realizar a autenticação. "type": "TRANSACAO PIX", "paymentId": "71996290076" }, "expiresIn": "100000", //Tempo de expiração do webview em segundos "notificationWebview": { "phoneNumber": "11998729212", //Número de telefone para recebimento de webview "notificationsChannel": [ //Canais para recebimento de webview (SMS e/ou WHATSAPP) "SMS" ] }, "redirectUrlWebview": "https://www.google.com" // Url para redirecionamento }
Exemplo Response Sucesso:
{ "body": { "docSignId": "80742ec2-de88-4e80-890b-95932662c10e", "clientCode": "eab5d010-36d5-4ac4-936b-7e5f2e1feb93", "documentNumber": "91868537676", "urlWebview": "https://cadastro.uat.unico.app/process/5d5e406c-2b3b-4591-b033-58ad59c03967", "urlExpirationAt": "2026-03-23T16:18:33.808Z", "metadata": { "transacaoId": "123456", "tipoTransacao": "ASSINATURA_CONTRATO" }, "status": "PENDING" }, "version": "1.0.0", "status": "SUCCESS" }
Exemplo Response Error:
{ "error": { "errorCode": "OBE034", "message": "Formato do JSON esta fora do padrão. Verifique a documentação." }, "version": "1.0.0", "status": "ERROR" }
Consultar Fluxo de Assinatura
É possível consultar as autenticações criadas e seus status utilizando o seguinte endpoint
É possível utilizar os seguintes filtros:
• Data início e data fim (Obrigatório caso não inclua o nº da autenticação)
• Status da autenticação
• documentNumber
• clientCode
• docSignId
URL Sandbox: https://sandbox.openfinance.celcoin.com.br/onboarding/v1/docsign
Exemplo Request:
docsign?docSignId=f773bb7f-599b-450b-93d0-0665c6d70581&clientCode=f83f55e8-77fb-4e48-a312-22a6c0f9e89a&status=PENDING &documentNumber=37138444028&dateFrom=2025-07-10T06:30:00&dateTo=2025-07-16T06:30:00
Exemplo Response:
{
"body": {
"limit": 1,
"currentPage": 1,
"limitPerPage": 200,
"totalPages": 1,
"totalItems": 1,
"docsToSign": [
{
"docSignId": "f773bb7f-599b-450b-93d0-0665c6d70581",
"clientCode": "f83f55e8-77fb-4e48-a312-22a6c0f9e89a",
"documentNumber": "37138444028",
"urlWebview": "https://cadastro.uat.unico.app/process/531c958b-3fe8-41c3-87fa-691e3e933c18",
"urlExpirationAt": "2025-07-22T17:34:12.838Z",
"metadata": {
"type": "NOVO CONTRATO"
},
"status": "PENDING"
}
]
},
"version": "1.0.0",
"status": "SUCCESS"
}Buscar documentos endpoint
É possível utilizar os seguintes filtros:
• clientCode
• docSignId
Também é possível utilizar ambos os filtros, porém caso um dos parâmetros estejam errados não irá retornar nada.
Observação: As URLs retornadas possuem duração de 15minutos, após a expiração é necessário realizar uma nova chamada.
URL Sandbox: https://sandbox.openfinance.celcoin.com.br/onboarding/v1/docsign
Exemplo Request:
docsign/files?docSignId=38672b6a-2440-4f5f-b3ca-fe9bf8c50017
Exemplo Response:
{
"body": {
"files": [
{
"type": "DOC_SIGNED",
"url": "https://onboardingexterno.blob.core.windows.net/onboarding/docSign/SANDBOX/972/11144477735/38672b6a-2440-4f5f-b3ca-fe9bf8c50017/11144477735_38672b6a-2440-4f5f-b3ca-fe9bf8c50017_3183bc96-9dc4-431c-8315-69a8507101df_DOC_SIGNED.pdf?sv=2025-05-05&se=2026-03-23T18%3A58%3A38Z&sr=b&sp=r&sig=FEZmqlAAgTtJBiBp%2BaExX36vyCxy2%2BAXo%2B2tZDrZdPA%3D",
"expirationTime": "2026-03-23T15:58:38Z"
},
{
"type": "CONJUNTO_PROBATORIO",
"url": "https://onboardingexterno.blob.core.windows.net/onboarding/docSign/SANDBOX/972/11144477735/38672b6a-2440-4f5f-b3ca-fe9bf8c50017/11144477735_38672b6a-2440-4f5f-b3ca-fe9bf8c50017_CONJUNTO_PROBATORIO.pdf?sv=2025-05-05&se=2026-03-23T18%3A58%3A39Z&sr=b&sp=r&sig=IncPgWwwbETlLdLTvzRubmZeoyEZVyGxSTYuI4%2BlR%2BM%3D",
"expirationTime": "2026-03-23T15:58:39Z"
},
{
"type": "SELFIE",
"url": "https://onboardingexterno.blob.core.windows.net/onboarding/docSign/SANDBOX/972/11144477735/38672b6a-2440-4f5f-b3ca-fe9bf8c50017/11144477735_38672b6a-2440-4f5f-b3ca-fe9bf8c50017_SELFIE.jpeg?sv=2025-05-05&se=2026-03-23T18%3A58%3A39Z&sr=b&sp=r&sig=xD0r4%2F4Gr7R2VjBm8K9IelQgkUNA%2FSW9QWNpUkTIQzU%3D",
"expirationTime": "2026-03-23T15:58:39Z"
}
],
"clientCode": "5bec138a-5abb-4896-9b2c-738fe44e262b",
"documentNumber": "11144477735",
"docSignId": "38672b6a-2440-4f5f-b3ca-fe9bf8c50017"
},
"version": "1.0.0",
"status": "SUCCESS"
}Cadastrar Webhook
Nesta chamada você realizará a definição das rotas que receberão as notificações relacionados aos fluxos.
Passos para integrar
Realizar autenticação na API - [API Reference]
Cadastrar Webhook - [API Reference]
Disponibilizamos duas opções de autenticação nas notificações, Basic Auth ou OAuth 2.0. A definição será feita através da requisição, conforme os exemplos abaixo:
Utilizando Basic Authentication:
Neste formato o basic auth definido será enviado nas notificações.
cURL da Chamada
curl --location --request POST 'https://sandbox.openfinance.celcoin.dev/common/v1/webhook/subscription' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data '
{
"entity": "onboarding-docsign", //Incluir evento que deseja cadastrar webhook
"context": "ONBOARDING",
"webhookUrl": "string",
"auth": {
"login": "string",
"pwd": "string",
"type": "string",
"urlAuth": "string",
"requestType": "string",
"responsePathToken": "string",
"requestAuth": [
{
"key": "string",
"value": "string",
"type": "string"
}
]
}
}
Eventos
Evento: onboarding-docsign
Evento que informa a resposta do processo de assinatura realizado.
{
"status": "APPROVED", //Status
"docSignId": "a2b8f524-2c0e-4c90-ace0-3e2d1aea1d10", //ID único gerado pela Celcoin
"clientCode": "b0e71c12-eb2a-432e-82d1-9e09d17127ab", //Código único do cliente
"metadata": { //Campo aberto para envio de dados adicionais, como finalidade para realizar a autenticação.
"type": "TRANSACAO PIX",
"paymentId": "71996290076"
},
"documentNumber": "03743579197", //CPF do usuário autenticado.
"webhookId": "5f851e6f-6ea0-401a-8c48-e9c730968332" //ID do Webhook
}Evento: onboarding-docsign-file
Evento que informa os documentos gerados por aquele processo de assinatura realizado.
{
"docSignId": "609f429b-3112-4938-bc6e-72658c89a7b8", //ID único gerado pela Celcoin
"clientCode": "7affe105-1186-4534-a42d-7bd136b1c32d", //Código único cliente
"documentNumber": "02147645087", //CPF do usuário autenticado
"files": [ //documentos
{
"type": "CONJUNTO_PROBATORIO", //documento tipo conjunto probatório
"url": "https://onboardingexterno.blob.core.windows.net/onboarding/02147645087_609f429b-3112-4938-bc6e-72658c89a7b8_CONJUNTO_PROBATORIO?sv=2025-05-05&se=2025-05-27T21%3A15%3A22Z&sr=b&sp=r&sig=dDj5%2BAuu0KD3T5h2%2BwFU0Dah%2B2tFKxRO%2BO7H%2Bn1LBV0%3D", //URL onde está disponível o documento.
"expirationTime": "2025-05-27T18:15:22Z" //tempo de expiração
},
{
"type": "SELFIE", //documento tipo selfie
"url": "https://onboardingexterno.blob.core.windows.net/onboarding/02147645087_609f429b-3112-4938-bc6e-72658c89a7b8_SELFIE?sv=2025-05-05&se=2025-05-27T21%3A15%3A22Z&sr=b&sp=r&sig=qY8vzDInSTFPg8WyWRHRRv%2FJv88lLC3Yo8d6fcMJl8o%3D", //URL onde está disponível o documento.
"expirationTime": "2025-05-27T18:15:22Z" //tempo de expiração
},
{
"type": "CNH", //documento tipo selfie
"url": "https://onboardingexterno.blob.core.windows.net/onboarding/02147645087_609f429b-3112-4938-bc6e-72658c89a7b8_CNH?sv=2025-05-05&se=2025-05-27T21%3A15%3A22Z&sr=b&sp=r&sig=qY8vzDInSTFPg8WyWRHRRv%2FJv88lLC3Yo8d6fcMJl8o%3D", //URL onde está disponível o documento.
"expirationTime": "2025-05-27T18:15:22Z" //tempo de expiração
}
],
"webhookId": "5f851e6f-6ea0-401a-8c48-e9c730968332" //ID do Webhook
}Integração com o Webview
Esta seção oferecerá suporte à integração do WebView, a jornada que o seu cliente envia os documentos.
Recomendamos a utilização do Webview nos seguintes navegadores: Google Chrome, Mozilla Firefox e Safari.
Android
Para que as integrações para Android funcionem corretamente, é necessário que setDomStorageEnabled esteja definido como true. Exemplo abaixo:
myWebView.getSettings().setDomStorageEnabled(true);
iOS
Para que as integrações para iOS funcionem corretamente, é necessário customizar a configuração para permitir a reprodução de mídia sem solicitação de ação do usuário e para reproduzir a mídia. Exemplo abaixo:
let webView: WKWebView
init() {
let audioVisualMediaType: WKAudiovisualMediaTypes = []
let configuration = WKWebViewConfiguration()
configuration.mediaTypesRequiringUserActionForPlayback = audioVisualMediaType
configuration.allowsInlineMediaPlayback = true
webView = WKWebView(frame: .zero, configuration: configuration)
}
Outras plataformas
Em outras plataformas, por exemplo, Flutter e React Native, você deve procurar as configurações do WebView para permitir a reprodução de mídia sem exigir gestos do usuário e para reproduzir o vídeo da câmera inline, não no controlador nativo de tela cheia.
Tabelas para apoio
Regras Campos
| Campo | Regras | Tamanho máximo |
|---|---|---|
| clientCode* | Obrigatório Valor único | |
| fullName* | Obrigatório Regex = ("^([A-Za-zÀ-ÖØ-öø-ÿ' -]+)$")); | 120 caracteres |
| documentNumber* | Obrigatório Valida se é um CPF Válido | 11 caracteres |
| metadata | Opcional Campo aberto (objeto) para envio de dados adicionais, como ID interno, contexto, referência, etc. | N/A |
| expiresIn | Opcional Tempo em segundos até a expiração do webview. | |
| flow* | Obrigatório Tipos de flow: "DOC_SIGN"(prova de vida) ou "DOC_SIGN_SERPRO"(prova de vida + validação SERPRO) | |
| docToSign* | Obrigatório docToSign.docname = nome do documento docTosign.doc = conteúdo do documento em base64 | base64 |
| notificationWebview | Opcional notificationWebview.phoneNumber (Número de telefone para recebimento do webview) notificationWebview.notificationsChannel (Canais para recebimento do webview "SMS" e/ou "WHATSAPP") | |
| redirectUrlWebview | Opcional Url de redirecionamento |
Tabela de erros
| Código | Mensagem |
|---|---|
| OBE001 | Token de autorização não enviado. |
| OBE002 | Token enviado está no formato incorreto. |
| OBE003 | Token inválido. |
| OBE004 | Token expirado. |
| OBE005 | Usuario não encontrado. |
| OBE006 | Cliente não possui produto Onboarding ativo. |
| OBE007 | O campo clientCode é obrigatório. |
| OBE008 | O campo documentNumber é obrigatório e deve ser um CPF válido. |
| OBE010 | O campo phoneNumber ou contactNumber é obrigatório e deve ser um telefone válido. |
| OBE013 | O campo fullName é obrigatório e deve ser completo. |
| OBE034 | Formato do JSON esta fora do padrão. Verifique a documentação. |
| OBE035 | Não foi possivel realizar essa operação. Tente novamente mais tarde. |
| OBE046 | Data inválida. |
| OBE047 | Limite inserido inválido. Os campos limit ou limitPerPage devem ter valores entre 1 e 200. |
| OBE050 | A data inicial não pode ser maior que a data final. |
| OBE052 | O intervalo de dias entre a data inicial e a data final não deve ser maior que 0 dias. |
| OBE057 | Ocorreu um erro ao buscar documentos. |
| OBE075 | O envio de um documento pessoal é obrigatório. |
| OBE076 | O envio do contrato social é obrigatório. |
| OBE077 | O envio da procuração de poderes é obrigatória. |
| OBE078 | O envio da SELFIE é obrigatório. |
| OBE104 | Não foram encontrados arquivos para os dados informados. |
| OBE117 | Campo expiresIn inválido. Insira apenas valores numéricos. |
| OBE118 | Campo expiresIn inválido. Deve ser passado um valor entre 0 segundos e 1 segundos. |
| OBE122 | E necessário informar pelo menos um dos parâmetros de pesquisa. |
| OBE123 | A página solicitada excede o número total de páginas disponíveis. Por favor, verifique o número da página e tente novamente. |
| OBE124 | ClientCode já vinculado a outra assinatura, esse campo deve ser único por assinatura. |
| OBE125 | Cliente não possui produto DocSign ativo. |
| OBE126 | É necessário informar pelo menos um documento. |
| OBE127 | Formato de arquivo inválido. Apenas documentos no formato PDF são aceitos. |
| OBE128 | Base64 do documento inválido. |
| OBE129 | Tamanho do documento excede 20MB. |
| OBE130 | DocSign não encontrado. |
| OBE131 | Status da solicitação de assinatura inexistente, verifique a documentação, por favor. |
| OBE132 | Ao não enviar o docsignId ou clientCode, os campos data inicial e a data final são obrigatórios. |
| OIE999 | Ocorreu um erro interno durante a chamada da api. |
Customização
CustomizaçãoO webview é passível de customização, permitindo alterar a logotipo, cor e formato do botão.
• Envie o logotipo preferencialmente no formato de logo ícone, devido à sua melhor legibilidade em tamanhos reduzidos.
• Certifique-se de que o logotipo seja quadrado, respeite o grid proporcional e garanta que seja exportado com no mínimo 192x192 pixels.
• Formatos aceitos: SVG, PNG e JPEG.
Entre em contato com nosso time para solicitar alteração.
Considerações finais
ResponsabilidadeA responsabilidade sobre a tomada de decisão com base na resposta do processo de assinatura é exclusivamente sua. Nossa solução fornece a análise técnica, mas a decisão final sobre aceitar ou recusar determinada operação é de sua responsabilidade.
ResultadosEm produção, o resultado das análises, podem levar até 1 minuto após a conclusão do envio da selfie.
Testes em produçãoEvite realizar testes repetitivos em ambiente de produção. A simulação de cenários negativos, especialmente quando envolve a utilização de um documento vinculado a outra face. Tal ação pode acionar alertas automáticos de fraude e impactar a integridade do sistema.
Recomendamos que todos os testes deste tipo sejam conduzidos em ambientes de sandbox.
ImportanteWebhooks
Para cadastrar os webhooks basta acessar a seguinte documentação aqui
Em caso de não receber o webhook é possível realizar uma chamada para receber o reenvio, para mais informações acesse a documentação de reenvio clicando aqui.
clientCode e docSignId
clientCode é um identificador único por transação criado por você.
docSignId é um identificador único que geramos após a criação da autenticação, esse identificador será utilizado para realizar consultas.Recomendamos você guardar esses campos.Boas Práticas
Evite a criação de "polling" com períodos curtos nos Endpoints de consulta, o fluxo de onboarding é todo via webhook orientando sempre as alterações de status e em qual etapa do processo a proposta se encontra.
Não utilize emuladores para realizar a jornada do Webview, caso utilize será bloqueado
Homologação
As instruções para realizar a homologação deste produto estão centralizadas neste link
Updated about 4 hours ago