Saltar al contenido principal
Un webhook cruza dos sistemas. Debes asumir que puede haber reintentos, entregas duplicadas, caídas temporales o respuestas tardías.

Respuestas esperadas

Respuesta del receptorResultado recomendado
2xxEvento aceptado. Bold puede marcar la entrega como correcta.
4xxError del consumidor o datos no aceptados. Revisa configuración y contrato.
5xxError temporal del receptor. El evento debe poder reintentarse.
Tiempo de espera agotadoEl receptor no respondió a tiempo. Procesa con cola y responde rápido.
No devuelvas 2xx si descartaste el evento sin guardarlo. Bold asumirá que la entrega fue correcta.

Intentos automáticos

Bold intenta enviar una notificación hasta cinco veces. Después de cada fallo, programa el siguiente intento con espera exponencial.
DatoComportamiento
Tiempo máximo de envío30 segundos.
Intentos máximos5 intentos automáticos.
Espera automática10 * 2^n segundos, donde n es el número de intentos realizados.
Estado final tras agotar intentosFailure.
Reintento manualSolo para notificaciones en Failure, mediante POST /v1/notifications/webhook/{id}/retry.
Cada intento guarda código HTTP, cuerpo de respuesta o mensaje de error. Consulta GET /v1/notifications/webhook/{id}/attempts para diagnosticarlo.
Intento fallidoSiguiente intento aproximado
120 segundos después.
240 segundos después.
380 segundos después.
4160 segundos después.
5No hay siguiente intento automático.
Cuando solicitas un reintento manual, la notificación vuelve a Pending y se programa para envío inmediato.

Reglas para consumidores

  • Procesa cada evento de forma idempotente.
  • Guarda eventId para deduplicar el evento de negocio.
  • Guarda attemptId si necesitas auditar cada entrega.
  • No dependas del orden estricto entre eventos.
  • Consulta la API si necesitas confirmar el estado final.
  • Registra los datos originales para auditoría y depuración.
  • Verifica X-HMAC-Signature antes de confiar en los datos.

Patrón recomendado

1

Valida los datos enviados

Comprueba que eventName, majorVersion, minorVersion y el identificador de entidad son los esperados.
2

Detecta duplicados

Si ya procesaste el evento, devuelve 2xx y no repitas efectos externos.
3

Encola el trabajo

Guarda el evento en tu sistema y responde rápido.
4

Procesa en segundo plano

Ejecuta llamadas a sistemas de gestión, herramientas de análisis u otros servicios fuera del tiempo de respuesta HTTP.
if already_processed(event.eventId):
  return 200

store(event)
enqueue(event.eventId)
return 202
Si tu integración queda desincronizada, usa la API paginada para reconciliar el estado y después reactiva el procesamiento normal de webhooks.