Saltar al contenido principal

Publicar Inmueble

POSThttps://{environment}.metrocuadrado.com/rest-api/realestate/publish

Publica un nuevo inmueble en la plataforma.

Ambientes Disponibles​

AmbienteURL Base
Desarrollohttps://ptec-core-dev.metrocuadrado.com/rest-api/realestate/publish
Producciónhttps://www.metrocuadrado.com/rest-api/realestate/publish

Parámetros​

HeaderValorRequeridoDescripción
Content-Typeapplication/jsonSíTipo de contenido
x-api-keystringSíAPI key de autenticación
tokenstringSíToken JWT de acceso

Reglas de Validación​

Esta sección documenta las validaciones que aplica el API al recibir una solicitud de publicación. Conocer estas reglas te ayudará a evitar errores de validación.

Arquitectura de Validación​

Cómo funciona la validación

El API utiliza dos tipos de validaciones:

  1. Validaciones fijas: Campos como price, stratum, images y comments tienen reglas de validación predefinidas que permanecen constantes.

  2. Validaciones configurables: Campos de amenities como bathrooms, rooms, garages y area se validan contra un catálogo configurable. Esto permite actualizar los valores permitidos según las necesidades del negocio.

Las validaciones configurables pueden ser:

  • Valores discretos: 1|2|3|4 — solo esos valores exactos son permitidos
  • Rangos numéricos: 0-100 — cualquier valor dentro del rango
  • Expresiones regex: Para validaciones más complejas

Campos Principales​

CampoTipoValidaciónMensaje de Error
realEstateTypenumberValores: 1=Apartamento, 2=Casa, 3=Oficina, 4=Casa lote, 5=Consultorio, 6=Local Comercial, 7=Finca, 8=Bodega, 9=Edificio de Apartamentos, 10=Edificio de Oficinas, 14=Apartaestudio, 15=Lote. Ver tabla completa"El código de tipo de inmueble no es válido"
realEstateOffernumberValores: 1 (Venta), 2 (Arriendo). Obligatorio."El código de tipo de oferta es obligatorio"
pricenumberRango: 100,000 - 9,999,999,999,999"El precio debe estar entre 100.000 y 9.999.999.999.999"
administrationnumberRango: 10,000 - 9,999,999,999,999 (si se envía). ⚠️ En inmuebles de Venta (realEstateOffer: 1) NO enviar este campo ni con valor 0 — genera error "El precio se encuentra por debajo del valor mínimo""La administración debe estar entre 10.000 y 9.999.999.999.999"
imagesarrayMínimo 1, máximo 20 URLs válidas"Debe incluir entre 1 y 20 imágenes válidas"
stratumnumberRequerido. Rango: 1-6 (estratos residenciales). Comercial: 7 (solo Locales/Oficinas/Bodegas/Consultorios). Rural: 8 (Fincas). ⚠️ No aplica para todos los tipos de inmueble"El estrato no es válido"
citynumberRequerido, código entero que debe existir en catálogo"El código de ciudad es obligatorio"
neighborhoodstringRequerido"El barrio es requerido"
addressstringOpcional, máximo 100 caracteres"La dirección es obligatoria"
reference1stringOpcional, máximo 50 caracteres"La referencia excede el tamaño máximo"
responseUrlstringURL válida, requerida"La URL de respuesta es requerida"
videostringURL válida de YouTube únicamente (si se envía)"La url del video no es válida"
commentsstringRequerido, máximo 1,000 caracteres"Los comentarios no pueden exceder 1000 caracteres"
latitudenumberRango: -90 a 90 (opcional)"La latitud debe estar entre -90 y 90"
longitudenumberRango: -180 a 180 (opcional)"La longitud debe estar entre -180 y 180"

Reglas de Formato y Precisión Numérica​

Validaciones de precisión numérica

Los siguientes campos tienen restricciones sobre la cantidad de dígitos enteros y decimales permitidos.

