Saltar al contenido principal

Webhooks

REST API
v1.0

Introducción

Los webhooks de NinoxNet permiten que tu aplicación reciba notificaciones en tiempo real sobre cambios en los datos, sin necesidad de realizar consultas periódicas a la API.

Eventos disponibles

  • 🏷️ Cambios en artículos - Actualizaciones de propiedades, stock y precios
  • Desactivación de artículos - Cuando un artículo se desactiva de la integración

Configuración

1. Solicitar webhook

Para habilitar webhooks en tu integración, debes proporcionar:

  • URL de endpoint: Donde NinoxNet enviará las notificaciones
  • Headers personalizados: Opcionalmente, para autenticación o identificación
  • Customización del webhook: Puedes solicitar configuraciones específicas según tus necesidades

2. Configuración de endpoint

Tu endpoint debe:

  • ✅ Aceptar requests POST
  • ✅ Responder con status code 200 para confirmar recepción
  • ✅ Procesar el payload JSON enviado
  • ⚡ Responder rápidamente (timeout: 10 segundos)
Timeouts y reintentos

Si tu endpoint no responde en 10 segundos NinoxNet no enviará el webhook.

Eventos de webhook

📦 Cambio en artículo

Se envía cuando cambian las propiedades de un artículo, su stock o precios. Dependiendo de la configuración del webhook, el payload puede contener:

  1. Estructura plana (por defecto): Array de registros ArticuloConCurva[]
  2. Estructura compleja: Objeto Articulo con arrays anidados

Estructura plana (por defecto)

Payload:

ArticuloConCurva[] // Array de variantes (estructura plana)

Ejemplo con una variante:

[
{
"articuloId": 12345,
"codigo": "REMERA-001",
"descripcion": "Remera básica",
"descripcionWeb": "Remera básica de algodón",
"nombre": "REMERA-001 - Remera básica",
"talleColor": 3,
"precio1": 2500.00,
"precio2": 2200.00,
"precio3": 2000.00,
"precio4": 1800.00,
"precio5": 1600.00,
"colorId": 1,
"talleId": 2,
"colorNombre": "Rojo",
"colorCodigo": "RED",
"colorHex": "#FF0000",
"talleNombre": "M",
"talleCodigo": "M",
"unidades": 15,
"etiquetasIds": "1,5,8",
"etiquetasNombres": "Remeras,Básico,Algodón",
"categoriasIds": "2,4",
"categoriasNombres": "Ropa,Casual",
"eliminado": false
}
]

Ejemplo con múltiples variantes:

[
{
"articuloId": 12345,
"codigo": "REMERA-001",
"descripcion": "Remera básica",
"descripcionWeb": "Remera básica de algodón",
"nombre": "REMERA-001 - Remera básica",
"talleColor": 3,
"precio1": 2500.00,
"precio2": 2200.00,
"precio3": 2000.00,
"precio4": 1800.00,
"precio5": 1600.00,
"colorId": 1,
"talleId": 1,
"colorNombre": "Rojo",
"colorCodigo": "RED",
"colorHex": "#FF0000",
"talleNombre": "S",
"talleCodigo": "S",
"unidades": 8,
"etiquetasIds": "1,5,8",
"etiquetasNombres": "Remeras,Básico,Algodón",
"categoriasIds": "2,4",
"categoriasNombres": "Ropa,Casual",
"eliminado": false
},
{
"articuloId": 12345,
"codigo": "REMERA-001",
"descripcion": "Remera básica",
"descripcionWeb": "Remera básica de algodón",
"nombre": "REMERA-001 - Remera básica",
"talleColor": 3,
"precio1": 2500.00,
"precio2": 2200.00,
"precio3": 2000.00,
"precio4": 1800.00,
"precio5": 1600.00,
"colorId": 1,
"talleId": 2,
"colorNombre": "Rojo",
"colorCodigo": "RED",
"colorHex": "#FF0000",
"talleNombre": "M",
"talleCodigo": "M",
"unidades": 15,
"etiquetasIds": "1,5,8",
"etiquetasNombres": "Remeras,Básico,Algodón",
"categoriasIds": "2,4",
"categoriasNombres": "Ropa,Casual",
"eliminado": false
}
]

Estructura compleja (opcional)

Si tu webhook está configurado para recibir la estructura compleja, el payload será un objeto Articulo directo:

Payload:

Articulo // Objeto con arrays anidados

Ejemplo:

{
"articuloId": 12345,
"codigo": "REMERA-001",
"descripcion": "Remera básica",
"descripcionWeb": "Remera básica de algodón",
"nombre": "REMERA-001 - Remera básica",
"talleColor": 3,
"precio1": 2500.00,
"precio2": 2200.00,
"precio3": 2000.00,
"precio4": 1800.00,
"precio5": 1600.00,
"stockTotal": 23,
"curva": [
{
"articuloId": 12345,
"colorId": 1,
"talleId": 1,
"colorNombre": "Rojo",
"colorCodigo": "RED",
"talleNombre": "S",
"talleCodigo": "S",
"unidades": 8
},
{
"articuloId": 12345,
"colorId": 1,
"talleId": 2,
"colorNombre": "Rojo",
"colorCodigo": "RED",
"talleNombre": "M",
"talleCodigo": "M",
"unidades": 15
}
],
"tags": [
{
"articuloId": 12345,
"articuloTagId": 101,
"tipo": 0,
"tagId": 1,
"tagNombre": "Remeras",
"padreId": null,
"destacada": true
},
{
"articuloId": 12345,
"articuloTagId": 102,
"tipo": 1,
"tagId": 2,
"tagNombre": "Ropa",
"padreId": null,
"destacada": false
},
{
"articuloId": 12345,
"articuloTagId": 103,
"tipo": 1,
"tagId": 4,
"tagNombre": "Casual",
"padreId": 2,
"destacada": false
}
]
}
Configuración del webhook

Para recibir la estructura compleja en lugar de la plana, debes solicitarlo específicamente al configurar tu webhook con nuestro equipo de soporte.

❌ Artículo desactivado

Se envía cuando un artículo se desactiva de la integración. El payload es un objeto simple con solo dos propiedades.

Payload:

{
articuloId: number;
eliminado: true;
}

Ejemplo:

{
"articuloId": 12345,
"eliminado": true
}
Estructura simplificada

Cuando un artículo es desactivado, solo se envían las propiedades articuloId y eliminado: true. No se incluyen otras propiedades para optimizar el payload.