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.

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

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.

Add webhook window with the Event and Receiver URL fields highlighted

Adicionar um webhook

  1. Clique no botão de adicionar acima da lista. Abre-se a janela Adicionar webhook.
  2. Escolha o Evento. Por predefinição está selecionado Projeto criado.
  3. 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.
  4. Se quiser, introduza uma Descrição — uma nota para a sua equipa, visível apenas na lista.
  5. 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.