Con una sola request obtenés todo el catálogo mayorista en tiempo real:
precios en ARS y USDT, stock, tiempos de entrega, ofertas con su fecha de
vencimiento y las portadas de cada juego.
public_catalog_v1 · REST · JSON
1Endpoint y autenticación
Dato
Valor
URL
https://mayoristas.epicodes.com.ar/api.php
Método
POST
Content-Type
application/json
API Key
Te la pasamos por privado. Va en el body de cada request.
⚠️ Usá el subdominio. La URL correcta es
mayoristas.epicodes.com.ar. La vieja
epicodes.com.ar/mayoristas/... ya no funciona.
Número de versión del catálogo (para caché, ver punto 6).
catalog_version_iso
Fecha/hora de esa versión.
ts
Timestamp de la respuesta.
rate_limit
Tu estado de límites (ver punto 7).
items
Array con todos los productos.
4Campos de cada producto
Identificación
Campo
Tipo
Descripción
title
string
Nombre del juego.
platform
string
"PS4" o "PS5".
license
string
"Primario" o "Secundario".
Precio
Campo
Tipo
Descripción
price_ars
number · null
Precio en pesos, a valor mayorista. Si hay oferta, ya viene aplicada.
price_usdt
number · null
Precio en USDT.
Pueden venir null si esa variante no tiene precio cargado.
Stock y entrega
Campo
Tipo
Descripción
available_count
number
Unidades para entrega inmediata.
stock_status
string
"instant" (hay stock) o "up_to_6h" (se consigue hasta en 6 h).
delivery_mode
string
Texto legible: "instantáneo" o "hasta 6h".
Ofertas ✨ (nuevo)
Campo
Tipo
Descripción
on_sale
boolean
true si el producto está en oferta.
offer_source
string · null
Origen de la oferta: "sony", "epicodes" o null.
offer_ends_at
string ISO · null
Fecha y hora de fin de la oferta, en ISO 8601 con zona horaria. Ej: "2026-07-15T22:00:00-03:00". Es null cuando la oferta no tiene fecha de vencimiento.
Imágenes
Campo
Tipo
Descripción
cover_url
string · null
Portada del juego (webp).
cover_thumb_url
string · null
Miniatura (webp).
5Cómo interpretar las ofertas
on_sale: false → precio normal.
on_sale: true + offer_source: "sony" + offer_ends_at con fecha → oferta de Sony que vence ese día/hora. Ideal para un contador o un “oferta hasta el 15/07”.
on_sale: true + offer_source: "epicodes" + offer_ends_at: null → oferta nuestra, sin fecha de fin definida.
📌 Son precios mayoristas.price_ars / price_usdt
son el valor a precio mayorista (el que pagás vos). Si el producto está en oferta,
ya viene con la oferta aplicada — no tenés que calcular ningún porcentaje. El precio
de venta al público lo definís vos.
6Detección de cambios (recomendado)
Cada respuesta trae catalog_version. Guardá el último
valor que procesaste: si en la próxima llamada viene el mismo número, el catálogo
no cambió y podés saltear el reprocesamiento. Cambia apenas se modifica un precio,
stock u oferta.
7Límite de uso (rate limit)
60 requests por minuto por API key.
Como cada request trae todo el catálogo, con llamar cada 1 a 5 minutos sobra.
En cada respuesta, el objeto rate_limit te informa:
Campo
Descripción
limit_per_minute
Tu límite (60).
user_remaining
Requests que te quedan este minuto.
global_remaining
Cupo global compartido restante.
reset_ms
Milisegundos hasta que se reinicia el contador.
8Manejo de errores
Si algo falla, ok viene en false
con un error y un code:
Code
error
Significado
401
missing_api_key
No mandaste la key.
403
invalid_api_key
Key inválida o revocada.
429
rate_limited
Pasaste el límite. Incluye retry_after_ms con cuánto esperar.
Ante un 429: esperá los retry_after_ms
y reintentá. No reintentes en loop sin esperar.
9Qué podés armar con esto
Catálogo completo con precios en ARS y USDT.
Filtro de “entrega inmediata” usando stock_status / available_count.
Sección de ofertas con badge y contador usando on_sale + offer_ends_at.
Portadas listas para mostrar con cover_url / cover_thumb_url.