Um link de consentimento permite que você colete uma autorização de débito direto sem precisar construir sua própria interface de usuário. Você cria o link com uma chamada de API e envia a URL para o seu cliente. Seu cliente a abre no navegador, insere sua CLABE, revisa e aceita a autorização de débito direto, e a assina eletronicamente com um código que a Belvo deposita em sua conta.
Quando seu cliente termina, a Belvo criou um método de pagamento e um consentimento confirmado para ele. São os mesmos recursos que você criaria por conta própria com a API de Débito Direto, permitindo que você envie solicitações de pagamento imediatamente.
Neste guia, você irá:
- Criar um link de consentimento para um cliente existente, com os termos de pagamento que ele deve autorizar.
- Compartilhar o link com seu cliente e ver o que ele faz no widget de link de consentimento.
- Lidar com o redirecionamento de volta para sua aplicação.
- Ouvir os webhooks e confirmar o resultado.
Um link de consentimento substitui as etapas Criar um método de pagamento e Criar um consentimento do guia Pagamentos por Débito Direto via API. Você ainda cria o cliente com a API e ainda cria solicitações de pagamento com a API.
Antes de começar, certifique-se de:
- Gerar suas chaves de API.
- Configurar um webhook para escutar eventos.
- Configurar a Lista Branca de IPs.
- Solicitar ao seu representante da Belvo para habilitar links de consentimento para sua conta. Os links de consentimento usam validação de centavos para entregar o código de assinatura, portanto, o consentimento de validação de centavos deve estar ativo para sua conta.
- Criar um cliente para a pessoa que você deseja debitar. O widget mostra o nome do cliente e um RFC ou CURP mascarado deste registro, então certifique-se de que os dados estão corretos.
Para criar um link de consentimento, faça uma chamada POST /consents/links com o ID do cliente e os termos de pagamento que ele deve autorizar.
curl -i -X POST \
'https://api.sandbox.directdebit.belvo.com/consents/links' \
-H 'Content-Type: application/json' \
-H 'api-key-id: YOUR_API_KEY_ID' \
-H 'api-key-secret: YOUR_API_KEY_SECRET' \
-d '{
"customerId": "0d1a377b-b4c5-4a94-9e2e-83e59d1f6a9c",
"expiresIn": 72,
"callbackUrl": "https://www.your-app.com/direct-debit/return",
"terms": {
"chargeType": "RECURRING",
"chargeAmount": 420.00,
"paymentFrequency": "MONTHLY",
"serviceOrCreditDescription": "Préstamo personal",
"termDescription": "12 meses",
"interestRate": "1,0% mensual",
"numberOfCharges": 12,
"firstChargeDate": "2026-11-10",
"isPayrollLinked": false
}
}'| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
customerId | string (UUID) | true | O customerId do cliente que deve autorizar o débito direto. O cliente deve pertencer à sua conta. |
terms | objeto | false | Os termos de pagamento que seu cliente revisa e autoriza no widget. Para detalhes, veja a tabela Objeto Terms abaixo. |
expiresIn | inteiro | false | O número de horas até que o link expire. Mínimo 1, máximo 720 (30 dias). Padrão: 72. |
callbackUrl | string | false | A URL para a qual o widget envia seu cliente de volta quando ele termina ou sai do fluxo. A Belvo adiciona o resultado como parâmetros de consulta. A URL deve usar https, não deve conter credenciais e pode ter no máximo 2048 caracteres. Você só pode defini-la quando criar o link. Para detalhes, veja Como lidar com o redirecionamento para sua URL de callback. |
Todos os termos são opcionais. O widget só mostra os termos que você envia, então envie todos os termos que se aplicam ao acordo com seu cliente.
Envie chargeAmount como um número JSON (por exemplo, 420.00), não como uma string. A Belvo rejeita valores pré-formatados como "$420.00 MXN" ou "420.00". O valor está sempre em pesos mexicanos (MXN), e a Belvo o formata para seu cliente.
Envie chargeType e paymentFrequency em maiúsculas (por exemplo, RECURRING e MONTHLY). A Belvo rejeita valores em minúsculas.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| string (enum) | O tipo de cobrança que seu cliente autoriza. Pode ser um dos seguintes:
Para |
chargeAmount | number | O valor de cada cobrança, em MXN. Deve ser pelo menos 1. A Belvo arredonda para duas casas decimais. Por exemplo, 1234.5 é mostrado para seu cliente como "$1,234.50 MXN". |
paymentFrequency | string (enum) | Com que frequência você cobra seu cliente. Pode ser um dos seguintes: MONTHLY (mostrado como "Mensual"), BIWEEKLY (mostrado como "Quincenal"), ou WEEKLY (mostrado como "Semanal"). |
serviceOrCreditDescription | string | Uma descrição do serviço ou crédito, em espanhol. Por exemplo, Préstamo personal. |
termDescription | string | Uma descrição do prazo do acordo, em espanhol. Por exemplo, 12 meses. |
interestRate | string | A taxa de juros, formatada como você deseja que seu cliente a leia. Por exemplo, 1,0% mensual. |
numberOfCharges | integer | O número total de cobranças. Deve ser pelo menos 1. |
firstChargeDate | string | A data da primeira cobrança, no formato YYYY-MM-DD. Por exemplo, 2026-11-10. |
isPayrollLinked | boolean | Indica se o crédito está vinculado à folha de pagamento do seu cliente. |
Seu cliente só pode abrir o contrato completo de débito direto (Revisar contrato de domiciliación) quando o link tiver um chargeAmount, e também um paymentFrequency para cobranças RECURRING. Certifique-se de enviar esses termos.
Você receberá a seguinte resposta da nossa API. Certifique-se de salvar o id para verificar o status do link mais tarde, e enviar o consentLinkUrl para seu cliente.
{
"id": "b8e1c2f4-5a6d-4e7f-8a9b-0c1d2e3f4a5b",
"consentLinkUrl": "https://portal.sandbox.directdebit.belvo.com/consent.html?token=aB3dE6fG9hJ2kL5mN8pQ1rS4",
"status": "active",
"step": "bank_account",
"customerId": "0d1a377b-b4c5-4a94-9e2e-83e59d1f6a9c",
"terms": {
"chargeType": "RECURRING",
"chargeAmount": 420,
"paymentFrequency": "MONTHLY",
"serviceOrCreditDescription": "Préstamo personal",
"termDescription": "12 meses",
"interestRate": "1,0% mensual",
"numberOfCharges": 12,
"firstChargeDate": "2026-11-10",
"isPayrollLinked": false
},
"expiresAt": "2026-10-03T15:00:00.000Z",
"callbackUrl": "https://www.your-app.com/direct-debit/return"
}| Parâmetro | Tipo | Descrição |
|---|---|---|
id | string (UUID) | O ID da Belvo do link de consentimento. |
consentLinkUrl | string | A URL que você envia para seu cliente. |
status | string | O status do link. Para os valores possíveis, veja Status dos links de consentimento. |
step | string | A tela em que seu cliente está enquanto o link está active. Para os valores possíveis, veja Etapas dos links de consentimento. |
customerId | string (UUID) | O customerId ao qual o link pertence. |
terms | object | Os termos, exatamente como você os enviou. |
expiresAt | string | O timestamp ISO-8601 quando o link expira. |
completedAt | string | O timestamp ISO-8601 quando seu cliente completou o link. Presente apenas para links completed. |
callbackUrl | string | A URL de callback, se você definiu uma. |
Envie o consentLinkUrl para seu cliente por SMS, email ou WhatsApp, ou redirecione-o a partir do seu aplicativo. O widget funciona em qualquer navegador móvel ou desktop, está em espanhol e não requer que seu cliente faça login.
Qualquer pessoa com o consentLinkUrl pode abrir o widget para seu cliente. Envie-o apenas para seu cliente e não o registre ou adicione a ferramentas de análise. Se você achar que um link foi compartilhado com a pessoa errada, revogue-o e crie um novo. Veja Gerenciar links de consentimento.
Seu cliente passa pelas seguintes telas. O widget salva o progresso deles, então, se fecharem a página e abrirem o link novamente antes que ele expire, continuarão na mesma tela.
A tela de boas-vindas explica como o processo funciona:
- Seu cliente confirma e revisa o débito direto.
- A Belvo deposita $0,01 MXN na conta deles, com um código.
- Seu cliente insere o código para autorizar o débito direto.
Para continuar, seu cliente deve aceitar os Termos e Condições e o Aviso de Privacidade da Belvo.
Se você definir um callbackUrl, uma seta para trás permite que seu cliente saia do fluxo. A Belvo os redireciona para o seu callbackUrl com status=cancelled&error=user_cancelled.

