📘 Documentación Oficial API REST v1.0 • Base URL: https://valuabot.com

API REST de Búsqueda y Valuación Prendaria — Valuabot

El API REST de Valuabot permite consultar en tiempo real o mediante caché inteligente de 15 días los precios de mercado, métricas de préstamo sugerido, pisos de liquidez inmediata y listados depurados de artículos a través de 7 canales simultáneos en México: Mercado Libre (filtrado con envío a CP 06700), Facebook Marketplace, Coppel, CeX México (WeBuy), Efectimundo, Maxilana y Fundación Dondé.

🧭 Guía Rápida: ¿Qué método llamar según tu caso de uso?
1. Valuación Completa en 1 Llamada
Obtén en una sola respuesta JSON los KPIs de préstamo sugerido, precio de mercado, resumen de los 7 canales y todas las publicaciones depuradas con filtro IQR.
GET | POST /api/v1/valuate/
2. Consultar un Solo Canal en Vivo
Si solo necesitas extraer precios de una fuente específica (ej. únicamente mercadolibre CP 06700, coppel, facebook, cex o maxilana).
GET /api/v1/channel/<canal>/
3. Búsqueda Asíncrona Progresiva
Para interfaces de usuario en vivo que desean mostrar resultados parciales conforme cada uno de los 7 scrapers termina en segundo plano.
POST /api/valuation/start/
4. Vitrinas Prendarias y Calibración
Consulta dedicada a casas de empeño (Efectimundo, Maxilana, Dondé), Retail Coppel y Piso CeX, evaluando el nivel de riesgo de un monto de préstamo (loan).
GET /api/commercial-catalogs/
🧪 Probador Interactivo del API (Live Playground) En Vivo

Ejecuta peticiones reales contra el servidor de Valuabot directamente desde aquí para inspeccionar la estructura JSON, latencia y encabezados.

URL generada: /api/v1/valuate/?product=play+station+5&loan=5000&refresh=false
GET POST 1. Búsqueda y Valuación Unificada Multicanal

Endpoint principal recomendado para consultar la valuación integral de cualquier artículo. Devuelve los KPIs prendarios (precio de mercado, préstamo sugerido mínimo y máximo, piso de compra en efectivo CeX, percentiles P15/P85), el resumen estadístico separado por cada uno de los 7 canales, la calibración de riesgo prendario opcional y la lista de publicaciones depuradas.

GET / POST https://valuabot.com/api/v1/valuate/?product={nombre_producto}&mode=sync&refresh=false
Parámetros de Consulta (Query String o JSON Body)
Parámetro Tipo Requerido Descripción
product (o q) string Requerido Nombre, marca y modelo del artículo a valuar. Ejemplo: "play station 5", "iphone 15 pro 256gb".
mode string Opcional "sync" (por defecto): Retorna la valuación consolidada completa en la misma llamada HTTP.
"async": Inicia la búsqueda en segundo plano y retorna un task_id inmediato para consultar en /api/valuation/status/<task_id>/.
refresh boolean Opcional false (por defecto): Si existe un snapshot válido en la caché de 15 días para la consulta canónica, responde en < 50 ms.
true: Ignora la caché y ejecuta los 7 scrapers en vivo en tiempo real.
channels string Opcional Filtra los artículos devueltos por uno o varios canales separados por coma. Valores admitidos: mercadolibre,facebook,coppel,cex,efectimundo,maxilana,donde.
condition string Opcional Filtra los artículos por condición: all (default), used (solo usados/seminuevos/reacondicionados) o new (solo nuevos).
order_by string Opcional Ordenamiento de la lista de artículos: price_asc (menor a mayor precio, default) o price_desc (mayor a menor precio).
loan number Opcional Monto de préstamo en MXN (ej. 5000). Si se envía un valor mayor a 0, la respuesta incluirá el nodo pawn_calibration con el análisis de LTV y semáforo de riesgo frente a casas de empeño y CeX.
limit integer Opcional Número máximo de artículos a retornar en el arreglo articles (ej. 25).
Ejemplos de Implementación
# Consulta síncrona (usa caché de 15 días si existe o calcula en vivo)
curl -X GET "https://valuabot.com/api/v1/valuate/?product=play+station+5&loan=5000" \
  -H "Accept: application/json"

# Consulta mediante POST enviando JSON y filtrando canales específicos
curl -X POST "https://valuabot.com/api/v1/valuate/" \
  -H "Content-Type: application/json" \
  -d '{
    "product": "play station 5",
    "refresh": false,
    "channels": "mercadolibre,facebook,coppel,cex,efectimundo,maxilana,donde",
    "condition": "all",
    "loan": 5000
  }'
