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
| Cabecera | Valor |
|---|---|
| Authorization * | Bearer <JWT> |
| Content-Type * | application/json |
| Idempotency-Key | Clave única de 8–100 caracteres. Muy recomendada para evitar duplicados en reintentos. |
Campos comunes
| Campo | Tipo | Notas |
|---|---|---|
| tipo_cliente * | string | demandante u ofertante |
| nombre * | string | Máximo 100 caracteres |
| telefono / email * | string | Al menos uno de los dos |
| origen * | string | WhatsApp, Idealista, email… |
| notas | string | Información libre |
| referencia_piso | string | Referencia del anuncio concreto |
Ejemplo: demandante
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"
}'Ejemplo: ofertante
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.
| HTTP | Significado |
|---|---|
| 401 | Credenciales incorrectas o JWT ausente, inválido o caducado. |
| 403 | La inmobiliaria vinculada ya no está disponible. |
| 409 | Existe una petición con la misma clave de idempotencia todavía en proceso o fallida. |
| 422 | Los datos no cumplen la validación. La respuesta incluye errores por campo. |
| 429 | Límite superado. La respuesta contiene los segundos restantes en retry_after. |
| 503 | No se pudo conectar temporalmente con la base de datos de la inmobiliaria. |