Pular para o conteúdo principal

APP Integration

Resumo

Este guia descreve como emitir uma dívida (operação de crédito) para pessoa física através do fluxo BNPL / e-commerce utilizando o endpoint POST /signed_debt.

Este fluxo suporta pagamentos via QR Code, permitindo coletar as informações necessárias para o desembolso diretamente do QR Code, incluindo o número do documento do beneficiário, número da conta, dígito da conta, número da agência e o valor a desembolsar.

A emissão para pessoa física representa um empréstimo padrão. Nesse cenário:

  • O campo financial.disbursed_amount especifica o valor principal a ser desembolsado ao tomador. Ele deve ser igual ao valor registrado no QR Code Pix informado em disbursement_bank_accounts.
  • borrower.person_type deve estar definido como natural.
  • O campo refinanced_credit_operations não deve ser informado.

A estrutura do borrower, additional_data.contract (assinaturas opt-in), disbursement_bank_accounts e demais objetos da requisição é descrita nas seções a seguir.

disbursed_amount deve ser igual ao valor do QR Code

O valor desembolsado (financial.disbursed_amount) deve ser igual ao valor registrado no QR Code Pix. Decodifique o QR Code primeiro via POST /pix/decode_qrcode_payload (passo 1) para obter o valor e use esse mesmo valor em disbursed_amount na emissão da dívida.

1. Decodificação do QR Code

Requisição

ENDPOINT
pix/decode_qrcode_payload
MÉTODO
POST
Testar no Playground

Corpo da requisição

{
"qr_code_payload": "00020101021226850014br.gov.bcb.pix2563qrcodepix.bb.com.br/pix/v2/d373e385-dfe7-49f6-b9ec-14ba60a9b8285204000053039865802BR5925TESTE62070503***63047B7D"
}
CampoTipoDescriçãoMáx caracteres
qr_code_payload *stringPayload EMV do QR Code Pix (copia-e-cola).340

Corpo da resposta

A resposta retorna os campos decodificados em um objeto aninhado qr_code_data. O conteúdo varia conforme o tipo de QR Code — selecione a aba correspondente.

{
"qr_code_type": "static",
"qr_code_payload": "00020126580014br.gov.bcb.pix0136a23bf0e9-5175-4829-bf89-e8fe6ac09aa1520400005303986540530.005802BR5914TywinLannister6008saopaulo62070503***6304D4FD",
"qr_code_data": {
"target_pix_key": "a23bf0e9-5175-4829-bf89-e8fe6ac09aa1",
"amount": "30.00",
"receiver_conciliation_id": "***",
"additional_data": [],
"category_code": "0000",
"city": "saopaulo",
"postal_code": null,
"reusable_qrcode": "no"
}
}
QR Code estático — campos indisponíveis

Por especificação do BR Code, QR Codes estáticos não contêm dados do pagador esperado, data de expiração, multa, juros, descontos nem abatimento. Esses campos só existem em QR Codes dinâmicos.

Além disso, qr_code_data.amount em QR estático pode vir null quando o lojista emitiu o QR "em branco" (sem valor fixo) — o pagador define o valor no momento do pagamento.

Campos da resposta

CampoTipoDescriçãoPresente em
qr_code_typestringTipo do QR Code: static, dynamic_instant ou dynamic_term.Todos
qr_code_payloadstringPayload EMV original enviado na requisição.Todos
qr_code_data.target_pix_keystringChave Pix do recebedor.Todos
qr_code_data.amountstring/decimalValor da cobrança. Em dynamic_term é o valor final (após multa/juros/desconto/abatimento). Em static pode vir null.Todos
qr_code_data.receiver_conciliation_idstringIdentificador de conciliação do recebedor (txid).Todos
qr_code_data.additional_dataarrayLista de informações adicionais {name, value}.Todos
qr_code_data.category_codestringCódigo de categoria do estabelecimento (MCC).Todos
qr_code_data.citystringCidade do recebedor.Todos
qr_code_data.postal_codestringCEP do recebedor.Todos
qr_code_data.reusable_qrcodestringyes se o QR pode ser pago múltiplas vezes, no caso contrário.Todos
qr_code_data.receiver_urlstringURL do PSP do recebedor (campo loc do BR Code).dynamic_*
qr_code_data.statusstringStatus da cobrança — ver enumeradores abaixo.dynamic_*
qr_code_data.revisionintegerVersão atual da cobrança.dynamic_*
qr_code_data.created_atstring ISOData de criação da cobrança no PSP do recebedor.dynamic_*
qr_code_data.presented_atstring ISOData de apresentação da cobrança ao pagador.dynamic_*
qr_code_data.question_to_payerstringMensagem do recebedor ao pagador (solicitacaoPagador).dynamic_*
qr_code_data.payer_namestringNome do pagador esperado, quando informado pelo recebedor.dynamic_*
qr_code_data.payer_document_numberstringCPF/CNPJ do pagador esperado.dynamic_*
qr_code_data.payer_person_typestringnatural ou legal.dynamic_*
qr_code_data.target_namestringNome do recebedor.dynamic_*
qr_code_data.expiration_secondsintegerTempo de validade do QR em segundos a partir de created_at.dynamic_instant
qr_code_data.can_changestringyes se o pagador pode alterar o valor, no caso contrário.dynamic_instant
qr_code_data.original_amountstring/decimalValor original da cobrança antes de multa/juros/desconto.dynamic_term
qr_code_data.due_datestring (date)Data de vencimento da cobrança.dynamic_term
qr_code_data.days_after_due_acceptedintegerDias após o vencimento em que ainda aceita pagamento.dynamic_term
qr_code_data.fine_amountstring/decimalMulta aplicada após o vencimento.dynamic_term
qr_code_data.fee_amountstring/decimalJuros aplicados após o vencimento.dynamic_term
qr_code_data.discount_amountstring/decimalDesconto concedido antes do vencimento.dynamic_term
qr_code_data.reduction_amountstring/decimalAbatimento aplicado à cobrança.dynamic_term
qr_code_data.target_trading_namestringNome fantasia do recebedor.dynamic_term
qr_code_data.addressstringLogradouro do recebedor.dynamic_term
qr_code_data.statestringUF do recebedor.dynamic_term