Ejemplo de Respuesta JSON (200 OK)
{
  "status": "success",
  "query": "play station 5",
  "canonical_query": "playstation 5",
  "display_query": "Playstation 5",
  "from_cache": true,
  "cache_info": {
    "from_cache": true,
    "age_days": 0,
    "days_remaining": 15,
    "created_at": "14/10/2026"
  },
  "valuation_kpis": {
    "market_price": 7635,
    "suggested_sales_price": 6642.45,
    "loan_suggested_min": 4963,
    "loan_suggested_max": 5726,
    "cash_floor_cex": 5370,
    "precio_bajo_p15": 6500,
    "precio_promedio": 7635,
    "precio_alto_p85": 8900,
    "mean_price_used_c2c": 7635,
    "mean_price_new_retail": 10711,
    "mean_price_pawn_houses": 7540,
    "confidence": "Alta confianza",
    "total_articles_clean": 66,
    "total_articles_raw": 71,
    "outliers_excluded": 5,
    "featured_photo": "https://http2.mlstatic.com/D_NQ_NP_..."
  },
  "channels_summary": {
    "mercadolibre": { "name": "Mercado Libre (CP 06700)", "group": "retail_y_c2c", "count": 20, "avg_price": 8642, "min_price": 6200, "max_price": 11999 },
    "facebook":     { "name": "Facebook Marketplace", "group": "seminuevos_c2c", "count": 14, "avg_price": 7150, "min_price": 5500, "max_price": 8500 },
    "coppel":       { "name": "Coppel", "group": "retail_comercial", "count": 12, "avg_price": 12780, "min_price": 9499, "max_price": 15999 },
    "cex":          { "name": "CeX México", "group": "prendario_y_liquidez", "count": 9, "avg_price": 8833, "min_price": 7800, "max_price": 9800, "cash_floor_avg": 5370 },
    "efectimundo":  { "name": "Efectimundo", "group": "mercado_prendario", "count": 6, "avg_price": 7450, "min_price": 6800, "max_price": 7900 },
    "maxilana":     { "name": "Maxilana", "group": "mercado_prendario", "count": 3, "avg_price": 7466, "min_price": 7200, "max_price": 7599 },
    "donde":        { "name": "Fundación Dondé", "group": "mercado_prendario", "count": 2, "avg_price": 7899, "min_price": 7599, "max_price": 8199 }
  },
  "articles_count": 66,
  "articles": [
    {
      "id": "MAXI-410293",
      "id_valuabot": "MAXI-410293",
      "title": "Videojuego Play Station 5 Slim Sony, 1 Tb Sony",
      "price": 7200.0,
      "condition": "Usado",
      "state": "Maxilana",
      "city": "Palma Real (Guadalajara)",
      "photo": "https://...",
      "permalink": "https://www.maxilana.com/remates/...",
      "channel": "maxilana"
    }
  ]
}
GET 2. Consulta Directa por Canal Individual en Tiempo Real

Permite consultar de forma aislada y en tiempo real un único canal específico sin ejecutar los demás scrapers. Ideal cuando solo necesitas verificar disponibilidad en Mercado Libre con envío al CP 06700, precios retail en Coppel, piso de efectivo en CeX o remates en Maxilana / Efectimundo / Dondé.

GET https://valuabot.com/api/v1/channel/{channel_name}/?product={nombre_producto}
Valores válidos para {channel_name}
Identificador de Canal Fuente Características Especiales
mercadolibre Mercado Libre México Aplica cookie e hidratación de ubicación para el Código Postal 06700 (Roma Norte, CDMX), descartando publicaciones que no envían a dicha zona.
facebook Facebook Marketplace Extracción SSR/GraphQL paralela sin requerir sesión de usuario, con filtrado automático de accesorios/cajas vacías.
coppel Coppel Tienda en Línea Consulta el catálogo retail oficial de Coppel (Nuevos y Reacondicionados) para referencia de techo comercial.
cex CeX México (WeBuy) Devuelve tanto el precio de venta en tienda (price) como el pago inmediato en efectivo (cash_price / cash_floor_avg).
maxilana Maxilana Remates Ejecuta búsqueda multi-variante (ej. playstation 5 + play station 5) con deduplicación por ID y detalle de sucursal.
efectimundo Efectimundo Remates Extrae remates prendarios de vitrina con SKU y sucursal.
donde Fundación Dondé Extrae artículos en remate prendario de Tienda Dondé.
# Ejemplo 1: Consultar únicamente Mercado Libre con filtro de envío al CP 06700
curl -X GET "https://valuabot.com/api/v1/channel/mercadolibre/?product=play+station+5"

