Comenzar
Limitación de solicitudes
Entiende los límites de uso, la gestión de cuotas y la facturación por excedentes en Rueda Lens.
Rueda Lens aplica políticas de uso justo mediante cuotas basadas en suscripción y facturación por excedentes.
Planes de suscripción
Los planes incluyen distintos niveles de cuota y funcionalidades. Para consultar los precios actuales y los detalles de cada plan, visita el panel de facturación.
Funcionalidades de los planes
- Sandbox: Cuota limitada para pruebas y desarrollo (sin soporte de excedentes)
- Starter: Plan listo para producción con cuota moderada y soporte de excedentes
- Pro: Plan de alto volumen con una cuota generosa y tarifas de excedentes competitivas
- Enterprise: Cuotas y precios personalizados para despliegues a gran escala
Actualiza tu plan en cualquier momento
Puedes subir o bajar de plan en cualquier momento desde el panel de facturación. Los cambios se aplican de forma inmediata.
Cómo funcionan las cuotas
Reinicio del periodo de facturación
Las cuotas se reinician en función de tu periodo de facturación de la suscripción (normalmente mensual desde la fecha de inicio de la suscripción).
Por ejemplo, si te suscribiste el día 15, tu cuota se reinicia el día 15 de cada mes.
Qué cuenta para tu cuota
| Solicitud | ¿Cuenta? |
|---|---|
POST /v1/analyze (correcta) | Sí |
POST /v1/analyze (fallida) | Sí |
GET /v1/health | No |
Las solicitudes fallidas cuentan
Tanto las solicitudes de análisis correctas como las fallidas cuentan para la cuota, ya que consumen recursos de procesamiento.
Facturación por excedentes
Los planes con soporte de excedentes (Starter, Pro, Enterprise) permiten superar la cuota base:
- Superas la cuota de tu suscripción durante el periodo de facturación
- Las solicitudes adicionales se cobran según la tarifa de excedente del plan
- Los cargos por excedentes aparecen en la siguiente factura
Plan Sandbox
Sandbox no admite excedentes. Las solicitudes a la API devuelven un error 429 una vez agotada la cuota.
Respuestas por límite de uso
Agotamiento de cuota (Sandbox)
Cuando superas tu cuota mensual (solo en el plan Sandbox, ya que los planes de pago admiten excedentes):
{ "success": false, "error": { "code": "QUOTA_EXCEEDED", "message": "Monthly quota exceeded" }, "timestamp": "2026-02-08T12:00:00.000Z" }
Límite de ráfaga
Cuando envías demasiadas solicitudes en un periodo corto:
{ "success": false, "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded" }, "timestamp": "2026-02-08T12:00:00.000Z" }
Supervisión del uso
Puedes seguir tu consumo en tiempo real desde el panel. El panel muestra el uso del periodo actual, la cuota restante y las fechas del periodo de facturación.
Notificaciones por correo electrónico
Recibirás alertas automáticas por correo cuando te acerques o superes tu cuota:
| Umbral | Notificación |
|---|---|
| 80% | Aviso — te estás acercando al límite de cuota |
| 90% | Aviso urgente — la cuota está a punto de agotarse |
| 100% | Cuota agotada (solo plan Sandbox) |
Buenas prácticas
Supervisar el uso en el panel
Controla tu consumo en tiempo real desde la página de analítica del panel:
- Uso del periodo de facturación actual
- Cuota restante
- Tendencias de uso a lo largo del tiempo
- Fechas del periodo de facturación
Implementar gestión de errores
async function analyzeVehicle(tireImage, carImage, apiKey) { try { const response = await fetch('https://api.ruedalens.com/v1/analyze', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ tireImage, carImage }), }); const data = await response.json(); if (response.status === 429) { // Quota exceeded - notify user or queue for later console.error('Quota exceeded:', data.error.message); return null; } if (!response.ok) { throw new Error(data.error?.message || 'Analysis failed'); } return data; } catch (error) { console.error('API request failed:', error); throw error; } }
Cachear resultados
Evita solicitudes redundantes almacenando en caché los resultados de los análisis. Por ejemplo, guarda los resultados usando un hash de la imagen como clave:
import crypto from 'crypto'; function hashImage(imageBuffer) { return crypto.createHash('sha256').update(imageBuffer).digest('hex'); } // Use a cache (Redis, in-memory, etc.) to avoid duplicate analyses const cache = new Map(); async function cachedAnalyze(tireImage, carImage, apiKey) { const cacheKey = `${hashImage(tireImage)}_${hashImage(carImage)}`; if (cache.has(cacheKey)) { return cache.get(cacheKey); } const result = await analyzeVehicle(tireImage, carImage, apiKey); cache.set(cacheKey, result); return result; }