RemaFleet API v1
Documentación del API de RemaFleet
El API REST de RemaFleet expone toda la plataforma de gestión de flotas: telemetría en tiempo real, historial de recorridos, comandos a dispositivos, video a bordo, geocercas, alarmas, vehículos y reportes. Todo lo que ves en la consola está disponible por API.
Todas las peticiones se hacen sobre HTTPS contra el nodo de tu cuenta y devuelven JSON. El API es multi-tenant: cada API key opera sobre los datos de su tenant (o de todos, si es una key global).
$BASE_URL.
La especificación completa está disponible en formato
OpenAPI 3.1 en $BASE_URL/_openapi.yaml, lista para
importar en Postman, Insomnia o para generar clientes tipados.
Autenticación
El API acepta dos credenciales, ambas enviadas en el header
Authorization: Bearer:
API keys rfsk_live_*
La credencial recomendada para integraciones servidor-a-servidor. Cada key lleva scopes granulares y existe en dos variantes:
- Per-Tenant — toda consulta queda automáticamente acotada al tenant de la key. Es la variante que se entrega a clientes e integradores.
-
Global — cross-tenant, para operadores de la plataforma. Puede
acotarse a un tenant con
?tenant_id=<id>.
Trata tu key como una contraseña: guárdala en un gestor de secretos, no la incluyas en código cliente (apps móviles, navegador) y rótala si sospechas exposición.
JWT de RemaFleet Auth
Los tokens emitidos por el servidor de identidad de RemaFleet (ES256) también son
válidos — la URL de autenticación de tu cuenta también viene en tu panel de
cliente. El claim dom define el tenant y los scopes
gw:<recurso>:<acción> autorizan cada endpoint. Es el
mecanismo que usa la propia consola; útil si tu integración actúa en nombre de un
usuario.
Scopes y permisos
Cada endpoint exige un scope con el formato
<recurso>:<acción> (por ejemplo
devices:read). Las API keys llevan los scopes tal cual; en un JWT los
mismos scopes van con el prefijo gw: (por ejemplo
gw:devices:read).
Recursos disponibles:
| Recurso | Cubre |
|---|---|
devices | Dispositivos, telemetría en vivo, tracking, eventos, viajes, acceso por usuario |
multimedia | Fotos/video del dispositivo, streams JT1078, HLS, grabaciones |
geofences | Geocercas, asignaciones y eventos de entrada/salida |
alarms | Alarmas, reglas, reconocimiento, monitoreo, destinatarios de notificación |
synthetic | Configuración de detectores de alarmas sintéticas |
vehicles | Vehículos, fotos, conductores asignados, dashboard de flota |
vehicle-groups | Grupos de vehículos y su membresía |
personal | Personal/conductores y sus grupos |
workshops | Talleres, personal de taller y mantenimientos |
projects | Proyectos y sus vehículos |
crm | Clientes y estado de cartera (mora) |
reports | Reportes operativos y ejecutivos (solo :read) |
sms | Envío e historial de SMS |
tenants | Administración de tenants (keys globales) |
users | Administración de usuarios (keys globales) |
Las acciones son read y write. Pide solo los scopes que tu
integración necesita: una key de solo lectura de flota funciona perfectamente con
devices:read + vehicles:read.
Convenciones
Envelope de respuesta
Toda respuesta viene envuelta en un objeto con status —
"OK" en éxito, "ER" en error — y el resultado en
payload.
Fechas
Los timestamps se aceptan y devuelven en ISO 8601 con zona horaria
(2026-07-18T14:30:00Z). Los rangos usan los parámetros
since / until; cuando se omiten, el default habitual es el
día en curso en la zona horaria del tenant.
Paginación
Los listados aceptan limit y offset y devuelven
total para que puedas paginar. El limit máximo típico es
200 (hasta 1 000 en tracking).
Filtro por tenant
Con una key Per-Tenant no necesitas hacer nada: todo queda acotado
a tu tenant. Con una key Global, agrega
?tenant_id=<id> para acotar una consulta.
Manejo de errores
Los errores usan códigos HTTP estándar y un código de máquina estable
E_* en el payload. Maneja el código de máquina, no el mensaje (que
puede cambiar).
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | E_VALIDATION | Parámetros o body inválidos |
| 401 | E_UNAUTHORIZED | Credencial ausente, inválida o revocada |
| 403 | E_FORBIDDEN | La credencial no tiene el scope requerido |
| 404 | E_NOT_FOUND | El recurso no existe o no pertenece a tu tenant |
| 404 | E_SHARE_INVALID | Token de ubicación compartida inválido o expirado |
| 409 | E_MANAGED_BY_AUTH | El recurso (vehículos/grupos) se gestiona desde la plataforma, no por este API |
| 409 | E_PHOTO_LIMIT | El vehículo ya tiene el máximo de fotos (3) |
| 409 | E_PERSONAL_DUPLICATE_ID | La cédula ya está asignada en el tenant |
| 409 | E_PROJECT_DUPLICATE_CODE | El código de proyecto ya existe en el tenant |
| 409 | E_ALREADY_ASSIGNED | La asignación ya existe (p. ej. personal en taller) |
| 503 | E_STORAGE_DISABLED | Almacenamiento de archivos no configurado en el nodo |
Model Context Protocol
Servidor MCP — agentes de IA
RemaFleet expone toda la plataforma como un servidor MCP: un agente de IA (Claude, Codex, Gemini, Grok…) se conecta y opera la flota en lenguaje natural — mapa en vivo, alarmas, geocercas, vehículos, comandos y reportes.
<BASE_URL sin /api/v1>/mcp — p. ej.
$NODE_URL/mcp. Transporte Streamable HTTP (JSON-RPC 2.0
sobre POST). Tu URL base se entrega en el panel de cliente.
Seguridad: opera con los permisos del usuario
Cada llamada de una tool se ejecuta internamente contra el mismo API
/api/v1 reenviando tu credencial, así que toda la autorización
existente aplica sin excepción: scopes por recurso, aislamiento por tenant y
allowlist de vehículos por usuario. El agente solo ve y ejecuta lo que el rol
de esa credencial permite — la lista de tools se filtra por scopes.
Autenticación
Dos credenciales, ambas en el header Authorization: Bearer:
- Token de usuario (recomendado para agentes) — un JWT de larga duración que el usuario genera desde la app (Configuración → Usuarios → llave Tokens de acceso). Actúa como ese usuario, con sus permisos.
-
API key
rfsk_live_*— para integraciones M2M (PerTenant o Global), con sus scopes granulares.
Conectar tu agente
Genera un token desde la app y agrégalo a tu cliente con un solo comando. El token se muestra una vez; guárdalo como un secreto.
Cualquier cliente compatible con MCP sobre HTTP funciona. Abajo, los comandos actuales de los principales:
Catálogo de tools
26 herramientas cubren el flujo operativo completo. Cada una exige el mismo scope que
su endpoint del API — si tu credencial no lo tiene, la tool ni siquiera aparece en
tools/list.
| Tool | Qué hace | Scope |
|---|---|---|
get_fleet_live | Snapshot de toda la flota (posición, estado) | devices:read |
list_devices | Lista dispositivos | devices:read |
get_device | Detalle de un dispositivo | devices:read |
get_device_summary | Resumen del rango (km, viajes, eventos) | devices:read |
get_device_tracking | Puntos de recorrido | devices:read |
get_device_events | Historial de eventos | devices:read |
get_device_trips | Viajes agregados | devices:read |
get_event_types | Catálogo de tipos de evento | alarms:read |
share_device_location | Genera enlace público temporal | devices:read |
list_device_commands | Comandos disponibles del dispositivo | devices:read |
send_device_command acción | Ejecuta un comando (corte de motor…) | commands:send |
get_command_log | Historial de comandos y ACKs | multimedia:read |
list_alarms | Lista alarmas | alarms:read |
get_monitoring_summary | Resumen del centro de monitoreo | alarms:read |
ack_alarm | Reconoce una alarma | alarms:write |
ack_all_alarms acción | Reconoce todas las alarmas | alarms:write |
list_geofences | Lista geocercas | geofences:read |
get_geofence | Detalle + geometría | geofences:read |
list_geofence_events | Entradas/salidas de geocercas | geofences:read |
list_vehicles | Lista vehículos | vehicles:read |
get_vehicle | Ficha del vehículo | vehicles:read |
get_fleet_dashboard | Estado agregado + rankings | vehicles:read |
list_vehicle_groups | Grupos de vehículos | vehicle-groups:read |
list_personal | Personal / conductores | personal:read |
list_maintenance | Mantenimientos | workshops:read |
generate_report | Genera reportes operativos | reports:read |
Dispositivos
Un dispositivo es la unidad GPS o cámara instalada en el vehículo,
identificada por su IMEI. Expone su protocolo, SIM (msisdn/iccid),
modelo, estado de conexión y el vehículo asignado.
- #GET
/devicesLista dispositivos (búsqueda, paginación, orden)
- #GET
/devices/{imei}Detalle de un dispositivo
- #PUT
/devices/{imei}Edita nombre, tenant, SIM, modelo y comentarios
- #GET
/devices/{imei}/stateSnapshot del estado runtime
- #GET
/device-modelsCatálogo de modelos por marca
- #GET
/user-access/{userId}/devicesAcceso a dispositivos de un usuario
- #PUT
/user-access/{userId}/devicesDefine el acceso (todos o lista de IMEIs)
Scopes: devices:read · devices:write
Flota en vivo
El endpoint estrella para mapas y tableros: toda la flota en un solo request con posición, velocidad, rumbo, ignición, dirección en texto (reverse geocoding) y el vehículo asignado.
- #GET
/devices/liveSnapshot de todos los dispositivos
- #GET
/devices/{imei}/summaryResumen del rango: distancia, viajes, velocidad y eventos
El campo motionState es el estado operativo calculado por el servidor —
el mismo que colorea la consola:
| Valor | Significado |
|---|---|
moving | En movimiento |
idle | Ralentí: motor encendido, detenido > 5 min |
off | Motor apagado |
disconnected | Sin reportar hace más de 3 h |
Scope: devices:read
Historial y viajes
Cada posición reportada queda almacenada en una base de series de tiempo. Sobre ese historial el servidor agrega viajes (recorridos entre encendido y apagado) y eventos del dispositivo.
- #GET
/devices/{imei}/trackingPuntos de tracking del rango (hasta 1 000 por página)
- #GET
/devices/{imei}/tripsViajes agregados
- #GET
/devices/{imei}/eventsHistorial de eventos (filtrable por tipo)
- #GET
/event-typesCatálogo de tipos de evento observados
Scope: devices:read
Compartir ubicación
Genera un enlace público temporal para compartir la ubicación en vivo de un vehículo — por ejemplo con un cliente que espera una entrega. El token expira solo (1 h por defecto, máximo 7 días) y el endpoint de consulta no requiere autenticación.
Scope: devices:read (solo para generar)
Comandos
Envía comandos al dispositivo — corte de motor, reinicio, configuración — por GPRS (conexión en vivo) o por SMS como respaldo. El catálogo de comandos depende del protocolo de cada dispositivo; consúltalo antes de ejecutar.
- #GET
/devices/{imei}/commandsComandos disponibles para el dispositivo
- #POST
/devices/{imei}/commandsEjecuta un comando (GPRS o SMS, con cola si está offline)
- #GET
/devices/{imei}/command-logHistorial de comandos y respuestas (ACKs)
Scopes: devices:read · devices:write
command-log
para verificar el ACK del dispositivo.
Multimedia
Fotos, clips de video y audio capturados por las cámaras a bordo. Los archivos se almacenan en la nube y se sirven mediante URLs prefirmadas de corta duración (5 min) — pídelas al momento de mostrar el archivo.
- #GET
/devices/{imei}/multimediaLista assets del dispositivo (por canal, tipo y rango)
- #GET
/multimedia/{id}Metadatos de un asset
- #GET
/multimedia/{id}/urlURL prefirmada de descarga (TTL 5 min)
- #DELETE
/multimedia/{id}Borrado lógico del asset
- #POST
/devices/{imei}/multimedia/requestPide a la cámara subir video de un canal/alarma
- #GET
/devices/{imei}/recordingsLista de grabaciones en memoria de la cámara (día + canal)
Scopes: multimedia:read · multimedia:write
Video en vivo (HLS)
Las cámaras JT1078 transmiten al gateway, que transcodifica a HLS reproducible en cualquier navegador o player nativo. También puedes grabar la transmisión en curso y guardarla como asset multimedia.
- #GET
/devices/{imei}/hls/{channel}/index.m3u8Playlist HLS del stream en vivo/playback
- #GET
/devices/{imei}/streamsStreams RTP activos del dispositivo
- #POST
/devices/{imei}/streams/teardownCierra el stream y el transcodificador de un canal
- #POST
/devices/{imei}/multimedia/recording/startEmpieza a grabar el stream activo
- #POST
/devices/{imei}/multimedia/recording/stopDetiene y persiste la grabación
- #GET
/devices/{imei}/multimedia/recording/statusEstado de la grabación de un canal
Scopes: multimedia:read · multimedia:write
index.m3u8?api_key=rfsk_live_…. El playlist responde
503 mientras el stream arranca — reintenta con backoff.
Alarmas
Las alarmas son los eventos que exigen atención: pánico, exceso de velocidad,
geocerca violada, desconexión. Cada una tiene severidad
(critical · high · normal · low)
y un flujo de reconocimiento con auditoría de quién la atendió.
- #GET
/alarmsLista alarmas (severidad, IMEI, ack, rango)
- #GET
/alarms/{time}/{id}Detalle de una alarma
- #POST
/alarms/{time}/{id}/ackReconoce la alarma
- #POST
/alarms/{time}/{id}/unackRevierte el reconocimiento
- #GET
/monitoring/summaryResumen del centro de monitoreo (importantes, comunes, desconexiones)
- #POST
/monitoring/ack-allReconoce todas (opcionalmente por severidad)
Scopes: alarms:read · alarms:write
Reglas de alarma
Las reglas convierten eventos crudos en alarmas: definen la fuente
(device_event, geofence_event, trip), el tipo
de evento, condiciones, severidad, canales de notificación y un
cooldown para no inundar de alertas repetidas.
- #GET
/alarm-rulesLista reglas (por fuente, tipo, activas)
- #POST
/alarm-rulesCrea una regla
- #GET
/alarm-rules/{id}Detalle
- #PUT
/alarm-rules/{id}Actualiza
- #DELETE
/alarm-rules/{id}Elimina
- #GET
/event-typesCatálogo de tipos de evento para construir reglas
Scopes: alarms:read · alarms:write
Alarmas sintéticas
Además de las alarmas que reporta el hardware, el servidor deriva alarmas de 32 detectores inteligentes que cruzan telemetría, geocercas y cartera: movimiento nocturno, ralentí excesivo, manipulación de GPS, unidades en mora que salen de zona, y más. Cada detector se activa y configura por tenant.
- #GET
/synthetic-alarms/catalogCatálogo de los detectores y sus parámetros
- #GET
/synthetic-alarmsConfiguración vigente del tenant
- #PUT
/synthetic-alarms/{detectorKey}Activa/configura un detector
Scopes: synthetic:read · synthetic:write
Notificaciones
Los destinatarios definen a quién y por qué canal se entregan las alarmas: correo, SMS, Telegram o push. Cada destinatario puede llevar filtros por vehículo y tipo de alerta — sin filtros recibe todo; con reglas, solo lo que coincida con alguna.
- #GET
/recipientsLista destinatarios (por canal, activos)
- #POST
/recipientsCrea destinatario (canal + target + filtros)
- #PUT
/recipients/{rid}Actualiza label, target, filtros o estado
- #DELETE
/recipients/{rid}Elimina
- #POST
/recipients/{rid}/testEnvía un mensaje de prueba por el canal
Scopes: alarms:read · alarms:write
Geocercas
Polígonos GeoJSON — zonas seguras, zonas rojas, patios, rutas — que generan eventos
de enter/exit por cada dispositivo asignado. Esos eventos
alimentan reglas de alarma y reportes.
- #GET
/geofencesLista geocercas
- #POST
/geofencesCrea (GeoJSON Polygon/MultiPolygon/Feature)
- #GET
/geofences/{id}Detalle con geometría
- #PUT
/geofences/{id}Actualiza
- #DELETE
/geofences/{id}Archiva (borrado permanente:
/permanent) - #POST
/geofences/{id}/assignmentsAsigna dispositivos por IMEI
- #DELETE
/geofences/{id}/assignments/{imei}Desasigna (emite salida sintética si estaba dentro)
- #GET
/geofence-eventsFeed global de eventos enter/exit
Scopes: geofences:read · geofences:write
Vehículos
El vehículo es la ficha de negocio del activo: placa, marca, modelo, VIN, tipo, grupos y los dispositivos que lo reportan (con uno principal). El detalle incluye fotos con URLs prefirmadas y los conductores asignados con horario.
409 E_MANAGED_BY_AUTH. Fotos, conductores y dashboard sí se gestionan
aquí.
- #GET
/vehiclesLista vehículos (búsqueda por nombre/placa/código)
- #GET
/vehicles/{id}Detalle: fotos, devices y device principal
- #GET
/vehicles/dashboardDashboard de flota: estado + rankings del día
- #GET
/vehicle-typesCatálogo de tipos (iconos)
- #GET
/vehicles/{id}/photosFotos (máx 3, presigned URLs)
- #POST
/vehicles/{id}/photosSube foto (multipart, máx 10 MB)
- #GET
/vehicles/{id}/driversConductores asignados con horario
- #POST
/vehicles/{id}/driversAsigna conductor (cíclico semanal o fecha única)
Scopes: vehicles:read · vehicles:write
Grupos de vehículos
Agrupaciones N:M para organizar la flota — por región, cliente o tipo de operación.
Son el alcance típico de los reportes (group_id).
409 E_MANAGED_BY_AUTH.
- #GET
/vehicle-groupsLista grupos con conteo de vehículos
- #GET
/vehicle-groups/{id}Detalle
- #GET
/vehicle-groups/{id}/vehiclesVehículos del grupo
Scope: vehicle-groups:read
Personal y conductores
El registro de personal: conductores, mecánicos y personal operativo, con cédula (única por tenant), licencias con vencimiento, foto y grupos. Se enlaza con la flota mediante la asignación conductor↔vehículo con horario.
- #GET
/personalLista personal (búsqueda por nombre/cédula/teléfono)
- #POST
/personalCrea (409 si la cédula ya existe)
- #GET
/personal/{id}Detalle con foto prefirmada
- #PUT
/personal/{id}Actualiza
- #DELETE
/personal/{id}Baja lógica
- #POST
/personal/{id}/photoSube/reemplaza la foto (multipart)
- #GET
/personal/dashboardTotales, licencias por vencer y ranking por grupo
- #GET
/personal-groupsGrupos de personal (CRUD + miembros)
Scopes: personal:read · personal:write
Talleres y mantenimiento
Talleres físicos (opcionalmente ligados a una geocerca), su personal con rol (responsable, jefe de taller, mecánico) y la bitácora de mantenimientos por vehículo: 19 tipos de servicio, costo, mecánico y programación del próximo servicio por fecha u odómetro.
- #GET
/workshopsLista talleres
- #POST
/workshopsCrea taller
- #GET
/workshops/dashboardResumen: talleres, vehículos, mantenimientos
- #POST
/workshops/{id}/vehiclesAsigna vehículos (M:N)
- #POST
/workshops/{id}/personnelAsigna personal con rol
- #GET
/maintenanceLista mantenimientos (por estado, vehículo, tipo)
- #POST
/maintenanceRegistra un mantenimiento
- #PUT
/maintenance/{id}Actualiza (p. ej. cierra con
status: "fin")
Scopes: workshops:read · workshops:write
Proyectos
Agrupa vehículos por obra o contrato, con fechas y geocerca opcional. El dashboard del proyecto entrega kilómetros y horas por vehículo en el rango — ideal para facturar maquinaria por uso real.
- #GET
/projectsLista proyectos
- #POST
/projectsCrea (código único por tenant)
- #GET
/projects/next-codeAutosugerencia del siguiente código
- #POST
/projects/{id}/vehiclesAsigna vehículos (M:N)
- #GET
/projects/{id}/dashboardKm + horas por vehículo en el rango
Scopes: projects:read · projects:write
CRM y cartera
Sincroniza tu CRM con la flota: clientes y su estado de cartera (mora) cruzados con los vehículos por placa normalizada (minúsculas, sin espacios extra). Con la cartera al día, los detectores de mora pueden alertar cuando una unidad morosa sale de zona o circula de noche.
- #GET
/clientsLista clientes
- #POST
/clientsCrea cliente
- #PUT
/clients/{id}Actualiza
- #GET
/business-statusEstado de cartera de todas las placas
- #PUT
/business-status/{plate}Actualiza el estado de una placa
- #POST
/business-status/bulkCarga masiva — el webhook para tu CRM
Scopes: crm:read · crm:write
Reportes
Los mismos reportes de la consola, por API: el servidor calcula y devuelve
filas listas para renderizar o exportar. El alcance se define por
vehicle_ids (CSV) o group_id, con rango de
1 día a 1 mes.
- #GET
/reports/{type}Genera el reporte del tipo indicado
Tipos disponibles:
Scope: reports:read
SMS
El gateway integra proveedores de SMS para despertar dispositivos, enviar comandos fuera de cobertura GPRS o notificar. Puedes enviar mensajes arbitrarios y consultar el historial con su estado de entrega.
- #POST
/smsEnvía un SMS
- #GET
/smsHistorial (por teléfono, IMEI, estado, rango)
- #GET
/sms/{id}Detalle de un envío
- #GET
/sms-providersProveedores visibles para la key
Scopes: sms:read · sms:write
Tenants y usuarios
Endpoints de administración de la plataforma, pensados para partners white-label. La creación y el borrado de tenants, y toda la gestión de usuarios, exigen una key Global; una key Per-Tenant solo lee su propio tenant.
- #GET
/tenantsLista tenants
- #POST
/tenantsCrea tenant (Global)
- #GET
/tenants/{id}/devicesDispositivos del tenant
- #GET
/usersLista usuarios (Global)
- #POST
/usersCrea usuario (Global)
- #POST
/users/{id}/passwordCambia contraseña (Global)
Scopes: tenants:* · users:*