O widget mostra o nome completo do seu cliente e o RFC ou CURP mascarado do registro do cliente. Seu cliente não pode editar esses valores.
Seu cliente insere sua CLABE de 18 dígitos. O widget verifica se a CLABE é válida, e a Belvo identifica o banco a partir dela. A conta deve estar no nome do seu cliente. Links de consentimento aceitam apenas contas CLABE, não cartões de débito.
Quando seu cliente toca em Continuar, a Belvo cria o método de pagamento e imediatamente envia o depósito de $0,01 MXN com o código.
Se o nome ou ID estiver errado, seu cliente pode tocar em No soy yo e depois em Salir sin autorizar. A Belvo os redireciona para o seu callbackUrl com status=cancelled&error=customer_data_mismatch. Corrija os dados do cliente e crie um novo link.

O widget mostra um resumo dos termos que você enviou, junto com o número da conta mascarado, o banco e o nome da sua empresa como beneficiário. Ele também informa ao seu cliente que nada será cobrado hoje.
Para cobranças RECURRING, o título diz "Revisa y autoriza tus cargos recurrentes". Para cobranças SINGLE, diz "Revisa y autoriza tu cargo único". O resumo possui apenas uma linha para cada termo que você enviou.
Quando seu cliente toca em Continuar, ele aceita a autorização. A Belvo sela o documento de autorização e o armazena como o arquivo contract do consentimento.

