Un webhook permite que FlexiProject avise a un sistema externo en el mismo momento en que ocurre algo en tu organización. En lugar de consultar la API una y otra vez para ver si algo ha cambiado, tu sistema recibe una petición HTTP con los datos del evento justo después de que este se produzca.

Un webhook vincula un evento con una dirección de receptor. Para enviar dos eventos distintos a la misma dirección, o el mismo evento a dos sistemas, crea dos webhooks.

Los webhooks se configuran en Configuración del sistema > Webhooks. La sección está disponible para los administradores del sistema (consulta Usuarios y permisos). Para leer datos por otro canal, usa la API.

Eventos

FlexiProject informa de cuatro eventos. Cada webhook escucha exactamente uno de ellos, que eliges en la lista Evento.

Add webhook window with the Event list expanded and the available events highlighted

Evento Cuándo envía FlexiProject la petición Datos específicos del evento
Proyecto creado Ha surgido un nuevo proyecto, de cualquier forma: desde cero, a partir de una plantilla, por clonación, importando un archivo de MS Project o Excel, o con ayuda de la IA. projectId, projectName, createdAt
Proyecto eliminado Se ha eliminado un proyecto. projectId, projectName
Aceptación iniciada Se ha enviado un cambio de plan a aprobación y se ha iniciado su ruta de aprobación. changeRequestId, changeRequestName, projectId, projectName, date
Aceptación completada La ruta de aprobación ha terminado con una decisión: aprobación, rechazo o cancelación. changeRequestId, changeRequestName, projectId, projectName, decisionDate, status

Toda petición lleva además el nombre del evento (event), el momento en que se generó (timestamp), y el identificador (userId) y la dirección de correo electrónico (userEmail) del usuario cuya acción la desencadenó. El formato de la petición completa se describe en Formato de la petición HTTP. Las aprobaciones se describen en Aceptaciones.

Configuración del webhook

Lista de webhooks

La página Webhooks muestra todos los webhooks de la organización en tres columnas: Evento, URL del receptor y Descripción. Cuando no hay nada definido, aparece el mensaje No hay webhooks.

Add webhook window with the Event and Receiver URL fields highlighted

Añadir un webhook

  1. Haz clic en el botón de añadir situado sobre la lista. Se abre la ventana Añadir webhook.
  2. Elige el Evento. De forma predeterminada está seleccionado Proyecto creado.
  3. Escribe la URL del receptor: la dirección a la que FlexiProject envía la petición. El campo es obligatorio y necesita la dirección completa, incluido el protocolo, por ejemplo https://example.com/hooks/flexiproject. Una dirección incompleta se rechaza con un mensaje de error de procesamiento de datos.
  4. Si quieres, escribe una Descripción: una nota para tu equipo, visible solo en la lista.
  5. Haz clic en Guardar.

Secreto

Justo después de guardar aparece la ventana Secreto con el mensaje: El webhook ha sido creado. A continuación se muestra el secreto, que se mostrará solo una vez. Cópielo y guárdelo en un lugar seguro. El botón Copiar coloca el valor en el portapapeles (mensaje Copiado en el portapapeles) y lo guardas en el sistema receptor. El secreto firma cada petición, de modo que el receptor puede comprobar que la petición viene de FlexiProject (consulta Formato de la petición HTTP).

Después de cerrar la ventana, el valor completo ya no está disponible en ningún lugar de la aplicación. En un webhook abierto más tarde, el campo Secreto muestra solo los cuatro primeros y los cuatro últimos caracteres con asteriscos en medio; el campo no se puede editar.

Editar un webhook

Haz clic en el nombre de un evento de la lista para abrir la ventana Editar webhook. Allí cambias el evento, la dirección del receptor y la descripción, y luego eliges Guardar. El secreto no cambia: editar nunca genera uno nuevo. Al cerrar la ventana con cambios sin guardar aparece la pregunta ¿Quiere seguir adelante y abandonar el cambio?

Probar un webhook

El botón Probar está en la ventana de edición de un webhook guardado. Envía a la dirección configurada una petición con el formato del evento elegido, rellenada con datos de ejemplo (por ejemplo, un proyecto llamado Test Project), y lo confirma con Solicitud de prueba enviada correctamente. El mensaje confirma que la petición se envió, no que el receptor la aceptara: comprueba el resultado en el lado del receptor.

Eliminar un webhook

El botón Borrar de la ventana del webhook exige confirmar la pregunta ¿Seguro que desea eliminar el webhook? A partir de ese momento el evento ya no se envía a esa dirección. La eliminación no se puede deshacer; para reanudar la entrega hace falta un webhook nuevo y, por tanto, un secreto nuevo.

Formato de la petición HTTP

FlexiProject envía a la dirección configurada una petición POST con un cuerpo JSON.

Cabeceras

Cabecera Contenido
X-FlexiProject-Event El nombre del evento: ProjectCreated, ProjectDeleted, AcceptanceStarted o AcceptanceCompleted.
X-FlexiProject-Delivery El identificador de la entrega. Se mantiene igual en todos los reintentos del mismo evento, así que puedes reconocer los duplicados por él.
X-FlexiProject-Timestamp El momento en que se envió la petición.
X-FlexiProject-Signature La firma del cuerpo de la petición con la forma sha256=<value>.

Verificar la firma

La firma es un HMAC-SHA256 del cuerpo de la petición sin modificar, calculado con el secreto del webhook como clave y escrito en hexadecimal en minúsculas. En el lado receptor, calcula el mismo valor a partir del cuerpo recibido y compáralo con la parte de la cabecera X-FlexiProject-Signature posterior a sha256=. Si los valores difieren, rechaza la petición: no procede de tu organización en FlexiProject.

Cuerpo de ejemplo

{
  "projectId": "6712f0a1c3d4e5f601234567",
  "projectName": "Warehouse modernization",
  "createdAt": "2026-09-21T08:14:02Z",
  "userId": "a3f1c7de-1b20-4f9e-9a55-0c2d8e7b41aa",
  "userEmail": "anna.kowalska@example.com",
  "event": "ProjectCreated",
  "timestamp": "2026-09-21T08:14:02Z"
}

Respuesta y reintentos

Responde con un estado de éxito (2xx) en cuanto aceptes la petición. Cualquier otra respuesta, o ninguna, cuenta como una entrega fallida.

Una entrega fallida se reintenta automáticamente con un intervalo creciente: tras 1, 2, 4, 8, 16, 32, 64, 128, 256 y 512 minutos. Los intentos se reparten en unas diecisiete horas, de modo que un receptor que no esté disponible durante un rato no pierde el evento. Cada intento repite el mismo valor de X-FlexiProject-Delivery, así que prepara tu tratamiento para recibir el mismo evento más de una vez.