CampoEnteros máx.Decimales máx.Rango adicionalEjemplo válido
latitude310-90 a 904.6097100322
longitude310-180 a 180-74.0817500000
builtArea82> 0 para tipos residenciales (1,2,3,4,5,6,7,9,10,14). Solo Bodega(8) y Lote(15) aceptan 012345678.99
area (privada)82Requerido según tipo150.50
plotArea82> 0 (si se envía)500.00
width72> 0 (si se envía)1234567.99
terraceOrBalconyArea72> 0 (si se envía)25.50

Campos de Amenities con Valores Específicos​

Validaciones con valores exactos

Los siguientes campos de amenities solo aceptan valores específicos. Enviar un valor diferente resultará en error de validación.

Validaciones Dinámicas​

CampoTipoValidaciónMensaje de Error
bathroomsnumber | stringRango: 1-20"bathrooms debe estar entre 1 y 20"
roomsnumber | stringRango: 1-20"rooms debe estar entre 1 y 20"
garagesnumber | stringRango: 0 - 100"garages debe estar entre 0 y 100"
builtAreanumberRango: > 0 - 9,999,999.99 (residenciales). Bodega (8) y Lote (15) aceptan 0"La característica Area Construida deben ser mayor a cero"
areanumberRango: 1 - 9,999,999.99"El área debe estar entre 1 y 9.999.999,99"

Validaciones con valores exactos​

La siguiente tabla documenta todos los campos que requieren valores específicos. Los valores deben coincidir exactamente, respetando mayúsculas y minúsculas.

CampoValores Permitidos (regex)Descripción
viewInterior | ExteriorPosición/vista del inmueble
builtTimeRemodelado | Entre 0 y 5 años | Entre 5 y 10 años | Entre 10 y 20 años | Más de 20 añosAntigüedad de construcción
garageTypePropio | Comunal | Servidumbre | IndependienteTipo de garaje
kitchenFormLineal | Paralela | Isla | Abierta | En U | En L | OtraForma de la cocina
dinningRoomTypeSala Comedor | Comedor IndependienteTipo de comedor
gasInstallationTypeNatural | Propano | NingunoTipo de gas
stoveTypeElectrica | Gas | MixtaTipo de estufa
heaterTypeGas | Electrico | Caldera | No tieneTipo de calentador
terraceOrBalconyNinguno | Terraza | BalcónTerraza o balcón
curtainTypeCon velos | Persianas | Pesadas | NingunaTipo de cortinas
surveillanceType0 | 12hrs | 24hrsVigilancia (0=Sin vigilancia)
parkingTypeCubierto | Descubierto | ExteriorTipo de parqueadero
houseTypeTownhouse | Condominio | TradicionalTipo de casa (realEstateType=2)
officeTypeCasa | EdificioTipo de oficina (tipo=3)
mortgageEntityDavivienda | Bancolombia | Colmena BCSC | Colpatria | AV Villas | BBVA | Santander | Fondo Nacional del Ahorro | Otro Banco | Otra Cooperativa | Otros | No TieneEntidad hipotecaria
rentalPeriodDías | Semanas | Meses | AñosPeríodo de arriendo
flooringTypeCemento | Marmol | Baldosa | Alfombra | Cerámica | Madera | Porcelanato | Laminado | OtroTipo de piso general
bedroomFlooringTypeCemento | Marmol | Baldosa | Alfombra | Cerámica | Madera | Porcelanato | Laminado | OtroPiso de habitaciones
studyFlooringTypeCemento | Marmol | Baldosa | Alfombra | Cerámica | Madera | Porcelanato | Laminado | OtroPiso del estudio
diningRoomFlooringTypeCemento | Marmol | Baldosa | Alfombra | Cerámica | Madera | Porcelanato | Laminado | OtroPiso del comedor
livingRoomFlooringTypeCemento | Marmol | Baldosa | Alfombra | Cerámica | Madera | Porcelanato | Laminado | OtroPiso de la sala

Campos Específicos por Tipo de Inmueble​

CampoAplica aValores Permitidos
lotTypeLotes (tipo=15)Lote vacío | Lote en construcción
clinicTypeConsultorios (tipo=5)Odontológico | Médico | Laboratorio | Veterinario | Otro
establishmentTypeLocales (tipo=6)En centro comercial | Afueras centro comercial | Otro
warehouseTypeBodegas (tipo=8)Industrial | Almacenamiento | Otro
buildingRatingBodegas (tipo=8)Edificio inteligente | Edificio no inteligente
estateTypeFincas (tipo=7)Finca de recreo | Finca de Producción

