Documentação da API

DSV Digi — integração de simulação e digitação de propostas

Produto: FGTS Produto: CLT Atualizado em 26/08/2026

Autenticação

Todas as requisições exigem o envio do header abaixo:

HTTP HEADER
Authorization: Bearer TOKEN_DA_API
🔑
Substitua TOKEN_DA_API pelo token de autorização fornecido pela DSV Digi. Ele libera o acesso à API e é o mesmo para toda a integração — vale para todos os endpoints desta documentação, FGTS e CLT.
⚠️
Não confunda com o api_token. São dois tokens diferentes e ambos são necessários:
Authorization: Bearer TOKEN_DA_API (header) — autoriza o acesso à API.
api_token: "TOKEN_DO_USUARIO" (corpo da requisição) — identifica qual usuário está operando e define as permissões dele.
🔒
Guarde os dois tokens em variáveis de ambiente. Nunca os publique em repositórios, prints ou páginas públicas.

GET Método: Simulação FGTS

Endpoint

GEThttps://api.dsvdigi.com.br/webhook/consulta-saldo

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição // obrigatório indica campo obrigatório

JSON
{
  "cpf": "00000000000",  // obrigatório
  "bank": "bmp",  // obrigatório
  "desired_value": "",
  "api_token": "TOKEN_DO_USUARIO"  // obrigatório
}
ℹ️
Ao realizar a simulação sem fornecer o valor desejado desired_value, a simulação será realizada com todo o valor disponível para o cliente.

Retorno de Sucesso

JSON · 200 OK
{
  "cpf": "12345678910",
  "message": "Saldo consultado com sucesso!",
  "returned_an_error": false,
  "available_balance": "141.51",
  "status_code": "200",
  "simulation_id": "a81ec9bc-fcec-4b7b-92db-025e851f6b7e",
  "net_value": "87.73",
  "gross_value": "153.66",
  "monthly_cet": "4.55367",
  "annual_cet": "70.6362",
  "monthly_fee": "1.79",
  "annual_interest": "23.72611",
  "tc_value": "53.78",
  "iof_value": "4.76",
  "interest_value": "105.36",
  "blocked_balance": "259.02",
  "table_id": "9baa1f9f-08ff-4578-a96d-e6457bc2ca76",
  "table_name": " OF THE KING THE POWER THE BEST 50,00 a 250,00",
  "tc_percentage": "tc_percentage = 35",
  "allow_simulate_by_installments": "false",
  "min_installment_amount": "1",
  "max_installment_amount": "12",
  "installments": [
    {
      "date": "2026-04-01",
      "available_value": 78.06,
      "released_value": 64.11703
    }
    // ...
  ]
}

POST Método: Cadastrar Proposta FGTS

Endpoint

POSThttps://api.dsvdigi.com.br/webhook/cadastrar-proposta

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição // obrigatório indica campo obrigatório

Nome, CPF, Data de nascimento, Celular/Whatsapp e dados bancários. Enviar dados reais do cliente. O campo simulation.id deve ser o mesmo retornado no Método: Simulação.

JSON
{
  "api_token": "TOKEN_DO_USUARIO",  // obrigatório
  "customer": {
    "pf": {
      "name": "João Paulo",  // obrigatório
      "cpf": "12345678910",  // obrigatório
      "birth_date": "1992-04-27",  // obrigatório
      "gender": "M",  // obrigatório
      "civil_status_id": "2",  // obrigatório
      "scholarity_id": "8",  // obrigatório
      "rg_number": "123456",
      "rg_organ": "SSP",
      "rg_uf": "SP"
    },
    "contacts": {
      "email": "emaildocliente@email.com",  // obrigatório
      "celphone": "11999999999"  // obrigatório
    },
    "address": {
      "zipcode": "04107030",  // obrigatório
      "street": "Rua Guimarães Passos",  // obrigatório
      "district": "Vila Mariana",  // obrigatório
      "uf": "SP",  // obrigatório
      "number": "323",  // obrigatório
      "complement": "Casa",  // obrigatório
      "city": "São Paulo"  // obrigatório
    },
    "account": {
      "bank_id": "341",  // obrigatório
      "type": "CCT",  // obrigatório
      "agency": "0001",  // obrigatório
      "agency_digit": "0",  // obrigatório
      "account_number": "0045958",  // obrigatório
      "account_digit": "0"  // obrigatório
    }
  },
  "simulation": {
    "id": "a81ec9bc-fcec-4b7b-92db-025e851f6b7e"  // obrigatório
  }
}

