Um webhook permite ao FlexiProject notificar um sistema externo no momento em que algo acontece na sua organização. Em vez de consultar a API vezes sem conta para ver se algo mudou, o seu sistema recebe um pedido HTTP com os dados do evento logo a seguir à sua ocorrência.
Um webhook liga um evento a um endereço de destino. Para enviar dois eventos diferentes para o mesmo endereço, ou o mesmo evento para dois sistemas, crie dois webhooks.
Os webhooks configuram-se em Definições do sistema > Webhooks. A secção está disponível para os administradores do sistema (ver Utilizadores e permissões). Para ler dados por outro canal, utilize a API.
Eventos
O FlexiProject comunica quatro eventos. Cada webhook escuta exatamente um deles, escolhido na lista Evento.

| Evento | Quando o FlexiProject envia o pedido | Dados específicos do evento |
|---|---|---|
| Projeto criado | Foi criado um novo projeto, seja de que forma for: de raiz, a partir de um modelo, por clonagem, por importação de um ficheiro MS Project ou Excel, ou com a ajuda da IA. | projectId, projectName, createdAt |
| Projeto eliminado | Um projeto foi eliminado. | projectId, projectName |
| Aceitação iniciada | Uma mudança da linha de base foi enviada para aprovação e a respetiva rota de aprovação foi iniciada. | changeRequestId, changeRequestName, projectId, projectName, date |
| Aceitação concluída | A rota de aprovação terminou com uma decisão: aprovação, rejeição ou cancelamento. | changeRequestId, changeRequestName, projectId, projectName, decisionDate, status |
Cada pedido contém ainda o nome do evento (event), o momento em que foi gerado (timestamp), bem como o identificador (userId) e o endereço de e-mail (userEmail) do utilizador cuja ação o desencadeou. O formato de todo o pedido é descrito em Formato do pedido HTTP. As aprovações são descritas em Aceitações.
Configuração do webhook
Lista de webhooks
A página Webhooks mostra todos os webhooks da organização em três colunas: Evento, URL do destinatário e Descrição. Quando não existe nenhum, aparece a mensagem Não há webhooks.

Adicionar um webhook
- Clique no botão de adicionar acima da lista. Abre-se a janela Adicionar webhook.
- Escolha o Evento. Por predefinição está selecionado Projeto criado.
- Introduza o URL do destinatário — o endereço para o qual o FlexiProject envia o pedido. O campo é obrigatório e exige o endereço completo, incluindo o protocolo, por exemplo
https://example.com/hooks/flexiproject. Um endereço incompleto é rejeitado com uma mensagem de erro de processamento de dados. - Se quiser, introduza uma Descrição — uma nota para a sua equipa, visível apenas na lista.
- Clique em Guardar.
Segredo
Logo depois de guardar, aparece a janela Segredo com a mensagem: O webhook foi criado. Abaixo encontra-se o segredo, que será mostrado apenas uma vez. Copie-o e guarde-o num local seguro. O botão Copiar coloca o valor na área de transferência (mensagem Copiado para a área de transferência); guarde-o depois no sistema recetor. O segredo assina cada pedido, para que o recetor possa confirmar que o pedido provém do FlexiProject (ver Formato do pedido HTTP).
Depois de fechar a janela, o valor completo deixa de estar disponível em qualquer local da aplicação. Num webhook aberto mais tarde, o campo Segredo mostra apenas os primeiros e os últimos quatro caracteres, com asteriscos no meio; o campo não pode ser editado.
Editar um webhook
Clique no nome de um evento na lista para abrir a janela Editar webhook. Aí altera o evento, o endereço do destinatário e a descrição e, em seguida, clica em Guardar. O segredo mantém-se inalterado — a edição nunca gera um novo. Se fechar a janela com alterações por guardar, aparece a pergunta Quer seguir em frente e abandonar a mudança?.
Testar um webhook
O botão Testar encontra-se na janela de edição de um webhook guardado. Envia para o endereço configurado um pedido no formato do evento escolhido, preenchido com dados de exemplo (por exemplo, um projeto chamado Test Project), e confirma com Pedido de teste enviado com sucesso. A mensagem confirma que o pedido foi enviado, e não que o destinatário o aceitou — verifique o resultado do lado do recetor.
Eliminar um webhook
O botão Eliminar na janela do webhook exige a confirmação da pergunta Tem a certeza de que pretende eliminar o webhook?. A partir desse momento, o evento deixa de ser enviado para esse endereço. A eliminação não pode ser anulada; para retomar o envio é preciso criar um novo webhook e, portanto, obter um novo segredo.
Formato do pedido HTTP
O FlexiProject envia um pedido POST com um corpo JSON para o endereço configurado.
Cabeçalhos
| Cabeçalho | Conteúdo |
|---|---|
X-FlexiProject-Event |
O nome do evento: ProjectCreated, ProjectDeleted, AcceptanceStarted ou AcceptanceCompleted. |
X-FlexiProject-Delivery |
O identificador da entrega. Mantém-se igual em todas as repetições do mesmo evento, pelo que permite reconhecer duplicados. |
X-FlexiProject-Timestamp |
O momento em que o pedido foi enviado. |
X-FlexiProject-Signature |
A assinatura do corpo do pedido na forma sha256=<value>. |
Verificar a assinatura
A assinatura é um HMAC-SHA256 do corpo bruto do pedido, calculado com o segredo do webhook como chave e escrito em hexadecimal minúsculo. No lado recetor, calcule o mesmo valor a partir do corpo recebido e compare-o com a parte do cabeçalho X-FlexiProject-Signature a seguir a sha256=. Se os valores forem diferentes, rejeite o pedido — não provém da sua organização no FlexiProject.
Corpo de exemplo
{
"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"
}
Resposta e novas tentativas
Responda com um estado de sucesso (2xx) assim que aceitar o pedido. Qualquer outra resposta, ou a falta de resposta, conta como entrega falhada.
Uma entrega falhada é repetida automaticamente com um intervalo crescente: após 1, 2, 4, 8, 16, 32, 64, 128, 256 e 512 minutos. As tentativas distribuem-se por cerca de dezassete horas, pelo que um recetor que fique indisponível durante algum tempo não perde o evento. Cada tentativa repete o mesmo valor de X-FlexiProject-Delivery, por isso prepare o tratamento para receber o mesmo evento mais do que uma vez.