Cobrança única
Este link de exemplo tem "chargeType": "SINGLE" e envia apenas chargeAmount e firstChargeDate, então o resumo mostra o valor, a data da cobrança, a conta e o beneficiário.

Revisão do contrato
Com Revisar contrato de domiciliación, seu cliente lê o contrato completo de débito direto, preenchido com seus dados e seus termos, e pode baixar uma cópia em PDF antes de aceitar.

Se o depósito ainda não chegou, o widget informa ao seu cliente para procurar um depósito de $0,01 MXN no aplicativo bancário. O código está na descrição da transação.
O widget verifica o depósito automaticamente e avança para a próxima tela quando ele chega. Se o depósito já tiver chegado enquanto seu cliente estava revisando a autorização, o widget pula esta tela.

Seu cliente insere o código de 6 dígitos da descrição do depósito e toca em Autorizar. Inserir o código é a assinatura eletrônica do seu cliente para a autorização.
Seu cliente tem 3 tentativas para inserir o código correto. Se não conseguir encontrar o depósito, No recibí el depósito explica onde encontrar o código. Se seu cliente inseriu a CLABE errada, o depósito nunca chega. Eles podem encerrar o fluxo a partir do mesmo diálogo, e você precisará criar um novo link para eles.

Quando o código está correto, o consentimento é confirmado e o link é completed. O widget mostra um resumo dos termos autorizados.
Quando seu cliente toca em Cerrar, a Belvo os redireciona para o seu callbackUrl com status=completed.

Contrato assinado
Com Contrato de domiciliación, seu cliente vê a evidência da assinatura eletrônica: a data e hora da assinatura (horário da Cidade do México), o folio da assinatura, o dispositivo, um endereço IP mascarado e os detalhes do depósito de verificação. Eles também podem baixar o contrato assinado como um PDF.

Link indisponível
O widget exibe esta tela quando o link está expirado, revogado, já concluído, falhou ou é inválido. Por razões de segurança, o widget mostra a mesma mensagem em todos os casos. Seu cliente é solicitado a pedir um novo link para você.

Falha na autorização
O widget exibe esta tela quando a Belvo não consegue completar uma ação enquanto seu cliente está no fluxo, por exemplo, quando a validação da conta falha após a submissão do CLABE. A tela inclui um ID que seu cliente pode compartilhar com o suporte da Belvo em cobros@belvo.com.