Retorno de Sucesso

JSON
[
  {
    "data": {
      "proposal_code": "366dc20e-af9f-4ff3-a953-8939cabea3cf"
    },
    "message": "Proposta cadastrada com sucesso!"
  }
]

POST Método: Cadastrar Proposta (PIX) FGTS

Idêntico ao Método: Cadastrar Proposta, exceto pelo objeto account, que agora recebe uma chave PIX em vez dos dados bancários (banco, agência e conta).

Endpoint

POSThttps://api.dsvdigi.com.br/webhook/cadastrar-proposta-pix

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição // obrigatório indica campo obrigatório

Nome, CPF, Data de nascimento, Celular/Whatsapp e chave PIX. Enviar dados reais do cliente. O campo simulation.id deve ser o mesmo retornado no Método: Simulação.

JSON
{
  "api_token": "TOKEN_DO_USUARIO",  // obrigatório
  "customer": {
    "pf": {
      "name": "João Paulo",  // obrigatório
      "cpf": "12345678910",  // obrigatório
      "birth_date": "1992-04-27",  // obrigatório
      "gender": "M",  // obrigatório
      "civil_status_id": "2",  // obrigatório
      "scholarity_id": "8",  // obrigatório
      "rg_number": "123456",
      "rg_organ": "SSP",
      "rg_uf": "SP"
    },
    "contacts": {
      "email": "emaildocliente@email.com",  // obrigatório
      "celphone": "11999999999"  // obrigatório
    },
    "address": {
      "zipcode": "04107030",  // obrigatório
      "street": "Rua Guimarães Passos",  // obrigatório
      "district": "Vila Mariana",  // obrigatório
      "uf": "SP",  // obrigatório
      "number": "323",  // obrigatório
      "complement": "Casa",  // obrigatório
      "city": "São Paulo"  // obrigatório
    },
    "account": {
      "pix_key": "11999999999",  // obrigatório
      "pix_key_type": "phone"  // obrigatório
    }
  },
  "simulation": {
    "id": "a81ec9bc-fcec-4b7b-92db-025e851f6b7e"  // obrigatório
  }
}

Retorno de Sucesso

JSON
[
  {
    "data": {
      "proposal_code": "366dc20e-af9f-4ff3-a953-8939cabea3cf"
    },
    "message": "Proposta cadastrada com sucesso!"
  }
]

Tipos de Chave PIX pix_key_type

TipoValorFormato esperado em pix_key
emailE-mailemaildocliente@email.com
phoneTelefoneApenas números, com DDD — 11999999999
randomChave aleatóriaUUID — 123e4567-e12b-12d1-a456-426655440000
cpfCPFApenas números — 12345678910
cnpjCNPJApenas números — 12345678000199

POST Método: Buscar Dados da Proposta FGTS CLT

♻️
Endpoint compartilhado: funciona tanto para propostas FGTS quanto CLT.

Endpoint

POSThttps://api.dsvdigi.com.br/webhook/buscar-dados-proposta

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição

JSON
{
  "cpf_proposta": "00000000000",
  "api_token": "TOKEN_DO_USUARIO"
}

Retorno de Sucesso

JSON · 200 OK
{
  "success": true,
  "returned_an_error": false,
  "status_code": 200,
  "message": "Proposta encontrada",
  "ccb": "00012345",
  "status": "Cancelada",
  "cpf_proposta": "123.456.789-00",
  "nome": "João Paulo da Silva",
  "email": "",
  "celular": "11999999999",
  "valor_proposta": "400",
  "link_assinatura": "https://assinar.io/123456"
}