Campos Numéricos de Amenities​

Validaciones numéricas

Los siguientes campos de amenities tienen restricciones @Min/@Max que validan rangos permitidos.

CampoTipoValidaciónDescripción
wardrobesnumberMín: 0, Máx: 4Cantidad de closets/armarios
phoneLinesnumberMín: 1, Máx: 4Cantidad de líneas telefónicas
levelsnumberMín: 1, Máx: 5Cantidad de niveles/pisos
depositsnumberMín: 1, Máx: 20Cantidad de depósitos
liftsnumberMín: 0, Máx: 4Cantidad de ascensores
floorNumbernumberPositivo, Máx: 999Número de piso
depthnumberMín: 0, Máx: 9,999,999Profundidad del lote (metros)
widthnumberPositivoAncho del lote/predio (metros)

Campos de Texto con Límite de Caracteres​

Campos con @Size(max=100)

Los siguientes campos de amenities aceptan texto con un máximo de 100 caracteres.

CampoTipoMáx. CaracteresDescripción
blockstring100Bloque/Torre del conjunto
apartmentNumberstring100Número del apartamento
registrationNumberstring100Número de matrícula inmobiliaria
practiceNumberstring100Número de práctica (consultorios)
officeNumberstring100Número de oficina
establishmentNumberstring100Número del establecimiento (locales)
warehouseNumberstring100Número de la bodega
Flexibilidad de Tipos: Integer o String

Los campos numéricos de amenities (bathrooms, rooms, garages) aceptan tanto Integer como String. El API hace la conversión automáticamente usando Integer.parseInt(valor.toString().trim()).

Ambas formas son válidas:

  • ✅ "bathrooms": 3 (Integer)
  • ✅ "bathrooms": "3" (String — se convierte automáticamente)

Valores válidos:

  • bathrooms: 1 a 20 (rango permitido)
  • rooms: 1 a 20 (rango permitido)
  • garages: 0 - 100 (Integer o String)
Detalle técnico

Esta flexibilidad fue implementada intencionalmente en ValidationServiceImpl.java para soportar integradores que envían valores numéricos como strings. El código valida el valor después de la conversión, no el tipo original.

Tipos de Inmueble (realEstateType)​

CódigoTipo de Inmueble
1Apartamento
2Casa
3Oficina
4Casa lote
5Consultorio
6Local Comercial
7Finca
8Bodega
9Edificio de Apartamentos
10Edificio de Oficinas
14Apartaestudio
15Lote
Códigos no soportados

Los códigos 11, 12 y 13 no son válidos y serán rechazados por el API.

Valores Permitidos para Amenities​

Los siguientes campos de amenities tienen valores específicos permitidos. Enviar un valor diferente resultará en error de validación.

🏠 Características Generales
CampoValores Permitidos
viewInterior, Exterior
builtTimeEntre 0 y 5 años, Entre 5 y 10 años, Entre 10 y 20 años, Más de 20 años, Remodelado
garageTypePropio, Comunal, Servidumbre, Independiente
kitchenFormLineal, Paralela, Isla, Abierta, En U, En L, Otra
dinningRoomTypeSala Comedor, Comedor Independiente
terraceOrBalconyNinguno, Terraza, Balcón
🔧 Instalaciones y Equipamiento
CampoValores Permitidos
gasInstallationTypeNatural, Propano, Ninguno
stoveTypeElectrica, Gas, Mixta
heaterTypeGas, Electrico, Caldera, No tiene
curtainTypeCon velos, Persianas, Pesadas, Ninguna
surveillanceType0, 12hrs, 24hrs
🏢 Campos Específicos por Tipo de Inmueble

Para Lotes (realEstateType: 15):

CampoValores Permitidos
lotTypeLote vacío, Lote en construcción

Para Consultorios (realEstateType: 5):

CampoValores Permitidos
clinicTypeOdontológico, Médico, Laboratorio, Veterinario, Otro

Para Locales Comerciales (realEstateType: 6):

