Emissão de Dívida PJ com Assinatura Imediata (/signed_debt)
Este endpoint realiza a emissão da dívida para uma pessoa jurídica e processa a assinatura do contrato via opt-in em uma única chamada. O desembolso ocorre na data informada no campo disbursement_date, que pode ser diferente da data de emissão.
Não é necessário realizar o cadastro prévio do tomador: basta fornecer os dados cadastrais da empresa e de seus representantes legais no momento da requisição de emissão.
Os documentos da empresa e dos representantes (estatuto/contrato social, documentos de identificação, etc.) devem ser enviados previamente via upload de documentos. Cada upload retorna uma document_key (UUID), que deve ser referenciada nos campos correspondentes do request.
A QI Tech oferece uma solução de Onboarding de novos clientes e Antifraude.
Confira aqui a documentação das APIs deste serviço.
Para receber uma cotação, entre em contato com nosso time comercial: comercial@qitech.com.br ou (11) 3522-1301
O formato de assinatura do header e do body desta requisição é descrito em detalhes aqui.
Simulação de dívida
Antes de emitir, é possível simular os valores da operação de crédito. A simulação segue o mesmo padrão da emissão, porém não exige os dados cadastrais do tomador nem a conta de desembolso — basta informar borrower.person_type (legal para PJ) e o objeto financial. O exemplo abaixo simula com base no valor desembolsado (disbursed_amount + number_of_installments).
Request
Request Body
{
"borrower": {
"person_type": "legal"
},
"financial": {
"interest_type": "pre_price_days",
"disbursement_date": "2026-04-07",
"fine_configuration": {
"monthly_rate": 0.01,
"interest_base": "calendar_days",
"contract_fine_rate": 0.02
},
"disbursed_amount": 10000,
"monthly_interest_rate": 0.03,
"credit_operation_type": "ccb",
"interest_grace_period": 0,
"number_of_installments": 2,
"principal_grace_period": 0
}
}
Campos do Request
| Campo | Tipo | Descrição |
|---|---|---|
| borrower.person_type* | enum | Natureza jurídica do tomador — usar legal para PJ |
| financial.interest_type* | enum | Método de amortização — Enumerador Interest Type |
| financial.credit_operation_type* | enum | Tipo do contrato de crédito — Enumerador Credit Operation Type |
| financial.disbursed_amount* | float | Valor desembolsado da operação |
| financial.monthly_interest_rate* | float | Taxa de juros mensal pré-fixada (em decimal) |
| financial.number_of_installments* | int | Número de parcelas |
| financial.disbursement_date | date | Data do desembolso (YYYY-MM-DD) |
| financial.interest_grace_period | int | Carência de juros (em meses) |
| financial.principal_grace_period | int | Carência do principal (em meses) |
| financial.fine_configuration | object | Configuração de multa e mora — Objeto Fine Configuration |
Response
Response Body
{
"type": "debt",
"key": "bf84379c-d4cf-4f16-a63c-865c129e6fce",
"status": "finished",
"event_datetime": "2026-04-07 23:59:28",
"data": {
"interest_type": "pre_price_days",
"credit_operation_type": "ccb",
"interest_grace_period": 0,
"principal_grace_period": 0,
"prefixed_interest_rate": {
"interest_base": "calendar_days",
"annual_rate": 0.42576089,
"monthly_rate": 0.03,
"daily_rate": 0.00097227
},
"issue_date": "2026-04-07",
"number_of_installments": 2,
"final_disbursement_amount": 10000,
"total_pre_fixed_amount": 453.94,
"iof_amount": 51.07,
"cet": 0.0335,
"annual_cet": 0.4851,
"disbursement_date": "2026-04-07",
"issue_amount": 10076.2,
"disbursed_issue_amount": 10000,
"assignment_amount": 10106.4,
"installments": [
{
"calendar_days": 30,
"workdays": 20,
"business_due_date": "2026-05-07",
"due_date": "2026-05-07",
"due_principal": 10076.2,
"has_interest": true,
"post_fixed_amount": 0,
"pre_fixed_amount": 52.4,
"tax_amount": 12.49,
"total_amount": 5226.97,
"principal_amortization_amount": 5174.57,
"installment_number": 1
},
{
"calendar_days": 31,
"workdays": 20,
"business_due_date": "2026-06-08",
"due_date": "2026-06-07",
"due_principal": 4901.63,
"has_interest": true,
"post_fixed_amount": 0,
"pre_fixed_amount": 27.76,
"tax_amount": 26.09,
"total_amount": 5226.97,
"principal_amortization_amount": 4901.63,
"installment_number": 2
}
]
}
}
Campos do Response
A simulação não gera dívida nem retorna DEBT-KEY: o campo key é apenas o identificador da simulação e o status é finished. Os valores ficam dentro de data.
| Campo | Tipo | Descrição |
|---|---|---|
| disbursed_issue_amount | float | Valor desembolsado informado na simulação |
| final_disbursement_amount | float | Valor efetivamente desembolsado para o tomador |
| issue_amount | float | Valor de emissão/nominal da operação |
| assignment_amount | float | Valor de aquisição (cessão) da operação |
| cet | float | Custo Efetivo Total mensal (em decimal) |
| annual_cet | float | Custo Efetivo Total anual (em decimal) |
| iof_amount | float | Valor total do IOF |
| total_pre_fixed_amount | float | Total de juros pré-fixados da operação |
| prefixed_interest_rate | object | Taxa de juros nominal (anual, diária, mensal e base de cálculo) |
| installments | array | Parcelas simuladas (data, valor, amortização, juros e IOF de cada parcela) |
Emissão de dívida
Request
Payload recomendado (PJ + PIX)
Este é o corpo recomendado para emitir uma dívida de pessoa jurídica com desembolso via PIX. Além dos dados cadastrais, ele inclui a evidência de assinatura (opt-in) em additional_data.contract.signatures, que é necessária para a emissão ser concluída com sucesso.
{
"borrower": {
"person_type": "legal",
"name": "RAZAO SOCIAL EMPRESA",
"phone": { "country_code": "055", "area_code": "11", "number": "991112222" },
"address": {
"street": "Rua Gilberto Sabino",
"number": "215",
"neighborhood": "Pinheiros",
"city": "São Paulo",
"state": "SP",
"postal_code": "05425020"
},
"company_document_number": "80282008000127",
"company_statute": "2d9b7271-8dfd-43d5-9aee-d2814b98cb9e",
"company_representatives": [
{
"person_type": "natural",
"name": "NOME DO REPRESENTANTE",
"phone": { "country_code": "055", "area_code": "11", "number": "990121234" },
"address": {
"street": "Rua Gilberto Sabino",
"number": "215",
"neighborhood": "Pinheiros",
"city": "São Paulo",
"state": "SP",
"postal_code": "05425020"
},
"is_pep": false,
"individual_document_number": "31057466093"
}
]
},
"financial": {
"disbursed_amount": 10000,
"interest_type": "pre_price_days",
"credit_operation_type": "ccb",
"number_of_installments": 1,
"interest_grace_period": 0,
"principal_grace_period": 0,
"monthly_interest_rate": 0.03,
"disbursement_date": "2026-06-23",
"first_due_date": "2026-07-23",
"fine_configuration": {
"contract_fine_rate": 0.02,
"monthly_rate": 0.01,
"interest_base": "calendar_days_365"
}
},
"additional_data": {
"contract": {
"contract_number": "STN92924220",
"signatures": [
{
"signer": {
"name": "NOME DO REPRESENTANTE",
"email": "representante@test.com",
"document_number": "32402502000135",
"phone": { "country_code": "011", "area_code": "55", "number": "991112222" }
},
"signature": {
"ip_address": "192.168.1.1",
"signature_file": {
"file_type": "pdf",
"file_url": "https://qitech.com.br/signature.pdf"
}
}
}
]
}
},
"disbursement_bank_accounts": [
{
"pix_key": "2f205c99-3161-4120-badd-854039d12de6",
"pix_transfer_type": "key"
}
],
"purchaser_document_number": "32402502000135",
"requester_identifier_key": "3eb8d228-ed17-4352-a081-1d1f3a35334c",
"simplified": true
}
- O bloco
additional_data.contract.signatures(opt-in) é necessário para a emissão. Enviaradditional_datavazio ({}) faz a emissão falhar. - Envie
simplified: truepara utilizar o fluxo simplificado de emissão. monthly_interest_rateedisbursement_bank_accountssão obrigatórios: sem a taxa o cálculo pré-fixado não é possível, e sem a conta não há desembolso.financial.first_due_datedefine a data de vencimento da primeira parcela; junto comdisbursement_date, determina a agenda de pagamento.postal_codedeve ter 8 dígitos, sem traço.company_representatives[].addressé obrigatório.interest_grace_periodeprincipal_grace_periodsão obrigatórios neste modo (use0quando não houver carência).
O exemplo completo abaixo inclui também os campos cadastrais adicionais da empresa (company_type, cnae_code, foundation_date, trading_name) e dos representantes.
Request Body
- Valor líquido
{
"borrower": {
"name": "RAZAO SOCIAL EMPRESA",
"email": "emailempresa@email.com",
"phone": {
"number": "991112222",
"area_code": "11",
"country_code": "055"
},
"is_pep": false,
"address": {
"city": "São Paulo",
"state": "SP",
"number": "215",
"street": "Rua Gilberto Sabino",
"complement": "3 andar",
"postal_code": "05425020",
"neighborhood": "Pinheiros"
},
"cnae_code": "6822-6/00",
"role_type": "issuer",
"person_type": "legal",
"company_type": "ltda",
"trading_name": "NOME FANTASIA DA EMPRESA",
"foundation_date": "2019-07-05",
"attached_documents_list": [],
"company_document_number": "80282008000127",
"company_statute": "aa28e598-55e2-40f1-8884-671772c541a1",
"company_representatives": [
{
"name": "NOME DO REPRESENTANTE",
"email": "nomedorepresentante@email.com",
"phone": {
"number": "990121234",
"area_code": "11",
"country_code": "055"
},
"is_pep": false,
"final_beneficiary": true,
"address": {
"city": "São Paulo",
"state": "SP",
"number": "215",
"street": "Rua Gilberto Sabino",
"complement": "3 andar",
"postal_code": "05425020",
"neighborhood": "Pinheiros"
},
"role_type": "company_representative",
"birth_date": "1993-09-10",
"profession": "DIRETOR",
"mother_name": "NOME DA MAE DO REPRESENTANTE",
"nationality": "BRASILEIRO",
"person_type": "natural",
"marital_status": "single",
"attached_documents_list": [],
"individual_document_number": "31057466093",
"document_identification_number": "20202020200"
}
]
},
"financial": {
"interest_type": "pre_price_days",
"disbursement_date": "2026-04-07",
"first_due_date": "2026-05-07",
"fine_configuration": {
"monthly_rate": 0.01,
"interest_base": "calendar_days",
"contract_fine_rate": 0.02
},
"disbursed_amount": 10000,
"monthly_interest_rate": 0.03,
"credit_operation_type": "ccb",
"interest_grace_period": 0,
"number_of_installments": 2,
"principal_grace_period": 0
},
"additional_data": {
"contract": {
"contract_number": "DWF1761222116",
"signatures": [
{
"signer": {
"name": "NOME DO REPRESENTANTE",
"email": "nomedorepresentante@email.com",
"phone": {
"number": "990121234",
"area_code": "11",
"country_code": "055"
},
"document_number": "31057466093"
},
"signature": {
"timestamp": "28-01-2026 06:36:35",
"ip_address": "192.168.1.1",
"signature_file": {
"file_url": "https://qitech.com.br/signature.pdf",
"file_type": "pdf"
}
}
}
]
}
},
"requester_identifier_key": "d1905ef5-19df-4183-bf0e-802b8229933c",
"purchaser_document_number": "32402502000135",
"disbursement_bank_accounts": [
{
"document_number": "31233261000185",
"name": "Fornecedor",
"pix_key": "2f205c99-3161-4120-badd-854039d12de6",
"pix_transfer_type": "key"
}
],
"simplified": true
}
Detalhes do Request Body
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| borrower* | object | Objeto do tomador pessoa jurídica — a empresa devedora da operação de crédito | Objeto Borrower |
| financial* | object | Contém todos os detalhes financeiros e parâmetros de cálculo da operação | Objeto Financial |
| additional_data* ⚠ | object | Dados adicionais do contrato. Deve conter contract.signatures (opt-in) para a emissão ser concluída — enviar vazio ({}) faz a emissão falhar | Objeto Additional Data |
| disbursement_bank_accounts ⚠ | array | Dados de desembolso via PIX. Não exigido pelo schema, mas operacionalmente obrigatório (sem ele não há desembolso) | Objeto Disbursement Bank Account |
| simplified | boolean | Utiliza o fluxo simplificado de emissão. Envie true | - |
| purchaser_document_number | string | CNPJ do cessionário — o comprador da operação de crédito (FIDC) | 14 |
| requester_identifier_key | string | Chave identificadora única do solicitante | UUID |
* campo obrigatório no schema · ⚠ exigido na prática para concluir a emissão · sem marcação: opcional.
Objeto Borrower
O borrower representa a pessoa jurídica tomadora. Por isso o campo person_type deve conter sempre o valor legal.
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| name* | string | Razão social da empresa | 100 |
| trading_name* | string | Nome fantasia da empresa | 100 |
| string | E-mail institucional da empresa | 254 | |
| phone* | object | Telefone da empresa | Objeto Phone |
| is_pep | boolean | Indicador de Pessoa Politicamente Exposta | - |
| address* | object | Endereço da empresa | Objeto Address |
| role_type | string | Papel do tomador na operação — default: issuer | - |
| person_type* | string | Classificação da pessoa — deve ser sempre legal | 5 |
| company_type* | enum | Tipo da empresa | Enumerador Company Type |
| company_document_number* | string | CNPJ da empresa — somente números | 14 |
| cnae_code* | string | Classificação Nacional de Atividades Econômicas | - |
| foundation_date* | date | Data de abertura da empresa (Formato: "YYYY-MM-DD") | 10 |
| company_statute* | string | document_key do PDF do contrato social/estatuto da empresa (enviado previamente) | UUID |
| directors_election_minute | string | document_key do PDF da ata de eleição (recomendado para company_type igual a sa; não é forçado pelo schema) | UUID |
| attached_documents_list | array | Lista de documentos anexados da empresa | - |
| company_representatives* | array | Lista de representantes legais da empresa | Objeto Company Representatives |
Objeto Company Representatives
Lista dos representantes legais da empresa. O representante que assina o contrato deve também constar no array signatures em Objeto Contract.
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| person_type* | string | Identificador do tipo de pessoa — deve ser natural | 7 |
| name* | string | Nome completo do representante | 100 |
| birth_date* | date | Data de nascimento (Formato: "YYYY-MM-DD") | 10 |
| is_pep* | boolean | Declaração se o representante é PEP | - |
| individual_document_number* | string | CPF do representante — somente números | 11 |
| phone* | object | Telefone do representante | Objeto Phone |
| address* | object | Endereço do representante | Objeto Address |
| mother_name | string | Nome da mãe do representante | 100 |
| profession | string | Profissão do representante | 64 |
| nationality | string | Nacionalidade do representante | 50 |
| marital_status | string | Estado civil do representante | - |
| property_system | string | Regime de bens (recomendado para marital_status igual a married; não é forçado pelo schema) | Enumerador Property System |
| wedding_certificate | string | document_key do PDF da certidão de casamento (null se solteiro) | UUID |
| spouse | object | Dados do cônjuge (null se solteiro; não é forçado pelo schema) | Objeto Spouse |
| final_beneficiary | boolean | Declaração se o representante é beneficiário final da empresa | - |
| document_identification | string | document_key do PDF do documento de identificação com foto (RG ou CNH) | UUID |
| document_identification_back | string | document_key do PDF do verso do documento de identificação | UUID |
| document_identification_type | string | Tipo do documento de identificação enviado | - |
| document_identification_number | string | Número do documento de identificação enviado | 16 |
| string | E-mail do representante | 254 | |
| role_type | string | Papel na operação — default: company_representative | - |
| proof_of_residence | string | document_key do PDF do comprovante de endereço (enviado previamente) | UUID |
Objeto Spouse
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| person_type* | string | Identificador do tipo de pessoa — deve ser natural | 7 |
| name* | string | Nome completo do cônjuge | 100 |
| mother_name* | string | Nome da mãe do cônjuge | 100 |
| birth_date* | date | Data de nascimento (Formato: "YYYY-MM-DD") | 10 |
| profession* | string | Profissão do cônjuge | 64 |
| is_pep* | boolean | Declaração se o cônjuge é PEP | - |
| individual_document_number* | string | CPF do cônjuge — somente números | 11 |
| document_identification_number* | string | Número do documento de identificação do cônjuge | 16 |
| email* | string | E-mail do cônjuge | 254 |
| phone* | object | Telefone do cônjuge | Objeto Phone |
| address | object | Endereço do cônjuge | Objeto Address |
Objeto Address
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| city* | string | Nome da cidade | 100 |
| state* | string | Sigla do estado (duas letras maiúsculas) | 2 |
| number* | string | Número do logradouro | 10 |
| street* | string | Nome do logradouro | 100 |
| complement | string | Complemento do endereço (texto livre) | 100 |
| postal_code* | string | CEP — somente números | 8 |
| neighborhood* | string | Nome do bairro | 100 |
Objeto Phone
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| number* | string | Número do telefone | 10 |
| area_code* | string | Código de área (DDD) | 2 |
| country_code* | string | Código internacional (ex: "055") | 3 |
Objeto Financial
Nesta modalidade, o valor da operação é definido pelo valor líquido a ser desembolsado (disbursed_amount), em conjunto com a taxa de juros (monthly_interest_rate) e o número de parcelas (number_of_installments). A partir desses dados, o sistema calcula o valor de cada parcela.
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| interest_type* | string | Método de amortização | Enumerador Interest Type |
| fine_configuration* | object | Configuração de multa e mora | Objeto Fine Configuration |
| disbursed_amount* | float | Valor líquido a ser desembolsado | 15,2 |
| credit_operation_type* | string | Tipo da operação de crédito | Enumerador Credit Operation Type |
| number_of_installments* | integer | Número de parcelas | 3 |
| interest_grace_period* | integer | Período de carência de juros (em meses) — use 0 quando não houver | 3 |
| principal_grace_period* | integer | Período de carência do principal (em meses) — use 0 quando não houver | 3 |
| monthly_interest_rate ⚠ | float | Taxa de juros mensal (em decimal). Não exigida pelo schema, mas necessária para o cálculo pré-fixado (interest_type pre_*) | 10,6 |
| disbursement_date | string | Data de desembolso (YYYY-MM-DD). Se omitida, assume a data de emissão | 10 |
| first_due_date | string | Data de vencimento da primeira parcela (YYYY-MM-DD) | 10 |
Objeto Fine Configuration
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| monthly_rate* | float | Taxa de mora mensal (alternativamente, informe daily_rate ou annual_rate) | 10,6 |
| interest_base* | string | Base de cálculo da mora | Enumerador Interest Base |
| contract_fine_rate* | float | Taxa de multa contratual | 10,6 |
Objeto Disbursement Bank Account
O desembolso desta operação é realizado via chave PIX. Informe os dados do recebedor do desembolso no array disbursement_bank_accounts.
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| pix_key* | string | Chave PIX para a qual o desembolso será realizado | - |
| pix_transfer_type* | string | Tipo de transferência PIX — utilizar key para transferência via chave | - |
| document_number | string | CPF/CNPJ do titular da chave PIX. Obrigatório apenas quando há mais de uma conta de desembolso | 14 |
| name | string | Nome do titular da chave PIX. Obrigatório apenas quando há mais de uma conta de desembolso | 50 |
| percentage_receivable | float | Percentual do desembolso para esta conta. Obrigatório com múltiplas contas (a soma deve ser 100) | 3 |
Objeto Additional Data
A chave additional_data é obrigatória e deve conter o bloco contract com a evidência de assinatura (opt-in) em signatures. Enviar additional_data vazio ({}) faz a emissão falhar.
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| contract* | object | Dados do contrato | Objeto Contract |
Objeto Contract
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| contract_number* | string | Número identificador único do contrato | 20 |
| signatures* | array | Lista de objetos de evidência de assinatura digital (Opt-in) dos representantes legais | Objeto Signature |
Objeto Signature
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| signer* | object | Dados de identificação do assinante (representante legal) | Objeto Signer |
| signature* | object | Dados de evidência da assinatura digital | Objeto Signature Details |
Objeto Signer
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| name* | string | Nome completo do assinante | 255 |
| document_number* | string | CPF do assinante | 11 |
| string | E-mail do assinante | 100 | |
| phone | object | Telefone do assinante | Objeto Phone |
Objeto Signature Details
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| ip_address* | string | Endereço IP utilizado na assinatura | 45 |
| timestamp* | string | Data e hora da assinatura | 24 |
| signature_file* | object | Arquivo da assinatura digital | Objeto Signature File |
Objeto Signature File
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
| file_url* | string | Link direto para o documento do contrato assinado (PDF) | 2048 |
| file_type* | string | Formato do arquivo de assinatura (ex: "pdf") | 4 |
Response
A resposta à requisição de emissão retornará o plano de pagamento e uma DEBT-KEY, que é o identificador da dívida na QI SCD.
Response Body
{
"webhook_type": "debt",
"key": "72760166-4ddf-41fb-8a8c-605f8f4fc35c",
"status": "issued",
"event_datetime": "2026-04-07 23:59:28",
"data": {
"borrower": {
"name": "RAZAO SOCIAL EMPRESA",
"document_number": "80282008000127",
"related_party_key": "24fac77e-7782-4f72-b31a-daee288e34ed"
},
"contract": {
"document_key": null,
"number": "DWF1761222116",
"urls": [],
"signature_information": [
{
"signer_name": "NOME DO REPRESENTANTE",
"signer_document_number": "31057466093",
"signer_role": "issuer",
"signer_email": null,
"signer_external_key": null,
"signature_url": null
}
]
},
"requester_identifier_key": "d1905ef5-19df-4183-bf0e-802b8229933c",
"iof_charge_method": "financed",
"collaterals": [],
"contract_fees": [
{
"fee_type": "spread",
"fee_amount": 30.2
}
],
"external_contract_fees": [
{
"fee_type": "tac",
"fee_amount": 0,
"tax_amount": 0,
"net_fee_amount": 0
}
],
"external_contract_fee_amount": 0,
"net_external_contract_fee_amount": 0,
"contract_fee_amount": 30.2,
"issue_amount": 10076.2,
"assignment_amount": 10106.4,
"cet": "3,3500%",
"annual_cet": "48,5100%",
"number_of_installments": 2,
"base_iof": 12.49,
"additional_iof": 38.58,
"total_iof": 51.07,
"ipoc_code": "324025020203180282008000127DWF1761222116",
"prefixed_interest_rate": {
"annual_rate": 0.42576089,
"created_at": "2026-04-07T23:59:22",
"daily_rate": 0.00097227,
"interest_base": "calendar_days",
"monthly_rate": 0.03
},
"installments": [
{
"accrual_reference_date": null,
"additional_costs": [],
"advanced_paid_amount": 0,
"bank_slip_key": null,
"business_due_date": "2026-05-07",
"calendar_days": 30,
"digitable_line": null,
"due_date": "2026-05-07",
"due_interest": 0,
"due_principal": 10076.2,
"fine_amount": null,
"has_interest": true,
"installment_history": [],
"installment_key": "1dea396f-beb1-4df3-9822-35800b4c095a",
"installment_number": 1,
"installment_payment": [],
"installment_status": "created",
"installment_type": "principal",
"paid_amount": 0,
"paid_at": null,
"post_fixed_amount": 0,
"qr_code_key": null,
"qr_code_url": null,
"renegotiation_proposal_key": null,
"total_amount": 5226.97,
"total_paid_amount": 0,
"workdays": 20
},
{
"accrual_reference_date": null,
"additional_costs": [],
"advanced_paid_amount": 0,
"bank_slip_key": null,
"business_due_date": "2026-06-08",
"calendar_days": 31,
"digitable_line": null,
"due_date": "2026-06-07",
"due_interest": 0,
"fine_amount": null,
"has_interest": true,
"installment_history": [],
"installment_key": "370e73d1-55d8-431e-9b22-d08fb8297999",
"installment_number": 2,
"installment_payment": [],
"installment_status": "created",
"installment_type": "principal",
"paid_amount": 0,
"paid_at": null,
"post_fixed_amount": 0,
"qr_code_key": null,
"qr_code_url": null,
"renegotiation_proposal_key": null,
"total_amount": 5226.97,
"total_paid_amount": 0,
"workdays": 20
}
],
"total_pre_fixed_amount": 453.94
}
}
Lembre-se de salvar a DEBT-KEY retornada, pois ela será necessária para consultas, renegociações e estornos da operação.
Detalhes do Response Body
| Campo | Tipo | Descrição |
|---|---|---|
| webhook_type | string | Identificador do tipo de evento |
| key | string | DEBT-KEY — identificador único da dívida na QI SCD (UUID) |
| status | string | Status atual da dívida — veja os status de uma dívida |
| event_datetime | string | Data e hora do evento |
| data | object | Objeto Data — Dados da operação |
Objeto Data
| Campo | Tipo | Descrição |
|---|---|---|
| borrower | object | Dados do tomador (razão social, CNPJ e related_party_key) |
| contract | object | Dados do contrato, incluindo informações de assinatura |
| requester_identifier_key | string | Chave identificadora do solicitante (UUID) |
| iof_charge_method | string | Método de cobrança do IOF — sempre "financed" |
| collaterals | array | Lista de garantias da operação |
| contract_fees | array | Taxas QI Tech cobradas na operação |
| external_contract_fees | array | Taxas externas cobradas na operação |
| contract_fee_amount | float | Valor total das taxas QI Tech |
| issue_amount | float | Valor nominal da operação de crédito |
| assignment_amount | float | Valor de cessão da operação de crédito |
| cet | string | Custo Efetivo Total mensal |
| annual_cet | string | Custo Efetivo Total anual |
| number_of_installments | integer | Número de parcelas |
| base_iof | float | Valor base do IOF |
| additional_iof | float | Valor adicional do IOF |
| total_iof | float | Valor total do IOF |
| ipoc_code | string | Código de registro de crédito brasileiro gerado pela QI Tech |
| prefixed_interest_rate | object | Taxa de juros nominal (anual, diária, mensal e base de cálculo) |
| installments | array | Parcelas da operação |
| total_pre_fixed_amount | float | Valor total dos juros pré-fixados de todas as parcelas |
Webhooks
Durante o ciclo de vida da operação, a QI Tech envia webhooks para a URL configurada. Abaixo estão os eventos relevantes para este fluxo.
O timeout para resposta dos nossos webhooks é de 5 segundos.
Os webhooks da QI Tech não devem ser mapeados de forma restrita. Campos adicionais podem ser incluídos aos payloads retornados.
Webhook de documento gerado
Enviado quando o contrato da operação é gerado. Traz a document_key e as URLs do documento (incluindo a versão assinada).
Response Body
{
"key": "cc91aac2-8d15-4349-b155-7c23080c61e8",
"data": {
"contract": {
"urls": [
"https://storage.googleapis.com/live-doc-api/documents/50711223-dfe2-4ed6-9c41-42d68638cfff.pdf"
]
},
"document_key": "50711223-dfe2-4ed6-9c41-42d68638cfff",
"signed_contract_url": "https://storage.googleapis.com/live-doc-api/documents/_signed.pdf"
},
"status": "generated_document",
"webhook_type": "debt",
"event_datetime": "2026-03-24 08:27:11"
}
Webhook de desembolso
Enviado quando o desembolso da operação é realizado (status: disbursed). Traz a agenda de parcelas e os comprovantes de transferência (ted_receipt_list).
Response Body
{
"key": "bb81d525s-aa4b-4ddf-81d6-aa4b41fd04nb",
"data": {
"installments": [
{
"due_date": "2025-11-24",
"total_amount": 8304.16,
"installment_key": "7ec2f4d-b21e-4bd5-ahs6-60e998267249",
"pre_fixed_amount": 2475.77421509,
"installment_number": 1,
"principal_amortization_amount": 5828.23857532
},
{
"due_date": "2025-12-22",
"total_amount": 8304.16,
"installment_key": "54g37d78-a9a9-bf82-9f8e-fd3ba123797a",
"pre_fixed_amount": 2001.06342502,
"installment_number": 2,
"principal_amortization_amount": 6303.43346322
}
],
"ted_receipt_list": [
{
"fee": 0,
"url": "https://storage.storage.com/sandbox-doc-api/documents/f9as9329-22bd-4dbg-91a2-f2sdgeth4h04/fheth459-bhrf-4hrt-9hra-fdsfsgehth42.pdf",
"amount": 123456.0,
"origin": {
"name": "QI SOCIEDADE DE CRÉDITO DIRETO S.A.",
"type": "payment_account",
"branch": "0001",
"document": "32402502000777",
"bank_code": "329",
"account_key": "5d068423-7774-49e4-b15b-7741238df5a8",
"branch_digit": null,
"account_digit": "5",
"account_branch": "0001",
"account_number": "00002",
"financial_institution_name": "QI SOCIEDADE DE CRÉDITO DIRETO S.A."
},
"timestamp": "2025-10-26T17:00:51",
"description": "60701190 8615 22110-2 96969879003 - Fornecedor",
"destination": {
"name": "Fornecedor",
"type": "checking_account",
"branch": "8612",
"purpose": "Crédito PIX em Conta",
"document": "31233261000185",
"bank_ispb": "60111190",
"branch_digit": null,
"account_digit": "2",
"account_number": "44110",
"financial_institution_name": "BANCO S.A."
},
"end_to_end_id": "E32402402200510221300gNgeefVNtVr",
"transaction_key": "25044504-1902-412a-a445-23b813bee6c1",
"origin_transaction_key": "542224ea-b5ea-49ff-b7b7-673b81af387b"
}
],
"requester_identifier_key": null
},
"status": "disbursed",
"webhook_type": "debt",
"event_datetime": "2025-10-26 17:00:52"
}
Webhook de cancelamento
Enviado quando a operação é cancelada (status: canceled). O campo cancel_reason_enumerator indica o motivo.
Response Body
{
"webhook_type": "debt",
"key": "27a099df-4688-43cb-87fa-515b1cf343a5",
"event_datetime": "2022-09-27 07:03:49",
"data": {
"cancel_reason": "Operacao cancelada manualmente",
"cancel_reason_enumerator": "manual"
},
"status": "canceled"
}
Motivos de cancelamento
| cancel_reason_enumerator | Descrição |
|---|---|
| disbursing_error | Operação cancelada por erro no momento do desembolso. |
| waiting_signature | Operação cancelada por falta de assinatura. |
| is_portability | A operação foi cancelada pois é uma portabilidade que não foi concluída. |
| not_collateral_constituted | A operação foi cancelada pois as garantias não foram constituídas. |
| entry_not_paid | A operação foi cancelada pois a entrada não foi paga. |
| not_assigned | Operação cancelada porque o processo de cessão não foi realizado. |
| pix_max_retry | Operação cancelada pois o banco recebedor não conseguiu receber o desembolso. |
| lack_of_resource | Operação cancelada por falta de recurso. |
| manual | Operação cancelada manualmente. |
| kyc_not_accepted | Operação cancelada pois não foi aprovada no compliance. |
| not_collateral_fgts | Operação cancelada por erro com FGTS. |
| agencia_conta_invalida | Agência ou conta destinatária do crédito inválida. |
| invalid_account | Número da conta de destino é inexistente ou inv álido. |
| invalid_document_number | CPF/CNPJ da conta de destino está incorreto. |
| unsupported_transaction | A conta de destino não suporta este tipo de transação. |
| bank_slip_payment | Operação cancelada por erro no pagamento do boleto. |
| bank_slip_paid | Operação cancelada pois o boleto já está pago. |
| bank_slip_written_off | Operação cancelada pois o boleto já está baixado. |
| invalid_ispb | Número ISPB é inválido ou inexistente. |
| rejected_payment | Ordem de pagamento foi rejeitada pelo banco recebedor. |
| disbursed_amount_refunded | Operação cancelada devido à devolução do valor de desembolso. |
Enumeradores
Enumerador Company Type
| Enumerador | Descrição |
|---|---|
| ltda | Sociedade Limitada |
| sa | Sociedade Anônima |
| micro_enterprise | Microempresa |
| freelancer | Profissional autônomo |
Enumerador Property System
| Enumerador | Descrição |
|---|---|
| total_communion_of_goods | Comunhão total de bens |
| partial_communion_of_goods | Comunhão parcial de bens |
| final_participation_of_acquisitions | Participação final nos aquestos |
| compulsory_separation_of_goods | Separação obrigatória de bens |
Enumerador Interest Type
| Enumerador | Descrição |
|---|---|
| pre_price_days | Amortização Price (parcelas iguais) com juros pré-fixado ao dia |
| pre_price | Amortização Price (parcelas iguais) com juros pré-fixado em períodos fixos (30 dias) |
| pre_sac | Amortização SAC (amortização constante) com juros pré-fixado ao dia |
| post_sac | Amortização SAC com juros pré-fixado + indexador pós-fixado (cdi, ipca ou igpm) ao dia |
| post_price | Amortização Price com juros pré-fixado + indexador pós-fixado em períodos fixos (30 dias) |
| post_price_days | Amortização Price com juros pré-fixado + indexador pós-fixado ao dia |
Enumerador Credit Operation Type
| Enumerador | Descrição |
|---|---|
| ccb | Cédula de Crédito Bancário |
| cce | Cédula de Crédito à Exportação |
| cci | Cédula de Crédito Imobiliário |
| nce | Nota de Crédito à Exportação |
| ncom | Nota Comercial |
Enumerador Interest Base
| Enumerador | Descrição |
|---|---|
| workdays | Cálculo de juros em dias úteis considerando um ano de 252 dias |
| calendar_days | Cálculo de juros em dias corridos considerando um ano de 360 dias |
| calendar_days_365 | Cálculo de juros em dias corridos considerando um ano de 365 dias |
Decodificação de QR Code
Request
Request Body
{
"qr_code_type": "dynamic_instant",
"qr_code_payload": "00020101021226850014br.gov.bcb.pix2563qrcodepix.bb.com.br/pix/v2/d373e385-dfe7-49f6-b9ec-14ba60a9b8285204000053039865802BR5925TESTE62070503***63047B7D",
"pix_key": "teste.cobrancapix@gmail.com.br",
"receiver_conciliation_id": "fgnb4NTt7pOUBGfrcporERwVVqr0f8PWRfK",
"amount": "9367.61",
"status": "ATIVA"
}
Response Body
| Campo | Tipo | Descrição | Disponível |
|---|---|---|---|
qr_code_type | string | Tipo do QR Code: static, dynamic_instant ou dynamic_term. | Todos |
qr_code_payload | string | Payload EMV original recebido na requisição. | Todos |
pix_key | string | Chave Pix do recebedor extraída do payload do QR Code. | Todos |
transfer_amount | string | Valor da transferência, quando especificado no QR Code. | static |
additional_data | string | Dados adicionais contidos no QR Code estático. | static |
receiver_conciliation_id | string | Identificador de conciliação do recebedor (txid). | dynamic_* |
amount | string | Valor original da cobrança. | dynamic_* |
status | string | Status da cobrança dinâmica. | dynamic_* |
:::info Status
Para QR Codes dinâmicos, o status do QR Code é retornado de acordo com a tabela de enumeração abaixo.
Erros
Response Body: QR Code estáticoQR Code com formato inválido
{
"data": "{\"title\": \"Invalid Qr Code Format\", \"description\": \"The Qr Code format is invalid, please enter a valid Qr Code\", \"translation\": \"O formato do Qr Code é inválido, por favor insira um Qr Code válido\", \"extra_fields\": {}, \"code\": \"PXT000070\"}"
}
Tipo de QR Code não identificado no payload
{
"data": "{\"title\": \"Invalid Qr Code Type\", \"description\": \"The Qr Code payload given did not provide a propper Qr Code type\", \"translation\": \"O payload de QR Code fornecido não contêm um tipo de Qr Code Válido\", \"extra_fields\": {}, \"code\": \"PXT000071\"}"
}
Response Body
{
"data": "{\"title\": \"Error in Qr Code Payload Request\", \"description\": \"An error occurred while requesting the qr code payload to the registry institution\", \"translation\": \"Um erro ocorreu durante a requisição do payload do qr code para a instituição de registro\", \"extra_fields\": {}, \"code\": \"PXT000069\"}"
}
O que é a Análise de Risco (LAaS)?
Esta é a primeira versão desta página conceitual e pode sofrer pequenas alterações.
Antes de entrar nos campos, tipos e códigos de erro, vale entender por que a Análise de Risco existe e o que ela resolve. Esta seção é o "mapa mental" — a documentação técnica completa (com todos os campos de request/response) está logo abaixo, em Análise de Risco.
A ideia em uma frase
A Análise de Risco (também chamada de LAaS, Lending Analysis as a Service) é um único endpoint que combina, em uma só chamada, as verificações necessárias para decidir se um tomador pode ou não receber crédito — onboarding, análise de crédito e, quando aplicável, consulta de margem consignável — e entrega o resultado consolidado no final, sem que você precise orquestrar cada verificação separadamente.
A analogia: um check-in de aeroporto
Pense no pedido de crédito como um passageiro tentando embarcar em um voo.
-
Você (cliente/parceiro) é o balcão de check-in. É você quem recebe o passageiro (o tomador) e decide encaminhá-lo para o processo de embarque, enviando um único
POST /lending_analysis. -
A consulta prévia (
inquiry) é a checagem de documentos antes mesmo da fila de segurança. Se o produto é consignado privado, antes de qualquer outra coisa a QI Tech confere se o passageiro tem "passagem válida" — isto é, se ele tem margem consignável disponível com o empregador informado. Sem isso, não faz sentido nem seguir para as próximas etapas. -
As etapas (
analysis_steps) são os controles de segurança e imigração, em sequência. Cada etapa é um checkpoint independente, executado na ordem:- Onboarding (
onboarding_natural_person) — o controle de identidade: "esse documento é válido? essa pessoa é quem diz ser?" - Análise de crédito (
credit_analysis_natural_person) — o controle de "bagagem": "essa pessoa pode embarcar com esse valor de crédito, dentro de que limites de taxa e parcelas?"
Se um checkpoint reprova, o passageiro não segue para o próximo — a análise já fecha como
reprovedali mesmo. E nem todo passageiro passa pelos dois controles: quais etapas se aplicam a cada tomador dependem da configuração do produto (AnalysisConfiguration) do lado da QI Tech — em alguns casos só o onboarding é executado. - Onboarding (
-
A resposta síncrona é o seu tíquete de fila. Ao enviar o
POST, você recebe na hora umlending_analysis_keye o statuspending_inquiry— como dizer "seu passageiro está na fila, aqui está o número dele". Ainda não é a decisão final. -
O webhook é o alto-falante do aeroporto anunciando o embarque. Quando todos os checkpoints terminam, a QI Tech avisa você via webhook (
laas.lending_analysis.status_change) com o resultado consolidado — aprovado, reprovado ou falha técnica. Você não precisa ficar checando a toda hora (embora possa, via polling — ver abaixo). -
A consulta de elegibilidade é a pergunta "esse passageiro já tem um embarque em andamento?" Antes de criar uma nova análise, você pode perguntar via
GET /lending_analysisse aquele CPF já possui uma análise ativa para aquele produto — evitando embarcar o mesmo passageiro duas vezes.
Da analogia para a API
| No aeroporto | Na API |
|---|---|
| Balcão de check-in recebe o passageiro | POST /lending_analysis |
| Passageiro já tem embarque em andamento? | GET /lending_analysis (elegibilidade) |
| Número da fila | lending_analysis_key |
| Checagem prévia de documento de viagem | inquiries (ex: consulta de margem consignável) |
| Controle de identidade | Etapa onboarding_natural_person |
| Controle de bagagem/valor | Etapa credit_analysis_natural_person |
| Painel de embarque, consultável a qualquer momento | GET /lending_analysis/{lending_analysis_key} |
| Anúncio de embarque no alto-falante | Webhook laas.lending_analysis.status_change |
O fluxo, passo a passo
- Você envia
POST /lending_analysiscom o CPF do tomador, o tipo de produto (lending_analysis_type) e os dados necessários (ex:private_payrollpara consignado privado,authorization_termcom a autorização assinada pelo tomador). - A API responde na hora (síncrono) com
analysis_status: pending_inquirye olending_analysis_key. Essa resposta só confirma que a análise foi criada — não é o resultado. - Nos bastidores (assíncrono), a QI Tech:
- roda a consulta prévia necessária (ex: margem consignável), se o produto exigir;
- executa a etapa de onboarding;
- se aprovada e a etapa estiver configurada para o produto, executa a etapa de análise de crédito;
- se qualquer etapa reprovar ou falhar, a análise encerra ali com esse resultado.
- Ao chegar a um status final (
approved,reprovedoufailed), a QI Tech dispara o webhooklaas.lending_analysis.status_changepara a URL configurada no seu ambiente, com o detalhe de cada etapa e das consultas realizadas. - Alternativamente, você pode consultar o andamento a qualquer momento com
GET /lending_analysis/{lending_analysis_key}(bom para telas de acompanhamento ou para reconciliar caso um webhook se perca).
Pense duas vezes antes de fazer polling agressivo no GET de status — o webhook já te avisa assim que o resultado sai. Use o GET para reconciliação, não como substituto do webhook.
Os "vistos" (status) explicados sem juridiquês
| Status da análise | O que realmente significa |
|---|---|
pending_inquiry | "Chegou na fila, ainda estamos conferindo os documentos de viagem." Estado inicial. |
pending_analysis | "Passou na checagem prévia, está andando pelos controles de segurança (onboarding / análise de crédito)." |
approved | "Embarque liberado." Estado final. |
reproved | "Não pode embarcar desta vez." Estado final — algum checkpoint reprovou. |
failed | "Aeroporto com problema técnico" — falha da própria análise (indisponibilidade de algum provedor, erro técnico), não uma reprovação de mérito. Estado final. |
Cada etapa individual (onboarding_natural_person, credit_analysis_natural_person) tem seu próprio mini-status (approved/reproved/failed) e um reason explicando o motivo — é o "aqui está exatamente por que barramos você nesse checkpoint".
Perguntas rápidas
Preciso me preocupar com a ordem das etapas, ou com quais etapas vão rodar?
Não — tanto a ordem (onboarding antes de credit_analysis) quanto quais etapas se aplicam a cada tomador são definidas pela configuração do produto (AnalysisConfiguration) do lado da QI Tech. Você só recebe o resultado consolidado, já na ordem certa.
E se o passageiro já tiver um embarque em andamento?
Use a consulta de elegibilidade (GET /lending_analysis) antes de criar uma nova análise para o mesmo CPF/produto, evitando duplicidade.
O que acontece se eu perder o webhook?
Consulte o status a qualquer momento com GET /lending_analysis/{lending_analysis_key} — ele traz o mesmo resultado, incluindo o histórico completo de eventos, etapas e consultas.
Para ir além
- Análise de Risco — campos de request/response, objetos, enumeradores e casos de teste em sandbox.
- Catálogo de Erros LaaS — todos os códigos de erro possíveis.
- Webhooks — Notificações BaaS e LaaS — como configurar e validar o recebimento dos webhooks.
Análise de Risco
Esta é a primeira versão da documentação do Análise de Risco e pode sofrer pequenas alterações. Recomendamos acompanhar esta página para futuras atualizações.
O endpoint de Análise de Risco permite realizar uma análise de crédito completa para o tomador, combinando onboarding, análise de crédito e consulta de dados do trabalhador do consignado privado em uma única requisição.
A operação é assíncrona: ao enviar a requisição, a API retorna uma resposta síncrona com o status pending_inquiry. O resultado final da análise é entregue via webhook quando o processamento é concluído.
- O cliente envia um
POSTpara/lending_analysiscom os dados do tomador e as consultas desejadas. - A API retorna uma resposta síncrona com a
lending_analysis_keye statuspending_inquiry. - Ao finalizar o processamento, a API envia um webhook com o resultado completo da análise.
Além do POST /lending_analysis descrito abaixo, a API expõe duas consultas auxiliares:
- Consulta de elegibilidade —
GET /lending_analysispara verificar se o tomador já tem análise ativa antes de criar uma nova. - Consulta de status da análise —
GET /lending_analysis/{lending_analysis_key}para acompanhar o estado da análise via polling, como alternativa ao webhook.
Request
Request Body
{
"request_identifier_key": "12345678901",
"document_number": "46276658812",
"lending_analysis_type": "private_payroll",
"purchaser_document_number": "12345678000199",
"private_payroll": {
"employer_document_number": "12345678000199",
"registration_number": "12345678901"
},
"authorization_term": {
"legal_representative_document_number": "98765432100",
"signature": {
"signer": {
"document_number": "46276658812",
"name": "João da Silva",
"email": "joao.silva@email.com",
"phone": {
"number": "912345678",
"area_code": "11",
"country_code": "55"
}
},
"authentication_type": "opt_in",
"authenticity": {
"timestamp": "2026-03-12T10:00:00Z",
"ip_address": "192.168.1.100",
"fingerprint": {},
"session_id": "3571e292-3a83-4011-904d-20ee963022ef"
}
}
},
"analysis_data": {
"name": "João da Silva"
}
}
Body Params
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
request_identifier_key | string | Chave idempotente da requisição. Deve ser única por análise. | - |
document_number | string | CPF do tomador (apenas dígitos). | 11 |
lending_analysis_type | string | Tipo da análise de crédito. | Enumeradores Análise de Risco Type |
purchaser_document_number | string | CNPJ do comprador/cessionário. (opcional) | 14 |
private_payroll | object | Dados do consignado privado do tomador. | Private Payroll Object |
authorization_term | object | Termo de autorização do tomador. | Authorization Term Object |
analysis_data | object | Dados adicionais do tomador para a análise. | Analysis Data Object |
Private Payroll Object
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
employer_document_number | string | CNPJ do empregador. | 14 |
registration_number | string | Número de matrícula do trabalhador. | - |
Authorization Term Object
Nos casos em que houver representante legal, é necessário preencher o campo legal_representative_document_number com o CPF do representante legal, e os dados do objeto signer devem ser preenchidos com os dados do representante.
Para mais informações sobre o objeto
authorization_term, consulte a documentação oficial: Consultas do Trabalhador - Consulta de Dados do Trabalhador
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
legal_representative_document_number | string | CPF do representante legal (obrigatório apenas quando houver representante legal). | 11 |
signature.signer.document_number | string | CPF do assinante. | 11 |
signature.signer.name | string | Nome do assinante. | - |
signature.signer.email | string | Email do assinante. (opcional) | - |
signature.signer.phone.number | string | Número de telefone do assinante. (opcional) | - |
signature.signer.phone.area_code | string | DDD do assinante. (opcional) | 2 |
signature.signer.phone.country_code | string | Código do país (ex: "55"). (opcional) | 3 |
signature.authentication_type | string | Tipo de autenticação. Deve ser "opt_in". | - |
signature.authenticity.timestamp | string | Data e hora do aceite (formato ISO 8601: 2026-03-12T10:00:00Z). | - |
signature.authenticity.ip_address | string | IP da sessão do usuário (IPv4 ou IPv6). | - |
signature.authenticity.fingerprint | object | Evidências adicionais de rastreabilidade (pode ser objeto vazio {}). | - |
signature.authenticity.session_id | string | Identificador da sessão do usuário (min. 10, máx. 50 caracteres). | 50 |
Analysis Data Object
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
name | string | Nome do tomador. (opcional) | - |
Response
Response Body
{
"analysis_status": "pending_inquiry",
"lending_analysis_key": "06666318-c9e9-416b-ae2f-460355a3d8e8"
}
| Campo | Tipo | Descrição |
|---|---|---|
analysis_status | string | Status atual da análise. Retorna pending_inquiry na resposta síncrona. |
lending_analysis_key | string | Chave UUID da análise, utilizada para correlacionar com o webhook. |
Response Body
{
"title": "Bad Request",
"description": "Invalid or missing required fields in the request body. Check 'document_number', 'lending_analysis_type', 'private_payroll', and 'authorization_term'.",
"translation": "Campos obrigatórios ausentes ou inválidos no corpo da requisição. Verifique 'document_number', 'lending_analysis_type', 'private_payroll' e 'authorization_term'.",
"extra_fields": {},
"code": "LAS000001"
}
Retornado quando o campo request_identifier_key já foi utilizado em uma requisição anterior.
Response Body
{
"title": "Conflict",
"description": "A lending analysis with the provided 'request_identifier_key' already exists. Each analysis must use a unique identifier.",
"translation": "Já existe uma análise de crédito com o 'request_identifier_key' informado. Cada análise deve utilizar um identificador único.",
"extra_fields": {
"existing_lending_analysis_key": "06666318-c9e9-416b-ae2f-460355a3d8e8"
},
"code": "LAS000002"
}
Consulta de elegibilidade
Verifica se o tomador possui uma análise ativa (não expirada) para um determinado produto. Se não houver, indica que uma nova análise pode ser criada com POST /lending_analysis.
Query Params
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
document_number | string | CPF do tomador (apenas dígitos). | 11 |
product_name | string | Nome do produto. Atualmente o único valor aceito é private_payroll. | - |
purchaser_document_number | string | CNPJ do comprador/cessionário. (opcional) | 14 |
Exemplo de chamada
GET /lending_analysis?document_number=46276658812&product_name=private_payroll
Response — Tomador com análise ativa
Response Body
{
"lending_analysis_key": "06666318-c9e9-416b-ae2f-460355a3d8e8",
"analysis_status": "approved",
"expires_at": "2026-03-17T10:00:00Z"
}
| Campo | Tipo | Descrição |
|---|---|---|
lending_analysis_key | string | Chave UUID da análise ativa do tomador. |
analysis_status | string | Status atual da análise. Veja Status da análise. |
expires_at | string | Data e hora (ISO 8601) em que a análise expira. Após essa data, o tomador volta a ser elegível para uma nova análise. |
Response — Tomador sem análise ativa
Retornado quando não existe análise ativa para o tomador na combinação informada. O cliente pode prosseguir com POST /lending_analysis para iniciar uma nova análise (desde que exista uma AnalysisConfiguration ativa para o mesmo requester_key, produto e purchaser_document_number).
Response Body
{
"code": "LAS000009",
"title": "No active lending analysis found",
"description": "No active lending analysis found for product_name=<X>, purchaser_document_number=<Y>. The borrower has no active analysis for the given product.",
"translation": "Nenhuma analise de credito ativa encontrada para product_name=<X>, purchaser_document_number=<Y>. O tomador nao possui analise ativa para o produto informado."
}
Disparado quando não existe nenhuma Analysis para a tupla (requester_key, product_name, document_number, purchaser_document_number) que esteja em status diferente de failed e ainda dentro do prazo de validade (expires_at no futuro).
Consulta de status da análise
Retorna o estado completo de uma análise específica, incluindo o histórico de transições de status, etapas individuais executadas e dados das consultas realizadas (inquiries). Útil quando o cliente prefere fazer polling em vez de aguardar exclusivamente o webhook de conclusão.
Path Params
| Campo | Tipo | Descrição |
|---|---|---|
lending_analysis_key | string | UUID da análise, retornado pelo POST /lending_analysis na criação. |
Exemplo de chamada
GET /lending_analysis/06666318-c9e9-416b-ae2f-460355a3d8e8
Response
Response Body
{
"lending_analysis_key": "06666318-c9e9-416b-ae2f-460355a3d8e8",
"analysis_status": "approved",
"expires_at": "2026-03-17T10:00:00Z",
"request_identifier_key": "12345678901",
"document_number": "46276658812",
"additional_data": {
"private_payroll": {
"employer_document_number": "12345678000199",
"registration_number": "12345678901"
},
"analysis_data": {
"name": "João da Silva"
}
},
"status_events": [
{
"status": "pending_inquiry",
"created_at": "2026-03-12T10:00:00Z"
},
{
"status": "approved",
"created_at": "2026-03-12T10:05:00Z"
}
],
"inquiries": [
{
"inquiry_key": "0a1b2c3d-e5f6-7890-abcd-ef1234567890",
"inquiry_type": "private_payroll",
"inquiry_status": "success",
"inquiry_data": {}
}
],
"steps": [
{
"analysis_step_key": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
"order": 1,
"step_type": "onboarding_natural_person",
"step_status": "approved"
},
{
"analysis_step_key": "a9b8c7d6-e5f4-3210-abcd-ef1234567890",
"order": 2,
"step_type": "credit_analysis_natural_person",
"step_status": "approved"
}
]
}
Campos principais
| Campo | Tipo | Descrição |
|---|---|---|
lending_analysis_key | string | UUID da análise. |
analysis_status | string | Status atual da análise. Veja Status da análise. |
expires_at | string | Data e hora de expiração da análise (ISO 8601). |
request_identifier_key | string | Chave idempotente informada na requisição original. |
document_number | string | CPF do tomador. |
additional_data | object | Dados originais enviados em POST /lending_analysis (private_payroll, authorization_term, analysis_data). |
status_events | array | Histórico de transições de status. Status Events Object |
inquiries | array | Consultas realizadas durante a análise. Inquiries Object (consulta) |
steps | array | Etapas individuais executadas. Steps Object |
Status Events Object
Cada item registra uma transição de status com seu carimbo de tempo, em ordem cronológica.
| Campo | Tipo | Descrição |
|---|---|---|
status | string | Status assumido pela análise. Veja Status da análise. |
created_at | string | Data e hora da transição (ISO 8601). |
Inquiries Object (consulta)
| Campo | Tipo | Descrição |
|---|---|---|
inquiry_key | string | UUID da consulta. |
inquiry_type | string | Tipo da consulta. Atualmente o único valor é private_payroll. |
inquiry_status | string | Status da consulta: pending, success ou failed. |
inquiry_data | object | Dados retornados pela consulta. Para private_payroll, segue o mesmo formato exibido no webhook — consulte Dados de inquiry (inquiry_data). |
failure_reason | string | Motivo da falha quando inquiry_status é failed. (opcional) |
Steps Object
Cada etapa representa uma análise individual executada (onboarding, análise de crédito) durante o processamento.
| Campo | Tipo | Descrição |
|---|---|---|
analysis_step_key | string | UUID da etapa. |
order | integer | Ordem de execução da etapa (1, 2, ...). |
step_type | string | Tipo da etapa: onboarding_natural_person ou credit_analysis_natural_person. |
step_status | string | Status atual da etapa: created, pending, approved, reproved ou failed. |
Retornado quando a lending_analysis_key informada não corresponde a nenhuma análise existente.
Response Body
{
"title": "Not Found",
"description": "Lending analysis with the provided key was not found.",
"translation": "Não foi encontrada uma análise de crédito com a chave informada.",
"extra_fields": {},
"code": "LAS000005"
}
Webhooks
Os webhooks da QI Tech não devem ser mapeados de forma estrita. Campos adicionais podem ser incluídos aos payloads dos webhooks retornados em nossas APIs.
Webhook type: laas.lending_analysis.status_change
O webhook é enviado para a URL configurada no ambiente do cliente quando a análise é concluída.
Webhook de análise concluída
Response Body
{
"key": "06666318-c9e9-416b-ae2f-460355a3d8e8",
"status": "completed",
"webhook_type": "laas.lending_analysis.status_change",
"event_datetime": "2026-03-12T10:05:00Z",
"data": {
"request_identifier_key": "12345678901",
"analysis_status": "reproved",
"analysis_steps": [
{
"analysis_step_type": "onboarding_natural_person",
"analysis_step_status": "approved",
"reason": "Passou nas validações",
"output_data": {}
},
{
"analysis_step_type": "credit_analysis_natural_person",
"analysis_step_status": "reproved",
"reason": "Score do Serasa menor que 500",
"output_data": {
"analysis_score": 100,
"credit_model_score": 100,
"maximum_monthly_interest_rate": 0.00,
"minimum_monthly_interest_rate": 0.00,
"maximum_installments_number": 10,
"minimum_installments_number": 1,
"maximum_disbursed_issue_amount": 4500.00,
"minimum_disbursed_issue_amount": 0.00
}
}
],
"inquiries": [
{
"inquiry_type": "private_payroll",
"inquiry_data": {
"document_number": "99999999999",
"registration_number": "99999999999-A",
"employer_document_number": "99999999999962",
"name": "JOÃO SILVA",
"gender": "male",
"birth_date": "1985-07-20",
"worker_category_code": 101,
"eligible": true,
"available_margin_amount": 5000.00,
"base_margin_amount": 4500.00,
"total_due_amount": 8207.54,
"admission_date": "2020-03-15",
"termination_date": null,
"termination_reason_code": null,
"political_exposition": "not_exposed",
"employer_name": "EMPRESA XYZ LTDA",
"mother_name": "MARIA DA SILVA",
"nationality": {
"code": 76,
"description": "BRASIL"
},
"occupation": {
"code": 724325,
"description": "SOLDADOR ELETRICO"
},
"economic_activity": {
"code": 2833000,
"description": "FABRICACAO DE MAQUINAS E EQUIPAMENTOS PARA A AGRICULTURA E PECUARIA"
},
"ineligibility_reason": "not_informed",
"employer_activity_start_date": "2010-05-12",
"legacy_loans": [],
"alerts": [
{
"alert_type": "leave",
"reference_date": "2025-02-11",
"event_id": 123456,
"leave_reason_code": 3,
"leave_start_date": "2025-02-11",
"leave_end_date": "2025-03-11"
},
{
"alert_type": "termination",
"reference_date": "2025-02-11",
"event_id": 789012,
"termination_reason_code": 1,
"termination_date": "2025-02-11",
"notice_period_start_date": "2025-01-11",
"notice_period_end_date": "2025-02-11"
}
]
}
}
]
}
}
Descrição dos campos do webhook
| Campo | Tipo | Descrição |
|---|---|---|
key | string | lending_analysis_key retornada na resposta síncrona. |
status | string | Status do webhook. |
webhook_type | string | Tipo do webhook. |
event_datetime | string | Data e hora do evento (ISO 8601). |
data.request_identifier_key | string | Chave idempotente informada na requisição original. |
data.analysis_status | string | Status final da análise. Status da análise |
data.analysis_steps | array | Lista de etapas da análise realizadas. Analysis Steps Object |
data.inquiries | array | Dados retornados das consultas realizadas. Consulte a seção Dados de inquiry (inquiry_data). |
Analysis Steps Object
| Campo | Tipo | Descrição |
|---|---|---|
analysis_step_type | string | Tipo da etapa. Tipos de análise individual |
analysis_step_status | string | Status da etapa individual (approved ou reproved). |
reason | string | Razão da aprovação ou reprovação, definida em regra pelo cliente. |
output_data | object | Dados de saída específicos da etapa. |
output_data para credit_analysis
Todos os campos do output_data são configuráveis nas regras de análise. Caso a regra não esteja configurada para retornar um determinado campo, ele será retornado vazio ou não estará presente no payload.
| Campo | Tipo | Descrição |
|---|---|---|
analysis_score | number | Score da análise de crédito. |
credit_model_score | number | Score do modelo de crédito. |
maximum_monthly_interest_rate | number | Taxa de juros mensal máxima. |
minimum_monthly_interest_rate | number | Taxa de juros mensal mínima. |
maximum_installments_number | number | Número máximo de parcelas. |
minimum_installments_number | number | Número mínimo de parcelas. |
maximum_disbursed_issue_amount | number | Valor máximo de desembolso. |
minimum_disbursed_issue_amount | number | Valor mínimo de desembolso. |
Dados de inquiry (inquiry_data)
O array inquiries no webhook contém os dados retornados das consultas realizadas durante a análise. Cada item possui os campos inquiry_type (tipo da consulta) e inquiry_data (dados retornados).
Para o tipo private_payroll, o objeto inquiry_data segue o mesmo padrão de resposta da Consulta de dados do trabalhador do consignado privado, incluindo dados pessoais, margem consignável, histórico do vínculo, empréstimos ativos e alertas.
A documentação completa dos campos, enumeradores e exemplos de resposta do inquiry_data está disponível em:
Consultas do Trabalhador — 2. Consulta de dados do trabalhador
Enumeradores
Enumeradores Lending Analysis Type
| Campo | Descrição |
|---|---|
private_payroll | Análise de crédito consignado privado |
Status da análise
analysis_status(POST 202, GET de elegibilidade, GET de status e webhookdata.analysis_status)
| Status | Descrição |
|---|---|
pending_inquiry | A análise foi criada e aguarda a consulta inicial (estado inicial). |
pending_analysis | A consulta inicial foi concluída e as etapas de análise (onboarding, análise de crédito) estão em execução. |
approved | A análise foi aprovada (terminal). |
reproved | A análise foi reprovada (terminal). |
failed | A análise falhou por erro técnico ou indisponibilidade de provedor externo (terminal). |
O webhook
data.analysis_statusé emitido apenas com valores terminais (approved,reproved,failed).
Status do webhook
status(campo raiz do webhook)
| Status | Descrição |
|---|---|
completed | O processamento foi concluído |
failed | O processamento falhou |
Tipos de análise individual
analysis_step_type(dentro do arrayanalysis_steps)
| Enumerador | Descrição |
|---|---|
onboarding_natural_person | Análise de onboarding/cadastro do tomador. |
credit_analysis_natural_person | Análise de crédito do tomador. |
Status da análise individual
analysis_step_status(dentro do arrayanalysis_steps)
| Status | Descrição |
|---|---|
approved | Análise individual aprovada. |
reproved | Análise individual reprovada. |
failed | Análise individual falhou por erro técnico ou indisponibilidade de provedor externo. |
Sandbox — Casos de teste
Não utilize dados pessoais reais (CPF, CNPJ, etc.) em ambientes de sandbox.
No ambiente de sandbox, o resultado da análise é determinado pelo valor do campo analysis_data.name no body da requisição. Utilize os nomes abaixo para simular diferentes cenários:
Nome (analysis_data.name) | Resultado do onboarding | Resultado da credit_analysis | Status final (analysis_status) |
|---|---|---|---|
Ana Santos | approved | approved | approved |
Carlos Oliveira | approved | reproved | reproved |
Mariana Costa | reproved | — | reproved |
Pedro Almeida | approved | — | approved |
Fernanda Lima | reproved | — | reproved |
- Onboarding approved + Credit analysis approved (
Ana Santos): a análise completa é aprovada. O webhook retornaanalysis_status: "approved"com ambas as etapas aprovadas. - Onboarding approved + Credit analysis reproved (
Carlos Oliveira): o onboarding é aprovado mas a análise de crédito reprova. O webhook retornaanalysis_status: "reproved". - Onboarding reproved (
Mariana Costa,Fernanda Lima): o onboarding reprova e a análise de crédito não é executada. O webhook retornaanalysis_status: "reproved"com apenas a etapa de onboarding. - Only onboarding approved (
Pedro Almeida): apenas o onboarding é executado e aprovado, sem análise de crédito. O webhook retornaanalysis_status: "approved"com apenas a etapa de onboarding.
Webhook — Sandbox com nome "Ana Santos"
{
"key": "3571e292-3a83-4011-904d-20ee963022ef",
"status": "completed",
"webhook_type": "laas.lending_analysis.status_change",
"event_datetime": "2026-03-12T10:05:00Z",
"data": {
"request_identifier_key": "sandbox-test-001",
"analysis_status": "approved",
"analysis_steps": [
{
"analysis_step_type": "onboarding_natural_person",
"analysis_step_status": "approved",
"reason": "Passou nas validações",
"output_data": {}
},
{
"analysis_step_type": "credit_analysis_natural_person",
"analysis_step_status": "approved",
"reason": "Score acima do mínimo",
"output_data": {
"analysis_score": 750,
"credit_model_score": 720,
"maximum_monthly_interest_rate": 0.0449,
"minimum_monthly_interest_rate": 0.0199,
"maximum_installments_number": 24,
"minimum_installments_number": 3,
"maximum_disbursed_issue_amount": 15000.00,
"minimum_disbursed_issue_amount": 500.00
}
}
],
"inquiries": [
{
"inquiry_type": "private_payroll",
"inquiry_data": {
"document_number": "99999999999",
"registration_number": "99999999999-A",
"employer_document_number": "99999999999962",
"name": "ANA SANTOS",
"gender": "female",
"birth_date": "1990-05-15",
"worker_category_code": 101,
"eligible": true,
"available_margin_amount": 8000.00,
"base_margin_amount": 6500.00,
"total_due_amount": 3200.00,
"admission_date": "2018-09-01",
"termination_date": null,
"termination_reason_code": null,
"political_exposition": "not_exposed",
"employer_name": "EMPRESA XYZ LTDA",
"mother_name": "LUCIA SANTOS",
"nationality": {
"code": 76,
"description": "BRASIL"
},
"occupation": {
"code": 411010,
"description": "AUXILIAR DE ESCRITORIO"
},
"economic_activity": {
"code": 6499999,
"description": "OUTRAS ATIVIDADES DE SERVICOS FINANCEIROS"
},
"ineligibility_reason": "not_informed",
"employer_activity_start_date": "2005-01-10",
"legacy_loans": [],
"alerts": []
}
}
]
}
}
Webhook — Sandbox com nome "Carlos Oliveira" (credit_analysis reproved)
{
"key": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"status": "completed",
"webhook_type": "laas.lending_analysis.status_change",
"event_datetime": "2026-03-12T10:05:00Z",
"data": {
"request_identifier_key": "sandbox-test-002",
"analysis_status": "reproved",
"analysis_steps": [
{
"analysis_step_type": "onboarding_natural_person",
"analysis_step_status": "approved",
"reason": "Passou nas validações",
"output_data": {}
},
{
"analysis_step_type": "credit_analysis_natural_person",
"analysis_step_status": "reproved",
"reason": "Score do Serasa menor que 500",
"output_data": {
"analysis_score": 100,
"credit_model_score": 100,
"maximum_monthly_interest_rate": 0.00,
"minimum_monthly_interest_rate": 0.00,
"maximum_installments_number": 10,
"minimum_installments_number": 1,
"maximum_disbursed_issue_amount": 4500.00,
"minimum_disbursed_issue_amount": 0.00
}
}
],
"inquiries": [
{
"inquiry_type": "private_payroll",
"inquiry_data": {
"document_number": "99999999999",
"registration_number": "99999999999-A",
"employer_document_number": "99999999999962",
"name": "CARLOS OLIVEIRA",
"gender": "male",
"birth_date": "1988-11-22",
"worker_category_code": 101,
"eligible": true,
"available_margin_amount": 3500.00,
"base_margin_amount": 3000.00,
"total_due_amount": 12500.00,
"admission_date": "2019-06-10",
"termination_date": null,
"termination_reason_code": null,
"political_exposition": "not_exposed",
"employer_name": "EMPRESA XYZ LTDA",
"mother_name": "ROSA OLIVEIRA",
"nationality": {
"code": 76,
"description": "BRASIL"
},
"occupation": {
"code": 724325,
"description": "SOLDADOR ELETRICO"
},
"economic_activity": {
"code": 2833000,
"description": "FABRICACAO DE MAQUINAS E EQUIPAMENTOS PARA A AGRICULTURA E PECUARIA"
},
"ineligibility_reason": "not_informed",
"employer_activity_start_date": "2010-05-12",
"legacy_loans": [],
"alerts": []
}
}
]
}
}
Webhook — Sandbox com nome "Mariana Costa" (onboarding reproved)
{
"key": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"status": "completed",
"webhook_type": "laas.lending_analysis.status_change",
"event_datetime": "2026-03-12T10:05:00Z",
"data": {
"request_identifier_key": "sandbox-test-003",
"analysis_status": "reproved",
"analysis_steps": [
{
"analysis_step_type": "onboarding_natural_person",
"analysis_step_status": "reproved",
"reason": "Documentação inválida",
"output_data": {}
}
],
"inquiries": [
{
"inquiry_type": "private_payroll",
"inquiry_data": {
"document_number": "99999999999",
"registration_number": "99999999999-A",
"employer_document_number": "99999999999962",
"name": "MARIANA COSTA",
"gender": "female",
"birth_date": "1992-03-08",
"worker_category_code": 101,
"eligible": true,
"available_margin_amount": 6000.00,
"base_margin_amount": 5000.00,
"total_due_amount": 2100.00,
"admission_date": "2021-01-15",
"termination_date": null,
"termination_reason_code": null,
"political_exposition": "not_exposed",
"employer_name": "EMPRESA XYZ LTDA",
"mother_name": "PAULA COSTA",
"nationality": {
"code": 76,
"description": "BRASIL"
},
"occupation": {
"code": 252305,
"description": "ANALISTA DE SISTEMAS"
},
"economic_activity": {
"code": 6201500,
"description": "DESENVOLVIMENTO DE PROGRAMAS DE COMPUTADOR SOB ENCOMENDA"
},
"ineligibility_reason": "not_informed",
"employer_activity_start_date": "2015-08-20",
"legacy_loans": [],
"alerts": []
}
}
]
}
}
Referências
- Consultas do Trabalhador — Consignado Privado — Documentação completa sobre consulta de vínculos e consulta de dados do trabalhador, incluindo detalhamento do
authorization_term.