GET Método: Consultar CCB / Pegar link FGTS CLT

♻️
Endpoint compartilhado: funciona tanto para propostas FGTS quanto CLT.

Endpoint

GEThttps://api.dsvdigi.com.br/webhook/consulta-proposta

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição

JSON
{
  "api_token": "TOKEN_DO_USUARIO",
  "ccb": "00000000"
}

Retorno de Sucesso

JSON
{
  "ccb": "A0001234",
  "status": "Cancelada",
  "link_assinatura": "https://assinar.io/123456",
  "mensagem_pendencia": "teste"
}

Fluxo CLT CLT

Como funciona o fluxo de simulação CLT

A simulação CLT segue uma sequência de chamadas encadeadas. Dois identificadores request_uuid circulam pelo fluxo — acompanhe as etiquetas A e B abaixo para saber qual usar em cada passo.

1
Gerar Termo · GET /solicitar-termo
Retorna uuid e journeyUrl. O cliente assina o termo de autorização pela journeyUrl.
2
Solicitar Vínculo · POST /solicitar-vinculo
Feito após o termo assinado. Retorna o request_uuid A.
3
Dados da Simulação (1ª chamada) · POST /dados-simulacao
Usa o A. Traz registration e employer_document, mas a margem ainda vem null ("tente novamente em instantes").
4
Solicitar Detalhamento · POST /solicitar-detalhamento
Usa o A + registration + employer_document. A resposta devolve um novo request_uuid B.
5
Dados da Simulação (2ª chamada) · POST /dados-simulacao
Chama de novo com o A. Agora a margem vem preenchida (availableMarginValue, baseMarginValue) junto dos dados do trabalhador.
6
Simular · POST /simular
Com a margem em mãos e o B, já dá pra simular. Envia cpf, o B, o installment_value (normalmente o availableMarginValue) e o bankbmp ou uy3.
7
Cadastrar Proposta · POST /cadastro-proposta
Com o simulation_id da tabela/prazo escolhida no passo 6 (obrigatório) e os dados do cliente, cadastra a proposta. Retorna o proposal_code.
ℹ️
Resumindo os dois identificadores: o A (de /solicitar-vinculo) é usado nas duas chamadas de /dados-simulacao e no /solicitar-detalhamento. O B (de /solicitar-detalhamento) é usado só no /simular.
🏦
Escolha do banco. Os passos 1 a 5 são iguais para os dois bancos — não é preciso repetir o fluxo. O banco só é definido no passo 6, pelo campo bank. Os mesmos A e B servem para simular tanto na bmp quanto na uy3, então dá pra chamar o /simular duas vezes — uma para cada banco — e comparar as ofertas antes de cadastrar a proposta.

GET Passo 1 · Gerar Termo de Autorização CLT

Gera o termo de autorização. O cliente assina pela journeyUrl retornada. Só após a assinatura siga para o passo 2.

Endpoint

GEThttps://api.dsvdigi.com.br/webhook/solicitar-termo

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição // obrigatório indica campo obrigatório

JSON
{
  "cpf": "12345678900",  // obrigatório
  "name": "João Paulo da Silva",  // obrigatório
  "email": "emaildocliente@email.com",  // obrigatório
  "celphone": "11999999999",  // obrigatório
  "organ_name": "econsignado",  // obrigatório
  "api_token": "TOKEN_DO_USUARIO"  // obrigatório
}

Retorno de Sucesso

JSON · 201 Created
{
  "status": "success",
  "returned_an_error": false,
  "statusCode": 201,
  "message": "Solicitação de autorização realizada com sucesso!",
  "body": {
    "data": {
      "uuid": "3f9a2b7c-1d4e-4a8f-9c2b-7e5d6a1b8c3d",
      "journeyUrl": "https://assinar.io/123456"
    },
    "message": "Solicitação de autorização realizada com sucesso!"
  }
}

POST Passo 2 · Solicitar Vínculo Empregatício CLT

