Integración por webhook para proveedores
Guía para que tu sistema nos envíe catálogo y stock automáticamente.
Tu sistema puede enviarnos, por HTTPS y en formato JSON, el catálogo con precios y el stock de tus artículos en forma automática, sin subir nada a mano. Hay dos tipos de envío: catálogo (datos completos y precio — por ejemplo una vez al día o cuando cambia algo) y stock (liviano, solo SKU y cantidad — cada pocos minutos, con lo que cambió).
La URL real del webhook y tu clave te las damos cuando habilitamos tu acceso. Mientras tanto, el resto de esta guía ya te sirve para que tu equipo de desarrollo tenga el formato listo.
{
"tipo": "catalogo",
"lote": 1,
"total_lotes": 3,
"generado_en": "2026-11-14T10:00:00-03:00",
"productos": [ ... ]
}
tipo es "catalogo" o "stock".
lote/total_lotes/generado_en son
opcionales. productos es obligatorio: una lista de artículos,
máximo 5000 por request.
2.1 Artículo en "tipo": "catalogo"
| Campo | Tipo | Descripción |
|---|---|---|
sku_proveedor | texto · oblig. | SKU del artículo (o el Id del producto en tu web). |
nombre | texto | Nombre o título del artículo. Necesario para dar de alta artículos nuevos. |
precio | número | Precio unitario de venta a Distriseg (nuestro costo). Mayor que 0. |
moneda | texto | "USD" o "UYU". Si no se envía, se asume la moneda de compra que ya tenés configurada con nosotros. |
precio_incluye_iva | true/false | Si el precio incluye IVA. Por defecto false. |
stock | número | Unidades disponibles. Entero ≥ 0. |
sku_fabricante | texto | Código o part number del fabricante. Si no lo sabés con certeza, dejalo vacío. |
gtin | texto | Código de barras EAN/UPC. |
categoria | texto | Categoría del artículo, por ejemplo "Cámaras / IP". |
descripcion | texto | Descripción. Puede tener HTML simple: párrafos, listas, negrita. |
fotos | lista de URLs | URLs públicas de las imágenes, en orden. |
2.2 Artículo en "tipo": "stock"
| Campo | Tipo | Descripción |
|---|---|---|
sku_proveedor | texto · oblig. | Igual que en catálogo: SKU o Id web. |
stock | número · oblig. | Unidades disponibles. Entero ≥ 0. Para informar que se agotó, enviá 0. |
Catálogo
{
"tipo": "catalogo",
"lote": 1, "total_lotes": 1,
"productos": [
{
"sku_proveedor": "PG4929",
"nombre": "Control remoto inalámbrico de 4 botones",
"precio": 32.40, "moneda": "USD", "precio_incluye_iva": false,
"stock": 15,
"sku_fabricante": "PG4929",
"gtin": "7290007071234",
"categoria": "Alarmas / Accesorios",
"descripcion": "Control remoto de 4 botones, alcance 100 m.
",
"fotos": ["https://miweb.com/fotos/pg4929-1.jpg"]
}
]
}
Stock
{
"tipo": "stock",
"productos": [
{ "sku_proveedor": "PG4929", "stock": 12 },
{ "sku_proveedor": "TPC-BF5401", "stock": 0 }
]
}
Si todo está bien responde HTTP 200 con un JSON como este:
{
"ok": true,
"lote": 1, "total_lotes": 1,
"stats": { "procesados": 120, "actualizados": 117, "desconocidos": 2, "ambiguos": 1, "errores": 0 },
"desconocidos": ["ABC-123", "XYZ-9"],
"ambiguos": ["SS102"],
"precios_ignorados": [ { "codigo": "PG4929", "motivo": "precio <= 0" } ]
}
modo:"test"o"live"— en"test"se valida y clasifica todo pero NO se escribe nada (ni stock, ni precios, ni productos nuevos).desconocidos: SKU que no tenemos registrados. En stock se ignoran. En catálogo se dan de alta como artículos nuevos y los revisamos nosotros.ambiguos: SKU que coinciden con más de un artículo nuestro. No se actualizan y los resolvemos de nuestro lado.precios_ignorados: precios no válidos (no numéricos, ≤ 0 o con moneda no soportada). El resto del artículo se procesa igual.
| Código | Significado | Qué hacer |
|---|---|---|
| 200 | Procesado. | — |
| 400 | JSON inválido, falta productos o más de 5000 artículos. | Corregir el envío. No reintentar igual. |
| 401 | Clave incorrecta. | Revisar la clave. No reintentar en bucle. |
| 403 | Webhook no habilitado. | Avisarnos. |
| 404 | Nombre de proveedor mal escrito en la URL. | Revisar la URL. |
| 413 | Request de más de 20 MB. | Partir en lotes más chicos. |
| 429 | Bloqueo temporal por intentos fallidos (clave incorrecta repetida). | Esperar unos minutos y revisar la clave. |
| 500 / sin respuesta | Error nuestro o de red. | Reintentar más tarde: 1, 5 y 15 minutos. |
- Lotes: recomendamos entre 200 y 500 artículos por request (máximo 5000 o 20 MB). Si un envío va en varios lotes, numerálos con
loteytotal_lotes. - Lo que no se envía no se toca: si un artículo no aparece en un envío, no lo damos por agotado. Para informar que no hay stock, enviá
stock: 0. - Envíos idempotentes: mandar dos veces el mismo dato no genera problemas, así que se puede reintentar sin riesgo.
- Control de precios: un cambio de precio muy grande respecto al anterior queda retenido para revisión manual de nuestro lado.
- Stock: valores negativos se toman como 0, y el máximo es 100.000.
- Stock: cada 5 a 15 minutos, enviando solo los artículos cuyo stock cambió.
- Catálogo con precios: una vez al día completo, y además cada vez que cambie un precio o se agregue un artículo (podés enviar solo lo modificado).
- Prueba de conexión con la lista vacía (ver el ejemplo con curl más abajo, o el botón "Probar conexión" de esta página).
- Envío de stock de unos pocos artículos (5 a 10). Avisanos y lo revisamos juntos.
- Envío completo de catálogo con precios, en lotes. Revisamos los
desconocidosyambiguosde la respuesta. - Programación de los envíos periódicos.
curl -X POST "https://www.distriseg.uy/provider/products/webhook/" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ -d '{"tipo":"stock","productos":[]}'
Con la lista vacía no se modifica nada y debe responder {"ok": true, ...}. Sirve para verificar URL y clave.
To install this Web App in your iPhone/iPad press
and then Add to Home Screen.