Este serviço retorna o design que o cliente configurou na sua conta —cores, tipografia, logo, favicon, slides, chamadas para ação, responsável do rodapé e redes sociais— em um formato pronto para consumir.
A diferença em relação a settings-v2 é o formato: lá o design chega misturado com o resto da configuração, como uma lista plana de pares nome/valor com a nomenclatura interna da Mapaprop; aqui chega agrupado por seção e, principalmente, as imagens vêm já resolvidas, não como fragmentos que você precisa montar. Para o design, este é o serviço recomendado.
| Informação do recurso | |
|---|---|
| Autenticação | Obrigatória (Token de API, Bearer) |
| Scope | express-base |
| Método HTTP | GET |
| Resposta | JSON |
| Versão | 1 |
URL do recurso
https://mapaprop.app/api/action/express-v1/design
Código de exemplo
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}
O título aceita várias linhas: chega com quebras de linha (\n) exatamente como o cliente digitou, porque o design do site as usa para compor o título em duas ou três linhas. Se você renderizar em HTML, converta as quebras — ignorá-las deixa o título em uma única linha.
Resposta
Um documento JSON com seis seções. As seis vêm sempre, mas dentro de cada uma só viajam os campos que o cliente configurou: os vazios são omitidos. Um cliente que só preencheu Instagram e Facebook recebe um social com essas duas chaves e nada mais.
Por isso convém ler cada campo com um valor padrão do seu lado (design.social.youtube ?? "") em vez de supor que a chave está lá.
| Objeto | Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
| Response | colors | Colors | yes | A paleta do site |
| typography | Typography | yes | A tipografia escolhida | |
| images | Images | yes | Logo, favicon e slides | |
| callToActions | Array of CallToAction | yes | Os três blocos de chamada para ação | |
| footer | Footer | yes | Dados do rodapé | |
| social | Social | yes | As redes sociais da imobiliária | |
| Colors | primary | string | yes | Cor principal, no formato #rrggbb |
| primaryText | string | yes | Cor do texto sobre a cor principal | |
| secondary | string | yes | Cor secundária | |
| secondaryText | string | yes | Cor do texto sobre a cor secundária | |
| Typography | fontFamily | string | yes | Nome da família tipográfica (por exemplo Poppins) |
| Images | logo | string | no | URL do logo. Ausente se o cliente não carregou nenhum |
| favicon | string | no | URL do favicon. Ausente se o cliente não carregou nenhum | |
| slides | Array of Slide | yes | Os três slides do carrossel da página inicial | |
| Slide | image | string | no | URL da imagem do slide. Ausente se não há imagem carregada |
| url | string | no | Para onde o slide leva ao clicar | |
| title | string | no | Título exibido sobre a foto. Ausente se o cliente não escreveu nenhum | |
| subtitle | string | no | Texto secundário, abaixo do título. Ausente se não foi escrito | |
| CallToAction | index | number | yes | Posição do bloco: 1, 2 ou 3 |
| enabled | boolean | yes | Se o cliente ativou este bloco | |
| title | string | no | Título do bloco | |
| description | string | no | Texto do bloco | |
| buttonText | string | no | Texto do botão | |
| buttonLink | string | no | Destino do botão | |
| Footer | responsible | string | no | Texto livre com o responsável pela imobiliária (titular, matrícula, empresa) |
| Social | string | no | URL do perfil do Instagram | |
| string | no | URL do perfil do Facebook | ||
| string | no | URL do perfil do X (Twitter) | ||
| string | no | URL do perfil do LinkedIn | ||
| tiktok | string | no | URL do perfil do TikTok | |
| youtube | string | no | URL do canal do YouTube |
A regra é simples: os textos vazios não viajam, os números e os booleanos sim. Um bloco de chamada para ação que o cliente não configurou chega como {"index": 2, "enabled": false} —com a sua posição e o seu estado, sem os textos—. Um campo ausente significa que o cliente não o preencheu, não que houve um erro: é aí que entra o seu próprio valor padrão.
As imagens
logo, favicon e slides[].image vêm resolvidos: se o cliente carregou a imagem a partir da sua conta, chegam como URL absoluta pronta para usar. Use-a como está, sem acrescentar nenhum domínio nem reconstruir o caminho.
Quando o cliente substitui uma imagem, essa URL pode vir com um parâmetro ?v= no final. Isso é intencional: força o navegador a baixar a imagem nova em vez de continuar mostrando a anterior. Mantenha a URL completa, com esse parâmetro incluído.
Há um caso em que o valor não é uma URL absoluta: se começa com / (por exemplo /styles/customers/1687/logo.png), é uma imagem antiga que vive dentro do template do site hospedado pela Mapaprop, e a partir do seu próprio domínio ela não vai resolver. A solução é de um clique e quem a faz é o cliente: carregar essa imagem em Site > Design na sua conta. A partir daí ela chega como URL absoluta. Se quiser cobrir o caso mesmo assim, verifique se o valor começa com http antes de usá-lo.
Os três blocos e os três slides vêm sempre
callToActions traz sempre três elementos e slides sempre três, estejam configurados ou não. Os blocos trazem enabled para que você saiba quais mostrar; os slides sem imagem chegam com image vazio. Assim você pode percorrer as listas por posição sem se preocupar com o comprimento delas.
Com que frequência pedi-lo
O design muda pouco: é configurado uma vez e ajustado de vez em quando. A resposta fica em cache por uma hora, então não faz sentido pedi-la a cada visita — peça-a ao construir a página ou guarde-a do lado do seu servidor.
Resposta de exemplo
{
"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": "Encontre seu próximo lar",
"subtitle": "Mais de 400 imóveis"
},
{
"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"
}
}