PROD

This service returns the design the customer configured in their account —colors, typography, logo, favicon, slides, calls to action, footer contact person and social networks— in a shape that is ready to consume.

The difference with settings-v2 is the shape: there the design arrives mixed with the rest of the configuration, as a flat list of name/value pairs using Mapaprop's internal naming; here it arrives grouped by section and, above all, images come already resolved, not as fragments you have to assemble. For the design, this is the recommended service.

Resource information
AuthenticationRequired (API Token, Bearer)
Scopeexpress-base
HTTP MethodGET
ResponseJSON
Version1

Resource URL

https://mapaprop.app/api/action/express-v1/design

Example code

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}

The headline may span several lines: it arrives with line breaks (\n) exactly as the customer typed them, because their site design uses them to lay the headline out over two or three lines. If you render it as HTML, convert those breaks — ignoring them collapses the headline into a single line.

Response

A JSON document with six sections. All six always come, but inside each one only the fields the customer configured travel: empty ones are omitted. A customer who only filled in Instagram and Facebook receives a social with those two keys and nothing else.

So read every field with a default on your side (design.social.youtube ?? "") instead of assuming the key is there.

ObjectFieldTypeRequiredDescription
ResponsecolorsColorsyesThe site palette
typographyTypographyyesThe chosen typography
imagesImagesyesLogo, favicon and slides
callToActionsArray of CallToActionyesThe three call to action blocks
footerFooteryesFooter data
socialSocialyesThe real estate agency's social networks
ColorsprimarystringyesMain color, in #rrggbb format
primaryTextstringyesColor of the text over the main color
secondarystringyesSecondary color
secondaryTextstringyesColor of the text over the secondary color
TypographyfontFamilystringyesName of the font family (for example Poppins)
ImageslogostringnoLogo URL. Absent if the customer did not upload one
faviconstringnoFavicon URL. Absent if the customer did not upload one
slidesArray of SlideyesThe three slides of the home page carousel
SlideimagestringnoURL of the slide image. Absent if no image was uploaded
urlstringnoWhere the slide leads when clicked
titlestringnoHeadline shown over the photo. Absent if the customer did not write one
subtitlestringnoSecondary text, below the headline. Absent if none was written
CallToActionindexnumberyesPosition of the block: 1, 2 or 3
enabledbooleanyesWhether the customer activated this block
titlestringnoBlock title
descriptionstringnoBlock text
buttonTextstringnoButton text
buttonLinkstringnoButton destination
FooterresponsiblestringnoFree text with the person responsible for the agency (owner, license number, company)
SocialinstagramstringnoInstagram profile URL
facebookstringnoFacebook profile URL
twitterstringnoX (Twitter) profile URL
linkedinstringnoLinkedIn profile URL
tiktokstringnoTikTok profile URL
youtubestringnoYouTube channel URL

The rule is simple: empty texts do not travel, numbers and booleans do. A call to action block the customer did not configure arrives as {"index": 2, "enabled": false} —with its position and its state, without the texts—. A missing field means the customer did not fill it in, not that something went wrong: that is where your own default goes.

Images

logo, favicon and slides[].image come resolved: if the customer uploaded the image from their account, they arrive as an absolute, ready-to-use URL. Use it as it is, without prepending any domain or rebuilding the path.

When the customer replaces an image, that URL may arrive with a ?v= parameter at the end. That is intentional: it forces the browser to download the new image instead of keeping the previous one. Keep the complete URL, including that parameter.

There is one case where the value is not an absolute URL: if it starts with / (for example /styles/customers/1687/logo.png), it is an old image living inside the template of the Mapaprop-hosted site, and it will not resolve from your own domain. The fix is one click and the customer makes it: upload that image from Website > Design in their account. From then on it arrives as an absolute URL. If you want to cover the case anyway, check whether the value starts with http before using it.

The three blocks and the three slides always come

callToActions always brings three elements and slides always three, whether they are configured or not. The blocks carry enabled so you know which ones to show; slides without an image arrive with an empty image. That way you can walk the lists by position without worrying about their length.

How often to request it

The design changes rarely: it is configured once and adjusted from time to time. The response is cached for one hour, so there is no point in requesting it on every visit — request it when building the page or store it on your server side.

Example response

{
  "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": "Find your next home",
        "subtitle": "More than 400 listings"
      },
      {
        "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"
  }
}