Integration Examples
Concrete payload examples for the Spot2 standard contract.
Standard Webhook
PROCESSING
{
"external_id": "PROP-001",
"status": "PROCESSING"
}
REJECTED
{
"external_id": "PROP-002",
"status": "REJECTED",
"messages": [
"At least one price (rent or sale) must be greater than zero"
]
}
Rental Property
Your API Returns
{
"external_id": "PROP-001",
"property_type": "office",
"modality": "rent",
"title": "Oficina corporativa en Polanco",
"description": "Oficina acondicionada de 250 m2 con estacionamiento y aire acondicionado.",
"updated_at": "2026-07-24T15:40:43Z",
"surface_m2": 250.5,
"land_m2": null,
"bedrooms": 0,
"bathrooms": 2.5,
"parking_spots": 4,
"price": {
"currency": "MXN",
"rent_price": 120000,
"sale_price": null
},
"location": {
"latitude": 19.4326,
"longitude": -99.1937,
"street": "Avenida Presidente Masaryk",
"ext_number": "123",
"int_number": "4B",
"neighborhood": "Polanco",
"city": "Ciudad de México",
"state": "Ciudad de México",
"postal_code": "11560"
},
"contact": {
"name": "Broker CRM",
"phone": "525512345678",
"email": "broker@example.com"
},
"office": {
"floor_level": 6,
"floor_level_number": "4"
},
"photos": [
"https://cdn.your-crm.com/photo-1.jpg",
"https://cdn.your-crm.com/photo-2.jpg",
"https://cdn.your-crm.com/photo-3.jpg"
],
"amenities": [
"aire acondicionado",
"elevador"
]
}
Result
The property passes blocking validations. Ingestion sends PROCESSING feedback when it accepts it to continue through the publication flow.
{
"external_id": "PROP-001",
"status": "PROCESSING"
}
Rent And Sale Property
Your API Returns
{
"external_id": "PROP-002",
"property_type": "retail",
"modality": "rent_and_sale",
"title": "Local comercial en avenida principal",
"updated_at": "2026-07-24T15:40:43Z",
"surface_m2": 180,
"price": {
"currency": "MXN",
"rent_price": 35000,
"sale_price": 4500000
},
"location": {
"latitude": 25.6866,
"longitude": -100.3161,
"street": "Av. Constitución",
"city": "Monterrey",
"state": "Nuevo León",
"postal_code": "64000"
},
"contact": {
"name": "María López",
"email": "maria@example.com",
"phone": "528112345678"
},
"photos": [
"https://cdn.your-crm.com/local-1.jpg",
"https://cdn.your-crm.com/local-2.jpg",
"https://cdn.your-crm.com/local-3.jpg"
],
"retail": {
"min_height_m": 3.8,
"price_per_sqm_min": 200,
"price_per_sqm_max": 500
}
}
Result
The property continues with both modalities available. If one operation is removed later, do not report it in deleted_ids; update modality and prices in the main feed.
Property Rejected For Missing Price
Your API Returns
{
"external_id": "PROP-003",
"property_type": "retail",
"modality": "rent",
"updated_at": "2026-07-24T15:40:43Z",
"price": {
"currency": "MXN",
"rent_price": 0,
"sale_price": null
},
"location": {
"latitude": 25.6866,
"longitude": -100.3161,
"street": "Av. Constitución",
"city": "Monterrey",
"state": "Nuevo León",
"postal_code": "64000"
},
"contact": {
"name": "Broker CRM",
"email": "broker@example.com",
"phone": "528112345678"
}
}
Result
The property is rejected because at least one price must be greater than 0.
{
"external_id": "PROP-003",
"status": "REJECTED",
"messages": [
"At least one price (rent or sale) must be greater than zero"
]
}
Property With DRAFT Findings
Your API Returns
{
"external_id": "PROP-004",
"property_type": "office",
"modality": "rent",
"updated_at": "2026-07-24T15:40:43Z",
"surface_m2": 120,
"price": {
"currency": "MXN",
"rent_price": 45000,
"sale_price": null
},
"location": {
"latitude": 20.6597,
"longitude": -103.3496,
"street": "Av. Vallarta",
"city": "Guadalajara",
"state": "Jalisco",
"postal_code": "44100"
},
"contact": {
"name": "Broker CRM",
"email": "broker@example.com",
"phone": "523312345678"
},
"photos": [
"https://cdn.your-crm.com/office-1.jpg"
],
"amenities": []
}
Detected Issues
| Issue | Severity |
|---|---|
| Fewer than 3 photos | DRAFT |
| No amenities | WARN |
Result
No REJECTED is sent because there are no BLOCK rules. The property may continue as draft or with reduced visibility, depending on the downstream flow.
Land For Sale In USD
Your API Returns
{
"external_id": "PROP-005",
"property_type": "terrain",
"modality": "sale",
"title": "Terreno industrial en Querétaro",
"description": "Terreno con uso de suelo industrial.",
"updated_at": "2026-07-24T15:40:43Z",
"surface_m2": 0,
"land_m2": 5000,
"price": {
"currency": "USD",
"rent_price": null,
"sale_price": 1500000
},
"location": {
"latitude": 20.5888,
"longitude": -100.3899,
"street": "Carretera estatal 100",
"city": "Querétaro",
"state": "Querétaro",
"postal_code": "76000"
},
"contact": {
"name": "Broker CRM",
"email": "broker@example.com",
"phone": "524421234567"
},
"terrain": {
"land_use": "industrial"
},
"photos": [
"https://cdn.your-crm.com/terrain-1.jpg",
"https://cdn.your-crm.com/terrain-2.jpg",
"https://cdn.your-crm.com/terrain-3.jpg"
],
"amenities": []
}
Result
For terrain, land_m2 is used as surface when surface_m2 is missing or non-positive. The public allowed currency is USD; Spot2 applies validations on the converted MXN value when applicable.
Paginated Feed
Request
GET /api/v1/spot2/properties?updated_since=2026-07-01T00:00:00Z&offset=0&limit=200 HTTP/1.1
Host: your-crm.com
x-api-key: <your-api-key>
Accept: application/json
Response
{
"data": [
{
"external_id": "PROP-001",
"property_type": "office",
"modality": "rent",
"updated_at": "2026-07-24T15:40:43Z",
"price": {
"currency": "MXN",
"rent_price": 120000,
"sale_price": null
},
"location": {
"latitude": 19.4326,
"longitude": -99.1937,
"street": "Avenida Presidente Masaryk",
"city": "Ciudad de México",
"state": "Ciudad de México",
"postal_code": "11560"
},
"contact": {
"name": "Broker CRM",
"email": "broker@example.com",
"phone": "525512345678"
}
}
],
"meta": {
"next": null,
"total_count": 1
}
}
Deleted Feed
Request
GET /api/v1/spot2/properties/deleted?since=2026-07-01T00:00:00Z HTTP/1.1
Host: your-crm.com
x-api-key: <your-api-key>
Accept: application/json
Response
{
"deleted_ids": ["PROP-006", "PROP-007"],
"since": "2026-07-01T00:00:00Z",
"generated_at": "2026-07-24T15:40:43.143Z"
}
If there are no deletions:
{
"deleted_ids": [],
"since": null,
"generated_at": "2026-07-24T15:40:43.143Z"
}