Inicio rápido
La API de Malla expone los leads calificados, los inmuebles sincronizados y las conversaciones del agente. Todo en JSON, autenticado con un Bearer token. Cinco minutos para tu primer request.
- Entra a tu dashboard → Configuración → API → Generar nueva llave.
- Guarda la llave como variable de entorno (
MALLA_API_KEY). - Haz tu primer request:
curl https://api.trymalla.live/v1/leads \
-H "Authorization: Bearer ${MALLA_API_KEY}" \
-G --data-urlencode "tone=hot" --data-urlencode "limit=25"Autenticación
Todas las requests se autentican con un Bearer token en el header Authorization. No exponemos basic auth ni cookies — solo tokens.
Authorization: Bearer mlla_live_xxx...Las llaves mlla_live_ operan contra tu cuenta real. Para pruebas usa mlla_test_ y el dataset de demo. Las llaves se rotan desde el dashboard; la anterior queda activa 24 horas para evitar caídas.
Endpoints
Base URL: https://api.trymalla.live. Versionamos en la URL — la v1 es estable, los breaking changes salen como v2.
/v1/leadsLista leads paginados con filtros (tone, score, channel).
/v1/leads/:idDevuelve el lead completo con conversación y extractos.
/v1/leads/:idActualiza estado del lead (asignación, etapa, notas).
/v1/propertiesLista inmuebles activos con sus orígenes (portal).
/v1/propertiesCrea un inmueble manualmente desde tu sistema.
/v1/conversations/:idDevuelve la conversación completa con el lead.
/v1/webhooksRegistra un endpoint para recibir eventos.
La referencia completa con ejemplos por endpoint está en construcción. Por ahora, cualquier campo es predecible — pídenos un ejemplo a soporte si lo necesitas hoy.
Webhooks
Recibe eventos en tiempo real cuando algo importante pasa. Todos los webhooks vienen firmados con HMAC-SHA256 — verifica la firma antes de actuar.
lead.qualifiedEl agente termina de calificar un lead nuevo (score ≥ 70).lead.handoffEl agente decide pasar el lead a un humano.lead.coldUn lead deja de responder por más de 7 días.conversation.messageLlega un mensaje nuevo a una conversación activa.property.syncedTermina la sincronización de un portal externo.// Verifica la firma del webhook
import crypto from 'node:crypto';
export function verifyWebhook(req) {
const signature = req.headers['x-malla-signature'];
const expected = crypto
.createHmac('sha256', process.env.MALLA_WEBHOOK_SECRET)
.update(req.rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected),
);
}SDK & librerías
El SDK oficial para Node.js / TypeScript: npm install @malla/sdk. Para Python, Ruby y Go usamos OpenAPI — descarga el spec en /v1/openapi.json y genera el cliente.
import { Malla } from '@malla/sdk';
const malla = new Malla({ apiKey: process.env.MALLA_API_KEY });
// Listar leads calientes de la última semana
const leads = await malla.leads.list({
tone: 'hot',
since: '7d',
limit: 25,
});
for (const lead of leads.data) {
console.log(`${lead.score} · ${lead.name} · ${lead.budget}`);
}Límites y errores
Por defecto: 600 requests / minuto por llave. Cuando lo excedes, respondemos 429 Too Many Requests con el header Retry-After. Para volúmenes mayores escríbenos.
200Éxito.201Recurso creado.400Request inválido (body, parámetros).401Sin token o token inválido.403Token válido pero sin permisos para ese recurso.404El recurso no existe o fue eliminado.429Rate limit. Espera Retry-After.500Error nuestro. Reintenta con backoff exponencial.¿Estás construyendo una integración seria?
Te ayudamos con acceso anticipado a endpoints en beta, código de ejemplo específico para tu caso, y un canal directo de Slack con el equipo.
devs@trymalla.live