Enumeradores de status (QR Code dinâmico)

ValorDescrição
ATIVACobrança disponível, sem pagamento realizado.
CONCLUIDACobrança paga e finalizada.
REMOVIDA_PELO_USUARIO_RECEBEDORUsuário recebedor solicitou a remoção da cobrança.
REMOVIDA_PELO_PSPBanco recebedor solicitou a remoção da cobrança.

Erros

QR 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\"}"
}
Erro ao solicitar o payload do QR Code à instituição de registro
{
"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\"}"
}

2. Emissão de dívida

Requisição

ENDPOINT
/signed_debt
MÉTODO
POST
Testar no Playground

Corpo da requisição

{
"additional_data": {
"contract": {
"contract_number": null,
"signed": true,
"signatures": [
{
"signer": {
"name": "Alan Mathison Turing",
"phone": { "number": "912345678", "area_code": "11", "country_code": "055" },
"email": "alan.turing@email.com",
"document_number": "96969879003"
},
"signature": {
"ip_address": "168.211.22.84",
"timestamp": "27-10-2025 11:07:15",
"signature_file": { "file_url": "http://qitech.com.br/signature.pdf", "file_type": "pdf" },
"geolocation": { "long": "-46.63611", "lat": "-23.5475" },
"fingerprint_device": null
}
}
]
}
},
"financial": {
"number_of_installments": 2,
"credit_operation_type": "ccb",
"interest_type": "pre_price_days",
"monthly_interest_rate": 0.07,
"disbursed_amount": 150000,
"fine_configuration": { "contract_fine_rate": 0.02, "monthly_rate": 0.15, "interest_base": "calendar_days" },
"interest_grace_period": 0,
"disbursement_date": "2026-04-11",
"first_due_date": "2026-05-10",
"principal_grace_period": 0
},
"purchaser_document_number": "32402502000135",
"requester_identifier_key": "40822732-c4ce-41fb-9ee5-5e0304cd04a7",
"document_template_key": "518a0b57-2ce3-4309-94e5-6a95bc056d12",
"borrower": {
"email": "alan.turing@email.com",
"document_identification": "494598fd-c226-4332-a500-591ae3884673",
"document_identification_back": "494598fd-c226-4332-a500-591ae3884673",
"birth_date": "1998-06-03",
"person_type": "natural",
"is_pep": false,
"mother_name": "Nome completo da mãe",
"profession": "Servidor público",
"individual_document_number": "82744088021",
"address": {
"city": "São Paulo",
"neighborhood": "CENTRO",
"street": "Avenida Feliz",
"complement": "",
"postal_code": "49026100",
"state": "SP",
"number": ""
},
"phone": { "country_code": "055", "number": "912345678", "area_code": "11" },
"document_identification_number": "47003534819",
"name": "Alan Mathison Turing"
},
"disbursement_bank_accounts": [
{
"qr_code_url": "00020126930014br.gov.bcb.pix2571qrcode-h.sandbox.qitech.app/bacen/cobv/3fecc731adf542659b84be038ec4151e5204000053039865802BR5925LogcardMeiosDePagamentoLt6008SaoPaulo61080145200062070503***6304A936"
}
]
}
Atenção

A emissão para pessoa física utiliza borrower.person_type: "natural" e um individual_document_number (CPF). financial.disbursed_amount deve ser igual ao valor registrado no QR Code Pix enviado em disbursement_bank_accounts — decodifique o QR Code antes via POST /pix/decode_qrcode_payload. Omita refinanced_credit_operations (esse campo só é utilizado quando há quitação de operações existentes em refinanciamento).

Parâmetros do corpo

CampoTipoDescriçãoMáx caracteres
additional_data *objectMetadados do contrato e evidências de assinatura em additional_data.contract (número do contrato, flag de assinatura, signatures[] com signer e evidências).-
borrower *objectObjeto borrower — pessoa física tomadora do crédito.-
disbursement_bank_accounts *arrayContas de desembolso — array contendo o QR Code que recebe o desembolso (um único item neste fluxo).-
financial *objectObjeto financial — condições financeiras; use disbursed_amount para o valor a desembolsar ao tomador.-
purchaser_document_number *stringCNPJ do cessionário (somente dígitos, sem formatação).-
requester_identifier_keystringChave de rastreio do cliente para a requisição.50
document_template_keystringChave do template do contrato a ser utilizado na operação.UUID

Objeto borrower