CampoValores Permitidos
establishmentTypeEn centro comercial, Afueras centro comercial, Otro

Para Oficinas (realEstateType: 3):

CampoValores Permitidos
officeTypeCasa, Edificio

Para Bodegas (realEstateType: 8):

CampoValores Permitidos
warehouseTypeIndustrial, Almacenamiento, Otro
buildingRatingEdificio inteligente, Edificio no inteligente
🏠 Campos para Casas y Fincas

Para Casas (realEstateType: 2):

CampoValores Permitidos
houseTypeTownhouse, Condominio, Tradicional

Para Fincas (realEstateType: 7):

CampoValores Permitidos
estateTypeFinca de recreo, Finca de Producción
💰 Campos Financieros
CampoValores Permitidos
mortgageEntityDavivienda, Bancolombia, Colmena BCSC, Colpatria, AV Villas, BBVA, Santander, Fondo Nacional del Ahorro, Otro Banco, Otra Cooperativa, Otros, No Tiene
rentalPeriodDías, Semanas, Meses, Años
🪵 Tipos de Piso (flooringTypes)

Estos valores aplican para los campos: flooringType, bedroomFlooringType, studyFlooringType, diningRoomFlooringType, livingRoomFlooringType

Valores Permitidos
Cemento, Marmol, Baldosa, Alfombra, Cerámica, Madera, Porcelanato, Laminado, Otro

Campos Booleanos​

📋 Lista completa de campos booleanos

Los siguientes campos aceptan valores booleanos (true/false) o strings ("true"/"false"):

Amenidades internas: pool, gym, elevator, alarm, jacuzzi, sauna, heater, chimney, airConditioned, cytophone, furnished, laundryArea, closedComplex, studyOrLibrary, serviceRoom, serviceBathroom, utilityRoom, auxiliaryBathroom, hall, securityDoors, bodyguardRoom, terrace, twoFamilyHome, inBuilding, coveredGarage

Amenidades del conjunto/edificio: tennisCourt, squashCourt, basketballCourt, soccerField, bbqArea, childrenArea, greenArea, communityHall, visitorParkingLot, golfCage, surveillance, gateHouse, cctv

Características de ubicación: onMainStreet, onSecondaryRoad, nearbySupermarket, nearbyShoppingCenter, nearbyPark, nearbyPublicTransport, nearbySchoolCollege, shoppingZone, residentialZone, ruralZone

Permisos y restricciones: petsAllowed, smokingAllowed, suitableForChildren, negotiable, handicappedAccesible, panoramicView

Tipos de piso: woodenFloor, carpetedFloor, tiledFloor, porcelainTiledFloor

Cocina: fullKitchen, americanKitchen

Validaciones Dinámicas​

Validaciones según tipo de inmueble

El API aplica validaciones adicionales según el realEstateType:

  • Apartamentos y Casas: Requieren rooms y bathrooms
  • Lotes: No requieren área construida (builtArea)

Formato de Imágenes​

"images": [
"https://storage.googleapis.com/bucket/image1.jpg",
"https://res.cloudinary.com/demo/image/upload/sample.jpg"
]
  • Mínimo 1 imagen, máximo 20
  • Deben ser URLs válidas y accesibles
  • Formatos soportados: JPG, PNG, WEBP
  • La primera imagen será la imagen principal del inmueble

Ejemplos​

