v0.1.0 · Bridge en línea

Acceso unificado a la API de UTE Mueve

Esta es la dashboard del puente público a movilidadelectrica.ute.com.uy/api/v2. Gestiona el ciclo de vida del JWT anónimo internamente, valida las cédulas uruguayas con el dígito verificador y expone una superficie REST tipada con docs interactivas.

Lectura previa obligatoria · IDOR crítico documentado en VR-001

Acceso rápido

Parámetros de búsqueda de estaciones

Todos los parámetros son opcionales y aceptan arrays. Sin parámetros, la búsqueda devuelve todas las estaciones disponibles. La columna Valor muestra los códigos que acepta el SDK y los endpoints /stations/search y GET /stations?.... Las traducciones a las cadenas verbosas de UTE las maneja el bridge internamente.

connectorTypes — tipo de conector físico

Norma del enchufe del cargador. El vehículo determina cuál podés usar.

"Tipo 2"AC trifásico europeo (Mennekes). Carga lenta/media en casa o estaciones públicas AC.
"CCS2"DC rápido combinado europeo. El estándar dominante para autos modernos en Uruguay.
"CHAdeMO"DC rápido japonés (Nissan Leaf, etc.). Compatibilidad limitada.
"GB/T"DC rápido chino. Presente sobre todo en flotas asiáticas (BYD, etc.).

statuses — estado del conector ahora mismo

Estado reportado por la estación. Por defecto la búsqueda usa ['available'].

"available"Disponible: libre para iniciar una carga.
"charging"Cargando: actualmente en uso.
"no-comm"Sin Comunicación: la estación no reporta al servidor.
"unavailable"No Disponible: fuera de servicio.

paymentTypes — métodos de pago aceptados

Cómo se autentica el inicio de carga en la estación.

"rfid"Tarjeta RFID UTE (tarjeta física aproximada al lector).
"app"App móvil (UTE Mueve / código QR / carga remota).

cables — provisión de cable

Indica si la estación trae su propio cable o si hay que llevarlo.

"with"Con cable: la estación lo provee (más rápido enchufar).
"without"Sin cable: hay que conectar uno propio (típico Tipo 2 AC).

networks — operador de la red de carga

Operador o "red" a la que pertenece la estación. La tarifa y la app varían por red.

"PUBLIC"Pública: red propia de UTE, accesible para todos.
"TAXI"Taxi: red dedicada a la flota de taxis eléctricos.
"DMC"DMC: operador externo (EMSP). Roaming.
"ONE"eOne: operador externo (EMSP). Roaming.

powers — potencia en kW

Filtra por potencia del cargador. Pasá un array de números.

[0]Cualquier potencia (default si no se especifica).
[60]Solo cargadores rápidos de 60 kW.
[22, 50, 60]Cualquiera entre 22, 50 o 60 kW.

Defaults sin parámetros: todas las categorías marcadas excepto statuses, que se restringe a ['available']. Esto replica el comportamiento "Mostrar disponibles" de la app UTE Mueve.

Endpoints disponibles 18 rutas

MétodoRutaDescripciónTags
GET /configuration/appversion Versión mínima soportada de la app Configuration
POST /stations/search Búsqueda ergonómica con enums (CCS2, available, PUBLIC…) Stations
GET /stations?types=CCS2&statuses=available Búsqueda via query string (URL compartible) Stations
GET /stations/available Atajo: todas las estaciones disponibles ahora Stations
POST /station/statusFiltered Body UTE verbatim (power-user) Stations Advanced
POST /station/renewEnergy Energía renovable en un rango de fechas Stations
GET /customer/card/{userId} Tarjetas registradas del cliente Customer
POST /customer/card/register Registrar tarjeta (gated) Customer Writes
POST /customer/card/unregister Desregistrar tarjeta (gated) Customer Writes
GET /card/{userId} Lista de tarjetas UTE del cliente Cards
POST /card/accounts Buscar cuenta por CI o documento Accounts
GET /network/{userId} Redes habilitadas del cliente Networks
GET /remotecharge/user/{userId} Historial de cargas del cliente Remote Charge
GET /remotecharge/transaction/{transactionId} Detalle de una transacción de carga Remote Charge
POST /remotecharge/connector/status Estado de un conector en vivo Remote Charge
POST /remotecharge/start Iniciar carga remota (gated) Remote Charge Writes
POST /remotecharge/stop Detener carga remota (gated) Remote Charge Writes
POST /notification/register Registrar token FCM (gated) Notifications Writes

Los endpoints con etiqueta Writes requieren ENABLE_WRITE_ENDPOINTS=true en el deployment. Por defecto devuelven 503 WRITES_DISABLED.

Uso desde TypeScript

SDK @ute-mueve/sdk

Cliente isomorfo, cero dependencias en runtime, ESM + CJS.

import { UteMueveClient } from '@ute-mueve/sdk';

// Modo directo (Node.js) — SDK habla con UTE directamente,
// maneja el JWT anónimo y el uniquekeyuser por vos.
const client = new UteMueveClient();

// Browser? Usá el bridge para evitar CORS:
//   const client = new UteMueveClient({ baseUrl: 'https://ute-mueve.vercel.app' });

// Todas las estaciones disponibles ahora
const open = await client.stations.available();

// Filtros ergonómicos
const ccs2 = await client.stations.search({
  connectorTypes: ['CCS2', 'CHAdeMO'],
  statuses: ['available'],
  networks: ['PUBLIC'],
});

// A 5 km de Plaza Independencia (Haversine client-side)
const nearby = await client.stations.near({
  lat: -34.9061, lng: -56.1990, radiusMeters: 5000,
});

cURL

El bridge inyecta el token; el cliente sólo manda JSON.

# Round-trip vivo a UTE
curl https://ute-mueve.vercel.app/status

# Búsqueda ergonómica
curl -X POST https://ute-mueve.vercel.app/stations/search \
  -H 'content-type: application/json' \
  -d '{"connectorTypes":["CCS2","CHAdeMO"],"statuses":["available"],"networks":["PUBLIC"]}'

# Búsqueda via GET (URL compartible)
curl 'https://ute-mueve.vercel.app/stations?types=CCS2,CHAdeMO&statuses=available&networks=PUBLIC'

# Lookup por CI uruguaya
curl -X POST https://ute-mueve.vercel.app/card/accounts \
  -H 'content-type: application/json' \
  -d '{"docType":"CI","docNumber":"12345672","onlyUte":false}'

Aviso de seguridad

⚠️ IDOR crítico en la API upstream

El JWT anónimo de UTE no está atado a un usuario. Un atacante con conexión a internet y una cédula uruguaya válida puede leer nombre, apellido, BIN + últimos 4 dígitos de la tarjeta de crédito vinculada, mes/año de vencimiento, marca y payerCardId de Mercado Pago. Detalle completo: Reporte VR-001. Aviso técnico ampliado: SEGURIDAD.md.

Más recursos