Fuente de verdad
Si eres una IA o un integrador automatico, usa estas fuentes en este orden:https://api.raul.ugps.io/api/openapi.json- La pestaña API generada por Mintlify
- Esta guia para criterios de uso y preferencias operativas
Reglas de consumo
- Prefiere siempre rutas RESTful cuando exista una alternativa equivalente.
- Si encuentras una ruta marcada como
legacy, usala solo por compatibilidad. - Interpreta autenticacion desde
security, DTOs y respuestas tipadas. - No asumas que
api.ugps.ioyapi.raul.ugps.ioson equivalentes. - La base operativa correcta para esta documentacion es
https://api.raul.ugps.io.
Flujo minimo de autenticacion
POST /api/better-auth/sign-in/email- Guardar el token del header de respuesta
set-auth-tokencomo Bearer - La sesion es deslizante (30 dias, sin refresh); no expira mientras haya actividad
- Cerrar sesion con
POST /api/better-auth/sign-outsi necesitas invalidarla
Servidor MCP
Raul expone un servidor MCP (Model Context Protocol) con sus operaciones como herramientas para agentes (Claude Code, Claude Desktop, claude.ai y cualquier cliente MCP con transporte Streamable HTTP). Es un servicio propio (su propio host, su propio App Service, sin proxy de la API por delante) que sirve su propio descubrimiento OAuth:- Login por persona: Better Auth, dentro de la API de Raul, es el
authorization server OAuth 2.1 de este MCP (plugin
@better-auth/mcp). Al conectar, el cliente descubre el authorization server vía/.well-known/oauth-protected-resource(en el mismo host del MCP) y cada usuario completa el login con su propia cuenta de Raul. No se comparten credenciales ni tokens: las herramientas corren con los permisos de quien se autenticó (por ejemplo,raul_get_business_dashboardresponde 403 si no es admin). - Token: el token de acceso es un JWT emitido por Better Auth con scope
raul:api, vida de 1 hora y refresh de 30 días. El MCP lo verifica localmente contra el JWKS del issuer (sin llamar a la API en cada request) y lo reenvía tal cual como bearer a la API — la API acepta ese mismo JWT en suSessionAuthGuard, así que no hay una segunda sesión ni traducción de credenciales de por medio. - Herramientas (
raul_*): 15 herramientas curadas — clientes, contactos, pipelines y oportunidades, cotizaciones (crear y generar PDF), bandeja omnicanal (correo y WhatsApp), tickets — más dos genéricas,raul_find_endpointyraul_call, que buscan y llaman cualquier endpoint del OpenAPI (793 endpoints) cuando no hay una herramienta curada para eso; las llamadas que escriben datos exigenconfirm: true. Fuera de alcance a propósito: el dominio de finanzas.
.mcp.json o un conector de Claude Desktop / claude.ai:
apps/raul-mcp-server del monorepo; la lista completa de herramientas y
sus endpoints está en su README.md.
Preferencias por modulo
Auth
- Usa
emailen el login (nousername). - No hay endpoint de refresh: si el token deja de servir, vuelve a hacer sign-in.
- Soporta gestion de usuarios, toggle de estado activo, avatar y reset de password.
Clients
- Muchas respuestas de clientes usan
snake_casepor compatibilidad con frontend legacy. - Para filtros amplios o listados grandes, prefiere endpoints paginados (
/all/paginated). - Soporta upload de logo por cliente.
Client Father
- Representa clientes padre que agrupan clientes hijos.
- Disponible con paginacion y con vista de suscripciones asociadas.
Client Addresses
- Las direcciones se agrupan por ciudad al consultarlas.
- CRUD disponible bajo
/clients/{clientId}/addressesy/client-addresses/{id}.
Contact
- Soporta paginacion, agrupacion por empresa, leads y busqueda por cliente.
- Permite merge de contactos duplicados (preview + merge).
- Functional roles se asignan por relacion contacto-cliente.
- Soporta upload y borrado de foto de contacto.
Vehicle / Asset
/vehicley/assetson alias equivalentes para algunos endpoints.- Soporta filtros y listado de nombres.
- Incluye catalogo de tipos de vehiculo (
/type_vehicle/all).
Activities
- Timeline de actividades por cliente, contacto o visita.
- Soporta archivos adjuntos (upload y download).
- Tipos de actividad son configurables via CRUD.
GPS Details
- Modulo principal de equipos GPS.
- Muchos endpoints tienen alias:
/gps_details/...y/gps/...son equivalentes. - Si necesitas listar grandes volumenes, prefiere cursor pagination (
/all/cursor) sobre offset pagination. - Si una ruta existe como
get/:idy como/:id, prefiere la RESTful. - Incluye conteo (
/count), resumen (/summary) y datos relacionados (/related-data).
GPS (sub-modulos)
- GPS Models: CRUD de modelos, soporta upload de ficha tecnica PDF.
- GPS Platforms: CRUD de plataformas GPS.
- GPS Inventory: Estados de inventario, incluye vista para visitas (
/get_x_visit). - GPS Brands: CRUD de marcas GPS.
- GPS Categories: CRUD de categorias GPS.
- GPS Status: Solo lectura, lista todos los estados.
- GPS History: Historial de un equipo GPS por ID.
Subscription Details
- CRUD de suscripciones con paginacion offset y cursor.
- Soporta resumen (
/summary), razones de cancelacion, y reversion de cancelacion. - Permite asignar suscripcion a cliente hijo y transferir entre clientes.
- Consulta por cliente con
/client/{client_id}.
Subscription Plan
- CRUD de planes de suscripcion.
Subscription Status / Currency
- Status: solo lectura, lista todos los estados de suscripcion.
- Currency: CRUD completo de monedas.
Catalogos auxiliares
- Rubro: Sectores de negocio (solo lectura).
- City: Ciudades con provincia y region (solo lectura).
- Type of Contract: CRUD de tipos de contrato.
- Cargo / RoleContact: CRUD de cargos y tipos de contacto.
- Communication: CRUD de tipos de comunicacion.
- PlataformClient: Actualizacion de IDs de cliente temporales.
Rutas legacy y duplicadas
Algunos modulos mantienen rutas legacy por compatibilidad. Cuando encuentres dos rutas con el mismo objetivo:- Prefiere la que diga
RESTful - Prefiere la que no incluya verbos en el path (
get,create,update,delete) - Usa la legacy solo si el consumidor actual depende de ella
Criterio de interpretacion
Si una operacion tiene descripcion breve:- usa
summarypara intencion - usa
descriptionpara restricciones y preferencia de uso - usa request/response DTOs para forma exacta de datos
- usa
ApiResponsey codigos HTTP para manejo de errores