Cambios recientes
Cambios destacados en la API por fecha.
2026-09-07
- Memoria del bot — fuentes nuevas: notas escritas a mano (POST /bot/knowledge/notes, PATCH /bot/knowledge/notes/:id) y páginas web públicas (POST /bot/knowledge/url). Con syncEveryHours la página se vuelve a leer cada N horas y solo se reprocesa si cambió el contenido. Los archivos aceptan además CSV.
- Memoria del bot — búsqueda híbrida: la recuperación combina parecido semántico y palabras exactas en español (Reciprocal Rank Fusion). POST /bot/knowledge/search devuelve cada fragmento con similarity y porTexto; un acierto por palabra exacta se usa aunque no llegue a knowledgeMinSimilarity.
- Memoria del bot — vacíos de conocimiento: GET /bot/knowledge/insights?dias= resume qué buscó el bot, las preguntas que quedaron sin respuesta agrupadas, el uso por agente y por documento. Una nota cierra un vacío con resolvesQuestionKey.
- Agentes: documentos por agente con knowledgeDocIds en POST/PATCH /bot/agents (vacío = toda la biblioteca). knowledgeTags sigue funcionando, con menor precedencia.
- Bot fuera de horario: cuando el cliente pide asesor y el equipo está cerrado, el bot ya no traspasa. Crea una tarea para el equipo (origin BOT), le dice al cliente cuándo lo contactan y sigue atendiendo. Por número en PUT /bot/config/:phoneId con outOfHoursTaskEnabled, outOfHoursTaskMessage ({apertura}) y outOfHoursTaskGraceMin; evento HANDOFF_DEFERRED. Guía en Handoff a humano.
- Seguimiento por silencio: followUpEnabled, followUpAfterMin, followUpCloseAfterMin, followUpMode (AI | TEXT), followUpMessage y followUpCloseMessage en la misma configuración; eventos FOLLOWUP_SENT, FOLLOWUP_SKIPPED y FOLLOWUP_CLOSED.
- Agentes: el traspaso entre agentes es invisible para el cliente (el destino responde en el mismo turno) y una etiqueta de ruteo ya no lo deshace.
- Contrato OpenAPI: los cuerpos declarados en los controladores salen documentados en /openapi.json (varios POST/PATCH aparecían sin campos). Los SDKs y el portal se generan de ahí.
2026-09-06
- Agentes multicanal: phoneNumberIds en POST/PATCH /bot/agents (vacío = todos los canales, incluidos web chat e Instagram); GET /bot/agents?phoneNumberId= filtra por canal. phoneNumberId (uno solo) queda como atajo legado.
- Rendimiento por agente: GET /bot/agents/stats?dias= — conversaciones, respuestas, traspasos, escalamientos, ventas, citas, fallos, tokens y costo por agente y por canal. Lo anterior a la medición y lo del router sale como «sin atribuir».
- Conversaciones: PATCH /conversations/:id/agent { agentId } fija a mano qué agente del bot atiende (null = que decida el enrutador). El detalle de la conversación incluye ahora sus etiquetas.
- Enrutamiento: las routeTags son únicas (una etiqueta → un agente; 400 si choca) y el paso transfer_to_ai de los flujos acepta agentId para entregar a un agente concreto.
- Passkeys: se acepta el origen Android de la app (huella de firma de Play) además del origen web; el login con passkey funciona desde la app móvil.
2026-09-05
- Tiempo real: evento conversation.created para conversaciones nuevas en el canal del panel.
- Mensajes: las plantillas se envían siempre al teléfono; el BSUID del contacto se usa solo para mensajes de sesión.
2026-09-04
- Sesiones: GET /auth/me/sessions lista los dispositivos con sesión (una por sesión, marcando la actual); DELETE /auth/me/sessions cierra todas las demás y DELETE /auth/me/sessions/:id una en particular.
- Miembros: PATCH /memberships/:id/suspension { suspended } suspende o reactiva el acceso de un miembro sin eliminarlo; /memberships/me devuelve suspended.
- Ventas: POST /sales/einvoicing/license-orders/draft crea (o reutiliza) el pedido borrador de una venta de licencia sin emitir, para revisarlo y facturarlo después.
- Licencias: POST /license-delivery/orders/:orderId/keys/:keyId/replace reemplaza una llave entregada que no funcionó (revoca la vieja, entrega una nueva) y dispara el webhook license.key_replaced. Mensaje y correo de reemplazo configurables.
- Proveedores de IA: GET /bot/agents/modelos lista proveedores con sus modelos elegibles y si hay clave; las claves de Anthropic ligadas a identidad aceptan el Workspace ID (BYOK).
2026-09-03
- Licencias: venta de carrito desde el asesor — POST /license-delivery/conversations/:conversationId/sell-cart (varios productos, una sola orden; method NEQUI o TRANSFERENCIA), con precio editable por línea.
- Cobros: método TRANSFERENCIA (Bre-B a una llave, sin pasarela) junto a NEQUI y DAVIPLATA en el checkout y en la venta al chat.
- Webhooks salientes: conversation.assignment_changed (asignar, reasignar o soltar una conversación). sale.completed incluye las llaves entregadas y phoneNumberId, para hooks con scope por número.
2026-09-02
- Contactos: botExcluded en PATCH /contacts/:id — el bot no le responde nada a ese contacto (exclusión total).
- Webhooks salientes: POST /webhooks-outbound/:id/test envía un evento webhook.test para comprobar el endpoint; evento nuevo sale.completed para ventas de licencias.
2026-08-30
- Conversaciones: POST /conversations/:id/devolver-al-bot reactiva el bot tras un traspaso conservando el contexto.
- Bot: ajuste de organización botMemoryResetHours (cada cuánto el bot olvida el historial de una conversación) y catálogo de modelos ampliado; los modelos que deprecaron temperature (Claude 5.x, gpt-5.x) ya no fallan.
2026-08-28
- Conectores: módulo nuevo (/conectores) — WHMCS, Plesk, cPanel/WHM, WordPress/WooCommerce y HTTP genérico con catálogo cerrado de acciones, prueba de conexión y ejecución; identidad del cliente verificada por correo y acciones con confirmación del cliente o aprobación humana.
- Licencias: cobro por transferencia a una llave (Bre-B) sin pasarela, bandeja de pagos conciliada con el correo del banco y QR de la llave; webhooks license.transfer_confirmed y license.payment_unmatched.
2026-08-23
- Bot: GET /bot/salud (qué se está rompiendo y qué hacer), POST /bot/agents/:agentId/probador (conversar con un agente sin que salga nada al cliente), POST /bot/agents/:agentId/configurador (proponer cambios al prompt conversando) y catálogo de servicios /bot/servicios para sacar precios y enlaces del prompt.
- Flujos: GET /bot/flows/plantillas con flujos de ejemplo; pasos nuevos: enviar imagen, enviar documento, botón de enlace y transfer_to_ai (entregar la conversación a la IA).
2026-08-19
- Bot: librería de imágenes (/bot/images) que el agente IA, las auto-respuestas (acción «enviar imagen») y los flujos pueden enviar.
- Licencias: vigencia por licencia y aviso de renovación automático (GET/POST /license-delivery/renewal-template); la respuesta del cliente al aviso tiene consecuencia.
- Bot: activar una capacidad que el plan no incluye responde 400 con el nombre de la función.
2026-08-17
- Listas de contactos: importar un CSV dentro de una lista (POST /contact-lists/:id/import), quitar contactos en bloque (DELETE /contact-lists/:id/members) y por filtro (POST /contact-lists/:id/remove-by-filter).
- Versionado: GET /health devuelve la versión que está corriendo; todo el producto comparte un solo número desde la 2.1.0 (info.version de openapi.json va una versión por detrás del deploy).
- Planes: catálogo de funciones contratables; Catálogo de WhatsApp y Flows pasan a ser funciones del plan.
2026-08-14
- Jornada laboral — festivos y novedades: nueva API para el calendario de la organización. Alta masiva de festivos (POST /attendance/holidays, acepta varios de una vez), siembra del calendario oficial de un país y año (POST /attendance/holidays/seed) y novedades por persona —vacaciones, incapacidades, permisos— que tocan un rango de fechas (GET/POST/DELETE /attendance/leaves).
- Jornada laboral — forma de trabajo: cada miembro puede estar en turno fijo o por horas (GET /attendance/work-modes, PATCH /attendance/work-modes/:agentId). Quien trabaja por horas no acumula ausencias por no cubrir un horario: se le cuenta lo trabajado. También se agregaron atajos de período —quincena, últimos 15/30 días, mes— resueltos en la zona horaria de la organización (GET /attendance/period-presets).
- Bot: búsqueda semántica sobre la base de conocimiento (POST /bot/knowledge/search), que devuelve los fragmentos relevantes con su puntaje.
- Difusiones: reintento en sitio de los destinatarios fallidos de un envío (POST /broadcasts/:id/retry-failed), sin crear una difusión nueva.
2026-08-06
- Agentes de bot: la automatización pasa de un solo bot a agentes especializados (ventas, soporte…), cada uno con sus capacidades activables. CRUD completo en /bot/agents y catálogo de capacidades en /bot/agents/capabilities.
2026-08-05
- Ventas y facturación electrónica: módulo nuevo con 31 endpoints. Productos, pedidos y perfiles de facturación por contacto (/sales/products, /sales/orders, /sales/billing-profiles), emisión de facturas y notas crédito, PDF por token firmado, y configuración del emisor con varias empresas emisoras (/sales/einvoicing/companies). Los permisos se separan: `sales:write` para operar y `sales:config` para tocar la configuración fiscal.
2026-08-04
- Entrega de licencias digitales: módulo nuevo con 40 endpoints. Productos con variantes y pool de llaves, listas de precios, cupones, imágenes de producto, y el circuito completo de pedido → cobro → entrega automática por chat. Las llaves ya entregadas no se pueden borrar; al eliminar una variante sin ventas sus llaves libres vuelven al pool.
- Cobros con Wompi: webhook de conciliación con validación de firma, general (POST /webhooks/wompi) y con URL propia por organización (POST /webhooks/wompi/:orgId).
2026-07-24
- Agenda de citas: módulo nuevo con 20 endpoints. Reglas semanales de disponibilidad, días bloqueados por festivo o vacaciones, citas con filtros por rango/estado/contacto, y feed ICS público por token para suscribir la agenda desde cualquier calendario (GET /public/agenda/:token/calendar.ics).
- Agenda — Google Calendar: conexión por OAuth (/agenda/google/connect y /callback), estado de la conexión, envío de citas al calendario y bloqueo automático de los huecos ocupados.
- Agenda — reserva por WhatsApp Flow: se envía al contacto un Flow con selector de fecha nativo (POST /agenda/booking-flow/send) y su endpoint de datos para Meta.
2026-07-15
- Cobros con Nequi: pago push a la app del celular (POST /billing/nequi/push), QR dinámico por monto (POST /billing/nequi/qr), consulta de estado en vivo y cancelación del pago pendiente.
- Comprobantes de pago Bre-B/QR: la organización puede reportar un pago con su comprobante (POST /billing/payment-reports) y consultar la llave Bre-B de cobro para el modal.
- Facturación: cambio de intervalo mensual/anual desde la API (PATCH /billing/interval).
- Preferencias de interfaz por miembro (PATCH /memberships/me/preferences).
- Números: sincronización de coexistencia con Meta —contactos e historial— (POST /phone-numbers/:id/coexistence/sync), y reintento de suscripción a los webhooks de una WABA (POST /waba/:id/webhooks/resubscribe).
2026-06-24
- API v1.0.0: la referencia ahora cubre 68 módulos y ~400 endpoints. Se agregaron los módulos nuevos descritos abajo.
- Recordatorios de jornada: API para configurar los avisos de turno de cada agente (inicio de turno, hora de almuerzo, regreso y fin de jornada), con anticipación configurable y canales por navegador, panel o correo (GET/PUT /organizations/:orgId/shift-reminders).
- Equipo y turnos: endpoints de asistencia (entrada/salida, estado de trabajo) y de horarios de turno semanales por agente (franjas y almuerzo por día).
- Tiendas (e-commerce): API para conectar WooCommerce/Shopify, mapear eventos de tienda (pedido, pago, envío, carrito abandonado) a plantillas de WhatsApp y revisar el log de eventos. Incluye el catálogo de plantillas de tienda listas para crear/sincronizar.
- Avisos del sistema: endpoint para consultar los banners de estado activos que Mosend publica para todas las organizaciones.
- Web Chat: el canal ahora soporta horario de atención por canal y acciones fuera de horario (ocultar, mostrar aviso, pedir correo o dejar mensaje con confirmación).
- Mensajería: baja automática por palabra clave (opt-out) configurable por organización.
2026-06-06
- Documentos: nueva API para gestionar los archivos de la organización — subir y organizar en carpetas, papelera con restaurar/purgar, uso de almacenamiento, enviar un documento a una conversación de WhatsApp (POST /documents/:docId/send), guardar un adjunto entrante como documento (POST /documents/from-message) y edición en vivo con OnlyOffice (editor-config + callback de guardado).
- Páginas de enlaces (link-in-bio): API para crear páginas tipo Linktree — CRUD de páginas e ítems, subir avatar y portada, reordenar ítems, archivar y restaurar. El perfil público (GET /link-pages/p/:handle) y el redirect con seguimiento de clics (/go/:itemId) no requieren token.
- Soluciones: catálogo de soluciones instalables (por ejemplo e-commerce). Listar el catálogo, ver el detalle por slug, instalar en una organización (con selección de WABA) y desinstalar.
- Tareas: API de tareas tipo CRM — crear, listar con filtros, conteos para badges, tomar (claim), completar, editar y borrar. También se pueden listar por contacto.
- Notas de contacto: notas internas por contacto (crear, listar con las fijadas primero, editar y borrar).
- Créditos de IA (AI Power Pack): consultar el saldo con el desglose de uso de los últimos 30 días, ver el historial de transacciones y los paquetes de recarga disponibles.
- Conversaciones: el listado (GET /conversations) ahora pagina por cursor (parámetros take + cursor) y acepta búsqueda por contacto (search, sobre nombre, nombre de perfil o número). Se agregó la galería de multimedia por conversación (/:id/media y /:id/media/counts) y los enlaces detectados en los mensajes (/:id/links).
- Reportes de equipo: nuevos endpoints de desempeño — resumen semanal (reports/team/weekly), métricas por agente (reports/team/by-agent) y metas del equipo (reports/team/goals).
- Verificación de email: endpoints para verificar el correo (POST /auth/verify-email) y reenviar el código (POST /auth/resend-verification). Las API keys no requieren verificación de email.
2026-05-20
- API keys con scope por número (phoneNumberIds): puedes acotar una key a uno o más números de WhatsApp. Pensado para entregar una key a un bot externo o tercero y que solo opere su número — los envíos a números fuera de la lista devuelven 403 y los listados se filtran solos. Vacío = todos los números.
- Webhooks salientes con scope por número (phoneNumberIds): un webhook puede restringirse a números específicos. Eventos con phoneNumberId se entregan solo si el número está permitido; template.status (con wabaId) si la WABA tiene algún número permitido; eventos globales de org (billing/uso) requieren un webhook sin scope.
- Webhooks salientes: catálogo de eventos actualizado — conversation.handoff_requested (pedido de asesor humano), conversation.unanswered (mensaje sin respuesta humana tras N min, umbral configurable con unansweredThresholdMinutes 1–1440, default 2), conversation.updated, quality.changed. El bot IA, auto-respuestas y plantillas NO cuentan como respuesta humana para unanswered.
- Broadcasts: nuevos conteos agregados en GET /broadcasts/:id (counts: total, sent, delivered, read, failed, replied) y endpoint GET /broadcasts/:id/recipients?filter= (replied · read · delivered · sent · failed) con paginación por cursor para listar destinatarios por estado. repliedAt marca a quienes contestaron dentro de los 30 días del envío.
- Broadcasts: los broadcasts SCHEDULED ahora se ejecutan solos a la hora programada (job interno cada minuto). Ya no hace falta llamar /send manualmente.
- Handoff a humano vía API: guía y endpoint para que un bot externo derive una conversación a un asesor humano.
- Plantillas con botones dinámicos (URL con {{1}} o COPY_CODE): documentado el component button (sub_type url|copy_code) requerido en templateVariables para evitar el rechazo #131008 de Meta.
2026-05-15
- Modelo de facturación clarificado: Mosend cobra solo la suscripción del plan (vía Mercado Pago). Los costos de las conversaciones de WhatsApp los cobra Meta directamente a la tarjeta vinculada a la WABA del cliente. Para activar plantillas, cada cliente debe configurar su método de pago en business.facebook.com → su WABA → Configuración de pago. UI del dashboard y /billing actualizado para reflejarlo (notice, labels honestos, step extra en el onboarding).
- Traducción accionable de errores de Meta: cuando un mensaje falla (post-send, vía webhook de status), el motivo se persiste en Message.errorCode/errorTitle y se muestra en el inbox al hacer click sobre el icono ⚠ del estado. Cobertura inicial de ~30 códigos (#10, #100, #131042 billing, #131047 24h, #131049 capacity, #131056 opt-in, #132012-#132068 templates, etc.) con guías de cómo resolver cada uno.
- Knowledge base (RAG) del bot: API CRUD para subir documentos (PDF, DOCX, TXT, MD), tagging y reproceso. Backend extrae texto, divide en chunks de ~700 tokens y embedea cada uno con text-embedding-3-small (1536 dim) vía OpenAI u OpenRouter. La búsqueda por similitud usa pgvector con índice IVFFLAT y operador `<=>` (distancia coseno).
- Reactions: agregar/quitar emoji en mensajes propios o entrantes vía PUT/DELETE en /messages/:id/reactions.
- Stickers: librería de stickers por organización con upload (cualquier imagen → WebP 512×512), guardado desde mensajes entrantes y envío a conversaciones.
- WhatsApp Click-to-Chat Links: API para crear links cortos m.mosend.dev/<slug> con mensaje pre-cargado, QR code en PNG/SVG y analytics de clicks. Redirecciones públicas con tracking.
- Passkeys (WebAuthn/FIDO2): registro y login passwordless completos. Endpoints públicos para opciones/verificación de login + JWT-protegidos para CRUD de passkeys del usuario.
- Push notifications web: subscripciones VAPID, listado de dispositivos y endpoint de test.
- Add-ons de billing: API GET y POST preview para extra seats, WABAs y storage como upgrades a la carta sobre el plan base.
- Payment methods: tarjetas guardadas para auto-pay (CRUD + set-default + toggle de auto-pay).
- Credit notes (admin staff): notas de crédito staff-only con generación de PDF y endpoint de regeneración.
- Webhooks salientes: endpoint nuevo GET /webhooks-outbound/:id/deliveries para inspeccionar el log de entregas (status, attempt, body, response).
2026-05-03
- Web Chat embebible: canal configurable con widget JS, sesiones anónimas, identificadas y verificación OTP.
- Web Chat: historial de mensajes por visitante, vinculación de email post-sesión anónima.
- Web Chat: gateway WebSocket dedicado en namespace /wc para comunicación en tiempo real con el widget.
- Listas de contactos: CRUD completo con gestión de miembros (add/remove bulk).
- Broadcasts: envío masivo a listas de contactos con estados de envío y cancelación.
- Respuestas rápidas del inbox: atajos de teclado (/shortcut) con contador de uso.
- Bot auto-respuestas: reglas por KEYWORD, OUT_OF_HOURS, WELCOME, FALLBACK con acciones de texto, template, flujo o transferencia.
- Bot flujos secuenciales: diseñador de flujos conversacionales con pasos, variables y sandbox test-run.
- Bot configuración: modos OFF / RULES_ONLY / RULES_PLUS_AI_FALLBACK / AI_AGENT por número, toggle rápido desde el panel.
- Bot eventos: log de activaciones del bot por número para auditoría y debugging.
- Agente IA: modelo configurable, prompt de sistema, temperatura, max_tokens, clasificador de intenciones.
- Herramientas del agente IA: transfer_to_human y set_contact_attribute.
- Transcripción de audio entrante vía Groq Whisper.
- Planes: lista pública de planes, detalle por slug, cotización con cupón y cambio de plan self-service.
- Límites de plan: endpoint de uso vs cuotas por organización (para barras de progreso en el dashboard).
- Scope de WABA por usuario: visibilidad filtrada según asignaciones.
- Fijar conversaciones en inbox.
- Proveedores IA configurables por organización.
2026-05-01
- Plantillas: soporte completo para header media (IMAGE/VIDEO/DOCUMENT) con upload resumable a Meta.
- Plantillas: tipos nuevos de botones — FLOW, CATALOG, COPY_CODE.
- Plantillas: modo carrusel con hasta 10 tarjetas (IMAGE o VIDEO + body + 2 botones por tarjeta).
- Plantillas: componente LIMITED_TIME_OFFER (LTO).
- Números: soft-delete (archivar) + restaurar + hard-delete con guardas anti-pérdida de cargos.
- Embedded Signup: paso intermedio de selección manual de WABAs/números a importar.
- Webhooks salientes: firma HMAC SHA-256 obligatoria en producción.
- Auth: header X-Hub-Signature-256 validado en webhooks Meta antes de persistir.
2026-04-30
- Lanzamiento de la API REST pública.
- Integración Mercado Pago para suscripción de plan y recargas de saldo.