Publicar en un portal
Cuando la propiedad ya está cargada y la cuenta del portal conectada, esto la publica.
PUT /property-v1/properties/{paId}/publication/{portal}
No mandás la propiedad de nuevo: ya la tenemos, y la publicamos tal como quedó guardada. Nosotros la traducimos al formato del portal.
| Portal | Valor de {portal} | Estado |
|---|---|---|
| Zonaprop | zonapropapi | disponible |
| Argenprop, Cabaprop, MercadoLibre | — | próximamente |
Requiere el scope {portal}:publish — por ejemplo zonapropapi:publish. Es distinto del :connect: podés estar habilitado para conectar cuentas de un portal y no para publicar en él.
Antes de publicar
Tres cosas, en este orden:
- La ficha de tu cliente — Clientes
- Su cuenta del portal conectada — Conectar con un enlace
- La propiedad cargada, con su
paId— Alta de propiedades
La llamada
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
plan | string | según el portal | El plan de publicación. Pisa el que hayas puesto en publication dentro del objeto |
curl -X PUT https://property-api.mapaprop.com/property-v1/properties/01M3PTZ8YBMM5DSNW03WP8VD9E/publication/zonapropapi \
-H "Authorization: Bearer <TU_TOKEN>" \
-H "x-client-ref: cliente-42" \
-H "Content-Type: application/json" \
-d '{ "plan": "SUPERDESTACADO" }'
Respuesta 200:
{
"status": "published",
"portal": "zonapropapi",
"paId": "01M3PTZ8YBMM5DSNW03WP8VD9E",
"plan": "SUPERDESTACADO",
"quota": { "remaining": 1493, "limit": 1500 }
}
El plan también podés dejarlo fijo en el objeto, en publication. Si mandás los dos, gana el de esta llamada: así podés cambiar de plan sin reescribir la propiedad.
Volver a llamar ACTUALIZA, no duplica
Publicar dos veces la misma propiedad no crea dos avisos. La segunda llamada actualiza el que ya existe. Podés reintentar sin miedo: si una llamada falló y no sabés si llegó, volvé a llamar.
Es la propiedad más importante de este endpoint, y la razón por la que no hay un "crear" y un "actualizar" separados: una sola operación, y el resultado depende de si el aviso ya existe.
Cuando no se puede publicar: 422
No es un error de tu llamada — es que falta un dato. Por eso vienen dos listas separadas:
{
"error": "not_publishable",
"detail": "La propiedad no se puede publicar en este portal todavía.",
"blockers": [
{ "field": "title", "kind": "missing", "message": "Falta el título" }
],
"accountBlockers": [
{ "field": "options.zoneNaventId", "kind": "missing",
"message": "La zona de la propiedad no tiene mapeo guardado en Zonaprop" }
]
}
| Lista | Qué significa | Quién lo resuelve |
|---|---|---|
blockers | falta un dato de la propiedad | vos: corregí el objeto y volvé a intentar |
accountBlockers | falta algo de la cuenta en el portal (zona sin mapear, plan, sucursal) | se resuelve una vez y sirve para todas las propiedades de ese cliente |
Están separadas porque el arreglo es distinto. Si venís de accountBlockers, revisar el JSON de la propiedad no te va a llevar a ningún lado: está bien.
Podés anticipar casi todos los blockers con POST /properties/verify, que no crea ni publica nada.
Códigos de respuesta
| Código | Qué pasó | Qué hacer |
|---|---|---|
200 | Publicado | — |
400 | El portal no está disponible todavía, o el body no es JSON válido | Revisá el valor de {portal} |
403 | Tu token no tiene el scope {portal}:publish | Escribinos para habilitarlo |
404 | Esa propiedad no existe para este cliente | Revisá el paId y el x-client-ref |
409 | La cuenta no está conectada al portal | Pedí un enlace de conexión |
409 | El cliente está dado de baja (customer_not_active) | Reactivalo con POST /property-v1/customers — ver Clientes |
422 | Falta un dato | Ver arriba |
502 | El portal rechazó la publicación, o no respondió | Ver abajo |
El 502, que tiene dos sabores
{ "error": "portal_rejected",
"detail": "No pudimos alcanzar al portal. El aviso PUEDE haberse publicado: volvé a intentar, la operación es idempotente y no duplica.",
"portalResponse": null }
- El portal rechazó →
portalResponsetrae su respuesta tal cual. Ahí está el motivo. - No respondió → el
detailte lo dice, y puede haberse publicado igual. Reintentar es seguro: no duplica.
No te decimos "no se publicó" cuando no lo sabemos.
Despublicar
Próximamente. DELETE /property-v1/properties/{paId}/publication/{portal} va a dar de baja el aviso en el portal. Escribinos a dev@mapaprop.com si tu integración lo necesita.
Mientras tanto, tu cliente puede bajar el aviso desde el panel del portal.
Específico de cada portal
- Zonaprop: el plan es obligatorio y cada publicación consume del cupo mensual de tu cliente — Cupo mensual y límites
Relacionado
- La clave
publication— qué configurar dentro del objeto - Conectar con un enlace — conectar la cuenta del portal
POST /properties/verify— anticipar los blockers