Executado depois que o cliente assina o termo. Retorna o request_uuid A, reutilizado nos passos 3, 4 e 5.

Endpoint

POSThttps://api.dsvdigi.com.br/webhook/solicitar-vinculo

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição // obrigatório indica campo obrigatório

JSON
{
  "cpf": "12345678900",  // obrigatório
  "api_token": "TOKEN_DO_USUARIO"  // obrigatório
}
ℹ️
Não é preciso informar o banco aqui. Uma única solicitação de vínculo atende os dois bancos — a escolha entre bmp e uy3 acontece só no passo 6.

Retorno de Sucesso

JSON · 200 OK
{
  "status": "success",
  "returned_an_error": false,
  "statusCode": 200,
  "message": "Vinculos empregatícios solicitados com sucesso!",
  "body": {
    "data": {
      "request_uuid": "8c2b7e5d-6a1b-4c3d-9f9a-2b7c1d4e4a8f"  // este é o request_uuid A
    }
  }
}

POST Passos 3 e 5 · Dados da Simulação CLT

Este endpoint é chamado duas vezes com o mesmo request_uuid A: a 1ª (passo 3) traz os dados do vínculo para o detalhamento; a 2ª (passo 5, após o detalhamento) traz a margem.

Endpoint

POSThttps://api.dsvdigi.com.br/webhook/dados-simulacao

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição

🔗
O request_uuid é o A, retornado em /solicitar-vinculo (passo 2).
JSON
{
  "request_uuid": "8c2b7e5d-6a1b-4c3d-9f9a-2b7c1d4e4a8f",  // request_uuid A (de /solicitar-vinculo)
  "api_token": "TOKEN_DO_USUARIO"
}

Retorno · 1ª chamada (passo 3 — ainda sem margem)

A margem vem null. Guarde o registration e o employer_document para o passo 4.

JSON · 200 OK
{
  "status": "success",
  "returned_an_error": false,
  "statusCode": 200,
  "message": "Dados retornados com sucesso! Para obter a margem tente novamente em instantes.",
  "data": {
    "availableMarginValue": null,
    "baseMarginValue": null,
    "eligible": "sim",
    "employer_document": "12345678",  // use no passo 4
    "employer_type_txt": "CNPJ",
    "registration": "MATRIZ0000000000A",  // use no passo 4
    "totalEarnings": null,
    "worker_name": null,
    "worker_motherName": null,
    "worker_birthDate": null
  }
}

Retorno · 2ª chamada (passo 5 — com margem)

Após o detalhamento, repita a chamada. Agora a margem e os dados do trabalhador vêm preenchidos.

JSON · 200 OK
{
  "status": "success",
  "returned_an_error": false,
  "statusCode": 200,
  "message": "Dados retornados com sucesso!",
  "data": {
    "availableMarginValue": 769.93,  // margem — vira o installment_value no passo 6
    "baseMarginValue": 2678.38,
    "eligible": "sim",
    "employer_document": "12345678",
    "employer_type_txt": "CNPJ",
    "registration": "MATRIZ0000000000A",
    "totalEarnings": 3897.32,
    "worker_name": "João Paulo da Silva",
    "worker_motherName": "Maria da Silva",
    "worker_birthDate": "1990-01-15"
  }
}

POST Passo 4 · Solicitar Detalhamento CLT

Dispara o detalhamento do vínculo. A resposta devolve um novo request_uuid B, que será usado no /simular. Depois deste passo, repita o /dados-simulacao (passo 5) para obter a margem.

Endpoint

POSThttps://api.dsvdigi.com.br/webhook/solicitar-detalhamento

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição

🔗
Reúne o request_uuid A (passo 2) com o registration e o employer_document retornados no /dados-simulacao (passo 3).
JSON
{
  "request_uuid": "8c2b7e5d-6a1b-4c3d-9f9a-2b7c1d4e4a8f",  // request_uuid A (passo 2)
  "registration": "MATRIZ0000000000A",  // do passo 3
  "employer_document": "12345678",  // do passo 3
  "api_token": "TOKEN_DO_USUARIO"
}