# Ejemplo 2: Consultar únicamente remates de Maxilana
curl -X GET "https://valuabot.com/api/v1/channel/maxilana/?product=play+station+5"

# Ejemplo 3: Consultar únicamente catálogo retail de Coppel
curl -X GET "https://valuabot.com/api/v1/channel/coppel/?product=play+station+5"
GET 3. Catálogos Prendarios, Retail Coppel y Calibración de Préstamo

Consulta especializada en las vitrinas comerciales de empeño (Efectimundo, Maxilana, Fundación Dondé), Retail (Coppel) y proveedor de liquidez (CeX). Calcula automáticamente la salida neta prendaria (descontando margen de regateo/comisión) y evalúa el nivel de riesgo de un préstamo mediante el parámetro loan.

GET https://valuabot.com/api/commercial-catalogs/?product={producto}&loan={monto_prestamo}&refresh=false
curl -X GET "https://valuabot.com/api/commercial-catalogs/?product=play+station+5&loan=5200&refresh=false"
POST GET 4. Motor Asíncrono Progresivo (Start & Status Polling)

Diseñado para aplicaciones frontend reactivas que requieren mostrar avances canal por canal en tiempo real conforme cada uno de los 7 hilos termina su extracción.

PASO 1 https://valuabot.com/api/valuation/start/?product={producto}&refresh=false
PASO 2 https://valuabot.com/api/valuation/status/{task_id}/
// Ejemplo de flujo asíncrono progresivo en JavaScript
async function valuarProgresivamente(producto) {
  const startRes = await fetch(`/api/valuation/start/?product=${encodeURIComponent(producto)}`);
  const startData = await startRes.json();

  // Si ya estaba en la caché de 15 días, retorna completado de inmediato
  if (startData.is_complete && startData.consolidated) {
    return startData.consolidated;
  }

  const taskId = startData.task_id;
  while (true) {
    await new Promise(r => setTimeout(r, 1200));
    const statusRes = await fetch(`/api/valuation/status/${taskId}/`);
    const statusData = await statusRes.json();

    console.log('Avance parcial por canal:', statusData.channels);
    console.log('Resumen preliminar:', statusData.summary);

    if (statusData.is_complete) {
      return statusData.consolidated;
    }
  }
}
GET 5. Catálogo de Canales y Endpoint de Compatibilidad Legacy
GET https://valuabot.com/api/v1/channels/

Devuelve la lista de los 7 canales activos en Valuabot, sus grupos de mercado (seminuevos_c2c, mercado_prendario, retail_comercial, prendario_y_liquidez) y la configuración de caché vigente.

Endpoint mantenido por retrocompatibilidad con integraciones previas (ej. /api/search/play%20station%205/price_ascend). Ahora está conectado al motor de 7 canales y a la caché inteligente de 15 días, devolviendo tanto el bloque clásico (search, offers, results) como los nuevos bloques valuation_kpis y channels_summary.

📊 Glosario de KPIs de Valuación y Reglas de Negocio
Campo en valuation_kpis Fórmula / Origen Uso Recomendado
market_price Media depurada (post-IQR) priorizando seminuevos/usados reales; si solo hay nuevos aplica factor 0.70x. Valor comercial de referencia en el mercado secundario mexicano.
loan_suggested_min / max Banda del 65% al 75% sobre la base de referencia prendaria depurada. Rango de préstamo prendario seguro con margen para recuperación e intereses.
cash_floor_cex Promedio del campo cash_price pagado en efectivo por CeX México. Piso de liquidez inmediata: monto que se obtiene vendiendo la prenda de contado el mismo día en mostrador CeX.
precio_bajo_p15 / precio_alto_p85 Percentiles 15 y 85 de la muestra limpia (sin valores atípicos). Banda estadística de negociación según estado estético y accesorios incluidos.
🛡️ Códigos de Respuesta HTTP y Política de Caché
Código HTTP Estado Explicación
200 OK success / completed La búsqueda o valuación se procesó exitosamente (desde caché de 15 días o scraping en vivo).
400 Bad Request error Falta el parámetro obligatorio product o se especificó un nombre de canal inválido.
404 Not Found error El task_id consultado en /api/valuation/status/<task_id>/ no existe o expiró.
500 Internal Error error Excepción no controlada en una fuente externa; el detalle técnico se incluye en el campo message.