Para o Crédito do Trabalhador, desenvolvemos dois modelos principais de operação. Um deles inclui uma etapa de leilão interno, que tem como objetivo selecionar a melhor oferta para ser apresentada ao trabalhador.
Nessa modalidade, o trabalhador acessa o ambiente da Carteira de Trabalho Digital (CTPS Digital), onde informa o valor desejado e a quantidade de parcelas. A Dataprev encaminha essa solicitação a diversas instituições financeiras conveniadas, sendo que cada instituição pode enviar apenas uma oferta por solicitação.
Ao receber a solicitação, a Celcoin distribui a demanda entre os originadores participantes. Cada originador envia sua oferta, e a plataforma realiza um leilão interno, selecionando automaticamente a melhor condição com base em critérios como: valor liberado, número de parcelas e menor Custo Efetivo Total (CET).
A oferta vencedora é apresentada pela Dataprev ao trabalhador dentro do ambiente da Carteira de Trabalho Digital (CTPS Digital), que poderá escolher a instituição que considerar mais vantajosa e seguir com a contratação.
Entenda as etapas
- Configuração do Webhook — O time de Implantação realiza o cadastro do webhook do originador para recebimento das solicitações.
- Solicitação do tomador — O tomador solicita ofertas de crédito por meio da CTPS Digital.
- Distribuição das solicitações aos originadores — A Celcoin envia as solicitações para os originadores via webhook.
- Envio da oferta pelo originador — Com base na solicitação, o originador retorna com a oferta e o link para complementação do cadastro.
- Leilão de Propostas — A Celcoin avalia as ofertas recebidas e seleciona a melhor condição.
- Aceite da oferta pelo tomador — O tomador aceita a oferta pelo app da CTPS.
- Emissão da CCB — O originador realiza as chamadas nas rotas pertinentes para emissão da CCB.
- Assinatura da CCB — O tomador realiza a assinatura digital do contrato.
- Averbação — O contrato é registrado no sistema oficial do Crédito do Trabalhador.
- Desembolso — O valor contratado é depositado na conta do tomador.
- Envio do contrato — O contrato assinado é enviado ao órgão do sistema oficial do Crédito do Trabalhador.
1. Configuração do Webhook
O time de Implantação da Celcoin realiza o cadastro da URL de webhook do originador durante a etapa de onboarding. Esse webhook é utilizado para recebimento de dois eventos distintos:
GeneratedWorkersCreditOrder— Notificação de nova solicitação de crédito do trabalhadorWorkersCreditAuctionResult— Resultado do leilão após envio da oferta
Certifique-se de que a URL configurada esteja disponível e retorne HTTP 200 para confirmação de recebimento.
2. Solicitação do tomador
O trabalhador (tomador) acessa o app da Carteira de Trabalho Digital (CTPS Digital) e informa o valor desejado e a quantidade de parcelas. A Dataprev encaminha essa solicitação às instituições financeiras conveniadas.
3. Distribuição das solicitações aos originadores
Assim que a Celcoin recebe a solicitação enviada pela Dataprev, ela é distribuída automaticamente para os originadores cadastrados via webhook.
Evento: GeneratedWorkersCreditOrder
POST https://{webhook-cadastrado}
Exemplo de payload recebido:
{
"event": "GeneratedWorkersCreditOrder",
"payload": {
"id": "01d4889f-0000-0000-eb1b-7e3a4fc63649",
"employee": {
"code": "0123456789",
"document": "39213513836",
"name": "NOME DO TRABALHADOR"
},
"company": {
"code": "1",
"document": "416968000101",
"name": "Nome da Empresa",
"code_employee": "0123456789"
},
"birthday_date": "1987-10-06",
"available_balance": 2000,
"available_limit": 1500,
"installment_quantity": 12,
"request_date": "2025-05-30T18:49:10.000Z",
"eligible_loan": true,
"registration_date": "2020-01-01",
"politically_exposed_person": false,
"close_at": "2025-05-29T22:05:30.348Z"
}
}Parâmetros do payload:
| Campo | Descrição | Tipo |
|---|---|---|
event | Nome do evento enviado pelo webhook | String |
payload.id | Identificador único da solicitação de crédito | UUID |
payload.employee.code | Código interno do trabalhador | String |
payload.employee.document | CPF do trabalhador | String |
payload.employee.name | Nome completo do trabalhador | String |
payload.company.code | Código interno da empresa | String |
payload.company.document | CNPJ da empresa | String |
payload.company.name | Nome da empresa | String |
payload.company.code_employee | Código do trabalhador na empresa | String |
payload.birthday_date | Data de nascimento do trabalhador | YYYY-MM-DD |
payload.available_balance | Valor solicitado pelo tomador | Number |
payload.available_limit | Limite máximo disponível para contratação | Number |
payload.installment_quantity | Quantidade de parcelas solicitadas | Integer |
payload.request_date | Data e hora da solicitação | ISO 8601 |
payload.eligible_loan | Indica se o trabalhador está elegível para o empréstimo | Boolean |
payload.registration_date | Data de registro do trabalhador na empresa | YYYY-MM-DD |
payload.politically_exposed_person | Indica se o trabalhador é pessoa politicamente exposta | Boolean |
payload.close_at | Prazo limite para envio de ofertas | ISO 8601 |
Atenção: o campo
close_atindica o prazo máximo para que o originador envie sua oferta. Propostas recebidas após esse horário serão desconsideradas.
4. Envio da oferta pelo originador
Com base na solicitação recebida, o originador envia sua oferta para o leilão. Cada originador pode enviar apenas uma oferta por solicitação.
POST /banking/originator/workers-credit/proposal/{id}
O {id} corresponde ao payload.id recebido no evento GeneratedWorkersCreditOrder.
Exemplo de payload:
{
"installment_quantity": 10,
"installment_amount": 200,
"available_balance": 1200,
"amount": 1500,
"iof": 0,
"annual_tax": 1.2,
"cet": 1.1,
"interest_tax": 0.1,
"monthly_cet": 0.1,
"insurance_amount": 12,
"entry_url": "https://seusite.com.br/cadastro"
}Parâmetros:
| Campo | Descrição | Tipo |
|---|---|---|
installment_quantity | Quantidade de parcelas da oferta(> O limite máximo de parcelas permitido no Crédito do trabalhador é de 96) | Integer |
installment_amount | Valor de cada parcela | Number |
available_balance | Margem disponível no momento da proposta | Number |
amount | Valor total a ser liberado ao tomador | Number |
iof | Valor do IOF incluso na operação | Number |
annual_tax | Taxa de juros anual (%) | Number |
cet | Custo Efetivo Total anual (%) | Number |
interest_tax | Taxa de juros nominal mensal (%) | Number |
monthly_cet | Custo Efetivo Total mensal (%) | Number |
insurance_amount | Valor do seguro financiado incluso na operação | Number |
entry_url | URL de redirecionamento do tomador para complementação do cadastro | String |
O campo
entry_urlé obrigatório. Caso a oferta do originador seja a vencedora do leilão e o tomador a aceite, ele será redirecionado para essa URL para complementar o cadastro.
6. Leilão de Propostas
As ofertas recebidas dentro do prazo (close_at) são avaliadas automaticamente pela Celcoin. A plataforma seleciona a melhor condição com base nos critérios definidos (valor liberado, parcelas e CET). A oferta vencedora é encaminhada à Dataprev para ser apresentada ao trabalhador.
Após o encerramento do leilão, a Celcoin envia o resultado ao originador via webhook.
Evento: WorkersCreditAuctionResult
POST https://{webhook-cadastrado}
Exemplo de payload recebido:
{
"event": "WorkersCreditAuctionResult",
"payload": {
"id": "01d48dd3-0000-0000-eb1b-7e3a4fc63649",
"status": "APPROVED",
"timestamp": "2025-06-12T15:39:13.251Z",
"error_message": null
}
}Status possíveis:
| Status | Descrição |
|---|---|
APPROVED | Oferta venceu o leilão e foi enviada ao tomador via Dataprev |
DENIED | Oferta não foi selecionada no leilão |
ERROR | Oferta foi aprovada, mas a Dataprev retornou erro ao tentar enviá-la ao tomador |
| Campo | Descrição | Tipo |
|---|---|---|
event | Tipo do evento | String |
payload.id | ID da proposta enviada | UUID |
payload.status | Resultado do leilão | String |
payload.timestamp | Data/hora da finalização do leilão | ISO 8601 |
payload.error_message | Detalhe do erro (somente quando status = ERROR) | String |
7. Aceite da oferta pelo tomador
Após o envio da oferta vencedora à Dataprev, o tomador tem até 24 horas para aceitar uma das ofertas disponíveis no app da CTPS Digital.
Importante: o aceite da oferta pelo tomador não garante a emissão da CCB. Para que o empréstimo seja concluído com sucesso, ainda é necessário passar pelas etapas de KYC, assinatura do contrato, averbação e envio do contrato.
8. Emissão da CCB
POST /banking/originator/workers-credit/apply/{{id_proposta}}
Exemplo de payload:
{
"borrower_id": "UIID,
"product_id": "{{productId}}",
"entry_url": "https://seusite.com.br/cadastro",
"disbursement_date": "2026-04-20",
"funding_id": "{{fundingId}}",
"finance_fee": 0,
"first_payment_date": "2026-06-11",
"tac_amount": 0,
"signature_collect_method": "LINK",
"signature_provider": "UNICO",
"insurance_amount": 100,
"signature_authentication_options": {
"mode": "DOC_SIGN"
}
}9. Assinatura da CCB
O tomador realiza a assinatura digital do contrato por meio do provedor de assinatura passado no payload de emissão, para saber sobre os possivels métodos de assinatura, consulte Assinaturas
10. Averbação
Após a assinatura, a Celcoin aciona automaticamente a Dataprev para confirmação da margem consignável. Esse processo é assíncrono — a plataforma aguarda a resposta da Dataprev antes de avançar para o desembolso.
A aplicação ficará no status PENDING_GUARANTEE durante essa etapa.
11. Desembolso
Com a averbação confirmada, o valor contratado é depositado na conta do tomador conforme os dados fornecidos. A aplicação avança para o status PENDING_DISBURSEMENT e, após a liquidação, para ISSUED.
12. Envio do contrato
Com o contrato devidamente assinado e a averbação confirmada, a Celcoin envia o documento ao sistema oficial do Crédito do Trabalhador via Dataprev.
Ciclo de vida da aplicação
AGREEMENT_RENDERING → KYC_PROCESSING → PENDING_SIGNATURE → PENDING_QUALIFICATION → PENDING_GUARANTEE → PENDING_DISBURSEMENT → ISSUED
| Status | Descrição |
|---|---|
AGREEMENT_RENDERING | Contrato sendo gerado |
KYC_PROCESSING | Validação de identidade do tomador em andamento |
PENDING_SIGNATURE | Aguardando assinatura do contrato pelo tomador |
PENDING_QUALIFICATION | Aguardando Aprovação da operação (Status não é obrigatório) |
PENDING_GUARANTEE | Realizando a averbação do contrato na Dataprev |
PENDING_DISBURSEMENT | Realizando o desembolso |
ISSUED | CCB emitida e desembolso realizado |
Erros e Comportamentos — Leilão Interno
Esta página descreve os possíveis erros e comportamentos do sistema durante o processo de leilão interno do Crédito do Trabalhador.
Resultado do Leilão via Webhook
Após o encerramento do leilão, a Celcoin envia o resultado ao originador pelo evento WorkersCreditAuctionResult. O campo status indica se a oferta foi aprovada, negada ou se houve erro.
| Status | Descrição | O que fazer |
|---|---|---|
APPROVED | Oferta venceu o leilão e foi enviada ao tomador via Dataprev | Aguardar o aceite do tomador e iniciar o fluxo de emissão da CCB |
DENIED | Oferta não foi selecionada no leilão | Nenhuma ação necessária. A operação encerra aqui para esse originador |
ERROR | Oferta foi aprovada no leilão, mas a Dataprev retornou erro ao tentar enviá-la ao tomador | Verificar o campo error_message para identificar o motivo |
Exemplo de payload com erro:
{
"event": "WorkersCreditAuctionResult",
"payload": {
"id": "01d48dd3-0000-0000-eb1b-7e3a4fc63649",
"status": "ERROR",
"timestamp": "2025-06-12T15:39:13.251Z",
"error_message": "Request failed with status code 400"
}
}Erros ao Enviar a Oferta
Ao chamar o endpoint POST /banking/originator/workers-credit/proposal/{id}, a API pode retornar os seguintes erros HTTP:
| HTTP Status | Causa provável | O que fazer |
|---|---|---|
400 Bad Request | Payload inválido, campo obrigatório ausente ou fora do formato esperado | Revisar os campos enviados, especialmente cet, annual_tax, interest_tax e installment_amount |
404 Not Found | O id da proposta não existe ou já expirou (close_at ultrapassado) | Verificar se o id está correto e se o prazo da solicitação ainda está vigente |
409 Conflict | O originador já enviou uma oferta para essa solicitação | Cada originador pode enviar apenas uma oferta por solicitação |
422 Unprocessable Entity | Campos com valores inconsistentes entre si (ex: CET mensal maior que anual) | Revisar os valores financeiros informados |
Erros Retornados pela Dataprev
Quando o status do leilão é ERROR, o campo error_message pode conter um código de erro originado da Dataprev. A tabela abaixo lista os códigos possíveis.
| Código | Descrição |
|---|---|
AO | Nome inválido |
AP | Competência de início de desconto ou data de início/fim de contrato inválida |
AZ | Valores de número de parcelas e valor da parcela são iguais aos valores atuais do empréstimo |
BC | Requisição sem CBC ou CBC inválido |
BL | Valor da parcela inválido |
BQ | Valor liberado inválido |
CA | Código do banco inválido |
ES | Empregador suspenso para averbações de empréstimo |
EV | Um ou mais campos possuem valores inválidos |
HT | Início do desconto informado já ultrapassado |
HU | Vínculo inelegível para empréstimo pelo trabalhador |
HV | Quantidade de parcelas inválida |
HW | Margem consignável excedida |
HX | Empréstimo já cadastrado |
HY | Empréstimo inexistente |
IO | Valor do IOF inválido |
ME | Motivo de exclusão do empréstimo inválido |
NC | Requisição sem número de contrato |
OH | Número do contrato inválido |
ON | Operação não permitida |
OT | Tamanho de um ou mais campos incorreto |
OU | Taxa de juros anual inválida ou menor que a taxa mensal |
OV | Valor do custo efetivo (anual ou mensal) inválido |
OZ | Operação suspensa |
PI | Valor do empréstimo inválido. Deve ser maior que o valor de referência |
SB | Identificador da proposta inválido |
SF | CPF ausente ou com dígito verificador inválido |
SG | Código de inscrição do empregador deve ser informado |
SH | Número de inscrição do empregador deve ser informado |
SI | Matrícula do trabalhador deve ser informada |
SM | Proposta expirada |
SN | Proposta já utilizada para averbação de empréstimo |
TX | Valor da taxa de juros mensal inválido |
TO | Taxa de juros mensal maior que a informada na proposta |
TP | Data do primeiro desconto inválida |
Os erros da Dataprev são retornados no campo
error_messagedo eventoWorkersCreditAuctionResultquando ostatuséERROR.
Instabilidade na API da Dataprev
Em casos de instabilidade temporária:
- O sistema realiza tentativas automáticas de envio da oferta até o prazo
close_atda solicitação. - Se o prazo for atingido sem sucesso, o leilão é encerrado sem aprovação da oferta desse originador.
Oferta fora do prazo
Solicitações enviadas após o horário indicado em close_at são automaticamente desconsideradas. Nenhuma resposta de erro é enviada — o originador simplesmente não receberá o evento WorkersCreditAuctionResult com status APPROVED.
Monitore o campo
close_atrecebido no eventoGeneratedWorkersCreditOrdere garanta que sua oferta seja enviada com antecedência.
Diagrama de sequencia - Leilão