Skip to main content

API - Gestión de Contratos

Visión General

Endpoints para la gestión completa de contratos de arrendamiento, incluyendo creación, firmas digitales y seguimiento del ciclo de vida de los contratos.


GET /contracts/all

Obtener lista de contratos.

Query Parameters

  • status: Estado del contrato (draft, pending, active, expired, terminated)
  • user_id: Filtrar por usuario
  • property_id: Filtrar por propiedad

Response Success (200)

{
"success": true,
"data": [
{
"id": 1,
"property": {
"id": 25,
"title": "Apartamento Moderno",
"address": "Carrera 15 #67-89"
},
"landlord": {
"id": 100,
"name": "Juan Pérez"
},
"tenant": {
"id": 124,
"name": "María García"
},
"contract_type": "residential",
"status": "active",
"start_date": "2024-03-01",
"end_date": "2025-03-01",
"monthly_rent": 900000,
"deposit": 900000,
"signing_date": "2024-02-20T14:30:00Z",
"contract_hash": "a1b2c3d4e5f6...",
"signatures_completed": true
}
],
"count": 8
}

POST /contract/create

Crear nuevo contrato.

Request

{
"property_id": 25,
"landlord_id": 100,
"tenant_id": 124,
"guarantor_id": null,
"contract_type": "residential",
"start_date": "2024-03-01",
"end_date": "2025-03-01",
"monthly_rent": 900000,
"deposit": 900000,
"payment_day": 5,
"annual_increase": 4.5,
"contract_text": "CONTRATO DE ARRENDAMIENTO...",
"terms_and_conditions": "1. El arrendatario se compromete...",
"special_clauses": "Cláusula especial sobre mascotas..."
}

Response Success (201)

{
"success": true,
"message": "Contrato creado exitosamente",
"data": {
"id": 15,
"contract_hash": "a1b2c3d4e5f6...",
"status": "draft",
"signature_urls": {
"landlord": "https://app.alojaplus.com/sign/landlord/xyz123",
"tenant": "https://app.alojaplus.com/sign/tenant/abc456"
}
}
}

GET /contract/get

Obtener detalles de un contrato específico.

Query Parameters

  • contract_id: ID del contrato

Response Success (200)

{
"success": true,
"data": {
"id": 15,
"property": {
"id": 25,
"title": "Apartamento Moderno",
"address": "Carrera 15 #67-89",
"city": "Medellín"
},
"landlord": {
"id": 100,
"name": "Juan Pérez",
"email": "juan@email.com",
"phone": "+57 310 123 4567"
},
"tenant": {
"id": 124,
"name": "María García",
"email": "maria@email.com",
"phone": "+57 320 987 6543"
},
"contract_type": "residential",
"status": "active",
"start_date": "2024-03-01",
"end_date": "2025-03-01",
"monthly_rent": 900000,
"deposit": 900000,
"payment_day": 5,
"contract_text": "CONTRATO DE ARRENDAMIENTO...",
"signatures": [
{
"signer_id": 100,
"signer_name": "Juan Pérez",
"signed_at": "2024-02-20T14:30:00Z",
"signature_hash": "hash_landlord"
},
{
"signer_id": 124,
"signer_name": "María García",
"signed_at": "2024-02-20T16:45:00Z",
"signature_hash": "hash_tenant"
}
],
"contract_hash": "a1b2c3d4e5f6...",
"created_at": "2024-02-15T10:00:00Z"
}
}

Firmas Digitales

Proceso de Firma

  1. Creación: El contrato se crea en estado draft
  2. Envío: Se envían enlaces únicos por email a cada firmante
  3. Firma: Los usuarios firman digitalmente usando canvas/touchpad
  4. Validación: Se genera hash único de seguridad para cada firma
  5. Activación: El contrato se activa automáticamente cuando todas las partes han firmado

Seguridad de Firmas

  • Hash SHA-256 único por firma
  • Timestamp de firma
  • IP address del firmante
  • User agent del navegador
  • Validación de integridad del documento

Estados de Contrato

  • draft: Borrador - En creación
  • pending: Pendiente - Esperando firmas
  • active: Activo - Firmado y vigente
  • expired: Vencido - Fecha de fin alcanzada
  • terminated: Terminado - Finalizado antes de tiempo

Tipos de Contrato

  • residential: Residencial - Para vivienda
  • commercial: Comercial - Para negocios

Campos Requeridos

Información Básica

  • property_id (requerido)
  • landlord_id (requerido)
  • tenant_id (requerido)
  • contract_type (requerido)
  • start_date (requerido)
  • end_date (requerido)

Información Financiera

  • monthly_rent (requerido)
  • deposit (requerido)
  • payment_day (1-31, default: 1)
  • annual_increase (porcentaje, opcional)
  • contract_text (requerido)
  • terms_and_conditions (requerido)
  • special_clauses (opcional)