Saltar al contenido principal
Version: v1.0.0

Ejemplos

Ejemplos concretos de request y response entre su CRM y Spot2 Ingestion.


1. Propiedad en renta

Su API devuelve

{
"external_id": "prop-001",
"property_type": "oficina",
"modality": "rent",
"title": "Oficina ejecutiva en Polanco",
"description": "Amplia oficina de 120m2 con vista panorámica.",
"price": {
"rent_price": 45000,
"sale_price": null,
"currency": "MXN"
},
"surface_m2": 120,
"parking_spots": 3,
"bathrooms": 2,
"photos": ["https://cdn.su-crm.com/01.jpg", "https://cdn.su-crm.com/02.jpg"],
"location": {
"latitude": 19.4326,
"longitude": -99.1332,
"street": "Av. Presidente Masaryk",
"ext_number": "123",
"int_number": "4A",
"neighborhood": "Polanco",
"city": "Ciudad de México",
"state": "Ciudad de México",
"postal_code": "11560"
},
"agent": {
"name": "Juan Pérez",
"email": "juan@broker.com",
"phone": "+525512345678"
},
"amenities": ["aire acondicionado", "elevador", "estacionamiento"],
"office": {
"floor_level": 5,
"floor_level_number": "Piso 5"
},
"updated_at": "2026-06-29T14:30:00Z"
}

Resultado

Pasa todas las validaciones. Se publica activa en Spot2.

Webhook recibido

{
"external_id": "prop-001",
"status": "PROCESSING"
}

2. Propiedad en renta y venta

Su API devuelve

{
"external_id": "prop-002",
"property_type": "local",
"modality": "rent_and_sale",
"price": {
"rent_price": 35000,
"sale_price": 4500000,
"currency": "MXN"
},
"location": {
"city": "Monterrey",
"state": "Nuevo León"
},
"photos": ["https://cdn.su-crm.com/foto.jpg"],
"retail": {
"price_per_sqm_min": 200,
"price_per_sqm_max": 500
},
"updated_at": "2026-06-29T10:00:00Z"
}

Resultado

Se publica en Spot2 con ambas modalidades disponibles.


3. Propiedad rechazada por precio bajo

Su API devuelve

{
"external_id": "prop-003",
"property_type": "local",
"price": {
"rent_price": 5000,
"currency": "MXN"
},
"location": {
"city": "Monterrey",
"state": "Nuevo León"
},
"updated_at": "2026-06-29T12:00:00Z"
}

Resultado

Se rechaza por precio debajo del mínimo. Webhook:

{
"external_id": "prop-003",
"status": "REJECTED",
"messages": ["Precio de renta por debajo del mínimo permitido (10000 MXN)"]
}

4. Propiedad con moneda USD

Su API devuelve

{
"external_id": "prop-004",
"property_type": "nave_industrial",
"modality": "sale",
"price": {
"rent_price": null,
"sale_price": 2500000,
"currency": "USD"
},
"surface_m2": 5000,
"location": {
"latitude": 32.5149,
"longitude": -117.0382,
"street": "Blvd. Industrial",
"ext_number": "500",
"city": "Tijuana",
"state": "Baja California"
},
"photos": ["https://cdn.su-crm.com/nave.jpg"],
"industrial": {
"max_height_m": 12,
"luminaries": 20,
"luminary_specs": "LED industrial 200W"
},
"updated_at": "2026-06-29T08:00:00Z"
}

Resultado

Se convierte a MXN usando el tipo de cambio del día y se publica. Si el tipo de cambio no está disponible, la propiedad se rechaza con código enrich.block_failed.


5. Propiedad con múltiples rechazos

Su API devuelve

{
"external_id": "prop-005",
"property_type": "oficina",
"price": {
"rent_price": 8000,
"currency": "MXN"
},
"location": {
"city": "Guadalajara",
"state": "Jalisco"
},
"photos": [],
"office": {
"floor_level": 6
},
"updated_at": "2026-06-29T15:00:00Z"
}

Problemas detectados

  1. rent_price = 8,000 MXN → debajo del mínimo (10,000) → BLOCK
  2. photos vacío → sin fotos → DRAFT
  3. floor_level = 6 sin floor_level_number → BLOCK
  4. Sin agent → sin contacto → DRAFT

Resultado

BLOCK tiene prioridad. No se publica. Webhook:

{
"external_id": "prop-005",
"status": "REJECTED",
"messages": [
"Precio de renta por debajo del mínimo permitido (10000 MXN)",
"floor_level_number es requerido cuando floor_level es 6 (Otro)",
"Se requiere al menos una foto para la calidad del listado",
"No hay información de contacto (teléfono o correo) disponible para el agente"
]
}

6. Terreno

Su API devuelve

{
"external_id": "prop-006",
"property_type": "terreno",
"modality": "sale",
"price": {
"sale_price": 15000000,
"currency": "MXN"
},
"land_m2": 5000,
"location": {
"latitude": 25.7824,
"longitude": -100.3419,
"street": "Av. Parque Industrial",
"neighborhood": "Parque Mitras",
"city": "García",
"state": "Nuevo León",
"postal_code": "66000"
},
"agent": {
"name": "María López",
"email": "maria@inmobiliaria.com"
},
"amenities": ["luz", "accesibilidad"],
"terrain": {
"land_use": "industrial"
},
"updated_at": "2026-06-29T16:00:00Z"
}

Resultado

land_use presente (obligatorio para terrenos). surface_m2 se toma de land_m2. Se publica.


Flujo completo

  1. Agrega una propiedad nueva en su CRM → aparece en el feed.
  2. La detectamos como nueva, validamos y publicamos.
  3. Recibe webhook con status PROCESSING.
  4. Modifica el precio en su CRM → updated_at cambia.
  5. La detectamos como modificada y actualizamos en Spot2.
  6. La propiedad es eliminada en su CRM → aparece en el endpoint /properties/deleted → la desactivamos.
  7. La baja es inmediata en el mismo ciclo de sincronización.