Saltar al contenido principal
Cubbo envía un POST por HTTPS a tu endpoint cuando algo cambia en tu cuenta. Usa webhooks en lugar de consultar periódicamente los endpoints de listado.

Eventos

El nombre del evento viaja en el header X-Webhook-Event. Enruta con base en ese header, no en la URL. El payload completo de cada evento está en la referencia de la API, en Webhooks.
shippingUpdated no incluye el id de la orden de Cubbo. Relaciónalo con order_number y store_id.

Configura tu endpoint

Tu endpoint debe usar https y un nombre de dominio. Las direcciones IP se rechazan. Configúralo en la app de Cubbo: abre Integraciones, busca tu integración Open API y haz clic en Configurar Webhooks. Ahí activas los webhooks de órdenes, inventario y recibos de inventario, defines sus URL, agregas headers personalizados, pruebas la URL y copias el secreto compartido. Consulta Configura tu integración. Si tu endpoint requiere credenciales de cliente OAuth, pide a tu contacto de Cubbo que las configure. El feed de inventario solo envía mientras el feed de órdenes esté activo. El feed de reabastecimientos es independiente.

Prueba de conectividad

Cuando Cubbo verifica tu URL, envía este cuerpo, sin headers de firma y sin X-Webhook-Event:
Responde 2xx en menos de 10 segundos. Acepta este ping aunque no esté firmado, o la verificación falla.

Headers

También se agregan los headers estáticos configurados para tu integración.

Verifica la firma

Cada evento se firma con HMAC-SHA256 usando el secret de tu webhook. Verifícalo antes de confiar en el cuerpo.
1

Lee el cuerpo sin procesar

Usa exactamente los bytes que recibiste. No parsees ni vuelvas a serializar el JSON: el orden de las llaves y los espacios deben coincidir.
2

Arma la cadena firmada

Une cuatro valores con un punto literal: el ID del mensaje, isa, exp y el cuerpo sin procesar.
3

Calcula y compara

Calcula el HMAC-SHA256 de esa cadena. Usa el secret como una cadena UTF-8 simple, sin decodificarlo. Compara el digest hexadecimal en minúsculas con X-Cubbo-Hmac-SHA256 en tiempo constante.
4

Revisa la expiración

Rechaza la solicitud si la hora actual ya pasó exp. Permite algunos segundos de desfase de reloj.
Todos los feeds de una integración usan el mismo secret. Cuando Cubbo lo renueva, el nuevo secret aplica a todas las entregas a partir de ese momento, incluidos los reintentos de eventos anteriores.

Respuesta y reintentos

Responde con cualquier estado 2xx en cuanto hayas guardado el evento y luego procésalo de forma asíncrona. Las respuestas lentas corren el riesgo de un timeout y un reintento. Los eventos de inventario y de reabastecimiento se entregan de uno en uno por integración, en orden. Una entrega que falla retiene los eventos que vienen detrás hasta que tiene éxito o se agotan sus reintentos.
No respondas 400 ni 401 mientras tu endpoint se está desplegando o está mal configurado. Cubbo los trata como definitivos y descarta el evento. Responde 503 en su lugar para que el evento se reintente.

Maneja los duplicados

Los reintentos reenvían el mismo cuerpo, pero con un nuevo ID de mensaje, isa, exp y firma. Nunca dedupliques con base en X-Cubbo-Webhook-Message-Id. Conserva las llaves procesadas durante al menos 26 horas, la ventana de reintentos más larga. Los valores de sequence crecen, pero pueden saltarse números, así que no esperes que aumenten de uno en uno.