{
  "info": {
    "name": "Domu Public API v3.1.0",
    "description": "Colección generada desde la spec OpenAPI de la API v1 de ByDomu. Pon tu clave en la variable `apiKey` (Ajustes → API en ByDomu). Documentación: https://developers.bydomu.com",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{apiKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.bydomu.com/v1",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Cuenta",
      "description": "Información de la API key y la organización",
      "item": [
        {
          "name": "Información de la API key",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "me"
              ]
            },
            "description": "Devuelve la clave actual, la organización y los scopes. Sirve para comprobar que la clave es válida. `rateLimit` es un valor fijo histórico: el límite real de la clave llega en `X-RateLimit-Limit`. `mode` dice si la clave es de producción (`live`) o de prueba (`test`); con una de prueba, `organization` es la organización de prueba.\n\n**Scope:** ninguno"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Portal",
      "description": "Configuración del portal inmobiliario",
      "item": [
        {
          "name": "Configuración del portal",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/portal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "portal"
              ]
            },
            "description": "Devuelve la configuración del portal principal de la organización: plantilla, tema, secciones visibles y configuración del buscador. Si la organización aún no tiene portal responde valores por defecto con `isEnabled: false`.\n\n**Scope:** `portal:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Propiedades",
      "description": "Inventario publicado en el portal; crear y actualizar propiedades del CRM",
      "item": [
        {
          "name": "Listar propiedades publicadas",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/properties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "properties"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "12",
                  "description": "Propiedades por página (máximo 48)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Paginación por cursor: `id` de la última propiedad recibida",
                  "disabled": true
                },
                {
                  "key": "includeTotal",
                  "value": "",
                  "description": "Se interpreta con `Boolean()`: cualquier valor no vacío (incluso `false`) cuenta como verdadero. Para no contar el total, pagina con `cursor`",
                  "disabled": true
                },
                {
                  "key": "transactionType",
                  "value": "SALE",
                  "description": "Venta, arriendo o ambas",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "APARTMENT",
                  "description": "Tipo de inmueble",
                  "disabled": true
                },
                {
                  "key": "city",
                  "value": "",
                  "description": "Ciudad (coincidencia parcial, sin distinguir mayúsculas)",
                  "disabled": true
                },
                {
                  "key": "neighborhood",
                  "value": "",
                  "description": "Barrio (coincidencia parcial, sin distinguir mayúsculas)",
                  "disabled": true
                },
                {
                  "key": "priceMin",
                  "value": "",
                  "description": "Precio mínimo",
                  "disabled": true
                },
                {
                  "key": "priceMax",
                  "value": "",
                  "description": "Precio máximo",
                  "disabled": true
                },
                {
                  "key": "bedroomsMin",
                  "value": "",
                  "description": "Habitaciones mínimas",
                  "disabled": true
                },
                {
                  "key": "bathroomsMin",
                  "value": "",
                  "description": "Baños mínimos",
                  "disabled": true
                },
                {
                  "key": "areaMin",
                  "value": "",
                  "description": "Área mínima en m²",
                  "disabled": true
                },
                {
                  "key": "stratum",
                  "value": "",
                  "description": "Estrato socioeconómico (1-6)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Texto libre en título, barrio, dirección, ciudad y código",
                  "disabled": true
                },
                {
                  "key": "hasPool",
                  "value": "",
                  "description": "Solo con piscina. Como todos los `has*`, cualquier valor no vacío cuenta como verdadero",
                  "disabled": true
                },
                {
                  "key": "hasGym",
                  "value": "",
                  "description": "Solo con gimnasio",
                  "disabled": true
                },
                {
                  "key": "hasElevator",
                  "value": "",
                  "description": "Solo con ascensor",
                  "disabled": true
                },
                {
                  "key": "hasSecurity",
                  "value": "",
                  "description": "Solo con vigilancia 24 h",
                  "disabled": true
                },
                {
                  "key": "hasPetFriendly",
                  "value": "",
                  "description": "Solo si admiten mascotas",
                  "disabled": true
                },
                {
                  "key": "hasParking",
                  "value": "",
                  "description": "Solo con al menos un parqueadero",
                  "disabled": true
                },
                {
                  "key": "hasBalcony",
                  "value": "",
                  "description": "Solo con balcón",
                  "disabled": true
                },
                {
                  "key": "hasAC",
                  "value": "",
                  "description": "Solo con aire acondicionado",
                  "disabled": true
                },
                {
                  "key": "hasFurnished",
                  "value": "",
                  "description": "Solo amobladas",
                  "disabled": true
                },
                {
                  "key": "hasGarden",
                  "value": "",
                  "description": "Solo con jardín",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "createdAt",
                  "description": "Campo de orden",
                  "disabled": true
                },
                {
                  "key": "sortOrder",
                  "value": "desc",
                  "description": "Dirección del orden",
                  "disabled": true
                }
              ]
            },
            "description": "Propiedades activas y publicadas en el portal, con filtros y paginación (`pageSize` máximo 48). Las notas internas y los campos personalizados nunca salen por aquí. Con `cursor` (el `id` de la última propiedad recibida) no se cuenta el total y `meta.total` / `meta.totalPages` llegan en `null`.\n\n**Scope:** `portal:read`"
          },
          "response": []
        },
        {
          "name": "Crear propiedad",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/properties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "properties"
              ]
            },
            "description": "Crea una propiedad en el inventario del CRM (nace en `DRAFT` si no se indica `status`). Exige lo del paso 1 del asistente (`title`, `type`, `transactionType`); el resto es opcional. Respeta el tope de propiedades del plan (`403 PLAN_LIMIT_REACHED`). El agente por defecto es quien creó la API key.\n\n**Scope:** `properties:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Apartamento en Chapinero con vista\",\n  \"type\": \"APARTMENT\",\n  \"transactionType\": \"SALE\",\n  \"price\": 450000000,\n  \"currency\": \"COP\",\n  \"city\": \"Bogotá\",\n  \"neighborhood\": \"Chapinero\",\n  \"bedrooms\": 3,\n  \"bathrooms\": 2,\n  \"area\": 85,\n  \"status\": \"ACTIVE\",\n  \"images\": [\n    {\n      \"url\": \"https://cdn.bydomu.com/props/clx1prop001/1.jpg\",\n      \"order\": 0,\n      \"isPrimary\": true\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Propiedades destacadas",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/properties/featured",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "properties",
                "featured"
              ]
            },
            "description": "Hasta 6 propiedades publicadas: primero las marcadas como destacadas y, si faltan, las más recientes.\n\n**Scope:** `portal:read`"
          },
          "response": []
        },
        {
          "name": "Detalle de propiedad publicada",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/properties/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "properties",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1prop001",
                  "description": "ID de la propiedad"
                }
              ]
            },
            "description": "Ficha pública de una propiedad activa y publicada en el portal, con imágenes, agente y recorrido. Cada consulta suma una vista a la propiedad.\n\n**Scope:** `portal:read`"
          },
          "response": []
        },
        {
          "name": "Actualizar propiedad",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/properties/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "properties",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1prop001",
                  "description": "ID de la propiedad"
                }
              ]
            },
            "description": "Actualiza solo los campos enviados. Cambiar `price` o `status` emite los eventos de dominio correspondientes (`property.price_changed`, `property.status_changed`).\n\n**Scope:** `properties:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"price\": 430000000,\n  \"status\": \"ACTIVE\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Opciones de filtros",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/filters",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "filters"
              ]
            },
            "description": "Ciudades, tipos de propiedad y tipos de transacción que existen en las propiedades publicadas, para armar los filtros de un buscador. Si una de las listas falla se devuelve vacía.\n\n**Scope:** `portal:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Agentes",
      "description": "Agentes con propiedades publicadas en el portal",
      "item": [
        {
          "name": "Listar agentes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/agents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "agents"
              ]
            },
            "description": "Miembros de la organización con al menos una propiedad publicada en el portal, ordenados por cantidad de propiedades (de más a menos).\n\n**Scope:** `portal:read`"
          },
          "response": []
        },
        {
          "name": "Perfil de agente",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/agents/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "agents",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1usr001",
                  "description": "ID del usuario (agente)"
                }
              ]
            },
            "description": "Perfil de un miembro de la organización con sus propiedades publicadas en el portal.\n\n**Scope:** `portal:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Leads",
      "description": "Formularios públicos de contacto y solicitud de visita",
      "item": [
        {
          "name": "Enviar formulario de contacto",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/leads",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "leads"
              ]
            },
            "description": "Registra un lead desde un formulario web: crea o actualiza el contacto, suma la analítica del portal y dispara el webhook `LEAD_CREATED` / `lead.submitted`. Pensado para claves publicables.\n\n**Scope:** `leads:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"firstName\": \"María\",\n  \"phone\": \"+573001234567\",\n  \"email\": \"maria@email.com\",\n  \"message\": \"Me interesa conocer más sobre este apartamento\",\n  \"propertyId\": \"clx1prop001\",\n  \"interestedIn\": \"SALE\",\n  \"utmSource\": \"google\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Solicitar visita",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/leads/schedule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "leads",
                "schedule"
              ]
            },
            "description": "Registra una solicitud de visita a una propiedad con fecha y franja preferidas y dispara el webhook `VISIT_SCHEDULED`. No agenda una cita: la inmobiliaria confirma después.\n\n**Scope:** `leads:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"firstName\": \"Ana\",\n  \"phone\": \"+573009876543\",\n  \"propertyId\": \"clx1prop001\",\n  \"preferredDate\": \"2026-10-04\",\n  \"preferredTime\": \"morning\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Finder",
      "description": "Buscador inteligente de propiedades para prospectos",
      "item": [
        {
          "name": "Enviar preferencias del buscador",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/finder",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "finder"
              ]
            },
            "description": "Registra lo que busca un prospecto (tipo, zona, presupuesto, características) como contacto y devuelve hasta 12 propiedades que encajan, con su puntaje y el detalle del cálculo. Dispara el webhook `FINDER_SUBMITTED`.\n\n**Scope:** `finder:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transactionType\": \"SALE\",\n  \"propertyType\": \"APARTMENT\",\n  \"city\": \"Bogotá\",\n  \"neighborhood\": \"Chapinero\",\n  \"budgetMin\": 250000000,\n  \"budgetMax\": 400000000,\n  \"minBedrooms\": 2,\n  \"amenities\": [\n    \"parking\",\n    \"gym\"\n  ],\n  \"firstName\": \"Juan\",\n  \"phone\": \"+573005551234\",\n  \"subscribedToAlerts\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Booking",
      "description": "Agendamiento de citas con agentes desde páginas públicas",
      "item": [
        {
          "name": "Agentes con agendamiento activo",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/booking/agents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "booking",
                "agents"
              ]
            },
            "description": "Agentes de la organización con una página de agendamiento activa, con su `slug`.\n\n**Scope:** `portal:read`"
          },
          "response": []
        },
        {
          "name": "Página de agendamiento de un agente",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/booking/:slug/page",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "booking",
                ":slug",
                "page"
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "carlos-rodriguez",
                  "description": "Slug de la página de agendamiento del agente"
                }
              ]
            },
            "description": "Configuración de la página (duración de los espacios, anticipación, color, mensajes) con el agente y la organización. OJO: la respuesta viene doblemente envuelta, `{ data: { data: ... } }`. Solo páginas de la organización de la clave (otro `slug` → 404).\n\n**Scope:** `portal:read`"
          },
          "response": []
        },
        {
          "name": "Disponibilidad del agente",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/booking/:slug/availability?year=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "booking",
                ":slug",
                "availability"
              ],
              "query": [
                {
                  "key": "month",
                  "value": "",
                  "description": "Mes, de 0 (enero) a 11 (diciembre)",
                  "disabled": true
                },
                {
                  "key": "year",
                  "value": "",
                  "description": "Año (2020-2030)",
                  "disabled": false
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "carlos-rodriguez",
                  "description": "Slug de la página de agendamiento del agente"
                }
              ]
            },
            "description": "Días y horas libres del agente en un mes. `configured: false` si el agente no tiene horario. OJO: la respuesta viene doblemente envuelta, `{ data: { data: ... } }`.\n\n**Scope:** `portal:read`"
          },
          "response": []
        },
        {
          "name": "Agendar cita",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/booking/:slug",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "booking",
                ":slug"
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "carlos-rodriguez",
                  "description": "Slug de la página de agendamiento del agente"
                }
              ]
            },
            "description": "Agenda una cita con el agente en un espacio libre (`date` + `startTime` en la zona horaria de la página). Queda `CONFIRMED` si la página confirma sola, si no `SCHEDULED`. Dispara el webhook `BOOKING_CREATED`. OJO: la respuesta viene doblemente envuelta, `{ data: { data: ... } }`.\n\n**Scope:** `booking:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"firstName\": \"María\",\n  \"lastName\": \"González\",\n  \"phone\": \"+573001234567\",\n  \"email\": \"maria.gonzalez@email.com\",\n  \"date\": \"2026-10-05\",\n  \"startTime\": \"09:00\",\n  \"type\": \"SHOWING\",\n  \"propertyId\": \"clx1prop001\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Eventos",
      "description": "Catálogo de eventos de dominio, histórico reciente y analítica del portal",
      "item": [
        {
          "name": "Catálogo de eventos de dominio",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "events"
              ]
            },
            "description": "Todos los tipos de evento que emite Domu, con el objeto que los origina, los objetos que incluye el payload, las rutas de campo disponibles, una descripción (es/en/pt) y un payload de ejemplo (`example`, el `data` de una entrega, con datos inventados). Es la fuente del selector de disparadores en Zapier, n8n o Make.\n\n**Scope:** `events:read`"
          },
          "response": []
        },
        {
          "name": "Registrar evento de analítica del portal",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "events"
              ]
            },
            "description": "Registra una vista, búsqueda o clic del portal para su analítica. Se procesa en segundo plano: la respuesta es inmediata y no confirma que el evento se haya guardado. Responde `200`, no `201`.\n\n**Scope:** `events:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"PROPERTY_VIEW\",\n  \"propertyId\": \"clx1prop001\",\n  \"referrer\": \"https://google.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Últimos eventos de la organización",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/events/recent",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "events",
                "recent"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "Tipo exacto del catálogo, p. ej. `deal.won`",
                  "disabled": true
                }
              ]
            },
            "description": "Hasta 20 eventos reales recientes, del más nuevo al más viejo, opcionalmente de un solo tipo. Pensado para el paso de «datos de ejemplo» al configurar un disparador.\n\n**Scope:** `events:read`"
          },
          "response": []
        },
        {
          "name": "Registrar uso del producto",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/usage/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "usage",
                "events"
              ]
            },
            "description": "Un evento de uso de tu producto (una función que se usó, un límite que se alcanzó, etc.), del mismo tipo que `Domu('track', …)` en el widget. Identifica a quién pertenece con `contactId`, `externalId` (el id de tu usuario en tu sistema) o `email`. Se agrega por contacto y por día para la ficha y el riesgo de cancelación; el detalle se retiene un tiempo acotado. Responde `200` aunque no encuentre el contacto.\n\n**Scope:** `contacts:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"nomina_liquidada\",\n  \"label\": \"Liquidó la nómina\",\n  \"props\": {\n    \"empleados\": 142\n  },\n  \"externalId\": \"user_8841\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Contactos",
      "description": "Contactos del CRM (clientes, propietarios, prospectos)",
      "item": [
        {
          "name": "Listar contactos",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/contacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "contacts"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Contactos por página (máximo 500)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Paginación por cursor: el `meta.nextCursor` de la respuesta anterior",
                  "disabled": true
                },
                {
                  "key": "includeTotal",
                  "value": "",
                  "description": "`false` para no contar el total (más rápido)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "createdAt",
                  "description": "Campo de orden",
                  "disabled": true
                },
                {
                  "key": "sortOrder",
                  "value": "desc",
                  "description": "Dirección del orden",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Nombre, teléfono, correo o código",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Estados, separados por comas",
                  "disabled": true
                },
                {
                  "key": "archived",
                  "value": "true",
                  "description": "`true` para ver solo los archivados",
                  "disabled": true
                },
                {
                  "key": "source",
                  "value": "",
                  "description": "Fuentes de captación, separadas por comas",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "Tipos, separados por comas",
                  "disabled": true
                },
                {
                  "key": "ownerId",
                  "value": "",
                  "description": "Agente dueño del contacto",
                  "disabled": true
                },
                {
                  "key": "scoreMin",
                  "value": "",
                  "description": "Puntaje mínimo (0-100)",
                  "disabled": true
                },
                {
                  "key": "scoreMax",
                  "value": "",
                  "description": "Puntaje máximo (0-100)",
                  "disabled": true
                },
                {
                  "key": "createdAfter",
                  "value": "",
                  "description": "Creados desde esta fecha (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "createdBefore",
                  "value": "",
                  "description": "Creados hasta esta fecha (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "lastActivityBefore",
                  "value": "",
                  "description": "Sin actividad desde esta fecha (ISO 8601): leads fríos",
                  "disabled": true
                },
                {
                  "key": "tagId",
                  "value": "",
                  "description": "Obsoleto: usa `tagIds`",
                  "disabled": true
                },
                {
                  "key": "tagIds",
                  "value": "",
                  "description": "IDs de etiqueta, separados por comas",
                  "disabled": true
                },
                {
                  "key": "hasDeals",
                  "value": "true",
                  "description": "Con (`true`) o sin (`false`) negocios",
                  "disabled": true
                },
                {
                  "key": "awaitingReply",
                  "value": "true",
                  "description": "`true`: el cliente escribió de último en una conversación abierta",
                  "disabled": true
                },
                {
                  "key": "relation",
                  "value": "ACTIVE",
                  "description": "Relación viva con la inmobiliaria",
                  "disabled": true
                }
              ]
            },
            "description": "Contactos de la organización con filtros y paginación por página o por cursor (`pageSize` máximo 500). Los filtros que aceptan varios valores (`status`, `source`, `type`, `tagIds`) van separados por comas.\n\n**Scope:** `contacts:read`"
          },
          "response": []
        },
        {
          "name": "Crear contacto",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/contacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "contacts"
              ]
            },
            "description": "Crea un contacto en el CRM. El teléfono es único por organización: si ya existe responde `409 DUPLICATE`. Respeta el tope de contactos del plan (`403 PLAN_LIMIT_REACHED`). El dueño por defecto es quien creó la API key. La respuesta no incluye las etiquetas asignadas con `tags`.\n\n**Scope:** `contacts:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"firstName\": \"María\",\n  \"lastName\": \"González\",\n  \"phone\": \"+573001234567\",\n  \"email\": \"maria.gonzalez@email.com\",\n  \"source\": \"WEBSITE\",\n  \"type\": \"CLIENT\",\n  \"budget\": 350000000,\n  \"preferredType\": \"APARTMENT\",\n  \"preferredCity\": \"Bogotá\",\n  \"tags\": [\n    \"VIP\",\n    \"Inversionista\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Detalle de contacto",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/contacts/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "contacts",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1con001",
                  "description": "ID del contacto"
                }
              ]
            },
            "description": "Ficha completa: dueño, últimos 5 negocios, etiquetas, relaciones con otros contactos, origen, negocio abierto y enlaces compartidos. Nunca incluye mensajes ni el token del portal del comprador.\n\n**Scope:** `contacts:read`"
          },
          "response": []
        },
        {
          "name": "Actualizar contacto",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/contacts/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "contacts",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1con001",
                  "description": "ID del contacto"
                }
              ]
            },
            "description": "Actualiza solo los campos enviados. `tags` agrega etiquetas por nombre, no reemplaza las existentes, y no se refleja en la respuesta.\n\n**Scope:** `contacts:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"QUALIFIED\",\n  \"score\": 80,\n  \"tags\": [\n    \"VIP\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Pipeline",
      "description": "Pipelines de ventas y arriendos con etapas configurables",
      "item": [
        {
          "name": "Listar pipelines",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pipelines",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pipelines"
              ]
            },
            "description": "Pipelines de la organización con sus etapas en orden y la cantidad de negocios en cada una.\n\n**Scope:** `deals:read`"
          },
          "response": []
        },
        {
          "name": "Tablero de un pipeline",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pipelines/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pipelines",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1pip001",
                  "description": "ID del pipeline"
                }
              ]
            },
            "description": "Las etapas del pipeline, en orden, cada una con sus negocios (vista de tablero). Un pipeline que no existe responde una lista vacía.\n\n**Scope:** `deals:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Negocios",
      "description": "Oportunidades comerciales del pipeline",
      "item": [
        {
          "name": "Listar negocios",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/deals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "deals"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Negocios por página (máximo 500)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Paginación por cursor: el `meta.nextCursor` de la respuesta anterior",
                  "disabled": true
                },
                {
                  "key": "includeTotal",
                  "value": "",
                  "description": "`false` para no contar el total (más rápido)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "createdAt",
                  "description": "Campo de orden (por defecto `createdAt`)",
                  "disabled": true
                },
                {
                  "key": "sortOrder",
                  "value": "desc",
                  "description": "Dirección del orden",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Título o código del negocio",
                  "disabled": true
                },
                {
                  "key": "propertyId",
                  "value": "",
                  "description": "Negocios vinculados a esta propiedad",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Estados, separados por comas",
                  "disabled": true
                },
                {
                  "key": "stageId",
                  "value": "",
                  "description": "Negocios en esta etapa",
                  "disabled": true
                },
                {
                  "key": "pipelineId",
                  "value": "",
                  "description": "Negocios en este pipeline (si no se manda `stageId`)",
                  "disabled": true
                },
                {
                  "key": "orphan",
                  "value": "",
                  "description": "Negocios sin pipeline. Cualquier valor no vacío (incluso `false`) cuenta como verdadero",
                  "disabled": true
                },
                {
                  "key": "agentId",
                  "value": "",
                  "description": "Agente responsable",
                  "disabled": true
                },
                {
                  "key": "contactId",
                  "value": "",
                  "description": "Contacto del negocio",
                  "disabled": true
                },
                {
                  "key": "tagId",
                  "value": "",
                  "description": "Con esta etiqueta",
                  "disabled": true
                },
                {
                  "key": "valueMin",
                  "value": "",
                  "description": "Valor mínimo",
                  "disabled": true
                },
                {
                  "key": "valueMax",
                  "value": "",
                  "description": "Valor máximo",
                  "disabled": true
                },
                {
                  "key": "expectedCloseAfter",
                  "value": "",
                  "description": "Cierre esperado desde esta fecha (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "expectedCloseBefore",
                  "value": "",
                  "description": "Cierre esperado hasta esta fecha (ISO 8601)",
                  "disabled": true
                }
              ]
            },
            "description": "Negocios de la organización con filtros y paginación por página o por cursor (`pageSize` máximo 500). `status` acepta varios valores separados por comas.\n\n**Scope:** `deals:read`"
          },
          "response": []
        },
        {
          "name": "Crear negocio",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/deals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "deals"
              ]
            },
            "description": "Crea una oportunidad y la coloca en el pipeline y la etapa indicados (o en los de por defecto). El agente por defecto es quien creó la API key.\n\n**Scope:** `deals:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Venta Apto Chapinero - María González\",\n  \"value\": 350000000,\n  \"currency\": \"COP\",\n  \"probability\": 40,\n  \"expectedCloseDate\": \"2026-11-30\",\n  \"contactId\": \"clx1con001\",\n  \"pipelineId\": \"clx1pip001\",\n  \"stageId\": \"clx1stg001\",\n  \"propertyIds\": [\n    \"clx1prop001\"\n  ],\n  \"intent\": \"PURCHASE\",\n  \"leadSource\": \"PORTAL\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Detalle de negocio",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/deals/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "deals",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1deal001",
                  "description": "ID del negocio"
                }
              ]
            },
            "description": "Negocio completo con contacto, agente, etapas, propiedades, etiquetas, arriendo, las últimas 20 actividades, los últimos 50 comentarios y todas sus tareas (incluidas las archivadas).\n\n**Scope:** `deals:read`"
          },
          "response": []
        },
        {
          "name": "Actualizar negocio",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/deals/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "deals",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1deal001",
                  "description": "ID del negocio"
                }
              ]
            },
            "description": "Actualiza solo los campos enviados. Para cambiar de etapa usa `POST /deals/{id}/move`.\n\n**Scope:** `deals:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"value\": 340000000,\n  \"probability\": 65\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Mover negocio de etapa",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/deals/:id/move",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "deals",
                ":id",
                "move"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1deal001",
                  "description": "ID del negocio"
                }
              ]
            },
            "description": "Mueve el negocio a otra etapa. Al caer en una etapa de ganado o perdido se disparan sus efectos (comisiones, eventos `deal.won` / `deal.lost`). Los movimientos de la API quedan marcados como automáticos en el informe de tiempo por etapa.\n\n**Scope:** `deals:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pipelineId\": \"clx1pip001\",\n  \"stageId\": \"clx1stg004\",\n  \"stageOrder\": 0\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Tareas",
      "description": "Tareas asignadas al equipo comercial",
      "item": [
        {
          "name": "Listar tareas",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/tasks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tasks"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Tareas por página (máximo 500)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Paginación por cursor: el `meta.nextCursor` de la respuesta anterior",
                  "disabled": true
                },
                {
                  "key": "includeTotal",
                  "value": "",
                  "description": "`false` para no contar el total (más rápido)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "createdAt",
                  "description": "Campo de orden",
                  "disabled": true
                },
                {
                  "key": "sortOrder",
                  "value": "desc",
                  "description": "Dirección del orden",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Texto en el título, o prefijo del ID",
                  "disabled": true
                },
                {
                  "key": "assigneeId",
                  "value": "",
                  "description": "Responsable",
                  "disabled": true
                },
                {
                  "key": "createdById",
                  "value": "",
                  "description": "Quién la creó",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Estados, separados por comas. `OVERDUE` = abiertas con fecha vencida",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "Tipos, separados por comas",
                  "disabled": true
                },
                {
                  "key": "priority",
                  "value": "",
                  "description": "Prioridades, separadas por comas",
                  "disabled": true
                },
                {
                  "key": "dateFrom",
                  "value": "",
                  "description": "Vencen desde esta fecha (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "dateTo",
                  "value": "",
                  "description": "Vencen hasta esta fecha (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "dueDateMode",
                  "value": "WITH_DATE",
                  "description": "Solo con fecha (`WITH_DATE`) o sin fecha (`WITHOUT_DATE`)",
                  "disabled": true
                },
                {
                  "key": "dueSoon",
                  "value": "",
                  "description": "Abiertas que vencen en las próximas 48 h. Cualquier valor no vacío (incluso `false`) cuenta como verdadero",
                  "disabled": true
                },
                {
                  "key": "archived",
                  "value": "",
                  "description": "SOLO las archivadas. Cualquier valor no vacío (incluso `false`) cuenta como verdadero: para las vivas, omítelo",
                  "disabled": true
                }
              ]
            },
            "description": "Tareas de toda la organización con filtros y paginación por página o por cursor (`pageSize` máximo 500). Por defecto solo las no archivadas. `status`, `type` y `priority` aceptan varios valores separados por comas.\n\n**Scope:** `tasks:read`"
          },
          "response": []
        },
        {
          "name": "Crear tarea",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/tasks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tasks"
              ]
            },
            "description": "Crea una tarea suelta o vinculada a un negocio o a un contacto. Respeta el tope de tareas del plan (`403 PLAN_LIMIT_REACHED`). Responde solo el `id`: pide `GET /tasks/{id}` para el detalle.\n\n**Scope:** `tasks:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Llamar a María para confirmar la visita\",\n  \"type\": \"CALL\",\n  \"priority\": \"HIGH\",\n  \"dueDate\": \"2026-10-01T15:00:00.000Z\",\n  \"assigneeId\": \"clx1usr001\",\n  \"contactId\": \"clx1con001\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Detalle de tarea",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/tasks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tasks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1tsk001",
                  "description": "ID de la tarea"
                }
              ]
            },
            "description": "La tarea con su responsable, quién la creó, y el negocio y el contacto asociados.\n\n**Scope:** `tasks:read`"
          },
          "response": []
        },
        {
          "name": "Actualizar tarea",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/tasks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tasks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1tsk001",
                  "description": "ID de la tarea"
                }
              ]
            },
            "description": "Actualiza solo los campos enviados. Cerrar una tarea es enviar `status: \"COMPLETED\"`.\n\n**Scope:** `tasks:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"COMPLETED\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Documentos",
      "description": "Archivos adjuntos a negocios",
      "item": [
        {
          "name": "Listar documentos",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "documents"
              ],
              "query": [
                {
                  "key": "dealId",
                  "value": "",
                  "description": "Solo los de este negocio",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Documentos por página (máximo 100)",
                  "disabled": true
                }
              ]
            },
            "description": "Documentos adjuntos a negocios, del más reciente al más antiguo (`pageSize` máximo 100).\n\n**Scope:** `documents:read`"
          },
          "response": []
        },
        {
          "name": "Detalle de documento",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/documents/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "documents",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1doc001",
                  "description": "ID del documento"
                }
              ]
            },
            "description": "Un documento con su URL de descarga.\n\n**Scope:** `documents:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Sobres",
      "description": "Sobres de firma electrónica",
      "item": [
        {
          "name": "Listar sobres de firma",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/envelopes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "envelopes"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "description": "Estado del sobre (`DRAFT`, `IN_PROGRESS`, `COMPLETED`, `EXPIRED`, `CANCELLED`, `DECLINED`)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Texto en el nombre del sobre o en el título de su negocio",
                  "disabled": true
                }
              ]
            },
            "description": "Los 100 sobres de firma más recientes, con sus destinatarios. No se pagina.\n\n**Scope:** `documents:read`"
          },
          "response": []
        },
        {
          "name": "Detalle de sobre de firma",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/envelopes/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "envelopes",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1env001",
                  "description": "ID del sobre"
                }
              ]
            },
            "description": "El sobre con su documento, sus campos y el estado de cada destinatario. Las fotos de verificación (selfie y documento de identidad) llegan como URLs firmadas de lectura temporal.\n\n**Scope:** `documents:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Conversaciones",
      "description": "Mensajes de WhatsApp con los contactos",
      "item": [
        {
          "name": "Listar conversaciones",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversations"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Conversaciones por página (máximo 500)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "includeTotal",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "createdAt",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "sortOrder",
                  "value": "desc",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Nombre, apellido, teléfono o código del contacto",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "OPEN",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "channel",
                  "value": "WHATSAPP",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "assignedToId",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "teamId",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "tagId",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "unreadOnly",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "spamOnly",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "snoozedOnly",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "slaBreachedOnly",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "needsHuman",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "view",
                  "value": "awaiting",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                }
              ]
            },
            "description": "Contactos con al menos un mensaje, del más recientemente actualizado al más antiguo, con su último mensaje y el total de mensajes (`pageSize` máximo 500). Solo filtran `search`, `page` y `pageSize`; el resto de parámetros se valida pero no se aplica.\n\n**Scope:** `conversations:read`"
          },
          "response": []
        },
        {
          "name": "Contacto de una conversación",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversations/:contactId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversations",
                ":contactId"
              ],
              "variable": [
                {
                  "key": "contactId",
                  "value": "clx1con001",
                  "description": "ID del contacto"
                }
              ]
            },
            "description": "Datos básicos del contacto con quien es la conversación.\n\n**Scope:** `conversations:read`"
          },
          "response": []
        },
        {
          "name": "Mensajes de una conversación",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversations/:contactId/messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversations",
                ":contactId",
                "messages"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "50",
                  "description": "Mensajes por página (máximo 100)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "contactId",
                  "value": "clx1con001",
                  "description": "ID del contacto"
                }
              ]
            },
            "description": "Mensajes con el contacto, del más reciente al más antiguo (`pageSize` por defecto 50, máximo 100).\n\n**Scope:** `conversations:read`"
          },
          "response": []
        },
        {
          "name": "Enviar mensaje de WhatsApp",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversations/:contactId/messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversations",
                ":contactId",
                "messages"
              ],
              "variable": [
                {
                  "key": "contactId",
                  "value": "clx1con001",
                  "description": "ID del contacto"
                }
              ]
            },
            "description": "Envía un mensaje al contacto respetando la ventana de servicio de 24 h de Meta.\n\n- **Ventana abierta:** manda `body` y se entrega como texto libre (la respuesta es el mensaje guardado).\n- **Ventana cerrada:** manda `templateId` + `variables` con una plantilla APROBADA (la respuesta trae `waMessageId`, `renderedBody` y `usage`).\n- **Ninguna de las dos es posible** (opt-out, sin plantilla, sin ventana): `409 CONFLICT` con el motivo en `error.message`, el modo en `error.reason` (`FREE_FORM`, `TEMPLATE_ONLY`, `HUMAN_AGENT_ONLY`, `BLOCKED`) y, si falta la plantilla, `error.windowExpiresAt`.\n\nLa API nunca envía como `human_agent`: esa vía es de una persona real en el buzón. Si la organización no tiene un número de WhatsApp activo, responde `404`.\n\n**Scope:** `messages:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Hola María, ¿te queda bien la visita del jueves a las 10?\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Citas",
      "description": "Citas agendadas con contactos (visitas, reuniones, llamadas)",
      "item": [
        {
          "name": "Listar citas",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/appointments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "appointments"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Citas por página (máximo 500)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "includeTotal",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "createdAt",
                  "description": "Se valida pero no se aplica en esta operación: siempre se ordena por `startTime`",
                  "disabled": true
                },
                {
                  "key": "sortOrder",
                  "value": "desc",
                  "description": "Orden por hora de inicio",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "SCHEDULED",
                  "description": "Estado de la cita",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "SHOWING",
                  "description": "Tipo de cita",
                  "disabled": true
                },
                {
                  "key": "assigneeId",
                  "value": "",
                  "description": "Responsable",
                  "disabled": true
                },
                {
                  "key": "contactId",
                  "value": "",
                  "description": "Contacto",
                  "disabled": true
                },
                {
                  "key": "dealId",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "dateFrom",
                  "value": "",
                  "description": "Empiezan desde esta fecha (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "dateTo",
                  "value": "",
                  "description": "Empiezan hasta esta fecha (ISO 8601)",
                  "disabled": true
                }
              ]
            },
            "description": "Citas de la organización ordenadas por hora de inicio (`sortOrder`, por defecto de la más lejana a la más cercana), con filtros por estado, tipo, responsable, contacto y rango de fechas (`pageSize` máximo 500).\n\n**Scope:** `appointments:read`"
          },
          "response": []
        },
        {
          "name": "Crear cita",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/appointments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "appointments"
              ]
            },
            "description": "Agenda una cita con un contacto y programa sus recordatorios. `endTime` debe ser posterior a `startTime`. Respeta el tope mensual de citas del plan (`403 PLAN_LIMIT_REACHED`).\n\n**Scope:** `appointments:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Visita Apto Chapinero\",\n  \"type\": \"SHOWING\",\n  \"startTime\": \"2026-10-02T15:00:00.000Z\",\n  \"endTime\": \"2026-10-02T16:00:00.000Z\",\n  \"location\": \"Cra 7 #45-12, Bogotá\",\n  \"contactId\": \"clx1con001\",\n  \"propertyId\": \"clx1prop001\",\n  \"assigneeId\": \"clx1usr001\",\n  \"reminders\": [\n    {\n      \"channel\": \"WHATSAPP\",\n      \"minutesBefore\": 60\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Detalle de cita",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/appointments/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "appointments",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1apt001",
                  "description": "ID de la cita"
                }
              ]
            },
            "description": "La cita con su contacto, negocio, propiedad y responsable.\n\n**Scope:** `appointments:read`"
          },
          "response": []
        },
        {
          "name": "Actualizar cita",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/appointments/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "appointments",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1apt001",
                  "description": "ID de la cita"
                }
              ]
            },
            "description": "Actualiza solo los campos enviados. Para cancelar usa `POST /appointments/{id}/cancel`.\n\n**Scope:** `appointments:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"startTime\": \"2026-10-02T16:00:00.000Z\",\n  \"endTime\": \"2026-10-02T17:00:00.000Z\",\n  \"status\": \"CONFIRMED\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Cancelar cita",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/appointments/:id/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "appointments",
                ":id",
                "cancel"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1apt001",
                  "description": "ID de la cita"
                }
              ]
            },
            "description": "Marca la cita como cancelada y anula sus recordatorios pendientes.\n\n**Scope:** `appointments:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"El cliente reagendará la próxima semana\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Equipo",
      "description": "Miembros de la inmobiliaria",
      "item": [
        {
          "name": "Listar miembros del equipo",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/team",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "team"
              ]
            },
            "description": "Miembros de la organización, del más antiguo al más nuevo, con su rol en la organización.\n\n**Scope:** `team:read`"
          },
          "response": []
        },
        {
          "name": "Detalle de miembro del equipo",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/team/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "team",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1usr001",
                  "description": "ID del usuario"
                }
              ]
            },
            "description": "Un miembro de la organización por el ID de su usuario.\n\n**Scope:** `team:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Etiquetas",
      "description": "Etiquetas para clasificar contactos y negocios",
      "item": [
        {
          "name": "Listar etiquetas",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/tags",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tags"
              ]
            },
            "description": "Etiquetas de la organización en orden alfabético, con cuántos contactos, negocios, conversaciones y propiedades usan cada una.\n\n**Scope:** `tags:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Campos Personalizados",
      "description": "Definiciones de campos personalizados",
      "item": [
        {
          "name": "Listar campos personalizados de contactos",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/custom-fields",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "custom-fields"
              ]
            },
            "description": "Definiciones activas de campos personalizados de CONTACTOS, ordenadas por sección y orden.\n\n**Scope:** `custom_fields:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Comisiones",
      "description": "Comisiones generadas por negocios cerrados",
      "item": [
        {
          "name": "Listar comisiones",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/commissions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "commissions"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Comisiones por página (máximo 500)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "includeTotal",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "createdAt",
                  "description": "Campo de orden (por defecto `closedAt`)",
                  "disabled": true
                },
                {
                  "key": "sortOrder",
                  "value": "desc",
                  "description": "Dirección del orden",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Referencia, título o código del negocio, o código de su propiedad",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "PENDIENTE",
                  "description": "Estado de la comisión",
                  "disabled": true
                },
                {
                  "key": "agentId",
                  "value": "",
                  "description": "Agente del negocio",
                  "disabled": true
                },
                {
                  "key": "dateFrom",
                  "value": "",
                  "description": "Cerradas desde esta fecha (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "dateTo",
                  "value": "",
                  "description": "Cerradas hasta esta fecha (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "dealId",
                  "value": "",
                  "description": "Negocio",
                  "disabled": true
                }
              ]
            },
            "description": "Comisiones de la organización con filtros por estado, agente, negocio y fecha de cierre (`pageSize` máximo 500).\n\n**Scope:** `commissions:read`"
          },
          "response": []
        },
        {
          "name": "Detalle de comisión",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/commissions/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "commissions",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1com001",
                  "description": "ID de la comisión"
                }
              ]
            },
            "description": "La comisión con su negocio, sus participantes (con sus pagos) y los pagos recibidos.\n\n**Scope:** `commissions:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Contabilidad",
      "description": "Ingresos y egresos",
      "item": [
        {
          "name": "Listar registros contables",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/accounting",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "accounting"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Registros por página (máximo 500)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "includeTotal",
                  "value": "",
                  "description": "Se valida pero no se aplica en esta operación",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "createdAt",
                  "description": "Campo de orden",
                  "disabled": true
                },
                {
                  "key": "sortOrder",
                  "value": "desc",
                  "description": "Dirección del orden",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Texto en la descripción",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "INGRESO",
                  "description": "Ingreso o egreso",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "BORRADOR",
                  "description": "Estado del registro",
                  "disabled": true
                },
                {
                  "key": "categoryId",
                  "value": "",
                  "description": "Categoría contable",
                  "disabled": true
                },
                {
                  "key": "dealId",
                  "value": "",
                  "description": "Negocio",
                  "disabled": true
                },
                {
                  "key": "dateFrom",
                  "value": "",
                  "description": "Con fecha desde (ISO 8601)",
                  "disabled": true
                },
                {
                  "key": "dateTo",
                  "value": "",
                  "description": "Con fecha hasta (ISO 8601)",
                  "disabled": true
                }
              ]
            },
            "description": "Ingresos y egresos con filtros por tipo, estado, categoría, negocio y fecha (`pageSize` máximo 500).\n\n**Scope:** `accounting:read`"
          },
          "response": []
        },
        {
          "name": "Detalle de registro contable",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/accounting/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "accounting",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1acc001",
                  "description": "ID del registro"
                }
              ]
            },
            "description": "El registro con su categoría, negocio, contacto y quién lo creó, aprobó o anuló.\n\n**Scope:** `accounting:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Arriendos",
      "description": "Contratos de arrendamiento con sus pagos y mantenimientos",
      "item": [
        {
          "name": "Listar contratos de arriendo",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/leases",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "leases"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "DRAFT",
                  "description": "Estado del contrato",
                  "disabled": true
                },
                {
                  "key": "propertyId",
                  "value": "",
                  "description": "Propiedad arrendada",
                  "disabled": true
                },
                {
                  "key": "tenantId",
                  "value": "",
                  "description": "Contacto arrendatario",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Página, desde 1",
                  "disabled": true
                },
                {
                  "key": "pageSize",
                  "value": "20",
                  "description": "Contratos por página (máximo 100)",
                  "disabled": true
                }
              ]
            },
            "description": "Contratos de arrendamiento, del más reciente al más antiguo (`pageSize` máximo 100).\n\n**Scope:** `leases:read`"
          },
          "response": []
        },
        {
          "name": "Detalle de contrato de arriendo",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/leases/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "leases",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1lea001",
                  "description": "ID del contrato"
                }
              ]
            },
            "description": "El contrato con su propiedad, arrendatario, responsable, pagos de canon y solicitudes de mantenimiento.\n\n**Scope:** `leases:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Notas",
      "description": "Notas rápidas enganchadas a contactos, negocios y propiedades",
      "item": [
        {
          "name": "Crear nota",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "notes"
              ]
            },
            "description": "Crea una nota rápida, suelta o enganchada a un contacto, una propiedad o un negocio, con recordatorio opcional. Respeta el tope de notas del plan (`403 PLAN_LIMIT_REACHED`).\n\n**Scope:** `notes:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Llamó: quiere ver el apartamento el sábado en la mañana.\",\n  \"contactId\": \"clx1con001\",\n  \"remindAt\": \"2026-10-03T13:00:00.000Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "Suscripciones HTTP salientes para Zapier, n8n, Make e integraciones propias",
      "item": [
        {
          "name": "Listar webhooks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks"
              ]
            },
            "description": "Webhooks de la organización con su última entrega y las fallidas de las últimas 24 h. El secreto nunca se devuelve. Pide el scope `webhooks:write`: la lista dice a dónde salen los datos de la organización.\n\n**Scope:** `webhooks:write`"
          },
          "response": []
        },
        {
          "name": "Crear webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks"
              ]
            },
            "description": "Suscribe una URL a uno o varios tipos de evento (exactos, `objeto.*` o `*`). La respuesta trae el `secret` con el que se firma cada entrega (`X-Domu-Signature`): es la ÚNICA vez que se muestra. La URL debe resolver a una dirección pública; se rechazan direcciones privadas o internas.\n\n**Scope:** `webhooks:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://hooks.zapier.com/hooks/catch/123456/abcdef/\",\n  \"eventTypes\": [\n    \"deal.won\",\n    \"contact.*\"\n  ],\n  \"description\": \"Zap: negocios ganados a Google Sheets\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Payload de ejemplo de un evento",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks/sample/:type",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                "sample",
                ":type"
              ],
              "variable": [
                {
                  "key": "type",
                  "value": "deal.won",
                  "description": "Tipo exacto del catálogo"
                }
              ]
            },
            "description": "El sobre exacto que recibiría un webhook para ese tipo. Usa el último evento REAL de la organización cuando existe (`meta.synthetic: false`); si no, arma uno con la forma del catálogo y valores nulos (`meta.synthetic: true`). Un tipo que no está en el catálogo responde `404`.\n\n**Scope:** `webhooks:write`"
          },
          "response": []
        },
        {
          "name": "Eliminar webhook",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "clx1whk001",
                  "description": "ID del webhook"
                }
              ]
            },
            "description": "Da de baja la suscripción. Las entregas pendientes se cancelan.\n\n**Scope:** `webhooks:write`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Modo de prueba",
      "description": "Solo con claves `_test_`: reiniciar los datos de ejemplo y disparar eventos de prueba a tus webhooks",
      "item": [
        {
          "name": "Reiniciar los datos de prueba",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/reset",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "reset"
              ]
            },
            "description": "Borra todo lo de la organización de prueba y vuelve a sembrar los datos de ejemplo según su tipo de negocio (propiedades y negocios solo en inmobiliario). Se conservan el id de la organización, las claves de prueba y los webhooks (con su id y su secreto); las entregas pendientes se pierden. Solo con una clave de prueba **secreta**: con una de producción responde `403 TEST_MODE_ONLY`.\n\n**Scope:** ninguno"
          },
          "response": []
        },
        {
          "name": "Disparar un evento de prueba",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$randomUUID}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "events"
              ]
            },
            "description": "Encola la entrega de un evento del catálogo (`GET /v1/events`) a los webhooks de la organización de prueba suscritos a ese tipo, por la misma cola con reintentos y con la misma firma `X-Domu-Signature` que un evento real. Los datos salen del registro más reciente de ese objeto en la organización de prueba; si no hay ninguno, van con la forma del catálogo y valores nulos (`synthetic: true`). El sobre lleva `livemode: false` y `test: true`. Solo con una clave de prueba: con una de producción responde `403 TEST_MODE_ONLY`.\n\n**Scope:** `webhooks:write`",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"deal.won\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    }
  ]
}
