InmoCMS · Developer Platform

Public API

Registra demandantes y ofertantes desde WhatsApp, portales inmobiliarios, formularios o cualquier integración externa.

v1.0JSONJWT

Inicio rápido

La API usa JSON sobre HTTPS. Primero intercambia tus credenciales por un JWT y úsalo como Bearer token en las peticiones posteriores.

No compartas el client_secret en frontend, URLs, repositorios o mensajes. La integración debe ejecutarse desde un servidor seguro.

Cada credencial está vinculada a una inmobiliaria. InmoCMS selecciona automáticamente su base de datos; nunca debes enviar identificadores de base de datos.

Autenticación

POST/api/v1/auth/token
curl -X POST "https://api-public.inmocms.com/api/v1/auth/token" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "client_id": "inm_xxxxxxxxxxxxxxxxxxxxxxxx",
    "client_secret": "sec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  }'
{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "token_type": "Bearer",
  "expires_in": 3600
}

Alta de clientes

POST/api/v1/clientes

Crea el cliente y sus datos específicos en una sola transacción.

Cabeceras

CabeceraObligatoriaValor / notas
AuthorizationSíBearer <JWT>
Content-TypeSíapplication/json
AcceptRecomendadaapplication/json
Idempotency-KeyNoClave única de 8–100 caracteres. Muy recomendada para evitar duplicados en reintentos.

Campos comunes

Se aplican tanto a demandantes como a ofertantes. Debes enviar al menos uno de telefono o email; puedes enviar ambos.

CampoTipoObligatorioNotas
tipo_clientestringSídemandante u ofertante.
nombrestringSíMáximo 100 caracteres.
telefonostringSi falta emailMáximo 32 caracteres. Enviar como texto, conservando el prefijo internacional si procede.
emailstringSi falta telefonoEmail válido (RFC), máximo 100 caracteres. Se eliminan espacios de los extremos y se convierte a minúsculas.
origenstringSíMáximo 200 caracteres. Ejemplos: WhatsApp, Idealista, Email.
notasstringNoInformación libre, máximo 10.000 caracteres.
referencia_pisostringNoReferencia del anuncio concreto, máximo 100 caracteres. En ofertantes se guarda como referencia del inmueble.

Los campos obligatorios no pueden omitirse ni enviarse como null o texto vacío. Los campos opcionales pueden omitirse o enviarse como null. Si se envía un valor, debe cumplir el tipo y los límites indicados. Los números se muestran con punto decimal en JSON.

Demandante

Envía los campos comunes con tipo_cliente: "demandante" y los siguientes campos específicos en la raíz del JSON.

CampoTipoObligatorioNotas
zonas_interesarray de stringSíEntre 1 y 20 zonas. Cada elemento debe ser un texto no vacío de hasta 100 caracteres. No admite null ni un array vacío.
presupuesto_orientativonumberNoDesde 0 hasta 999999999999.99, ambos incluidos. Admite decimales.

Ejemplo de petición

curl -X POST "https://api-public.inmocms.com/api/v1/clientes" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: whatsapp-982371" \
  -d '{
    "tipo_cliente": "demandante",
    "nombre": "Ana García",
    "telefono": "+34600111222",
    "email": "ana@example.com",
    "zonas_interes": ["Centro", "Chamberí"],
    "presupuesto_orientativo": 350000,
    "referencia_piso": "REF-2026-104",
    "origen": "WhatsApp"
  }'

Ofertante

Envía los campos comunes con tipo_cliente: "ofertante" y el objeto inmueble. Los campos con prefijo inmueble. van dentro de ese objeto.

CampoTipoObligatorioNotas
inmuebleobjectSíObjeto con los datos del inmueble. No admite null ni un objeto vacío.
inmueble.direccion_zonastringSíDirección o zona del inmueble, máximo 250 caracteres.
inmueble.tipo_operacionstringSíSolo venta o alquiler, en minúsculas.
inmueble.tipo_inmueblestringNoMáximo 100 caracteres. Ejemplos: piso, casa, chalet, local. Se busca en el catálogo sin distinguir mayúsculas; si no existe, el vínculo queda vacío y el valor original se conserva en el payload del lead.
inmueble.metros_cuadradosnumberNoDesde 0 hasta 99999999.99, ambos incluidos. Admite decimales.
inmueble.habitacionesintegerNoNúmero entero entre 0 y 100, ambos incluidos.
inmueble.banosintegerNoNúmero entero entre 0 y 100, ambos incluidos.
inmueble.precio_orientativonumberNoDesde 0 hasta 999999999999.99, ambos incluidos. Se guarda como precio de venta o alquiler según tipo_operacion.
inmueble.estado_descripcionstringNoDescripción del estado del inmueble, máximo 10.000 caracteres.

Ejemplo de petición

curl -X POST "https://api-public.inmocms.com/api/v1/clientes" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: portal-445901" \
  -d '{
    "tipo_cliente": "ofertante",
    "nombre": "Carlos Pérez",
    "telefono": "+34600999888",
    "email": "carlos@example.com",
    "origen": "Email",
    "inmueble": {
      "direccion_zona": "Calle Mayor 10, Madrid",
      "tipo_operacion": "venta",
      "tipo_inmueble": "piso",
      "metros_cuadrados": 92,
      "habitaciones": 3,
      "banos": 2,
      "precio_orientativo": 420000,
      "estado_descripcion": "Reformado, exterior"
    }
  }'

Respuesta 201

{
  "message": "Cliente creado correctamente.",
  "data": {
    "lead_id": 81,
    "cliente_id": 1254,
    "inmueble_id": 908,
    "tipo_cliente": "ofertante",
    "created_at": "2026-09-18T10:30:00+02:00"
  }
}

Errores y límites

Se permiten 14 peticiones por minuto y credencial. El intento 15 bloquea la credencial durante 60 segundos. Consulta Retry-After antes de reintentar.

HTTPSignificado
401Credenciales incorrectas o JWT ausente, inválido o caducado.
403La inmobiliaria vinculada ya no está disponible.
409Existe una petición con la misma clave de idempotencia todavía en proceso o fallida.
422Los datos no cumplen la validación. La respuesta incluye errores por campo.
429Límite superado. La respuesta contiene los segundos restantes en retry_after.
503No se pudo conectar temporalmente con la base de datos de la inmobiliaria.