CampoTipoDescriçãoMáx caracteres
name *stringNome completo do tomador100
emailstringE-mail do tomador254
phoneobjectObjeto phone — telefone de contato-
is_pep *booleanIndicador de PEP (http://www.portaldatransparencia.gov.br/download-de-dados/pep)-
address *objectObjeto address — endereço do tomador-
role_typeenumPapel do tomador no contrato. Padrão: issuer.-
birth_date *dateData de nascimento (YYYY-MM-DD)-
mother_name *stringNome completo da mãe100
nationalitystringNacionalidade50
professionstringProfissão do tomador100
person_type *stringTipo de pessoa — deve ser natural para pessoas físicas-
individual_document_number *stringCPF do tomador (somente dígitos)11
document_identification *stringDOCUMENT_KEY do PDF do documento (RG ou CNH), enviado previamenteUUID
document_identification_backstringDOCUMENT_KEY do verso do documento (enviado previamente)UUID
document_identification_numberstringNúmero do documento de identificação do tomador (RG ou CNH), somente dígitos20

Objeto address

CampoTipoDescriçãoMáx caracteres
city *stringCidade100
state *stringEstado (duas letras maiúsculas)2
number *stringNúmero10
street *stringLogradouro100
complement *stringComplemento do endereço (texto livre)100
postal_code *stringCEP (https://www.buscacep.correios.com.br/)8
neighborhood *stringBairro100

Objeto phone

CampoTipoDescriçãoMáx caracteres
number *stringNúmero do telefone10
area_code *stringDDD (https://ddd.guiamais.com.br/)2
country_code *stringDDI (https://ddi.guiamais.com.br/)3

Contas de desembolso

Neste fluxo, o desembolso é liquidado pelo pagamento do QR Code dinâmico Pix fornecido pelo lojista. Em vez de enviar as coordenadas bancárias do beneficiário, envie o payload do QR Code dentro de disbursement_bank_accounts — a QI Tech decodifica e roteia o desembolso para o dono do QR Code.

disbursement_bank_accounts é um array com um único item contendo apenas o payload do QR Code:

CampoTipoDescriçãoMáx caracteres
qr_code_url *stringPayload EMV do QR Code dinâmico Pix a ser pago.250
Consistência de valor

O valor registrado no QR Code deve ser igual a financial.disbursed_amount. Decodifique o QR Code via POST /pix/decode_qrcode_payload (passo 1) para obter o valor e use esse mesmo valor em disbursed_amount na emissão da dívida.

Dados do recebedor preenchidos na resposta

Ao emitir com qr_code_url, a QI Tech decodifica o QR Code e preenche automaticamente os dados do recebedor no disbursement_account da resposta/webhook:

  • name: nome completo do recebedor (sempre por extenso, sem máscara).
  • document_number: documento do recebedor — CPF (11 dígitos) é retornado mascarado como ***XXXXXX**; CNPJ (14 dígitos) é retornado íntegro, sem máscara.
  • ispb / financial_institutions / financial_institutions_code_number: instituição financeira do recebedor.
  • pix_key, receiver_conciliation_id, end_to_end_id, amount_receivable: extraídos do QR Code decodificado.

Os campos account_branch, account_number e account_digit permanecem null no caso de QR Code dinâmico, pois esses dados não fazem parte do EMV.

Objeto financial

O objeto financial descreve as condições financeiras da operação de crédito.

CampoTipoDescriçãoMáx caracteres
disbursed_amount *floatValor desembolsado ao tomador (principal da operação)-
interest_typeenumTipo de juros — amortização e cálculo de juros-
credit_operation_typeenumTipo da operação de crédito — tipo de instrumento-
monthly_interest_ratefloatTaxa de juros mensal prefixada (decimal)-
disbursement_datedateData de desembolso (YYYY-MM-DD)-
first_due_datedateData do primeiro vencimento (YYYY-MM-DD)-
interest_grace_periodintCarência de juros (meses)-
principal_grace_periodintCarência do principal-
number_of_installmentsintNúmero de parcelas-
fine_configurationobjectConfiguração de multa — juros de mora e multa-

Objeto fine_configuration

A configuração de multa define a multa e os juros de mora aplicáveis à operação.

CampoTipoDescriçãoMáx caracteres
contract_fine_ratefloatTaxa de multa contratual-
interest_baseenumBase de juros — base de cálculo dos juros-
monthly_ratefloatTaxa de juros de mora mensal-

Enumeradores

Person type

ValorDescrição
naturalPessoa física
legalPessoa jurídica

Account type

ValorDescrição
checking_accountConta corrente
deposit_accountConta de depósito
guaranteed_accountConta garantida
investment_accountConta de investimento
payment_accountConta de pagamento
saving_accountPoupança
salary_accountConta salário

Interest type

ValorDescrição
pre_price_daysMétodo Price (parcelas iguais) com juros prefixados diários
pre_priceMétodo Price (parcelas iguais) com juros prefixados em períodos fixos de 30 dias
pre_sacSAC (amortização constante) com juros prefixados diários
post_sacSAC com taxa prefixada + índice pós-fixado (CDI, IPCA ou IGP-M), diário
post_pricePrice com taxa prefixada + índice pós-fixado em períodos fixos de 30 dias
post_price_daysPrice com taxa prefixada + índice pós-fixado, diário

Credit operation type

ValorDescrição
ccbCédula de Crédito Bancário
cceCédula de Crédito à Exportação
nceNota de Crédito à Exportação
BNPL

No fluxo BNPL / e-commerce, ccb é o valor utilizado na prática.

Interest base

ValorDescrição
workdaysDias úteis, ano de 252 dias
calendar_daysDias corridos, ano de 360 dias
calendar_days_365Dias corridos, ano de 365 dias

Resposta (HTTP 200)

A resposta síncrona ecoa o corpo da requisição com campos completados pela plataforma (por exemplo contract.contract_number e requester_identifier_key).

STATUS
200
Corpo da resposta
{
"webhook_type": "debt",
"key": "4e1ed268-9f29-44ce-9991-3bdf036aeacd",
"status": "issued",
"event_datetime": "2026-04-14 03:38:14",
"data": {
"borrower": {
"name": "Alan Mathison Turing",
"document_number": "82744088021",
"related_party_key": "71b28fde-5d75-48b4-9c3f-ee531dccac66"
},
"contract": {
"document_key": null,
"number": "TEST7886216399",
"urls": [],
"signature_information": [
{
"signer_name": "Alan Mathison Turing",
"signer_document_number": "82744088021",
"signer_role": "issuer",
"signer_email": null,
"signer_external_key": null,
"signature_url": null
}
]
},
"requester_identifier_key": "40822732-c4ce-41fb-9ee5-5e0304cd04a7",
"iof_charge_method": "financed",
"collaterals": [],
"contract_fees": [ { "fee_type": "spread", "fee_amount": 453.39 } ],
"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": 453.39,
"issue_amount": 151131.6,
"assignment_amount": 151584.99,
"cet": "7,6600%",
"annual_cet": "142,4473%",
"number_of_installments": 2,
"base_iof": 557.3,
"additional_iof": 574.3,
"total_iof": 1131.6,
"ipoc_code": "324025020203182744088021TEST7886216399",
"prefixed_interest_rate": {
"annual_rate": 1.252191589,
"created_at": "2026-04-14T03:38:10",
"daily_rate": 0.0022578334,
"interest_base": "calendar_days",
"monthly_rate": 0.07
},
"installments": [
{
"due_date": "2026-05-10",
"due_principal": 151131.6,
"installment_key": "c00dbecc-efb9-4384-8db3-dadba82f2d70",
"installment_number": 1,
"installment_status": "created",
"installment_type": "principal",
"pre_fixed_amount": 10214.91484159,
"principal_amortization_amount": 73277.28515841,
"tax_amount": 174.25338411,
"total_amount": 83492.2
},
{
"due_date": "2026-06-10",
"due_principal": 77854.31484159,
"installment_key": "d3a2f42d-80cb-4891-b2be-ce80ffd383b2",
"installment_number": 2,
"installment_status": "created",
"installment_type": "principal",
"pre_fixed_amount": 5637.88515841,
"principal_amortization_amount": 77854.31484159,
"tax_amount": 383.04322902,
"total_amount": 83492.2
}
],
"total_pre_fixed_amount": 15852.8,
"disbursement_account": [
{
"name": "Logcard Meios De Pagamento Ltda",
"document_number": "18236120000158",
"pix_key": "d6e2d611-6c68-4f84-9be5-962ad2f2bcb6",
"qr_code_key": null,
"qr_code_url": "00020126930014br.gov.bcb.pix2571qrcode-h.sandbox.qitech.app/bacen/cobv/3fecc731adf542659b84be038ec4151e5204000053039865802BR5925LogcardMeiosDePagamentoLt6008SaoPaulo61080145200062070503***6304A936",
"account_branch": null,
"account_number": null,
"account_digit": null,
"account_type": "checking_account",
"ispb": "18236120",
"percentage_receivable": 100,
"amount_receivable": 150000,
"end_to_end_id": "E32402502202606270040dNdgaZPUHxT"
}
]
}
}

Webhook (webhook_type: debt)

Após a operação ser processada, a QI Tech notifica seu endpoint com os dados consolidados da dívida, incluindo o valor emitido, breakdown de IOF, taxa de juros prefixada e o cronograma de parcelas.

Corpo do webhook
{
"webhook_type": "debt",
"key": "4e1ed268-9f29-44ce-9991-3bdf036aeacd",
"status": "waiting_disbursement",
"event_datetime": "2026-04-14 03:38:14",
"data": {
"borrower": {
"name": "Alan Mathison Turing",
"document_number": "82744088021",
"related_party_key": "71b28fde-5d75-48b4-9c3f-ee531dccac66"
},
"contract": {
"document_key": null,
"number": "TEST7886216399",
"urls": [],
"signature_information": [
{
"signer_name": "Alan Mathison Turing",
"signer_document_number": "82744088021",
"signer_role": "issuer",
"signer_email": null,
"signer_external_key": null,
"signature_url": null
}
]
},
"requester_identifier_key": "40822732-c4ce-41fb-9ee5-5e0304cd04a7",
"iof_charge_method": "financed",
"collaterals": [],
"contract_fees": [ { "fee_type": "spread", "fee_amount": 453.39 } ],
"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": 453.39,
"issue_amount": 151131.6,
"assignment_amount": 151584.99,
"cet": "7,6600%",
"annual_cet": "142,4473%",
"number_of_installments": 2,
"base_iof": 557.3,
"additional_iof": 574.3,
"total_iof": 1131.6,
"ipoc_code": "324025020203182744088021TEST7886216399",
"prefixed_interest_rate": {
"annual_rate": 1.252191589,
"created_at": "2026-04-14T03:38:10",
"daily_rate": 0.0022578334,
"interest_base": "calendar_days",
"monthly_rate": 0.07
},
"installments": [
{
"business_due_date": "2026-05-11",
"calendar_days": 29,
"due_date": "2026-05-10",
"due_interest": 0,
"due_principal": 151131.6,
"has_interest": true,
"installment_key": "c00dbecc-efb9-4384-8db3-dadba82f2d70",
"installment_number": 1,
"installment_status": "created",
"installment_type": "principal",
"pre_fixed_amount": 10214.91484159,
"principal_amortization_amount": 73277.28515841,
"tax_amount": 174.25338411,
"total_amount": 83492.2,
"workdays": 18
},
{
"business_due_date": "2026-06-10",
"calendar_days": 31,
"due_date": "2026-06-10",
"due_interest": 0,
"due_principal": 77854.31484159,
"has_interest": true,
"installment_key": "d3a2f42d-80cb-4891-b2be-ce80ffd383b2",
"installment_number": 2,
"installment_status": "created",
"installment_type": "principal",
"pre_fixed_amount": 5637.88515841,
"principal_amortization_amount": 77854.31484159,
"tax_amount": 383.04322902,
"total_amount": 83492.2,
"workdays": 22
}
],
"total_pre_fixed_amount": 15852.8,
"disbursement_account": [
{
"name": "Logcard Meios De Pagamento Ltda",
"document_number": "18236120000158",
"pix_key": "d6e2d611-6c68-4f84-9be5-962ad2f2bcb6",
"qr_code_key": null,
"qr_code_url": "00020126930014br.gov.bcb.pix2571qrcode-h.sandbox.qitech.app/bacen/cobv/3fecc731adf542659b84be038ec4151e5204000053039865802BR5925LogcardMeiosDePagamentoLt6008SaoPaulo61080145200062070503***6304A936",
"account_branch": null,
"account_number": null,
"account_digit": null,
"account_type": "checking_account",
"ispb": "18236120",
"percentage_receivable": 100,
"amount_receivable": 150000,
"end_to_end_id": "E32402502202606270040dNdgaZPUHxT"
}
]
}
}

3. Consulta de dívida

Você pode consultar a dívida posteriormente para recuperar informações ou acompanhar o status atual.

Requisição

ENDPOINT
/v2/credit_operation/requester_identifier_key/REQUESTER-IDENTIFIER-KEY
MÉTODO
GET
Testar no Playground

Parâmetros de path

CampoTipoDescriçãoMáx caracteres
requester_identifier_key *stringChave de rastreio do cliente enviada na emissão da dívida50
Rota alternativa

Caso possua o credit_operation_key (UUID), utilize GET /v2/credit_operation/{credit_operation_key}.

Resposta

STATUS
200
Corpo da resposta
{
"credit_operation_key": "0773a1b1-675a-4a10-80a2-a10308c7281e",
"issue_amount": 151131.6,
"origin_key": "0773a1b1-675a-4a10-80a2-a10308c7281e",
"total_iof": 1131.6,
"assigned_at": null,
"disbursement_start_date": "2026-04-11",
"disbursement_end_date": "2026-04-11",
"issue_date": "2026-04-11",
"requester_identifier_key": "40822732-c4ce-41fb-9ee5-5e0304cd04a7",
"installments": [
{
"due_date": "2026-05-10",
"calendar_days": 29,
"due_principal": 151131.6,
"has_interest": true,
"installment_key": "c00dbecc-efb9-4384-8db3-dadba82f2d70",
"installment_number": 1,
"installment_status": "created",
"installment_type": "principal",
"pre_fixed_amount": 10214.91484159,
"principal_amortization_amount": 73277.28515841,
"tax_amount": 174.25338411,
"total_amount": 83492.2
}
]
}

4. Especificações técnicas e enumeradores

Objeto installments

CampoTipoDescrição
calendar_daysintegerNúmero de dias corridos entre parcelas
due_datestringData de vencimento da parcela em dias corridos
due_principalfloatSaldo do principal na data de vencimento da parcela, antes do pagamento
has_interestbooleanSe verdadeiro, há incidência de juros na parcela
installment_numberintegerNúmero da parcela
pre_fixed_amountfloatValor de juros prefixados pago na parcela
principal_amortization_amountfloatValor do principal amortizado na parcela
tax_amountfloatValor base de IOF da parcela
total_amountfloatValor total da parcela
due_interestfloatSaldo de juros após a data de vencimento da parcela, antes do pagamento
workdaysintegerDias úteis entre parcelas

Objeto interest_rate

CampoDescrição
annual_rateTaxa de juros anual prefixada/flutuante (decimal)
daily_rateTaxa de juros diária prefixada/flutuante (decimal)
interest_baseBase de juros — base de cálculo dos juros
monthly_rateTaxa de juros mensal prefixada/flutuante (decimal)

Objeto tax_configuration

CampoDescrição
base_rateValor da alíquota base de IOF
additional_rateValor da alíquota adicional de IOF

Fluxo de reembolso

Este guia explica como processar reembolsos totais e parciais para operações de crédito originadas via fluxo BNPL / e-commerce utilizando o endpoint POST /signed_debt.

O fluxo de reembolso é composto por duas etapas principais:

  1. Notificação de chargeback — um webhook é enviado sempre que um chargeback é processado, independentemente de representar um reembolso total ou parcial. O webhook contém todas as informações necessárias para identificar e processar o chargeback.
  2. Renegociação — após processar o webhook com sucesso, é possível iniciar uma renegociação para gerar um novo cronograma de parcelas refletindo o valor reembolsado. Os termos da renegociação são totalmente configuráveis e devem seguir suas regras e políticas de negócio.

Webhook — Reembolso recebido

Visão geral

Assim que um reembolso identificado for recebido, a QI Tech enviará um webhook contendo os detalhes do reembolso, incluindo se trata-se de reembolso total ou parcial e o valor creditado na conta do FIDC.

Com base nessas informações, você poderá aplicar suas políticas de negócio e determinar como proceder com o reembolso solicitado por seu cliente.

Corpo do webhook
{
"origin_key": "d5c88545-4d17-4679-b262-ae170618078a",
"refund_date": "2026-06-26",
"webhook_type": "laas.transitory_conciliation.refund",
"amount": "200.00",
"event_datetime": "2026-06-12T11:52:22"
}

Renegociação — Simulação

Visão geral

Antes de criar uma proposta, é possível simular os valores do estorno para a operação. A simulação retorna as parcelas afetadas, o valor presente, o desconto e o valor total.

O fluxo de reembolso utiliza dois tipos de amortização:

  • equal_amount — estorno parcial. Distribui payment_amount proporcionalmente entre as parcelas em aberto, reduzindo o saldo devedor. A operação permanece ativa com as parcelas remanescentes em aberto.
  • full_settle — estorno total. Quita integralmente a operação na reference_date. A operação passa a settled e não há parcelas remanescentes.

Requisição

ENDPOINT
/renegotiation/simulation
MÉTODO
POST
Testar no Playground
Corpo da requisição
{
"debt_key": "72760166-4ddf-41fb-8a8c-605f8f4fc35c",
"amortization_type": "equal_amount",
"reference_date": "2026-04-13",
"payment_amount": 50.00
}

Parâmetros do corpo

CampoTipoDescriçãoMáx tamanho
debt_key *stringChave única da operação de crédito (DEBT-KEY)UUID
amortization_type *stringModalidade do estornoValores do amortization_type
payment_amount *floatValor do estorno em reais. Em equal_amount, valor parcial a ser abatido. Em full_settle, deve cobrir o saldo total na reference_date.15,2
reference_datestringData de referência para cálculo do valor presente (YYYY-MM-DD). Não pode ser anterior à data de desembolso.10
discount_percentagefloatPercentual de desconto opcional sobre o valor presente. Não pode ser enviado junto com discount_amount.-
discount_amountfloatValor de desconto opcional sobre o valor presente. Não pode ser enviado junto com discount_percentage.-

Valores do amortization_type

ValorDescrição
equal_amountEstorno parcial. payment_amount é distribuído proporcionalmente entre as parcelas em aberto; a operação permanece ativa com as parcelas remanescentes em aberto.
full_settleEstorno total. Quita integralmente a operação na reference_date. A operação passa a settled e não há parcelas remanescentes.

Resposta

STATUS
200
Exemplo de corpo de resposta
{
"amortization_type": "equal_amount",
"payment_amount": 50.00,
"discount_percentage": 0,
"discount_amount": 0,
"reference_date": "2026-04-13",
"affected_installments": [
{
"installment_key": "ca5741c7-99a2-42e7-92a1-9328a36e4e88",
"due_date": "2026-05-07",
"principal_amount": 15.71,
"interest_amount": 4.07,
"fine_amount": 0,
"total_amount": 19.78,
"present_amount": 18.00,
"paid_amount": 18.00,
"principal_amortization_payment_amount": 18.00,
"prefixed_interest_payment_amount": 0,
"fine_payment_amount": 0
}
],
"remaining_installments": [
{
"installment_key": "370e73d1-55d8-431e-9b22-d08fb8297999",
"due_date": "2026-06-07",
"principal_amount": 15.71,
"interest_amount": 4.07,
"fine_amount": 0,
"total_amount": 19.78
}
]
}

Renegociação — Proposta

Visão geral

Após validar a simulação, crie a proposta de renegociação. Para o fluxo de estorno, envie payment_type: "internal" — o valor é debitado diretamente da account_key informada, sem geração de boleto ou Pix.

Atenção
  • A operação deve estar ativa e já desembolsada.
  • reference_date não pode ser anterior à data de desembolso.
  • request_control_key é obrigatório para idempotência.

Requisição

ENDPOINT
/renegotiation/proposal
MÉTODO
POST
Testar no Playground
Corpo da requisição
{
"debt_key": "72760166-4ddf-41fb-8a8c-605f8f4fc35c",
"payment_type": "internal",
"amortization_type": "equal_amount",
"reference_date": "2026-04-13",
"payment_amount": 50.00,
"account_key": "5ae72355-1e47-4624-9915-ceb93d872194",
"request_control_key": "94b31045-c8e7-45be-a88d-2ae25c5df5db"
}

Parâmetros do corpo

CampoTipoDescriçãoMáx tamanho
debt_key *stringChave única da operação de crédito (DEBT-KEY)UUID
payment_type *stringPara fluxo de estorno, use internal.Valores do payment_type
amortization_type *stringModalidade do estornoValores do amortization_type
payment_amount *floatValor do estorno em reais.15,2
account_key *stringChave da conta interna de onde o valor será debitado.UUID
request_control_key *stringChave de idempotência do cliente. Use um valor único por tentativa.50
reference_datestringData de referência para cálculo do valor presente (YYYY-MM-DD). Não pode ser anterior à data de desembolso.10
discount_percentagefloatPercentual de desconto opcional sobre o valor presente. Não pode ser enviado junto com discount_amount.-
discount_amountfloatValor de desconto opcional sobre o valor presente. Não pode ser enviado junto com discount_percentage.-

Valores do payment_type

ValorDescrição
internalDébito interno na account_key (automático, sem boleto ou Pix). Usado para o fluxo de estorno.
bank_slipGera boleto bancário e Pix.
pixSomente Pix.
manualPagamento manual (sem geração de meio de pagamento).

Valores do amortization_type

ValorDescrição
equal_amountEstorno parcial. payment_amount é distribuído proporcionalmente entre as parcelas em aberto; a operação permanece ativa com as parcelas remanescentes em aberto.
full_settleEstorno total. Quita integralmente a operação na reference_date. A operação passa a settled e não há parcelas remanescentes.

Resposta

STATUS
201
Exemplo de corpo de resposta
{
"proposal_key": "bcc16a6d-ce21-4cd4-8d8c-d26f89ccc685",
"contract_number": "DWF1761222116",
"amortization_type": "equal_amount",
"payment_amount": 50.00,
"discount_percentage": 0,
"discount_amount": 0,
"requester_name": "Dante Ltda",
"requester_key": "78287247-947d-4730-9bd1-7efb068175b6",
"origin_key": null,
"issuer_name": "Dante Ferrarini",
"issuer_document_number": "31057466093",
"affected_installments": [
{
"installment_key": "ca5741c7-99a2-42e7-92a1-9328a36e4e88",
"due_date": "2026-05-07",
"principal_amount": 15.71,
"interest_amount": 4.07,
"fine_amount": 0,
"total_amount": 19.78,
"present_amount": 18.00,
"paid_amount": 18.00,
"principal_amortization_payment_amount": 18.00,
"prefixed_interest_payment_amount": 0,
"fine_payment_amount": 0
}
],
"remaining_installments": [
{
"installment_key": "370e73d1-55d8-431e-9b22-d08fb8297999",
"due_date": "2026-06-07",
"principal_amount": 15.71,
"interest_amount": 4.07,
"fine_amount": 0,
"total_amount": 19.78
}
],
"proposal_status": "pending_payment",
"payment_type": "internal",
"payment": {
"digitable_line": null,
"qr_code_url": null,
"qr_code_key": null,
"bank_slip_key": null,
"paid_method_type": "internal",
"source_account_key": "5ae72355-1e47-4624-9915-ceb93d872194",
"payment_data": {
"target_account_key": "6108dd45-580d-48c4-b3bb-74c1e843be49",
"transaction_amount": 50.00
}
},
"proposal_due_date": "2026-04-13",
"reference_date": "2026-04-13",
"devolution_amount": 0,
"request_control_key": "94b31045-c8e7-45be-a88d-2ae25c5df5db"
}

Detalhes da resposta

CampoTipoDescrição
proposal_keystringChave única da proposta (UUID). Use para consulta e correlação com webhook.
proposal_statusstringEstado da proposta. Inicia em pending_payment; vai para paid quando o débito interno é processado.
affected_installmentsarrayParcelas que receberam o estorno. Mostra a composição do paid_amount entre principal, juros e multa.
remaining_installmentsarrayParcelas que permanecem em aberto após o estorno. Vazio em full_settle.
payment.payment_data.target_account_keystringConta de destino do débito interno.
payment.payment_data.transaction_amountfloatValor efetivamente debitado da account_key.
devolution_amountfloatSobrepagamento devolvido ao fundo. Só é diferente de zero quando um pagamento prévio somado ao estorno excede o saldo devedor.
request_control_keystringEco da chave de idempotência enviada na requisição.

Webhook de quitação

Quando um estorno quita integralmente a operação — tipicamente em full_settle, também possível quando equal_amount em sequência zera o saldo — a QI Tech envia um webhook webhook_type: debt com status: settled. Use para confirmar a quitação de forma assíncrona.

Renegociação — Cancelar proposta

Visão geral

DELETE /renegotiation/proposal/{proposal_key} cancela uma proposta que ainda não foi finalizada. Apenas propostas com proposal_status: "pending_payment" são canceláveis. Quaisquer meios de pagamento associados (boleto, Pix) são invalidados.

Requisição

ENDPOINT
/renegotiation/proposal/{proposal_key}
MÉTODO
DELETE

Parâmetros de path

CampoTipoDescriçãoMáx tamanho
proposal_key *stringChave da proposta retornada em POST /renegotiation/proposal.UUID

Resposta

STATUS
200
Exemplo de corpo de resposta
{
"proposal_key": "bcc16a6d-ce21-4cd4-8d8c-d26f89ccc685",
"proposal_status": "canceled",
"request_control_key": "94b31045-c8e7-45be-a88d-2ae25c5df5db"
}

Consultar status da proposta

Após criar a proposta, é possível consultar seu status pelo request_control_key.

ENDPOINT
/renegotiation/proposal/request_control_key/REQUEST-CONTROL-KEY
MÉTODO
GET

A resposta segue o mesmo formato do retorno do POST /renegotiation/proposal. O proposal_status indica o andamento:

StatusDescrição
pending_paymentProposta criada, aguardando processamento do débito interno.
paidDébito processado. Em full_settle, a operação já está em settled.
canceledProposta cancelada via DELETE /renegotiation/proposal/{proposal_key}.

Renegociação em lote

Para cenários em que é necessário renegociar múltiplas operações do mesmo emissor de uma só vez — gerando um único meio de pagamento (boleto e/ou Pix) cobrindo todo o lote — utilize os endpoints em lote.

Atenção
  • A renegociação em lote só pode incluir operações do mesmo emissor e da mesma chave de integração.
  • Limite de 50 operações por lote.
  • Os endpoints em lote suportam um conjunto distinto de tipos de amortização: installment_payment, overdue_installment_payment, present_amount. equal_amount e full_settle não estão disponíveis em lote.

Renegociação — Simulação em lote

Visão geral

Antes de criar uma proposta em lote, simule os valores. A simulação retorna as parcelas afetadas, os descontos e o valor total devido entre todas as operações.

Para present_amount na simulação, cada item de installments[] contém apenas installment_key. Os campos por parcela paid_amount e discount_amount são obrigatórios apenas no endpoint proposta em lote.

Requisição

ENDPOINT
/renegotiation/batch_proposal_simulation
MÉTODO
POST
Testar no Playground
Atenção

Na raiz, discount_amount e discount_percentage são mutuamente exclusivos.

Corpo da requisição
{
"amortization_type": "installment_payment",
"reference_date": "2026-04-08",
"operations": [
{
"debt_key": "1baea8a0-0fca-4f7c-8857-a227d4da72f8",
"installments": [
{ "installment_key": "ca5741c7-99a2-42e7-92a1-9328a36e4e88" }
]
},
{
"debt_key": "2cbfb9b1-1fdb-5f8d-9967-b338e5eb83f9",
"installments": [
{ "installment_key": "2ef25ed8-7124-44f5-9e3d-1d1a7196166e" }
]
}
]
}

Parâmetros do corpo

CampoTipoDescriçãoMáx tamanho
amortization_type *stringTipo de amortização do loteValores do amortization_type em lote
operations *arrayOperações a renegociarObjeto operations
reference_datestringData de referência para cálculo do valor presente (YYYY-MM-DD).10
discount_percentagefloatPercentual de desconto opcional sobre o valor presente (nível raiz, global).-
discount_amountfloatValor de desconto opcional sobre o valor presente (nível raiz, global).-

Objeto operations

CampoTipoDescriçãoMáx tamanho
debt_key *stringChave única da operação de crédito (DEBT-KEY)UUID
installments *arrayParcelas a renegociarObjeto installments

Objeto installments

CampoTipoDescriçãoMáx tamanho
installment_key *stringChave da parcelaUUID

Valores do amortization_type em lote

ValorDescrição
installment_paymentPagar parcelas específicas. Cada item de installments[] contém apenas installment_key.
overdue_installment_paymentPagar parcelas em atraso. Mesma estrutura de installment_payment.
present_amountValor presente por parcela. Na simulação, enviar apenas installment_key. No endpoint de proposta, enviar também paid_amount e discount_amount.

Resposta

STATUS
200
Exemplo de corpo de resposta
{
"batch_proposal_key": "429fd784-e13e-47a1-ad9f-291209e0e621",
"amortization_type": "installment_payment",
"payment_amount": 78389.55,
"discount_percentage": 0,
"discount_amount": 0,
"requester_name": "Castello (BNPL)",
"requester_key": "3e69b448-9afb-4aef-9c0d-0a3059350d80",
"issuer_name": "Alan Mathison Turing",
"issuer_document_number": "82744088021",
"reference_date": "2026-04-08",
"operations": [
{
"requester_key": "3e69b448-9afb-4aef-9c0d-0a3059350d80",
"contract_number": "TEST00790",
"payment_amount": 78389.55,
"discount_amount": 0,
"affected_installments": [
{
"installment_key": "24b5deae-304e-4773-9b25-e42dbd450241",
"due_date": "2026-05-10",
"principal_amount": 73107.75,
"interest_amount": 10580.11,
"fine_amount": 0,
"total_amount": 83687.87,
"present_amount": 78389.55,
"paid_amount": 78389.55,
"principal_amortization_payment_amount": 78048.30,
"prefixed_interest_payment_amount": 341.25,
"fine_payment_amount": 0,
"discount_amount": 0
}
],
"remaining_installments": [
{
"installment_key": "2b1d9423-4dab-44b3-bf8c-efc8433176dd",
"due_date": "2026-06-10",
"principal_amount": 73096.23,
"interest_amount": 10591.64,
"fine_amount": 0,
"total_amount": 83687.87
}
],
"debt_key": "388c47fa-6c6c-4d2b-8f00-ccc2d571fcb0"
}
]
}

Renegociação — Proposta em lote

Visão geral

Após simular os valores, crie a proposta em lote. A proposta gera um único meio de pagamento (boleto e/ou Pix) cobrindo todas as operações.

Para amortization_type: present_amount, cada item em operations[].installments[] deve incluir paid_amount e discount_amount (além de installment_key). Para installment_payment / overdue_installment_payment, apenas installment_key é obrigatório.

Requisição

ENDPOINT
/renegotiation/batch_proposal
MÉTODO
POST
Testar no Playground
Corpo da requisição
{
"amortization_type": "installment_payment",
"reference_date": "2026-04-08",
"proposal_due_date": "2026-04-15",
"payment_type": "pix",
"request_control_key": "94b31045-c8e7-45be-a88d-2ae25c5df5db",
"operations": [
{
"debt_key": "1baea8a0-0fca-4f7c-8857-a227d4da72f8",
"installments": [
{ "installment_key": "ca5741c7-99a2-42e7-92a1-9328a36e4e88" }
]
},
{
"debt_key": "2cbfb9b1-1fdb-5f8d-9967-b338e5eb83f9",
"installments": [
{ "installment_key": "2ef25ed8-7124-44f5-9e3d-1d1a7196166e" }
]
}
]
}

Parâmetros do corpo

CampoTipoDescriçãoMáx tamanho
amortization_type *stringTipo de amortização do loteValores do amortization_type em lote
payment_type *stringTipo de pagamento em loteValores do payment_type em lote
operations *arrayOperações a renegociarObjeto operations
proposal_due_date *stringData de vencimento da proposta (YYYY-MM-DD)10
reference_date *stringData de referência (YYYY-MM-DD)10
request_control_keystringChave de idempotência do cliente. Necessária para cancelamento por request_control_key.50
discount_percentagefloatPercentual de desconto global opcional sobre o valor presente.-
discount_amountfloatValor de desconto global opcional sobre o valor presente.-
payer_document_numberstringCNPJ do pagador (somente dígitos).14
payer_namestringNome do pagador. Obrigatório quando payer_document_number é enviado.200

Objeto operations

CampoTipoDescriçãoMáx tamanho
debt_key *stringChave única da operação de crédito (DEBT-KEY)UUID
installments *arrayParcelas a renegociarObjeto installments

Objeto installments

CampoTipoDescriçãoMáx tamanho
installment_key *stringChave da parcelaUUID
paid_amountfloatValor pago/alocado na parcela (BRL). Obrigatório quando amortization_type é present_amount.15,2
discount_amountfloatDesconto em BRL aplicado à parcela. Obrigatório quando amortization_type é present_amount (use 0 se não houver).15,2

Valores do payment_type em lote

ValorDescrição
bank_slipBoleto bancário (também gera Pix).
pixSomente Pix.
manualPagamento manual (sem geração de meio de pagamento).

Valores do amortization_type em lote

ValorDescrição
installment_paymentPagar parcelas específicas — cada item em operations[].installments[] requer apenas installment_key.
overdue_installment_paymentPagar parcelas em atraso — mesma estrutura de installment_payment.
present_amountValor presente por parcela — cada item requer installment_key, paid_amount, discount_amount.

Resposta

STATUS
201
Exemplo de corpo de resposta
{
"batch_proposal_key": "37879d40-c16e-4d7f-a16f-d79d20c50d42",
"amortization_type": "installment_payment",
"payment_amount": 78206.27,
"discount_percentage": 0,
"discount_amount": 0,
"requester_name": "Castello (BNPL)",
"requester_key": "3e69b448-9afb-4aef-9c0d-0a3059350d80",
"issuer_name": "Alan Mathison Turing",
"issuer_document_number": "82744088021",
"reference_date": "2026-04-08",
"proposal_due_date": "2026-04-15",
"payment_type": "pix",
"batch_proposal_status": "pending_payment",
"request_control_key": "94b31045-c8e7-45be-a88d-2ae25c5df5db",
"operations": [
{
"requester_key": "3e69b448-9afb-4aef-9c0d-0a3059350d80",
"contract_number": "TEST1570594223",
"payment_amount": 78206.27,
"debt_key": "6564493d-75c3-4efe-9f11-82fa5cff9a78",
"affected_installments": [
{
"installment_key": "1162e382-8bd6-4c0b-9111-8390d9794102",
"due_date": "2026-05-10",
"principal_amount": 73277.29,
"interest_amount": 10214.91,
"fine_amount": 0,
"total_amount": 83492.20,
"present_amount": 78206.27,
"paid_amount": 78206.27,
"principal_amortization_payment_amount": 78206.27,
"prefixed_interest_payment_amount": 0,
"fine_payment_amount": 0,
"discount_amount": 0
}
],
"remaining_installments": [
{
"installment_key": "58eea645-5682-440d-aa6b-a3b124253684",
"due_date": "2026-06-10",
"principal_amount": 72925.33,
"interest_amount": 10566.87,
"fine_amount": 0,
"total_amount": 83492.20
}
]
}
],
"payment": {
"digitable_line": null,
"qr_code_url": "00020126930014br.gov.bcb.pix2571qrcode-h.sandbox.qitech.app/bacen/cobv/426661142f5d4cd9954dcae3725d020d5204000053039865802BR5925QISOCIEDADEDECREDITODIRET6008SaoPaulo61080145200062070503***6304B878",
"qr_code_key": "42666114-2f5d-4cd9-954d-cae3725d020d",
"bank_slip_key": null,
"paid_method_type": "pix",
"source_account_key": null,
"payment_data": {
"creditor_bank_account_key": "6108dd45-580d-48c4-b3bb-74c1e843be49",
"batch_renegotiation_proposal_key": "37879d40-c16e-4d7f-a16f-d79d20c50d42"
}
}
}

Renegociação — Cancelar proposta em lote

Visão geral

Cancela uma proposta em lote que ainda esteja em estado cancelável. Apenas propostas com batch_proposal_status: "pending_payment" são canceláveis. Quaisquer meios de pagamento associados (boleto, Pix) são invalidados.

Duas rotas estão disponíveis:

  • Por batch_proposal_key (UUID retornado em POST /renegotiation/batch_proposal)
  • Por request_control_key (chave de idempotência enviada na criação) — útil quando o cliente rastreia as operações pela própria chave

Cancelar por batch_proposal_key

ENDPOINT
/renegotiation/batch_proposal/{batch_proposal_key}
MÉTODO
DELETE

Parâmetros de path

CampoTipoDescriçãoMáx tamanho
batch_proposal_key *stringChave da proposta retornada em POST /renegotiation/batch_proposal.UUID

Cancelar por request_control_key

ENDPOINT
/renegotiation/batch_proposal/request_control_key/{request_control_key}
MÉTODO
DELETE

Parâmetros de path

CampoTipoDescriçãoMáx tamanho
request_control_key *stringChave de idempotência enviada em POST /renegotiation/batch_proposal.50

Resposta

Ambas as rotas retornam a mesma resposta.

STATUS
204