Retorno de Sucesso

JSON · 200 OK
{
  "status": "success",
  "returned_an_error": false,
  "statusCode": 200,
  "message": "Detalhes do vínculo empregatício solicitado com sucesso!",
  "body": {
    "data": {
      "request_uuid": "d5e6f7a8-9b0c-4d1e-8f2a-3b4c5d6e7f80"  // este é o request_uuid B — use no passo 6
    }
  }
}

POST Passo 6 · Simular CLT

Passo final da simulação. Com a margem obtida (passo 5), o request_uuid B (passo 4) e o banco escolhido em bank, realiza a simulação.

Endpoint

POSThttps://api.dsvdigi.com.br/webhook/simular

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição // obrigatório indica campo obrigatório

🔗
O request_uuid é o B (de /solicitar-detalhamento) e o installment_value costuma ser o availableMarginValue retornado no /dados-simulacao.
JSON
{
  "cpf": "12345678900",  // obrigatório
  "request_uuid": "d5e6f7a8-9b0c-4d1e-8f2a-3b4c5d6e7f80",  // request_uuid B (do passo 4)
  "installment_value": 769.93,  // = availableMarginValue (passo 5)
  "bank": "bmp",  // obrigatório — "bmp" ou "uy3"
  "api_token": "TOKEN_DO_USUARIO"  // obrigatório
}
🏦
Campo bank — define em qual banco a simulação será feita. Aceita apenas bmp ou uy3. As tabelas e taxas retornadas correspondem ao banco informado. Como os passos 1 a 5 são comuns aos dois, você pode chamar este endpoint duas vezes com os mesmos identificadores — trocando só o bank — para comparar as ofertas.

Retorno de Erro · bank ausente ou inválido

Se o bank não for enviado, vier vazio ou trouxer um valor diferente de bmp / uy3, a requisição é recusada antes de chegar ao banco:

JSON
{
  "message": "bank é obrigatório e deve ser bmp ou uy3",
  "returned_an_error": true
}

Retorno de Sucesso

O retorno traz em body.data.data um array com uma opção de simulação por tabela/prazo. Cada item tem os dados da table (id, nome, prazo) e o simulation.payload com o cronograma de installments, os valores (net_value, gross_value, installment_value), CET, IOF, seguro e o simulation_id — que identifica aquela simulação para seguir com a proposta. Abaixo, uma tabela de exemplo do banco bmp (o array se repete para os demais prazos):

JSON · 200 OK
{
  "status": "success",
  "returned_an_error": false,
  "statusCode": 200,
  "message": "Simulação realizada com sucesso!",
  "body": {
    "data": {
      "data": [
        {
          "error": false,
          "table": {
            "id": "9559d2fb-f2aa-4b04-894b-a2d85012ab7f",
            "name": "BMP 12x H",  // a tabela corresponde ao bank informado
            "monthly_fee": 4.52,
            "term": 12,
            "fund_id": 43
          },
          "simulation": {
            "payload": {
              "installments": [
                {
                  "deadline": 73,
                  "value": 596.95,
                  "interest_value": 578.17,
                  "amortization_value": 18.78,
                  "due_date": "2026-09-23T00:00:00"
                },
                {
                  "deadline": 30,
                  "value": 596.95,
                  "interest_value": 229.25,
                  "amortization_value": 367.7,
                  "due_date": "2026-10-23T00:00:00"
                }
                // ... demais parcelas do prazo
              ],
              "net_value": 4217.67,
              "gross_value": 5090.73,
              "installment_value": 596.95,
              "monthly_cet": 4.95002,
              "annual_cet": 78.5626,
              "monthly_fee": 4.52,
              "annual_interest": 69.98,
              "iof_value": 128.76,
              "first_due_date": "2026-09-23T00:00:00",
              "simulation_id": "94b16220-f372-4552-9d4a-a14e807e08aa",  // identifica esta simulação
              "insurance_percentage": 15,
              "insurance_value": 744.3,
              "use_desired_value": false,
              "dataprev_discount_start_period": null
            },
            "error_description": []
          },
          "fund_rules_not_followed": []
        }
        // ... demais tabelas do banco informado
      ]
    }
  }
}

