Tema
Contratos — Endpoints
Base URL: /api/contracts
Permissões: Admin, Broker, Financial
GET /api/contracts
Lista contratos da empresa.
Query params:
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | integer | Página (padrão: 1) |
pageSize | integer | Itens por página |
search | string | Busca por imóvel ou cliente |
status | string | Active, Renewed, Terminated, Cancelled |
type | string | Lease, Sale, Management |
expiringDays | integer | Contratos que vencem nos próximos N dias |
Resposta 200:
json
{
"data": [
{
"id": "d1e2f3a4-...",
"type": "Lease",
"status": "Active",
"value": 2800.00,
"startDate": "2026-06-01",
"endDate": "2027-06-01",
"dueDay": 5,
"indexer": "IGPM",
"property": {
"id": "3fa85f64-...",
"code": "AP-001"
},
"client": {
"id": "a1b2c3d4-...",
"name": "João da Silva"
},
"broker": {
"id": "b1c2d3e4-...",
"name": "Paulo Corretor"
},
"createdAt": "2026-05-20T10:00:00Z"
}
],
"page": 1,
"pageSize": 20,
"total": 23,
"totalPages": 2,
"hasNext": true,
"hasPrevious": false
}GET /api/contracts/:id
Retorna detalhes completos de um contrato.
Resposta 200:
json
{
"id": "d1e2f3a4-...",
"type": "Lease",
"status": "Active",
"value": 2800.00,
"startDate": "2026-06-01",
"endDate": "2027-06-01",
"dueDay": 5,
"indexer": "IGPM",
"indexerPercentage": null,
"documentUrl": "https://storage.googleapis.com/.../contrato.pdf",
"property": { ... },
"client": { ... },
"broker": { ... },
"proposalId": "c1d2e3f4-...",
"payments": [
{
"id": "e1f2a3b4-...",
"period": "2026-06",
"value": 2800.00,
"status": "Paid",
"dueDate": "2026-06-05"
}
],
"createdAt": "2026-05-20T10:00:00Z"
}POST /api/contracts
Cria um novo contrato manualmente (sem passar por proposta).
Body:
json
{
"type": "Lease",
"propertyId": "3fa85f64-...",
"clientId": "a1b2c3d4-...",
"brokerId": "b1c2d3e4-...",
"proposalId": null,
"value": 2800.00,
"startDate": "2026-06-01",
"endDate": "2027-06-01",
"dueDay": 5,
"indexer": "IGPM",
"indexerPercentage": null,
"documentUrl": "https://storage.googleapis.com/.../contrato.pdf"
}| Campo | Tipo | Obrigatório |
|---|---|---|
type | string | Sim |
propertyId | guid | Sim |
clientId | guid | Sim |
value | decimal | Sim |
startDate | date | Sim |
endDate | date | Sim |
dueDay | integer | Sim (1–28) |
indexer | string | Sim: IGPM, IPCA, Fixed |
indexerPercentage | decimal | Sim se indexer = Fixed |
Resposta 201: Contrato criado com status Active.
PUT /api/contracts/:id
Atualiza dados de um contrato.
PATCH /api/contracts/:id/status
Altera o status do contrato.
Body:
json
{
"status": "Terminated",
"reason": "Encerramento por término do prazo."
}Transições válidas:
| De | Para |
|---|---|
Active | Terminated, Cancelled |
Active | Renewed |
Efeitos do encerramento:
- Status do imóvel →
Available - Registro no histórico de status do imóvel
POST /api/contracts/:id/renew
Renova um contrato ativo.
Body:
json
{
"newEndDate": "2028-06-01",
"newValue": 3100.00,
"indexer": "IGPM"
}Resposta 200: Contrato com novo período ativo.
DELETE /api/contracts/:id
Remove contrato (soft delete).
Permissões: Admin
Erros:
400— Contrato possui pagamentos vinculados