Especificación técnica · Opción A

Integración del catálogo por API

Qué tiene que exponer su sistema para que Doopy lea su catálogo y lo mantenga actualizado solo. Esta guía es para el equipo técnico del proveedor.

1Cómo funciona

Doopy consulta una dirección web del proveedor (endpoint) y recibe en cada consulta su catálogo completo en JSON. El proveedor no envía nada: solo expone el endpoint.

1. HorarioLlega la hora de actualización acordada
2. ConsultaDoopy llama a su endpoint
3. RespuestaSu sistema devuelve todo el catálogo en JSON
4. ActualizaciónDoopy crea, actualiza o da de baja productos

La respuesta representa todo lo que el proveedor tiene para vender en ese momento. Doopy la compara con lo que ya tiene publicado de ese proveedor:

  • los productos nuevos se dan de alta;
  • los que ya existen se actualizan (nombre, precio y stock);
  • los que dejaron de venir se dan de baja en la tienda.

2Requisitos del endpoint

AspectoRequisito
ProtocoloHTTPS con un certificado válido, emitido por una autoridad reconocida. Los certificados autofirmados no se aceptan.
AccesoAccesible desde internet. Si su servidor filtra por IP, pida a Doopy la IP de origen de las consultas.
MétodoGET o POST, el que usted indique. Doopy no envía cuerpo ni parámetros: todo lo necesario va en la URL o en los headers.
AutenticaciónOpcional, con uno o más headers fijos, por ejemplo Authorization: Bearer <token> o X-Api-Key: <clave>. El token no debe vencer: Doopy lo guarda y lo envía igual en cada consulta. No se admite OAuth ni tokens que se renuevan. Los headers los registra el equipo técnico de Doopy durante el alta.
FormatoJSON en UTF-8 (Content-Type: application/json). El primer nivel tiene que ser una lista [ {...}, {...} ]. Un objeto que envuelve la lista, como {"data": [...]}, no se admite.
ContenidoEl catálogo completo en cada respuesta, sin paginación ni actualizaciones parciales.
Tiempo de respuestaMenos de 60 segundos. Si tarda más, la consulta se cancela y se reintenta en el horario siguiente.
VolumenSin límite práctico: Doopy procesa la lista por bloques y ya integra catálogos de más de 17.000 productos.

3Campos de cada producto

Cada elemento de la lista es un producto con estas claves. Los nombres de las claves tienen que ser exactamente estos, respetando mayúsculas y minúsculas.

ClaveTipoDescripción
codigo_barratextoObligatoria Identificador único del producto. Es la clave con la que Doopy reconoce el producto en cada actualización, así que tiene que ser única y no cambiar nunca. Si es un código de barras real (EAN/GTIN), mejor.
nombretextoObligatoria Nombre comercial del producto, tal como se va a mostrar en la tienda. Ver cómo escribir buenos nombres.
precio_ventanúmeroObligatoria Su precio de venta a Doopy (el precio de compra para Doopy), en la moneda de moneda_txt. Número JSON con punto decimal: 650.5, no "650,5". Doopy fija el precio al público a partir de este valor.
moneda_txttextoObligatoria USD para dólares o PYG para guaraníes. Los precios en USD se pasan a guaraníes con su cotización en Doopy.
seccionTxttextoRecomendada Nombre de la categoría del producto en su sistema, por ejemplo NOTEBOOKS. Doopy la usa para ubicar el producto en la tienda. Un producto sin categoría no aparece en el menú de categorías.
stockenteroOpcional Unidades disponibles para la venta, entero mayor o igual a 0. Si no se envía, se toma 0.

Otros campos

Puede incluir más claves en cada producto (marca, descripción, garantía, etc.). Doopy las ignora sin error. Las imágenes y las descripciones se cargan aparte: ver Imágenes y contenido.

4Ejemplo de respuesta

Una respuesta mínima válida con dos productos, uno en dólares y otro en guaraníes:

JSON · respuesta del endpoint
[
  {
    "codigo_barra": "7891234567890",
    "nombre": "Notebook Lenovo IdeaPad 3 15.6\" Core i5 8GB 512GB SSD",
    "seccionTxt": "NOTEBOOKS",
    "precio_venta": 650.00,
    "moneda_txt": "USD",
    "stock": 12
  },
  {
    "codigo_barra": "PLOL-00017",
    "nombre": "Cable HDMI 2.1 8K 2 metros",
    "seccionTxt": "CABLES",
    "precio_venta": 45000,
    "moneda_txt": "PYG",
    "stock": 0
  }
]

Una consulta de ejemplo, como la que hace Doopy:

cURL · consulta de prueba
curl -X GET "https://api.su-empresa.com.py/doopy/catalogo" \
     -H "Authorization: Bearer SU_TOKEN" \
     --max-time 60

5Qué hace Doopy con cada producto

DatoEn cada actualización
CódigoBusca el producto por codigo_barra. Si no existe, lo da de alta; si existe, lo actualiza.
NombreLo actualiza y corrige caracteres dañados. Del nombre sale la dirección web del producto: si el nombre cambia, cambia su URL.
PrecioToma su precio, lo pasa a guaraníes si viene en USD y recalcula el precio al público.
StockReemplaza el stock anterior por el que llega. Con 0 el producto sigue publicado, marcado como "Sin stock" y sin botón de compra.
CategoríaSe asigna cuando el producto se da de alta. Si después quiere cambiarla, pídaselo a Doopy.
PublicaciónTodo producto que viene en la respuesta queda activo. Para mostrarse en la tienda necesita además una imagen.