POST Passo 7 · Cadastrar Proposta CLT

Passo final do CLT. Com o simulation_id da tabela/prazo escolhida no /simular, cadastra a proposta com os dados do cliente. Envie dados reais do cliente.

⚠️
Atenção ao endpoint: aqui é cadastro-proposta (diferente do FGTS, que é cadastrar-proposta).
🏦
Não é preciso repetir o bank aqui. O simulation.id já carrega o banco escolhido no passo 6 — se você simulou nos dois, basta enviar o simulation_id da oferta que o cliente aceitou.

Endpoint

POSThttps://api.dsvdigi.com.br/webhook/cadastro-proposta

Header

HTTP HEADER
Authorization: Bearer TOKEN_DA_API

Corpo da Requisição

🔗
O simulation.id é obrigatório e corresponde ao simulation_id da tabela/prazo escolhida no /simular (passo 6). Os campos civil_status_id, scholarity_id e account.type seguem as Tabelas de Referência; datas no formato AAAA-MM-DD.
JSON
{
  "api_token": "TOKEN_DO_USUARIO",
  "customer": {
    "pf": {
      "civil_status_id": 1,
      "scholarity_id": 1,
      "rg_number": "12724375",
      "rg_organ": "ssp",
      "rg_uf": "sp",
      "rg_issue_date": "2016-01-25",
      "mother_name": "Maria da Silva"
    },
    "contacts": {
      "email": "emaildocliente@email.com",
      "celphone": "11999999999",
      "secondary_celphone": "11999999999"
    },
    "address": {
      "zipcode": "11080670",
      "street": "Rua Um",
      "district": "Morro Santa Maria",
      "uf": "SP",
      "number": "4",
      "complement": "Casa",
      "city": "Santos"
    },
    "account": {
      "bank_id": 36,
      "type": "CCT",
      "agency": "0045",
      "agency_digit": "0",
      "account_number": "0046439",
      "account_digit": "2"
    },
    "employer": {
      "email": "emailempregador@email.com",
      "phone": "11977777777"
    }
  },
  "simulation": {
    "id": "94b16220-f372-4552-9d4a-a14e807e08aa"  // obrigatório — simulation_id da tabela escolhida no /simular
  }
}

Retorno de Sucesso

JSON · 200 OK
{
  "status": "success",
  "returned_an_error": false,
  "statusCode": 200,
  "message": "Proposta cadastrada com sucesso!",
  "body": {
    "data": {
      "data": {
        "proposal_code": "3c23e081-6ccf-4d03-b6da-eb8ce0601d1f"
      }
    }
  }
}

Padrões de Campos

CampoFormatoExemplo
Data de NascimentoAAAA-MM-DD1992-04-27
CelularApenas números, com DDD11999999999

Bancos Disponíveis bank

Valores aceitos no campo bank, sempre em minúsculas.

ValorBancoOnde é usado
bmpBMPFGTS · /consulta-saldo
CLT · /simular
uy3UY3CLT · /simular
ℹ️
No fluxo CLT, o banco só é informado no /simular (passo 6). Os passos anteriores — termo, vínculo, dados da simulação e detalhamento — são únicos e valem para os dois bancos.

Tabelas de Referência

Gênero

CódigoValor
MMasculino
FFeminino

Estado Civil

IdValor
1Solteiro(a)
2Casado(a)
3Divorciado(a)
4Separado(a)
5Viúvo(a)
6Outros

Escolaridade

IdValor
1Maternal incompleto
2Maternal completo
3Ensino fundamental incompleto
4Ensino fundamental completo
5Ensino médio incompleto
6Ensino médio completo
7Ensino superior incompleto
8Ensino superior completo

Tipos de Conta Bancária

IdValor
CPPConta Poupança
CCTConta Corrente
CPGConta Pagamento