curl -X POST \
'https://ptec-core-dev.metrocuadrado.com/rest-api/realestate/publish' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'token: tu-jwt-token' \
-d '{
"realEstateType": 2,
"realEstateOffer": 1,
"price": "12000000",
"administration": "800000",
"city": "5",
"neighborhood": "Laureles",
"stratum": 5,
"zone": 12,
"sector": 22,
"reference1": "9876543210",
"address": "Carrera 80 # 33B 45",
"latitude": "6.24420",
"longitude": "-75.58121",
"amenities": {
"builtTime": "Entre 5 y 10 años",
"rooms": "4",
"bathrooms": "3",
"garages": "2",
"garageType": "Propio",
"builtArea": "90",
"area": "110",
"negotiable": "false",
"terraceOrBalcony": "Balcón",
"terraceOrBalconyArea": "12.5",
"dinningRoomType": "Comedor Independiente",
"kitchenForm": "Abierta",
"heaterType": "Gas",
"gasInstallationType": "Propano",
"stoveType": "Electrica",
"closedComplex": false,
"laundryArea": false,
"furnished": false,
"wardrobes": "3",
"curtainType": "Con velos",
"block": "B",
"apartmentNumber": "204",
"floorNumber": "2",
"studyOrLibrary": false,
"serviceRoom": "false",
"chimney": "false",
"airConditioned": "false",
"cytophone": "false",
"registrationNumber": "XYZ123456",
"jacuzzi": "false",
"alarm": "false",
"pool": "false",
"tennisCourt": "false",
"squashCourt": "false",
"basketballCourt": "false",
"soccerField": "false",
"sauna": "false",
"heater": "false",
"handicappedAccesible": "false",
"greenArea": "true",
"childrenArea": "true",
"cctv": "true",
"bbqArea": "false",
"surveillanceType": "24hrs",
"petsAllowed": "true",
"onMainStreet": "false",
"onSecondaryRoad": "true",
"smokingAllowed": "false",
"nearbySupermarket": "true",
"nearbyShoppingCenter": "false",
"nearbyPark": "true",
"nearbyPublicTransport": "true",
"nearbySchoolCollege": "false",
"woodenFloor": "false",
"carpetedFloor": "false",
"tiledFloor": "true",
"porcelainTiledFloor": "false",
"fullKitchen": "true",
"americanKitchen": "false",
"serviceBathroom": "false",
"utilityRoom": "false",
"golfCage": "false",
"surveillance": "true",
"gateHouse": "false",
"ruralZone": "false",
"suitableForChildren": true,
"terrace": false,
"twoFamilyHome": false,
"auxiliaryBathroom": false,
"inBuilding": true,
"shoppingZone": false,
"residentialZone": true,
"lifts": "1",
"bodyguardRoom": false,
"view": "Interior",
"auxiliaryDinningRoom": false,
"bedroomFlooringType": "Madera",
"studyFlooringType": "Cerámica",
"diningRoomFlooringType": "Marmol",
"livingRoomFlooringType": "Porcelanato",
"flooringType": "Cerámica",
"mortgageEntity": "Bancolombia",
"hall": false,
"securityDoors": false,
"panoramicView": false,
"elevator": false,
"communityHall": false,
"coveredGarage": false,
"gym": false,
"visitorParkingLot": false,
"parkingType": "Cubierto"
},
"images": [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg"
],
"video": "https://www.youtube.com/watch?v=example123",
"comments": "APTO EN VENTA: Este apartamento está ubicado en una zona tranquila y residencial, ideal para familias. Cuenta con amplios espacios y buena iluminación natural.",
"agentId": 123456,
"responseUrl": "https://example.com/api/callback"
}'

Notas Importantes​

- Requiere un token JWT válido (generar en el endpoint de autenticación)

- La API Key debe corresponder al ambiente seleccionado

- Todos los campos marcados como requeridos deben enviarse

  • Las imágenes se pueden subir en una petición separada

Cómo Probar​

Para probar este endpoint, sigue estos pasos:

  1. Genera un token JWT usando el endpoint de autenticación
  2. Asegúrate de usar la API Key correcta según el ambiente
  3. Incluye el token en el header token
  4. Prepara el body JSON con los datos del inmueble
  5. Realiza la petición POST al endpoint correspondiente

Códigos de Respuesta​

CódigoDescripción
200Operación exitosa
201Inmueble publicado exitosamente
400Datos inválidos o parámetros faltantes
401Token o API key inválidos
403Sin permisos para realizar la operación (usuario inactivo)
404Recurso no encontrado
406Credenciales incorrectas (generalmente en login)
409El usuario no tiene cupos suficientes o conflicto de estado
500Error interno del servidor (validaciones envueltas en error genérico)
502Bad Gateway - Problemas de infraestructura
503Servicio no disponible - Problemas de infraestructura

Probar Endpoint​

API Tester

Prueba los endpoints de forma interactiva

Token Requerido

Este endpoint requiere autenticación. Configura un token JWT válido usando el botón de token en la parte superior de la página.