Buenas prácticas

  • No reutilice códigos. Un código nuevo es un producto nuevo para Doopy, y si cambia el código de un producto existente, ese producto se da de baja y se crea otro.
  • Use un prefijo propio si sus códigos son internos y no códigos de barras reales. Por ejemplo, PLOL-00017. Así no coinciden con los de otro proveedor de Doopy. El prefijo se acuerda en el alta.
  • Mantenga estables los nombres. Cambiar un nombre a cada rato cambia la URL del producto y afecta su posicionamiento en buscadores.
  • Use siempre los mismos nombres de categoría. NOTEBOOKS y Notebook son dos categorías distintas.

6Errores y bajas

La regla principal es que una lista vacía significa "no tengo ningún producto".

Nunca responda 200 con una lista vacía si hubo un error

Si su sistema no puede armar el catálogo (base caída, mantenimiento, error interno), responda con un código HTTP de error (500, 503, etc.). Si responde 200 OK con [], Doopy entiende que ya no vende nada y da de baja todo su catálogo en la tienda.

Su endpoint respondeQué hace Doopy
200 con la lista completaActualiza el catálogo normalmente.
4xx o 5xxCancela la actualización y deja todo como estaba. Vuelve a intentar en el horario siguiente.
Más de 60 segundos sin respuestaIgual que un error: no cambia nada.
JSON inválido o que no es una listaLa actualización falla y no se procesa ningún producto.
200 con []Da de baja todos sus productos.

Cómo dar de baja un producto

Deje de incluirlo en la respuesta. En la siguiente actualización deja de mostrarse en la tienda. Si vuelve a incluirlo con el mismo código, se reactiva. Para un faltante temporal, en cambio, conviene mantenerlo con "stock": 0: sigue publicado como "Sin stock" y vuelve a venderse cuando llega stock.

7Frecuencia de actualización

Doopy consulta el endpoint de forma automática, a partir de una hora fija (hora de Paraguay), con una de estas frecuencias:

FrecuenciaConsultas por díaRecomendada para
Diaria1Catálogos con precios y stock estables.
Cada 12 horas2Cambios de precio o stock una o dos veces por día.
Cada 6 horas4Stock que rota durante el día.
Cada 3 horas8Catálogos con mucha rotación.

La hora y la frecuencia se acuerdan en el alta. Elija una hora de poca carga para su servidor. Doopy también puede lanzar una actualización a mano, por ejemplo después de un cambio de precios importante.

8Cotización del dólar Opcional

Si sus precios están en dólares y su sistema maneja una cotización propia, puede exponer un segundo endpoint con ella. Doopy lo usa para actualizar su cotización y recalcular sus precios en guaraníes.

  • Método: POST, sin cuerpo.
  • Autenticación: este endpoint se consulta sin headers. Si necesita protegerlo, incluya el token en la propia URL, por ejemplo ?token=....
  • Respuesta: una lista con un elemento cuya descripcion sea "USD" y cuyo campo venta sea la cantidad de guaraníes por dólar.
JSON · respuesta de cotización
[
  { "descripcion": "USD", "venta": 7300 }
]

Sin este endpoint, la cotización se actualiza desde el panel de proveedor o a pedido, con el equipo de Doopy.

9Imágenes y contenido

La API transmite datos comerciales: código, nombre, precio, moneda, categoría y stock. El contenido de la ficha se carga en Doopy aparte:

  • Imágenes: envíe a Doopy las fotos de cada producto, identificadas con su codigo_barra (por ejemplo, 7891234567890.jpg, 7891234567890-2.jpg). Sin imagen, el producto no se muestra en la tienda.
  • Descripción y ficha técnica: el equipo de Doopy las arma con la información del fabricante. Si tiene fichas propias, inclúyalas en el mismo envío.
  • Marca: indíquela en el nombre del producto (ver nombres).

Los requisitos de las fotos están en Panel de proveedor › Imágenes.

10Validador

Pegue la respuesta de su endpoint para comprobar el formato antes de pasarla a Doopy. La validación se hace en su navegador: los datos no se envían a ningún lado.

11Antes de pasar a producción

Antes de activar la actualización automática, verifique que su endpoint cumpla esto:

  • Responde por HTTPS con un certificado válido.
  • Devuelve una lista JSON en el primer nivel, en UTF-8, en menos de 60 segundos.
  • Incluye el catálogo completo en cada respuesta.
  • Cada producto trae codigo_barra, nombre, precio_venta y moneda_txt, y en lo posible seccionTxt y stock.
  • Los códigos son únicos y estables, con un prefijo propio si son internos.
  • Ante un error responde con un código HTTP de error, nunca con 200 y una lista vacía.
  • Pasa el validador sin errores.
  • Ya envió a Doopy la URL, el método, los headers de autenticación y las imágenes de los productos.

Con eso, Doopy hace una primera importación de prueba, la revisa con usted y después activa la actualización automática. El proceso completo está en Alta y contacto.