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

CampoRegrasTamanho 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
metadataOpcional
Campo aberto (objeto) para envio de dados adicionais, como ID interno, contexto, referência, etc.
N/A
expiresInOpcional
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
notificationWebviewOpcional
notificationWebview.phoneNumber (Número de telefone para recebimento do webview)
notificationWebview.notificationsChannel (Canais para recebimento do webview
"SMS" e/ou "WHATSAPP")
redirectUrlWebviewOpcional
Url de redirecionamento

Tabela de erros

CódigoMensagem
OBE001Token de autorização não enviado.
OBE002Token enviado está no formato incorreto.
OBE003Token inválido.
OBE004Token expirado.
OBE005Usuario não encontrado.
OBE006Cliente não possui produto Onboarding ativo.
OBE007O campo clientCode é obrigatório.
OBE008O campo documentNumber é obrigatório e deve ser um CPF válido.
OBE010O campo phoneNumber ou contactNumber é obrigatório e deve ser um telefone válido.
OBE013O campo fullName é obrigatório e deve ser completo.
OBE034Formato do JSON esta fora do padrão. Verifique a documentação.
OBE035Não foi possivel realizar essa operação. Tente novamente mais tarde.
OBE046Data inválida.
OBE047Limite inserido inválido. Os campos limit ou limitPerPage devem ter valores entre 1 e 200.
OBE050A data inicial não pode ser maior que a data final.
OBE052O intervalo de dias entre a data inicial e a data final não deve ser maior que 0 dias.
OBE057Ocorreu um erro ao buscar documentos.
OBE075O envio de um documento pessoal é obrigatório.
OBE076O envio do contrato social é obrigatório.
OBE077O envio da procuração de poderes é obrigatória.
OBE078O envio da SELFIE é obrigatório.
OBE104Não foram encontrados arquivos para os dados informados.
OBE117Campo expiresIn inválido. Insira apenas valores numéricos.
OBE118Campo expiresIn inválido. Deve ser passado um valor entre 0 segundos e 1 segundos.
OBE122E necessário informar pelo menos um dos parâmetros de pesquisa.
OBE123A 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.
OBE124ClientCode já vinculado a outra assinatura, esse campo deve ser único por assinatura.
OBE125Cliente não possui produto DocSign ativo.
OBE126É necessário informar pelo menos um documento.
OBE127Formato de arquivo inválido. Apenas documentos no formato PDF são aceitos.
OBE128Base64 do documento inválido.
OBE129Tamanho do documento excede 20MB.
OBE130DocSign não encontrado.
OBE131Status da solicitação de assinatura inexistente, verifique a documentação, por favor.
OBE132Ao não enviar o docsignId ou clientCode, os campos data inicial e a data final são obrigatórios.
OIE999Ocorreu um erro interno durante a chamada da api.

Customização

📚

Customização

O 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

❗️

Responsabilidade

A 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.

📘

Resultados

Em produção, o resultado das análises, podem levar até 1 minuto após a conclusão do envio da selfie.

❗️

Testes em produção

Evite 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.

👍

Importante

Webhooks

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


Did this page help you?