Tema
Propostas — Endpoints
Base URL: /api/proposals
Permissões: Admin, Broker (próprias)
GET /api/proposals
Lista propostas da empresa (funil de vendas).
Query params:
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | integer | Página (padrão: 1) |
pageSize | integer | Itens por página (padrão: 20) |
search | string | Busca por imóvel ou cliente |
status | string | UnderReview, Negotiating, Approved, Rejected |
type | string | Lease, Sale |
brokerId | guid | Filtrar por corretor |
Resposta 200:
json
{
"data": [
{
"id": "c1d2e3f4-...",
"type": "Lease",
"status": "UnderReview",
"proposedValue": 2800.00,
"validUntil": "2026-06-01T00:00:00Z",
"property": {
"id": "3fa85f64-...",
"code": "AP-001",
"address": "Rua das Flores, 123 - Centro"
},
"client": {
"id": "a1b2c3d4-...",
"name": "João da Silva"
},
"broker": {
"id": "b1c2d3e4-...",
"name": "Paulo Corretor"
},
"createdAt": "2026-05-15T09:00:00Z"
}
],
"page": 1,
"pageSize": 20,
"total": 15,
"totalPages": 1,
"hasNext": false,
"hasPrevious": false
}GET /api/proposals/:id
Retorna detalhes completos de uma proposta.
Resposta 200:
json
{
"id": "c1d2e3f4-...",
"type": "Lease",
"status": "Negotiating",
"proposedValue": 2800.00,
"paymentConditions": "Pagamento via PIX até o dia 5 de cada mês.",
"validUntil": "2026-06-01T00:00:00Z",
"notes": "Cliente solicita pintura do apartamento antes da mudança.",
"property": {
"id": "3fa85f64-...",
"code": "AP-001",
"rentPrice": 2500.00
},
"client": {
"id": "a1b2c3d4-...",
"name": "João da Silva",
"email": "joao@email.com"
},
"broker": {
"id": "b1c2d3e4-...",
"name": "Paulo Corretor"
},
"createdAt": "2026-05-15T09:00:00Z",
"updatedAt": "2026-05-17T14:00:00Z"
}POST /api/proposals
Cria uma nova proposta.
Body:
json
{
"type": "Lease",
"propertyId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"clientId": "a1b2c3d4-...",
"brokerId": "b1c2d3e4-...",
"proposedValue": 2800.00,
"paymentConditions": "PIX até dia 5",
"validUntil": "2026-06-01T00:00:00Z",
"notes": "Necessita vistoria prévia."
}| Campo | Tipo | Obrigatório |
|---|---|---|
type | string | Sim: Lease ou Sale |
propertyId | guid | Sim |
clientId | guid | Sim |
brokerId | guid | Sim |
proposedValue | decimal | Sim |
validUntil | datetime | Sim |
Resposta 201: Proposta criada com status UnderReview.
PUT /api/proposals/:id
Atualiza dados de uma proposta.
PATCH /api/proposals/:id/status
Avança ou rejeita uma proposta no funil.
Body:
json
{
"status": "Approved",
"reason": "Proposta aceita pelo proprietário."
}Transições válidas:
UnderReview → Negotiating
UnderReview → Rejected
Negotiating → Approved
Negotiating → RejectedResposta 200: Proposta com status atualizado.
Erros:
422— Transição inválida422— Proposta expirada (ValidUntil ultrapassado)
POST /api/proposals/:id/convert
Converte uma proposta aprovada em contrato.
Permissões: Admin, Broker
Body:
json
{
"startDate": "2026-06-01T00:00:00Z",
"endDate": "2027-06-01T00:00:00Z",
"dueDay": 5,
"indexer": "IGPM",
"value": 2800.00,
"documentUrl": "https://storage.googleapis.com/.../contrato.pdf"
}Resposta 201: Contrato criado.
Efeitos colaterais:
- Status da proposta → sem alteração (permanece
Approved) - Status do imóvel →
Rented(se tipoLease) ouSold(se tipoSale) - Histórico de status do imóvel registrado
Erros:
422— Proposta não aprovada422— Proposta expirada
DELETE /api/proposals/:id
Remove a proposta (soft delete).
Permissões: Admin
Resposta 204: Sem conteúdo.