Se você definir um callbackUrl, a Belvo redireciona seu cliente para ela quando ele termina ou sai do fluxo. A Belvo mantém quaisquer parâmetros de consulta que sua URL já tenha e adiciona os seguintes:
status | error | Quando |
|---|---|---|
completed | Não presente | Seu cliente autorizou o débito direto e tocou em Cerrar na tela de confirmação. |
cancelled | user_cancelled | Seu cliente saiu da tela de boas-vindas. |
cancelled | customer_data_mismatch | Seu cliente informou que o nome ou ID no widget não é dele. |
https://www.your-app.com/direct-debit/return?status=completedO redirecionamento nunca inclui o token de link ou quaisquer dados do cliente.
Use o redirecionamento para atualizar sua interface de usuário, mas sempre confirme o resultado com a API ou webhooks antes de criar solicitações de pagamento. Qualquer pessoa pode abrir sua URL de callback com quaisquer parâmetros, e seu cliente pode fechar a página sem ser redirecionado. Além disso, ignore quaisquer valores de parâmetros que você não reconheça, pois podemos adicionar novos.
Um link de consentimento cria um método de pagamento regular e consentimento, então você recebe os mesmos webhooks que no fluxo de Pagamentos por Débito Direto via API:
consent_updatecomconsent_confirmed: Seu cliente inseriu o código correto e o consentimento está confirmado. O campodetails.idé oconsentIdedetails.paymentMethodIdé o método de pagamento que o link criou.payment_method_updatecompayment_method_registration_successfuloupayment_method_registration_failed: O resultado da validação da conta. Métodos de pagamento criados por um link de consentimento têmConsentLinkcomo suareference.
Para payloads completos de webhooks, veja nossa documentação de Webhooks de Pagamento (México).
Para verificar o status do link a qualquer momento, faça uma chamada GET /consents/links/{id}. Um status completed significa que seu cliente finalizou o fluxo.
curl -i -X GET \
'https://api.sandbox.directdebit.belvo.com/consents/links/{id}' \
-H 'api-key-id: YOUR_API_KEY_ID' \
-H 'api-key-secret: YOUR_API_KEY_SECRET'Para identificar o método de pagamento que o link criou, use o valor details.paymentMethodId do webhook consent_confirmed. Não procure apenas pelo customer_id, pois seu cliente pode ter mais de um método de pagamento. Para confirmar a qual cliente o método de pagamento pertence, faça uma chamada GET para obter os detalhes de um método de pagamento e compare seu customer com o customerId do link. Isso apenas confirma o cliente: se você criou mais de um link de consentimento para o mesmo cliente, isso não indica qual link criou o método de pagamento.
Seu cliente autorizou o débito direto, e você tem um método de pagamento com consentimento confirmado. Agora você pode criar solicitações de pagamento para este cliente.
No Sandbox, a Belvo não envia um depósito real de $0,01 MXN, então você não pode ler um código de um extrato bancário. Em vez disso, você controla o resultado do fluxo com a CLABE e o código que seu testador insere no widget. Use o consentLinkUrl que você obtém da API do Sandbox.
Insira uma das seguintes CLABEs na tela de dados pessoais e CLABE:
| CLABE | Resultado |
|---|---|
012180000000000015 | A validação da conta falha. O método de pagamento é failed, o status do link muda para failed, e o widget mostra uma tela de erro. Para mais detalhes, veja Telas de erro. |
012180000000000028 | O depósito nunca chega. O método de pagamento permanece em pending_validation, e o link fica na etapa awaiting_deposit até expirar. Use-o para testar a tela de espera. |
| Qualquer outra CLABE válida | O depósito chega imediatamente. O link avança para a etapa de verification assim que seu testador aceita a autorização, e o widget pula a tela de espera. |
Os métodos de pagamento que você cria com essas CLABEs usam failed ou pending como sua reference em vez de ConsentLink. As CLABEs mágicas funcionam apenas no Sandbox. Em Produção, a Belvo as trata como qualquer outra CLABE.
No Sandbox, o código de verificação é sempre 123456. Insira qualquer outro código para testar a mensagem de código incorreto. Seu testador tem 3 tentativas para inserir o código correto.
- Expirado: crie um link com
"expiresIn": 1e abra-o após uma hora. - Revogado: faça uma chamada
POST /consents/links/{id}/revokee, em seguida, abra o link.
| Status | Descrição |
|---|---|
active | O link pode ser usado. Verifique step para ver em qual tela seu cliente está. |
completed | Seu cliente autorizou o débito direto. O consentimento está confirmado. |
expired | O link atingiu sua data de expiresAt antes de seu cliente completá-lo. |
revoked | Você revogou o link. |
failed | A validação da conta falhou, por exemplo, porque o titular da conta não corresponde ao cliente. Crie um novo link para que seu cliente possa tentar novamente com uma conta diferente. |
Apenas links active podem ser abertos. Para qualquer outro status, o widget mostra a tela Link indisponível.
| Etapa | Descrição |
|---|---|
bank_account | Seu cliente ainda não enviou sua CLABE. |
authorization | Seu cliente enviou sua CLABE e está revisando a autorização. |
awaiting_deposit | Seu cliente aceitou a autorização e está aguardando o depósito de $0,01 MXN. |
verification | O depósito chegou e seu cliente deve inserir o código. |
Quando um link está completed, step mantém a última etapa em que seu cliente estava. Sempre verifique status primeiro.
| Requisição | Descrição |
|---|---|
GET /consents/links | Lista seus links de consentimento, paginados. Suporta os parâmetros de consulta page e limit. |
GET /consents/links/{id} | Obtém os detalhes de um link de consentimento. |
POST /consents/links/{id}/revoke | Revoga um link de consentimento. O link não poderá mais ser aberto. Revogar um link não altera um método de pagamento ou consentimento que o link já criou. |
| Status HTTP | Descrição |
|---|---|
400 | O corpo da solicitação é inválido. Por exemplo, chargeAmount é uma string ou menor que 1, chargeType está em minúsculas, ou callbackUrl não usa https. |
404 | O cliente ou link de consentimento não existe ou não pertence à sua conta. |