Início
Ambientes
| Ambiente | URL Base |
|---|---|
| Sandbox | https://api-bnpl.sandbox.geru.com.br/ |
| Produção | https://*** |
Autenticação
Todas as requisições à API exigem autenticação via Bearer Token ou API Key:
# Bearer Token
Authorization: Bearer <your-token>
# OU API Key
X-API-Key: <your-api-key>Máquina de Estados da Aplicação
Uma aplicação passa pelos seguintes estados durante seu ciclo de vida:
| # | Status | Descrição |
|---|---|---|
| 1 | APPLICATION_CREATED | Estado inicial após a criação da aplicação |
| 2 | APPLICATION_APPROVED | Modelo de crédito aprovou a aplicação (possui ofertas e limite disponível) |
| 3 | APPLICATION_DECLINED | Modelo de crédito recusou a aplicação (sem ofertas ou limite disponível) |
| 4 | APPLICATION_COMPLETED | Cliente selecionou uma oferta e a aplicação foi atualizada |
| 5 | CONTRACT_SIGNED | Cliente assinou o contrato com OTP |
| 6 | APPROVED | Análise antifraude aprovou a aplicação |
| 7 | DECLINED | Análise antifraude recusou a aplicação |
| 8 | SUBMITTED_TO_FI | Aplicação enviada para a instituição financeira |
| 9 | FUNDED | Empréstimo desembolsado com sucesso |
| 10 | CANCELLED | Aplicação foi cancelada |
| 11 | FUNDING_FAILED | Processo de desembolso falhou |
Passo 1: Verificar Elegibilidade do Cliente
Antes de iniciar a aplicação, verifique se o cliente é elegível para o BNPL:
POST /fastqualify{
"cpf": "78011189603"
}Resposta:
{
"status": "Eligible",
"person_id": "19474477-dc20-4b0a-9dfa-b3d3012c5401"
}
ObservaçãoSe o cliente for
Not Eligible, ele não poderá prosseguir com a aplicação BNPL. Salve operson_id- você precisará dele nas chamadas subsequentes da API.
Passo 2: Criar a Aplicação
Crie uma aplicação de crédito para executar a política de crédito e obter as ofertas disponíveis:
POST /application/createRequisição:
{
"cpf": "111.111.111-11",
"order_reference": "order_reference_001",
"cart": [
{ "item": "Product A", "value": 300.00 },
{ "item": "Product B", "value": 200.00 }
],
"shipping": {
"value": 15.00,
"zip": "01310100"
}
}
Observação: Os camposorder_reference,carteshippingsão opcionais nesta etapa, mas recomendados para um cálculo de oferta mais preciso.
Resposta:
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"max_total_value": 4726.28,
"available_limit": 4726.28,
"max_installment_value": 1500.0,
"min_installment_value": 20.00,
"offer_parameters_list": [
{
"term": 3,
"monthly_interest_rate": 0.0445,
"amount": 25.50,
"upfront_installment": 10.50,
"additional_iof": 0.14,
"annual_cet": 145.08,
"assignment_amount": 36.21,
"base_iof": 0.1,
"cet": 7.76,
"total_interest": 52.17,
"total_iof": 0.24,
"first_due_date": "2024-09-25",
"disbursement_date": "2024-09-06",
"fees": [
{
"amount": 0.0,
"fee_amount": 0.0,
"amount_type": "absolute",
"fee_type": "tac",
"type": "external"
}
],
"installments": [
{
"installment_number": 1,
"due_date": "2024-09-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 0.0,
"tax_amount": 0.14,
"principal_amortization_amount": 10.36
},
{
"installment_number": 2,
"due_date": "2024-10-25",
"amount": 25.50,
"due_principal": 36.14,
"due_interest": 18.07,
"tax_amount": 0.05,
"principal_amortization_amount": 7.38
},
{
"installment_number": 3,
"due_date": "2024-11-25",
"amount": 25.50,
"due_principal": 36.14,
"due_interest": 17.02,
"tax_amount": 0.05,
"principal_amortization_amount": 8.43
}
]
},
{
"term": 4,
"monthly_interest_rate": 0.0449,
"amount": 19.50,
"upfront_installment": 10.50,
"additional_iof": 0.14,
"annual_cet": 145.08,
"assignment_amount": 36.21,
"base_iof": 0.1,
"cet": 7.76,
"total_interest": 45.83,
"total_iof": 0.24,
"first_due_date": "2024-09-25",
"disbursement_date": "2024-09-06",
"fees": [
{
"amount": 0.0,
"fee_amount": 0.0,
"amount_type": "absolute",
"fee_type": "tac",
"type": "external"
}
],
"installments": [
{
"installment_number": 1,
"due_date": "2024-09-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 0.0,
"tax_amount": 0.14,
"principal_amortization_amount": 10.36
},
{
"installment_number": 2,
"due_date": "2024-10-25",
"amount": 19.50,
"due_principal": 36.14,
"due_interest": 15.85,
"tax_amount": 0.05,
"principal_amortization_amount": 3.60
},
{
"installment_number": 3,
"due_date": "2024-11-25",
"amount": 19.50,
"due_principal": 36.14,
"due_interest": 14.99,
"tax_amount": 0.03,
"principal_amortization_amount": 4.48
},
{
"installment_number": 4,
"due_date": "2024-12-25",
"amount": 19.50,
"due_principal": 36.14,
"due_interest": 14.99,
"tax_amount": 0.02,
"principal_amortization_amount": 4.49
}
]
},
{
"term": 5,
"monthly_interest_rate": 0.0449,
"amount": 10.50,
"upfront_installment": 0.00,
"additional_iof": 0.14,
"annual_cet": 145.08,
"assignment_amount": 36.21,
"base_iof": 0.1,
"cet": 7.76,
"total_interest": 39.45,
"total_iof": 0.24,
"first_due_date": "2024-09-25",
"disbursement_date": "2024-09-06",
"fees": [
{
"amount": 0.0,
"fee_amount": 0.0,
"amount_type": "absolute",
"fee_type": "tac",
"type": "external"
}
],
"installments": [
{
"installment_number": 1,
"due_date": "2024-09-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 0.0,
"tax_amount": 0.14,
"principal_amortization_amount": 10.36
},
{
"installment_number": 2,
"due_date": "2024-10-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 9.87,
"tax_amount": 0.05,
"principal_amortization_amount": 0.58
},
{
"installment_number": 3,
"due_date": "2024-11-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 9.85,
"tax_amount": 0.03,
"principal_amortization_amount": 0.62
},
{
"installment_number": 4,
"due_date": "2024-12-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 9.83,
"tax_amount": 0.01,
"principal_amortization_amount": 0.66
},
{
"installment_number": 5,
"due_date": "2025-01-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 9.90,
"tax_amount": 0.01,
"principal_amortization_amount": 0.59
}
]
}
],
"expires_at": "2026-01-21T00:00:00-03:00"
}
Limite DisponívelO campo
available_limitmostra o limite de crédito atual do cliente. Você também pode consultar isso em tempo real usando o endpoint/person/{person_id}/available-limit.
Simulação de OfertaDescrição dos Campos:
Campo Descrição termNúmero de parcelas amountValor da parcela regular em BRL upfront_installmentValor da primeira parcela (pode diferir das parcelas regulares) cetCET (Custo Efetivo Total) mensal em percentual annual_cetCET anual em percentual total_iofValor total do IOF (Imposto sobre Operações Financeiras) total_interestValor total de juros do empréstimo first_due_dateData de vencimento da primeira parcela disbursement_dateData prevista de desembolso feesLista de taxas aplicadas ao empréstimo installmentsDetalhamento de cada parcela
Importante: Atualizações do CarrinhoToda vez que o carrinho de compras for atualizado (itens adicionados/removidos, quantidades alteradas, frete modificado, cupom adicionado - basicamente tudo que altere o valor), você deve chamar o endpoint createApplication novamente para recalcular as ofertas com o novo valor. Isso garante simulações financeiras precisas e conformidade com as regulamentações.
Exemplo: Fluxo de Atualização do Carrinho
Cenário: Cliente adiciona mais itens ao carrinho após a aplicação inicial
- Aplicação Inicial (Total do Carrinho: R$ 515,00)
POST /application/create{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"order_reference": "order_001",
"cart": [
{ "item": "Product A", "value": 300.00 },
{ "item": "Product B", "value": 200.00 }
],
"shipping": { "value": 15.00, "zip": "01310100" }
}A resposta inclui ofertas para R$ 515,00
- Cliente Adiciona Item (Novo Total do Carrinho: R$ 715,00)
POST /application/create{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"order_reference": "order_001",
"cart": [
{ "item": "Product A", "value": 300.00 },
{ "item": "Product B", "value": 200.00 },
{ "item": "Product C", "value": 200.00 }
],
"shipping": { "value": 15.00, "zip": "01310100" }
}A resposta inclui ofertas recalculadas para R$ 715,00 com valores de parcelas, IOF e CET atualizados
Importante: Sempre utilize oapplication_idmais recente da última chamada ao createApplication ao prosseguir para as etapas de atualização/assinatura.
Passo 3: Atualizar com a Oferta Selecionada
Após o cliente selecionar uma oferta, atualize a aplicação com os detalhes da compra:
PUT /application/{application_id}/updateCabeçalhos:
Ip-Address: <client-ip-address>
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"amount": 500.00,
"currency": "BRL",
"term": 4,
"order_reference": "order_reference",
"cart": [
{ "item": "Product Name", "value": 500.00 }
],
"shipping": {
"value": 0,
"zip": "01310100"
}
}A resposta inclui:
installment_amount: Valor da parcela mensaltotal_interest_amount: Juros totaiscontract_string: Contrato em PDF codificado em Base64person_phone_number: Telefone para o qual o OTP foi enviado
ImportanteUm código OTP será enviado para o telefone do cliente para assinatura do contrato.
Passo 4: Assinar o Contrato
Assine o contrato usando o OTP enviado ao cliente:
POST /application/{application_id}/signCabeçalhos:
Ip-Address: <client-ip-address>
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"otp": "265117"
}Resposta:
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"status": "CONTRACT_SIGNED",
"signed_at": "2026-01-20T10:40:00Z"
}
Nota sobre Integração AntifraudeSe você não integrar o Passo 6 (validação de liveness por selfie), as regras antifraude serão executadas automaticamente nesta etapa. Nesse caso, a resposta incluirá os campos
approved_atoudeclined_at:Exemplo de Aprovação:
{ "application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607", "status": "APPROVED", "signed_at": "2026-01-20T10:40:00Z", "approved_at": "2026-01-20T10:40:00Z" }Exemplo de Recusa:
{ "application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607", "status": "DECLINED", "signed_at": "2026-01-20T10:40:00Z", "declined_at": "2026-01-20T10:40:00Z" }
Reenviar OTP (se necessário)
Se o cliente não recebeu o OTP ou se ele expirou:
POST /application/{application_id}/resend{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62"
}Resposta:
{
"person_phone_number": 83991116537,
"sent_at": "2026-01-20T10:42:00Z",
"expires_at": "2026-01-20T10:47:00Z"
}Passo 5: Aprovação Antifraude (Validação de Liveness por Selfie) - OPCIONAL
Este passo é OPCIONALSe você integrar a validação de liveness por selfie, este endpoint acionará o processo de desembolso. Se você não integrar este passo, as regras antifraude serão executadas automaticamente durante o Passo 4 (Assinar Contrato), e o desembolso será acionado a partir de lá.
Envie a aplicação para análise antifraude com validação de liveness por selfie:
Requisito de Integração com o SDK da QI TechO parceiro precisa integrar o SDK da QI Tech no front-end para captura de liveness por selfie.
Documentação do SDK: QI Tech Face Recognition - Android Liveness
Fluxo de Integração:
- Chame a função de liveness do SDK da QI Tech com o CPF do cliente (parâmetro obrigatório)
- O SDK captura a selfie do cliente e realiza a detecção de liveness
- O SDK retorna uma
registration_keypara a validação de liveness facial- Salve esta registration key - você precisará dela para chamar o endpoint de aprovação
POST /application/{application_id}/approvalCabeçalhos:
Ip-Address: <client-ip-address>
Requisição:
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"face": {
"registration_key": "46f38cf4-07b2-4de6-93e9-64b51a68378a"
},
"selfie": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
}Observação: O campo
selfieé opcional e aceita uma imagem codificada em base64 para verificação adicional.
Processo de Validação no BackendNo backend, validamos o liveness usando a API da QI Tech: Onboarding de Pessoa Física
A registration key é utilizada para validar o liveness com base em regras antifraude pré-estabelecidas. Isso inclui a verificação de:
- Correspondência facial com o CPF
- Detecção de liveness (pessoa real vs foto/vídeo)
- Sinais de prevenção à fraude
- Verificação de identidade
Resposta (Aprovado):
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"approved_at": "2026-01-20T10:40:00Z"
}Resposta (Recusado):
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"declined_at": "2026-01-20T10:40:00Z"
}Passo 6: Cobrar a Aplicação e Monitorar o Desembolso
Após a validação antifraude ser aprovada (via Passo 6 ou automaticamente durante a assinatura), faça a cobrança da aplicação para verificar o desembolso:
POST /application/{application_id}/chargeRequisição:
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"order_reference": "testCredit1"
}Exemplos de Resposta:
1. Enviado para a IF (Pendente):
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"status": "SUBMITTED_TO_FI",
"updated_at": "2026-01-20T10:45:00Z",
"order_reference": "testCredit1"
}2. Desembolsado (Sucesso):
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"status": "FUNDED",
"updated_at": "2026-01-20T10:45:00Z",
"order_reference": "testCredit1"
}3. Falha no Desembolso:
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"status": "FUNDING_FAILED",
"updated_at": "2026-01-20T10:45:00Z",
"order_reference": "testCredit1"
}
Atualização do Limite de CréditoQuando o status é
SUBMITTED_TO_FI, o limite de crédito do cliente é atualizado:
- Limite inicial do cliente: R$ 1.000,00
- Valor financiado: R$ 500,00
- Novo limite disponível: R$ 500,00
Significado dos Status:
| Status | Ação Necessária |
|---|---|
SUBMITTED_TO_FI | ⏳ PENDENTE - Desembolso em andamento, chame novamente para verificar o status |
FUNDED | ✅ CONFIRMAR PEDIDO - Desembolso realizado com sucesso, prossiga com o envio |
FUNDING_FAILED | ❌ CANCELAR PEDIDO - Desembolso falhou, o limite do cliente é restaurado |
Restauração do Limite em Caso de FalhaSe o status for
FUNDING_FAILED, o limite de crédito do cliente é automaticamente restaurado ao valor original (o valor financiado é creditado de volta).
Fluxo Recomendado:
- Chame o endpoint
/charge→ Obtenha o status inicial - Se
SUBMITTED_TO_FI→ Aguarde alguns segundos e chame/chargenovamente para verificar o status atualizado - Se
FUNDED→ ✅ Confirme e envie o pedido - Se
FUNDING_FAILED→ ❌ Cancele o pedido e notifique o cliente
Sucesso!Quando o status for
FUNDED, o empréstimo está ativo e o cliente receberá seu plano de pagamento. Agora você pode prosseguir com o envio do pedido.
Endpoints Adicionais
Consultar Limite Disponível em Tempo Real
Verifique o limite de crédito disponível atual do cliente:
GET /person/{person_id}/available-limitResposta:
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"available_limit": 4726.28,
"currency": "BRL",
"updated_at": "2026-01-20T10:30:00Z"
}***## Ambientes
| Ambiente | URL Base |
|---|---|
| Sandbox | https://api-bnpl.sandbox.geru.com.br/ |
| Produção | https://*** |
Autenticação
Todas as requisições à API exigem autenticação via Bearer Token ou API Key:
# Bearer Token
Authorization: Bearer <your-token>
# OU API Key
X-API-Key: <your-api-key>Máquina de Estados da Aplicação
Uma aplicação passa pelos seguintes estados durante seu ciclo de vida:
| # | Status | Descrição |
|---|---|---|
| 1 | APPLICATION_CREATED | Estado inicial após a criação da aplicação |
| 2 | APPLICATION_APPROVED | Modelo de crédito aprovou a aplicação (possui ofertas e limite disponível) |
| 3 | APPLICATION_DECLINED | Modelo de crédito recusou a aplicação (sem ofertas ou limite disponível) |
| 4 | APPLICATION_COMPLETED | Cliente selecionou uma oferta e a aplicação foi atualizada |
| 5 | CONTRACT_SIGNED | Cliente assinou o contrato com OTP |
| 6 | APPROVED | Análise antifraude aprovou a aplicação |
| 7 | DECLINED | Análise antifraude recusou a aplicação |
| 8 | SUBMITTED_TO_FI | Aplicação enviada para a instituição financeira |
| 9 | FUNDED | Empréstimo desembolsado com sucesso |
| 10 | CANCELLED | Aplicação foi cancelada |
| 11 | FUNDING_FAILED | Processo de desembolso falhou |
Passo 1: Verificar Elegibilidade do Cliente
Antes de iniciar a aplicação, verifique se o cliente é elegível para o BNPL:
POST /fastqualify{
"cpf": "78011189603"
}Resposta:
{
"status": "Eligible",
"person_id": "19474477-dc20-4b0a-9dfa-b3d3012c5401"
}
ObservaçãoSe o cliente for
Not Eligible, ele não poderá prosseguir com a aplicação BNPL. Salve operson_id- você precisará dele nas chamadas subsequentes da API.
Passo 2: Criar a Aplicação
Crie uma aplicação de crédito para executar a política de crédito e obter as ofertas disponíveis:
POST /application/createRequisição:
{
"cpf": "111.111.111-11",
"order_reference": "order_reference_001",
"cart": [
{ "item": "Product A", "value": 300.00 },
{ "item": "Product B", "value": 200.00 }
],
"shipping": {
"value": 15.00,
"zip": "01310100"
}
}
Observação: Os camposorder_reference,carteshippingsão opcionais nesta etapa, mas recomendados para um cálculo de oferta mais preciso.
Resposta:
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"max_total_value": 4726.28,
"available_limit": 4726.28,
"max_installment_value": 1500.0,
"min_installment_value": 20.00,
"offer_parameters_list": [
{
"term": 3,
"monthly_interest_rate": 0.0445,
"amount": 25.50,
"upfront_installment": 10.50,
"additional_iof": 0.14,
"annual_cet": 145.08,
"assignment_amount": 36.21,
"base_iof": 0.1,
"cet": 7.76,
"total_interest": 52.17,
"total_iof": 0.24,
"first_due_date": "2024-09-25",
"disbursement_date": "2024-09-06",
"fees": [
{
"amount": 0.0,
"fee_amount": 0.0,
"amount_type": "absolute",
"fee_type": "tac",
"type": "external"
}
],
"installments": [
{
"installment_number": 1,
"due_date": "2024-09-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 0.0,
"tax_amount": 0.14,
"principal_amortization_amount": 10.36
},
{
"installment_number": 2,
"due_date": "2024-10-25",
"amount": 25.50,
"due_principal": 36.14,
"due_interest": 18.07,
"tax_amount": 0.05,
"principal_amortization_amount": 7.38
},
{
"installment_number": 3,
"due_date": "2024-11-25",
"amount": 25.50,
"due_principal": 36.14,
"due_interest": 17.02,
"tax_amount": 0.05,
"principal_amortization_amount": 8.43
}
]
},
{
"term": 4,
"monthly_interest_rate": 0.0449,
"amount": 19.50,
"upfront_installment": 10.50,
"additional_iof": 0.14,
"annual_cet": 145.08,
"assignment_amount": 36.21,
"base_iof": 0.1,
"cet": 7.76,
"total_interest": 45.83,
"total_iof": 0.24,
"first_due_date": "2024-09-25",
"disbursement_date": "2024-09-06",
"fees": [
{
"amount": 0.0,
"fee_amount": 0.0,
"amount_type": "absolute",
"fee_type": "tac",
"type": "external"
}
],
"installments": [
{
"installment_number": 1,
"due_date": "2024-09-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 0.0,
"tax_amount": 0.14,
"principal_amortization_amount": 10.36
},
{
"installment_number": 2,
"due_date": "2024-10-25",
"amount": 19.50,
"due_principal": 36.14,
"due_interest": 15.85,
"tax_amount": 0.05,
"principal_amortization_amount": 3.60
},
{
"installment_number": 3,
"due_date": "2024-11-25",
"amount": 19.50,
"due_principal": 36.14,
"due_interest": 14.99,
"tax_amount": 0.03,
"principal_amortization_amount": 4.48
},
{
"installment_number": 4,
"due_date": "2024-12-25",
"amount": 19.50,
"due_principal": 36.14,
"due_interest": 14.99,
"tax_amount": 0.02,
"principal_amortization_amount": 4.49
}
]
},
{
"term": 5,
"monthly_interest_rate": 0.0449,
"amount": 10.50,
"upfront_installment": 0.00,
"additional_iof": 0.14,
"annual_cet": 145.08,
"assignment_amount": 36.21,
"base_iof": 0.1,
"cet": 7.76,
"total_interest": 39.45,
"total_iof": 0.24,
"first_due_date": "2024-09-25",
"disbursement_date": "2024-09-06",
"fees": [
{
"amount": 0.0,
"fee_amount": 0.0,
"amount_type": "absolute",
"fee_type": "tac",
"type": "external"
}
],
"installments": [
{
"installment_number": 1,
"due_date": "2024-09-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 0.0,
"tax_amount": 0.14,
"principal_amortization_amount": 10.36
},
{
"installment_number": 2,
"due_date": "2024-10-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 9.87,
"tax_amount": 0.05,
"principal_amortization_amount": 0.58
},
{
"installment_number": 3,
"due_date": "2024-11-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 9.85,
"tax_amount": 0.03,
"principal_amortization_amount": 0.62
},
{
"installment_number": 4,
"due_date": "2024-12-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 9.83,
"tax_amount": 0.01,
"principal_amortization_amount": 0.66
},
{
"installment_number": 5,
"due_date": "2025-01-25",
"amount": 10.50,
"due_principal": 36.14,
"due_interest": 9.90,
"tax_amount": 0.01,
"principal_amortization_amount": 0.59
}
]
}
],
"expires_at": "2026-01-21T00:00:00-03:00"
}
Limite DisponívelO campo
available_limitmostra o limite de crédito atual do cliente. Você também pode consultar isso em tempo real usando o endpoint/person/{person_id}/available-limit.
Simulação de OfertaDescrição dos Campos:
Campo Descrição termNúmero de parcelas amountValor da parcela regular em BRL upfront_installmentValor da primeira parcela (pode diferir das parcelas regulares) cetCET (Custo Efetivo Total) mensal em percentual annual_cetCET anual em percentual total_iofValor total do IOF (Imposto sobre Operações Financeiras) total_interestValor total de juros do empréstimo first_due_dateData de vencimento da primeira parcela disbursement_dateData prevista de desembolso feesLista de taxas aplicadas ao empréstimo installmentsDetalhamento de cada parcela
Importante: Atualizações do CarrinhoToda vez que o carrinho de compras for atualizado (itens adicionados/removidos, quantidades alteradas, frete modificado, cupom adicionado - basicamente tudo que altere o valor), você deve chamar o endpoint createApplication novamente para recalcular as ofertas com o novo valor. Isso garante simulações financeiras precisas e conformidade com as regulamentações.
Exemplo: Fluxo de Atualização do Carrinho
Cenário: Cliente adiciona mais itens ao carrinho após a aplicação inicial
- Aplicação Inicial (Total do Carrinho: R$ 515,00)
POST /application/create{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"order_reference": "order_001",
"cart": [
{ "item": "Product A", "value": 300.00 },
{ "item": "Product B", "value": 200.00 }
],
"shipping": { "value": 15.00, "zip": "01310100" }
}A resposta inclui ofertas para R$ 515,00
- Cliente Adiciona Item (Novo Total do Carrinho: R$ 715,00)
POST /application/create{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"order_reference": "order_001",
"cart": [
{ "item": "Product A", "value": 300.00 },
{ "item": "Product B", "value": 200.00 },
{ "item": "Product C", "value": 200.00 }
],
"shipping": { "value": 15.00, "zip": "01310100" }
}A resposta inclui ofertas recalculadas para R$ 715,00 com valores de parcelas, IOF e CET atualizados
Importante: Sempre utilize oapplication_idmais recente da última chamada ao createApplication ao prosseguir para as etapas de atualização/assinatura.
Passo 3: Atualizar com a Oferta Selecionada
Após o cliente selecionar uma oferta, atualize a aplicação com os detalhes da compra:
PUT /application/{application_id}/updateCabeçalhos:
Ip-Address: <client-ip-address>
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"amount": 500.00,
"currency": "BRL",
"term": 4,
"order_reference": "order_reference",
"cart": [
{ "item": "Product Name", "value": 500.00 }
],
"shipping": {
"value": 0,
"zip": "01310100"
}
}A resposta inclui:
installment_amount: Valor da parcela mensaltotal_interest_amount: Juros totaiscontract_string: Contrato em PDF codificado em Base64person_phone_number: Telefone para o qual o OTP foi enviado
ImportanteUm código OTP será enviado para o telefone do cliente para assinatura do contrato.
Passo 4: Assinar o Contrato
Assine o contrato usando o OTP enviado ao cliente:
POST /application/{application_id}/signCabeçalhos:
Ip-Address: <client-ip-address>
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"otp": "265117"
}Resposta:
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"status": "CONTRACT_SIGNED",
"signed_at": "2026-01-20T10:40:00Z"
}
Nota sobre Integração AntifraudeSe você não integrar o Passo 6 (validação de liveness por selfie), as regras antifraude serão executadas automaticamente nesta etapa. Nesse caso, a resposta incluirá os campos
approved_atoudeclined_at:Exemplo de Aprovação:
{ "application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607", "status": "APPROVED", "signed_at": "2026-01-20T10:40:00Z", "approved_at": "2026-01-20T10:40:00Z" }Exemplo de Recusa:
{ "application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607", "status": "DECLINED", "signed_at": "2026-01-20T10:40:00Z", "declined_at": "2026-01-20T10:40:00Z" }
Reenviar OTP (se necessário)
Se o cliente não recebeu o OTP ou se ele expirou:
POST /application/{application_id}/resend{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62"
}Resposta:
{
"person_phone_number": 83991116537,
"sent_at": "2026-01-20T10:42:00Z",
"expires_at": "2026-01-20T10:47:00Z"
}Passo 5: Aprovação Antifraude (Validação de Liveness por Selfie) - OPCIONAL
Este passo é OPCIONALSe você integrar a validação de liveness por selfie, este endpoint acionará o processo de desembolso. Se você não integrar este passo, as regras antifraude serão executadas automaticamente durante o Passo 4 (Assinar Contrato), e o desembolso será acionado a partir de lá.
Envie a aplicação para análise antifraude com validação de liveness por selfie:
Requisito de Integração com o SDK da QI TechO parceiro precisa integrar o SDK da QI Tech no front-end para captura de liveness por selfie.
Documentação do SDK: QI Tech Face Recognition - Android Liveness
Fluxo de Integração:
- Chame a função de liveness do SDK da QI Tech com o CPF do cliente (parâmetro obrigatório)
- O SDK captura a selfie do cliente e realiza a detecção de liveness
- O SDK retorna uma
registration_keypara a validação de liveness facial- Salve esta registration key - você precisará dela para chamar o endpoint de aprovação
POST /application/{application_id}/approvalCabeçalhos:
Ip-Address: <client-ip-address>
Requisição:
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"face": {
"registration_key": "46f38cf4-07b2-4de6-93e9-64b51a68378a"
},
"selfie": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
}Observação: O campo
selfieé opcional e aceita uma imagem codificada em base64 para verificação adicional.
Processo de Validação no BackendNo backend, validamos o liveness usando a API da QI Tech: Onboarding de Pessoa Física
A registration key é utilizada para validar o liveness com base em regras antifraude pré-estabelecidas. Isso inclui a verificação de:
- Correspondência facial com o CPF
- Detecção de liveness (pessoa real vs foto/vídeo)
- Sinais de prevenção à fraude
- Verificação de identidade
Resposta (Aprovado):
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"approved_at": "2026-01-20T10:40:00Z"
}Resposta (Recusado):
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"declined_at": "2026-01-20T10:40:00Z"
}Passo 6: Cobrar a Aplicação e Monitorar o Desembolso
Após a validação antifraude ser aprovada (via Passo 6 ou automaticamente durante a assinatura), faça a cobrança da aplicação para verificar o desembolso:
POST /application/{application_id}/chargeRequisição:
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"order_reference": "testCredit1"
}Exemplos de Resposta:
1. Enviado para a IF (Pendente):
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"status": "SUBMITTED_TO_FI",
"updated_at": "2026-01-20T10:45:00Z",
"order_reference": "testCredit1"
}2. Desembolsado (Sucesso):
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"status": "FUNDED",
"updated_at": "2026-01-20T10:45:00Z",
"order_reference": "testCredit1"
}3. Falha no Desembolso:
{
"application_id": "6ffd813a-1e88-4a4a-a892-758ca310e607",
"status": "FUNDING_FAILED",
"updated_at": "2026-01-20T10:45:00Z",
"order_reference": "testCredit1"
}
Atualização do Limite de CréditoQuando o status é
SUBMITTED_TO_FI, o limite de crédito do cliente é atualizado:
- Limite inicial do cliente: R$ 1.000,00
- Valor financiado: R$ 500,00
- Novo limite disponível: R$ 500,00
Significado dos Status:
| Status | Ação Necessária |
|---|---|
SUBMITTED_TO_FI | ⏳ PENDENTE - Desembolso em andamento, chame novamente para verificar o status |
FUNDED | ✅ CONFIRMAR PEDIDO - Desembolso realizado com sucesso, prossiga com o envio |
FUNDING_FAILED | ❌ CANCELAR PEDIDO - Desembolso falhou, o limite do cliente é restaurado |
Restauração do Limite em Caso de FalhaSe o status for
FUNDING_FAILED, o limite de crédito do cliente é automaticamente restaurado ao valor original (o valor financiado é creditado de volta).
Fluxo Recomendado:
- Chame o endpoint
/charge→ Obtenha o status inicial - Se
SUBMITTED_TO_FI→ Aguarde alguns segundos e chame/chargenovamente para verificar o status atualizado - Se
FUNDED→ ✅ Confirme e envie o pedido - Se
FUNDING_FAILED→ ❌ Cancele o pedido e notifique o cliente
Sucesso!Quando o status for
FUNDED, o empréstimo está ativo e o cliente receberá seu plano de pagamento. Agora você pode prosseguir com o envio do pedido.
Endpoints Adicionais
Consultar Limite Disponível em Tempo Real
Verifique o limite de crédito disponível atual do cliente:
GET /person/{person_id}/available-limitResposta:
{
"person_id": "ff0024e6-d11e-4700-b7f3-b3d201624e62",
"available_limit": 4726.28,
"currency": "BRL",
"updated_at": "2026-01-20T10:30:00Z"
}Precisa de Ajuda?
- 📚 Referência da API: Ver todos os endpoints
Precisa de Ajuda?
- 📚 Referência da API: Ver todos os endpoints
Updated 3 months ago
