POST /cabaprop/publish
Publica una propiedad en Cabaprop a partir del Property Object.
Es idempotente: si ya existe un aviso vivo para el mismo propertyId/custId, este endpoint lo actualiza en vez de devolver un error de duplicado.
| Información del recurso | |
|---|
| Autenticación | Requerida (token de Mapaprop + token de Cabaprop) |
| Método HTTP | POST |
| Respuesta | JSON |
| Versión | 1 |
https://property-api.mapaprop.com/cabaprop/publish
| Header | Requerido | Descripción |
|---|
Authorization | sí | Bearer <token> — token de Mapaprop |
X-Cabaprop-Token | sí | Token de Cabaprop obtenido en POST /cabaprop/connect |
Content-Type | sí | application/json |
| Key | Tipo | Requerido | Descripción |
|---|
propertyId | number/string | sí | Id de la propiedad en tu aplicación. Se usa para vincular tu propiedad con el aviso de Cabaprop. |
custId | number/string | sí | Id del cliente/cuenta en tu aplicación. Debe corresponder al mismo custId autenticado (ver errores). |
property | object | sí | El Property Object, con mínimo 3 imágenes. |
realStateId | string/number | sí | Id de la inmobiliaria en Cabaprop, obtenido en GET /cabaprop/get-branches (.id). |
branchOfficeId | string/number | sí | Id de la sucursal en Cabaprop, obtenido en GET /cabaprop/get-branches (.branchOffices[].id). |
POST /cabaprop/publish
Host: property-api.mapaprop.com
Content-Type: application/json
Authorization: Bearer {access_token}
X-Cabaprop-Token: {cabaprop_token}
{
"propertyId": 188017,
"custId": 1,
"realStateId": "81592",
"branchOfficeId": "83347",
"property": {
"title": "Hermosa casa 4 ambientes con parrilla",
"description": "Casa de 4 ambientes con jardín y parrilla.",
"operation_type": "1",
"property_type": "3",
"sub_property_type": "12",
"location": {
"barrios": [1234],
"cp": "1425",
"lat": "-34.5885",
"lng": "-58.4306",
"street": "Av. Santa Fe",
"number": "3253"
},
"surface": { "totalSurface": 180, "coveredSurface": 140 },
"price": { "currency": 1, "total": 250000 },
"characteristics": { "ambience": 4, "bedrooms": 3, "bathrooms": 2 },
"images": [
{ "url": "https://tu-servidor.com/fotos/1.jpg", "title": "imagen1", "originalname": "casa1", "filename": null },
{ "url": "https://tu-servidor.com/fotos/2.jpg", "title": "imagen2", "originalname": "casa2", "filename": null },
{ "url": "https://tu-servidor.com/fotos/3.jpg", "title": "imagen3", "originalname": "casa3", "filename": null }
]
}
}
En caso de éxito devuelve un 200:
{
"success": true,
"cabapropId": "68cae034f1a2b3c4d5e6f7a8",
"mode": "created"
}
| Campo | Tipo | Descripción |
|---|
success | boolean | true si el aviso se publicó (o actualizó) correctamente. |
cabapropId | string | Id del aviso en Cabaprop. Guardalo para futuras llamadas a PUT /cabaprop/property y DELETE /cabaprop/property/unpublish. |
mode | string | created si es un aviso nuevo, updated si ya existía un aviso vivo y se actualizó (idempotencia). |
| Status | Cuerpo | Causa |
|---|
| 400 | {"error":"Invalid JSON body"} | El body no es un JSON válido. |
| 403 | {"error":"custId does not match the authenticated customer"} | El custId del body no coincide con la cuenta autenticada. |
| 400 | {"error":"propertyId, custId and property are required"} | Falta alguno de los campos requeridos. |
| 400 | {"error":"La propiedad debe tener al menos 3 imagenes para publicarse en Cabaprop"} | El property.images tiene menos de 3 elementos. |
| 400 | {"error":"Cabaprop account is not connected (missing token)"} | Falta el token de Cabaprop. |
| 400 | {"error":"Missing realStateId/branchOfficeId — reconnect the Cabaprop account (GET /cabaprop/get-branches) and retry"} | Faltan realStateId/branchOfficeId. |
| 400 | {"error":"La zona/tipo/operacion no tiene mapping en Cabaprop","missing":["..."]} | operation_type, property_type o location.barrios vinieron vacíos. |
| 502 | {"error":"Could not verify existing Cabaprop publication state — retry"} | Error interno al verificar si ya existía un aviso. Reintentar. |
| 401 | {"error":"Cabaprop authentication failed — reconnect the account"} | El token de Cabaprop es inválido o expiró. |
| 200 | {"success":false,"errorCode":"...","detail":"..."} | Cabaprop rechazó la publicación por datos inválidos (ver notas del Property Object). detail trae el mensaje textual del portal. |
| 500 | {"error":"Error publishing Cabaprop property","detail":"..."} | Error inesperado. |