Skip to main content
Los webhooks envían una solicitud POST a una URL HTTPS de tu sistema cuando ocurre un evento en La Pyme. Podés configurarlos desde la API pública o desde Configuración > Integraciones > API > Webhooks.

Configurar por API

Usá webhooks:read para descubrir eventos y leer endpoints. Para crear o cambiar un endpoint necesitás webhooks:write, Idempotency-Key y los scopes de lectura de todos los eventos habilitados. Por ejemplo, order.* requiere orders:read, sale.* requiere sales:read y product.* requiere products:read.
La creación devuelve signing_secret una vez. Guardalo en un secret manager; las lecturas, actualizaciones y acciones nunca lo incluyen. GET /api/v1/webhook-event-types devuelve el catálogo autoritativo de eventos, versiones y scopes. Los endpoints creados con una API key pertenecen a la organización. Los creados con OAuth delegado pertenecen a ese grant: otra app no puede verlos y la revocación deshabilita el endpoint y cancela entregas todavía no enviadas.

Ciclo de vida

  • PATCH /api/v1/webhook-endpoints/{id} cambia label, url, enabled_events o api_version; status es de solo lectura.
  • POST .../{id}/pause frena eventos normales sin descartar la cola.
  • POST .../{id}/resume revalida los scopes de los eventos y reanuda la entrega.
  • POST .../{id}/disable es terminal y cancela trabajo no enviado.
  • POST .../{id}/rotate-secret invalida inmediatamente el secreto anterior.
  • POST .../{id}/test crea una entrega sintética durable incluso si el endpoint está pausado.
Todas las mutaciones requieren Idempotency-Key. Repetir exactamente el request devuelve el mismo endpoint, secreto o test; reutilizar la clave con otro request devuelve 409 IDEMPOTENCY_CONFLICT. Para rotar sin perder eventos: pausá el endpoint, rotá el secreto, actualizá el receptor, enviá un test y reanudá.

Eventos disponibles

V1 incluye estos eventos:
order.* usa el modelo actual de pedidos de comercio.
Las notas de crédito se envían como sale.created con document_kind: "credit_note" en el objeto.

Payload

Todos los eventos usan este envelope:
Usá id para deduplicar. La entrega es al menos una vez, por lo que tu endpoint puede recibir el mismo evento más de una vez.

Eventos de producto

Para webhooks, un producto es la variante pública vendible: id corresponde al UUID de la variante y variant_group_id identifica al grupo que aporta los campos compartidos. Una creación emite product.created con el estado final persistido. Una actualización emite product.updated con el estado final y changed_fields.
cost, price y promotional_price son centavos enteros. image_url usa primero la imagen de la variante y, si no existe, la del grupo. changed_fields solo aparece en product.updated y respeta este orden estable: name, description, image_url, category_id, sku, barcode, variant_options, unit_of_measure, currency, cost, price, promotional_price, markup_percentage, tax_rate_id, is_exempt, product_type, visibility, is_active, default_supplier_id. Cambiar un campo compartido del grupo genera una actualización por cada variante activa cuyo objeto público haya cambiado. Los cambios que terminan con el mismo valor persistido no generan evento. Tampoco generan evento los cambios exclusivos de stock, tags, metafields, cuentas contables, listas de precios, marcadores de sincronización, costos promedio, timestamps internos ni eliminaciones definitivas. Los endpoints existentes no se suscriben automáticamente. Agregá explícitamente product.created y/o product.updated a enabled_events; al crear, actualizar o reanudar el endpoint se vuelve a validar products:read.

Headers

Cada request incluye:

Verificar firma

La firma usa HMAC SHA-256 sobre:
El header tiene formato:
Ejemplo en TypeScript:
Guardá el secreto cuando se muestra. Si lo perdés, rotalo desde la API o la pantalla de webhooks.

Payload de prueba

POST /api/v1/webhook-endpoints/{id}/test usa el mismo sender, firma y política de reintentos que un evento normal, pero no contiene datos comerciales:

Respuestas y reintentos

La Pyme considera exitosa cualquier respuesta 2xx. Si tu endpoint responde fuera de 2xx, corta por timeout o falla la conexión, La Pyme reintenta con backoff. Después de varios intentos fallidos, la entrega queda como fallo final y aparece en el historial del webhook. Tu endpoint debería:
  1. Responder rápido con 2xx después de persistir el evento.
  2. Procesar trabajos lentos en segundo plano.
  3. Deduplicar por id.
  4. Verificar la firma antes de confiar en el payload.