Este servicio devuelve el diseño que el cliente configuró en su cuenta —colores, tipografía, logo, favicon, slides, llamados a la acción, responsable del pie de página y redes sociales— en una forma lista para consumir.
La diferencia con settings-v2 es la forma: ahí el diseño llega mezclado con el resto de la configuración, como una lista plana de pares nombre/valor con la nomenclatura interna de Mapaprop; acá llega agrupado por sección y, sobre todo, las imágenes vienen ya resueltas, no como fragmentos que haya que componer. Para el diseño, este es el servicio recomendado.
| Información del recurso | |
|---|---|
| Autenticación | Requerida (Token de API, Bearer) |
| Scope | express-base |
| Método HTTP | GET |
| Respuesta | JSON |
| Versión | 1 |
URL del recurso
https://mapaprop.app/api/action/express-v1/design
Código de ejemplo
GET /api/action/express-v1/design HTTP/1.1
Host: mapaprop.app
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Authorization: Bearer {access_token}
Respuesta
Un documento JSON con seis secciones. Las seis vienen siempre, pero dentro de cada una sólo viajan los campos que el cliente configuró: los vacíos se omiten. Un cliente que sólo cargó Instagram y Facebook recibe un social con esas dos claves y nada más.
Por eso conviene leer cada campo con un valor por defecto de tu lado (design.social.youtube ?? "") en vez de asumir que la clave está.
| Objeto | Campo | Tipo | Requerido | Descripción |
|---|---|---|---|---|
| Response | colors | Colors | yes | La paleta del sitio |
| typography | Typography | yes | La tipografía elegida | |
| images | Images | yes | Logo, favicon y slides | |
| callToActions | Array of CallToAction | yes | Los tres bloques de llamado a la acción | |
| footer | Footer | yes | Datos del pie de página | |
| social | Social | yes | Las redes sociales de la inmobiliaria | |
| Colors | primary | string | yes | Color principal, en formato #rrggbb |
| primaryText | string | yes | Color del texto sobre el color principal | |
| secondary | string | yes | Color secundario | |
| secondaryText | string | yes | Color del texto sobre el color secundario | |
| Typography | fontFamily | string | yes | Nombre de la familia tipográfica (por ejemplo Poppins) |
| Images | logo | string | no | URL del logo. Ausente si el cliente no cargó ninguno |
| favicon | string | no | URL del favicon. Ausente si el cliente no cargó ninguno | |
| slides | Array of Slide | yes | Los tres slides del carrusel de la portada | |
| Slide | image | string | no | URL de la imagen del slide. Ausente si no hay imagen cargada |
| url | string | no | Adónde lleva el slide al hacer clic | |
| title | string | no | Título que se muestra sobre la foto. Ausente si el cliente no escribió ninguno | |
| subtitle | string | no | Texto secundario, debajo del título. Ausente si no se escribió | |
| CallToAction | index | number | yes | Posición del bloque: 1, 2 o 3 |
| enabled | boolean | yes | Si el cliente activó este bloque | |
| title | string | no | Título del bloque | |
| description | string | no | Texto del bloque | |
| buttonText | string | no | Texto del botón | |
| buttonLink | string | no | Destino del botón | |
| Footer | responsible | string | no | Texto libre con el responsable de la inmobiliaria (titular, matrícula, empresa) |
| Social | string | no | URL del perfil de Instagram | |
| string | no | URL del perfil de Facebook | ||
| string | no | URL del perfil de X (Twitter) | ||
| string | no | URL del perfil de LinkedIn | ||
| tiktok | string | no | URL del perfil de TikTok | |
| youtube | string | no | URL del canal de YouTube |
La regla es simple: los textos vacíos no viajan, los números y los booleanos sí. Un bloque de llamado a la acción que el cliente no configuró llega como {"index": 2, "enabled": false} —con su posición y su estado, sin los textos—. Que un campo no esté significa que el cliente no lo cargó, no que haya un error: ahí va tu propio valor por defecto.
El título admite varios renglones: llega con saltos de línea (\n) tal como el cliente lo escribió, porque el diseño de su sitio los usa para componer el titular en dos o tres líneas. Si lo renderizás en HTML, convertí los saltos — si los ignorás, el título sale en un solo renglón.
Las imágenes
logo, favicon y slides[].image vienen resueltos: si el cliente subió la imagen desde su cuenta, llegan como URL absoluta lista para usar. Usala tal cual, sin anteponerle ningún dominio ni reconstruir la ruta.
Cuando el cliente reemplaza una imagen, esa URL puede venir con un parámetro ?v= al final. Es intencional: obliga al navegador a bajar la imagen nueva en lugar de seguir mostrando la anterior. Conservá la URL completa, con ese parámetro incluido.
Hay un caso en que el valor no es una URL absoluta: si empieza con / (por ejemplo /styles/customers/1687/logo.png), es una imagen antigua que vive dentro de la plantilla del sitio alojado por Mapaprop, y desde tu propio dominio no va a resolver. La solución es de un clic y la hace el cliente: subir esa imagen desde Sitio Web > Diseño en su cuenta. A partir de ahí llega como URL absoluta. Si querés cubrir el caso igual, chequeá si el valor arranca con http antes de usarlo.
Los tres bloques y los tres slides vienen siempre
callToActions trae siempre tres elementos y slides siempre tres, estén configurados o no. Los bloques traen enabled para que sepas cuáles mostrar; los slides sin imagen llegan con image vacío. Así podés recorrer las listas por posición sin preocuparte por su longitud.
Cada cuánto conviene pedirlo
El diseño cambia poco: se configura una vez y se ajusta de vez en cuando. La respuesta se cachea una hora, así que no tiene sentido pedirla en cada visita — pedila al construir la página o guardala del lado de tu servidor.
Respuesta de ejemplo
{
"colors": {
"primary": "#195fa9",
"primaryText": "#ffffff",
"secondary": "#4a7fe8",
"secondaryText": "#ffffff"
},
"typography": {
"fontFamily": "Poppins"
},
"images": {
"logo": "https://images.mapaprop.app/website-images/4069/963/logo.png?v=1786500000",
"favicon": "https://images.mapaprop.app/website-images/4069/963/favicon.png?v=1786500000",
"slides": [
{
"image": "https://images.mapaprop.app/website-images/4069/963/slide1.jpg",
"url": "/propiedades",
"title": "Encontrá tu próximo hogar",
"subtitle": "Más de 400 propiedades"
},
{
"image": "https://images.mapaprop.app/website-images/4069/963/slide2.jpg",
"url": "/contacto"
},
{}
]
},
"callToActions": [
{
"index": 1,
"enabled": true,
"title": "Tasación sin cargo",
"description": "Conocé el valor de tu propiedad hoy.",
"buttonText": "Solicitar tasación",
"buttonLink": "/contacto"
},
{
"index": 2,
"enabled": false
},
{
"index": 3,
"enabled": false
}
],
"footer": {
"responsible": "Responsable: Omar Gazze — Matrícula 59"
},
"social": {
"instagram": "https://instagram.com/inmobiliaria",
"facebook": "https://facebook.com/inmobiliaria"
}
}