Contratos
Endpoints para criação, envio, aceite e atualização de contratos.
Ciclo de vida: DRAFT → PENDING_ACCEPTANCE (após envio) → ACCEPTED (após aceite do tomador) → ACTIVE → COMPLETED / CANCELLED.
A criação suporta upload opcional do arquivo CCB via multipart/form-data. Valores monetários e percentuais são retornados como string decimal (ex.: "100000", "2.5").
Cria um contrato em status DRAFT vinculado ao ofertante autenticado e ao tomador identificado pelo documento (o tomador precisa estar cadastrado na plataforma). Aceita upload opcional do arquivo CCB via multipart/form-data (campo ccbFile). A garantia é criada junto, em status PENDING, com o valor requerido calculado a partir do saldo devedor e do percentual de colateral. Publica o evento de webhook collateral.created para o tomador.
{
"name": "Contrato BTC 2026/05",
"description": "Empréstimo lastreado em cripto com colateral de 150%",
"totalLoanValue": 100000,
"outstandingBalance": 100000,
"interestRate": 2.5,
"cet": 3.1,
"installmentsCount": 12,
"startDate": "2026-05-15",
"endDate": "2027-05-15",
"collateralPercentage": 150,
"fiatCurrency": "BRL",
"acceptedTokens": [
{ "tokenSymbol": "USDC", "network": "ETHEREUM" },
{ "tokenSymbol": "USDT", "network": "POLYGON" }
],
"borrower": {
"document": "12345678901"
}
}{
"message": "Contract created successfully",
"data": {
"id": 123,
"name": "Contrato BTC 2026/05",
"description": "Empréstimo lastreado em cripto com colateral de 150%",
"collateralPercentage": "150",
"totalLoanValue": "100000",
"outstandingBalance": "100000",
"interestRate": "2.5",
"cet": "3.1",
"installmentsCount": 12,
"startDate": "2026-05-15T00:00:00.000Z",
"endDate": "2027-05-15T00:00:00.000Z",
"lenderDocument": "11222333000181",
"borrowerDocument": "12345678901",
"status": "DRAFT",
"createdAt": "2026-05-13T18:00:00.000Z",
"updatedAt": "2026-05-13T18:00:00.000Z",
"deletedAt": null,
"acceptedTokens": [
{
"id": 1,
"contractId": 123,
"tokenSymbol": "USDC",
"network": "ETHEREUM",
"createdAt": "2026-05-13T18:00:00.000Z",
"deletedAt": null
},
{
"id": 2,
"contractId": 123,
"tokenSymbol": "USDT",
"network": "POLYGON",
"createdAt": "2026-05-13T18:00:00.000Z",
"deletedAt": null
}
],
"documents": [
{
"id": "0d3a2c1e-9f4b-4c8a-b7d6-5e4f3a2b1c0d",
"contractId": 123,
"originalName": "ccb.pdf",
"mimeType": "application/pdf",
"createdAt": "2026-05-13T18:00:00.000Z",
"deletedAt": null
}
],
"guarantee": {
"id": 77,
"contractId": 123,
"fiatCurrency": "BRL",
"requiredFiatAmount": "150000",
"depositedFiatAmount": "0",
"status": "PENDING",
"createdAt": "2026-05-13T18:00:00.000Z",
"updatedAt": "2026-05-13T18:00:00.000Z",
"deletedAt": null
},
"borrower": {
"name": "João da Silva",
"email": "joao@exemplo.com",
"phone": "11999998888"
}
}
}Periodicidade das taxas
Cada taxa tem a sua periodicidade, informada de forma independente:
interestRateBasis para a taxa de juros e cetBasis para o CET. Ambas aceitam
monthly ou yearly e assumem monthly quando omitidas.
monthly: a taxa vale ao mês e é gravada como veio.yearly: a taxa vale ao ano e é convertida para o equivalente mensal composto ((1 + taxa)^(1/12) − 1) antes de ser gravada. Uma taxa de12.6825ao ano é gravada como1ao mês.
O CET costuma ser divulgado ao ano; nesse caso envie "cetBasis": "yearly".
A parcela é calculada pela tabela Price sobre o saldo devedor, usando a maior
entre a taxa de juros e o CET — assim os custos do CET ficam diluídos nas
parcelas. Como o saldo devedor cai a cada parcela, o total de juros não
corresponde à taxa aplicada sobre o valor inteiro em todos os meses: em
1200 com 1% ao mês em 12x, a parcela é 106,62, o total é 1.279,44 e os
juros somam 79,44.
Campos do contrato
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string (1–255) | sim | Identificação do contrato |
description | string (≤5000) | não | Descrição livre |
totalLoanValue | number > 0 | sim | Valor total do empréstimo |
outstandingBalance | number > 0 | sim | Saldo devedor inicial |
interestRate | number 0–100 | não | Taxa de juros, na periodicidade de interestRateBasis |
cet | number 0–100 | não | Custo Efetivo Total, na periodicidade de cetBasis |
interestRateBasis | monthly | yearly | não | Periodicidade de interestRate. Padrão monthly |
cetBasis | monthly | yearly | não | Periodicidade de cet. Padrão monthly |
installmentsCount | int > 0 | não | Número de parcelas |
startDate | ISO date / YYYY-MM-DD | sim | Data de início |
endDate | ISO date / YYYY-MM-DD | sim | Data de término |
collateralPercentage | number > 0 | sim | % de colateral exigido sobre o saldo devedor |
fiatCurrency | BRL | USD | EUR | não | Padrão BRL |
acceptedTokens[].tokenSymbol | USDC | USDT | sim | Token aceito como garantia |
acceptedTokens[].network | ETHEREUM | POLYGON | BASE | sim | Rede do token |
borrower.document | CPF (11) | CNPJ (14) | sim | Aceita valor com máscara; é normalizado para dígitos |
borrower.name / email / phone | string | não | Ignorados — os dados de contato exibidos vêm do cadastro do tomador na plataforma |
ccbFile | file (multipart) | não | Arquivo da CCB |
O objeto borrower da resposta é resolvido a partir do cadastro do tomador (nome, e-mail e telefone do perfil PF ou PJ).
Parâmetros de query (listagem)
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
role | lender | borrower | lender | Papel do escopo autenticado no contrato |
name | string | — | Filtro por nome (case-insensitive, contém) |
borrowerDocument | string | — | Filtra pelo documento do tomador |
take | int 1–500 | 50 | Quantidade de itens por página |
skip | int ≥ 0 | 0 | Deslocamento (offset) para paginação |
Efeitos colaterais
- Criação: publica o evento de webhook
collateral.createdpara o tomador (ver Guia de Webhooks). - Atualização do saldo devedor: dispara recálculo assíncrono do LTV da garantia; conforme o resultado, os webhooks
collateral.ltv_alertoucollateral.liquidatedpodem ser emitidos. - Envio / aceite: geram e ativam a sessão de assinatura do documento de garantia; o andamento aparece em
signings[].signingDocument.