Introducción a la Express API

Construí tu propio sitio o app —que corre en tu propio servidor, con tu web y tu diseño— usando la Express API de Mapaprop para servir el inventario de tu cuenta (propiedades, desarrollos, sucursales, zonas). Es una API para desarrolladores: el sitio o sistema es tuyo y lo consumís desde afuera; Mapaprop no lo hospeda. Todos los métodos operan sobre la cuenta dueña del token —tu inventario, tu configuración, tus leads—: el scope sale del access token, no se envía como parámetro. Las consultas que envíen tus visitantes ingresan a tu Inbox de Mapaprop.

1. Obtené tu access token

La Express API funciona con tu Token de API de Mapaprop (no con el registro de app OAuth2 de terceros). Si ya sos cliente Mapaprop Pro+ (o superior), activás tu token con un clic desde tu cuenta —Configuración > API Token— y lo usás como Authorization: Bearer {token}. El token no expira (salvo que lo regeneres o lo desactives). Guía paso a paso: Express API Token.

No hace falta registrar ninguna aplicación ni pedir autorización: el token es self-service para clientes con plan Pro+ o superior. El flujo OAuth2 de Primeros pasos es para portales y terceros, no para esta API. Si tu integración corre en el browser, activá el scope CORS desde la misma pantalla.

2. Cómo se resuelve tu sitio

Cuáles necesitan un sitio y cuáles no

Solo diez servicios necesitan un sitio: los que devuelven contenido del sitio —settings, settings-v2, design, features, menus, pages, pages/{url}, pages/static/{pageId}, posts, posts/{url}—. Sirven para armar tu sitio con contenido que administrás desde Mapaprop.

Todos los servicios de inventario funcionan sin sitio: se resuelven únicamente con la cuenta dueña del token. Son properties, properties/{propertyHash}, developments, development/properties, branches, types, operations, zones, zones/suggestions y messages (el envío de consultas).

Si tu integración solo consume inventario —el caso típico de un sitio propio en WordPress u otro CMS, donde el contenido lo administrás desde ahí— no necesitás ningún sitio en Mapaprop y nunca vas a ver el error CUSTOMER_WITHOUT_WEBSITE.

La excepción es seller-submissions: sí requiere un sitio de tu cuenta, porque el envío queda asociado a él. Si tu token no tiene sitio atado y tampoco enviás websiteId en el body, la respuesta es NOT_FOUND.

Cómo se elige el sitio

Para los diez servicios de contenido no hace falta que envíes cuál: tu sitio queda atado a tu Token de API desde tu cuenta de Mapaprop, y todos lo usan automáticamente. Lo atás —o creás uno— desde Configuración > Token de API, en la tarjeta Función Sitio Web.

El sitio se resuelve así:

  1. Tu token ya tiene un sitio atado → se usa ese. Es el caso normal y no tenés que hacer nada.
  2. Tu token no tiene sitio atado y tenés un solo sitio activo → se usa ese.
  3. Tu token no tiene sitio atado y tenés más de un sitio activo → tenés que indicar cuál con el parámetro websiteId. Ejemplo: GET /api/action/express-v1/settings-v2?websiteId=1234. Solo se acepta un websiteId que sea uno de tus propios sitios activos (se valida contra la cuenta de tu token); cualquier otro se rechaza.

Un sitio cuenta como activo desde que lo creás en tu cuenta. No hace falta que tenga un dominio apuntado ni contenido cargado.

Antes, cuando no se podía resolver el sitio, estos servicios respondían 200 con contenido vacío, sin avisar. Ahora devuelven un error claro (ver abajo).

Errores al resolver el sitio

Ante un error, la respuesta es un JSON con los campos error (un código estable, ideal para tu integración) y description (texto legible), con estado HTTP 400:

{
  "error": "AMBIGUOUS_WEBSITE",
  "description": "El cliente tiene mas de un sitio activo. Especifique el parametro websiteId."
}
errorCuándo ocurredescription
CUSTOMER_WITHOUT_WEBSITETu cuenta no tiene ningún sitio activo en Mapaprop.El cliente no tiene un sitio web activo en Mapaprop.
AMBIGUOUS_WEBSITETenés más de un sitio activo y no indicaste un websiteId válido.El cliente tiene mas de un sitio activo. Especifique el parametro websiteId.

Para tu lógica de manejo de errores, compará contra el campo error (el código), que es estable. El description es texto pensado para leer.

3. Flujo básico

TBD

4. Explorar servicios

GET /api/action/express-v1/settings-v2

GET /api/action/express-v1/design

GET /api/action/express-v1/branches

GET /api/action/express-v1/menus

GET /api/action/express-v1/types

GET /api/action/express-v1/operations

GET /api/action/express-v1/pages

GET /api/action/express-v1/pages/{url}

GET /api/action/express-v1/pages/static/{pageId}

GET /api/action/express-v1/posts

GET /api/action/express-v1/posts/{url}

GET /api/action/express-v1/zones

GET /api/action/express-v1/zones/suggestions

GET /api/action/express-v1/properties

GET /api/action/express-v1/development/properties

GET /api/action/express-v1/developments

GET /api/action/express-v1/properties/{propertyHash}

POST /api/action/express-v1/messages

POST /api/action/express-v1/seller-submissions

GET /api/action/express-v1/features


GET /api/action/express-v1/settings deprecado