WebhooksAPI

Saiba no mesmo instante se um post foi publicado ou não

Registre uma URL uma vez e FoPost a chama sempre que uma entrega é concluída. Cada evento traz o id do post, a conta, a plataforma, o permalink ou o texto do erro, para o seu sistema reagir sem polling.

POST /v1/webhooks
curl -X POST https://api.fopost.com/v1/webhooks \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workspaceId": "9b2f6c1e-...",
    "url": "https://yourbrand.com/hooks/social",
    "events": ["delivery.published", "delivery.failed", "post.published", "post.failed"]
  }'

Dispara na conclusão

Um evento por entrega em cada conta, enviado assim que a rede confirma ou rejeita.

Assinado

Cada solicitação traz um cabeçalho de assinatura para você verificar que veio de nós.

Com novas tentativas

Uma resposta diferente de 2xx é repetida com backoff antes de o evento ser descartado.

Eventos

Eventos que cobrem todo o ciclo de publicação

delivery.published dispara quando uma rede aceita a entrega de uma conta e inclui o permalink. delivery.failed dispara quando a publicação não vai acontecer e inclui o texto de erro da plataforma. post.published e post.failed disparam uma vez por post, depois que todas as contas forem concluídas.

Ler a referência de webhooks
delivery.published
{
  "event": "delivery.published",
  "data": {
    "postId": "7d3e0a52-...",
    "postAccountId": "a3c5e7f9-...",
    "accountId": "4a71d80b-...",
    "platform": "linkedin",
    "externalUrl": "https://linkedin.com/feed/update/..."
  },
  "timestamp": "2026-09-01T09:00:07Z"
}

delivery.published

O permalink, pronto para guardar ou usar como link no seu CMS.

delivery.failed

A própria mensagem de erro da rede, para você corrigir a causa em vez de adivinhar.

Por espaço de trabalho

Um webhook pertence a um espaço de trabalho e só vê os posts desse espaço de trabalho.

Verifique

Confirme a autenticidade do payload antes de agir

Cada solicitação é assinada com o segredo retornado quando você cria o webhook. Calcule a assinatura sobre o corpo bruto, compare com o cabeçalho e rejeite o que não corresponder. Responda 2xx rapidamente e faça o trabalho depois.

Ver a verificação de assinatura
Handler
app.post('/hooks/social', async (req, res) => {
  const signature = req.header(SIGNATURE_HEADER) // header name is in the docs;
  if (!verify(req.rawBody, signature, process.env.WEBHOOK_SECRET)) {
    return res.status(401).end();
  }
  const { event, data } = req.body;
  await queue.add(event, data);
  res.status(200).end();
});

Cabeçalho de assinatura

Verifique com o segredo recebido na criação. Para trocá-lo, recrie o webhook.

Com timestamp

timestamp permite ignorar repetições antigas e ordenar os eventos corretamente.

Idempotente por id

As novas tentativas trazem o mesmo id de evento, então é fácil descartar uma entrega duplicada.

Gerencie

Crie, liste e remova endpoints por código

Webhooks são objetos simples da API. Crie um por ambiente, liste-os para auditar o que está registrado e exclua os que não precisa mais. Aponte para uma URL de staging durante o desenvolvimento e troque para produção com uma chamada.

Comece a construir
Automações rodando por agendamento, a partir de um feed e entre redes

Listar endpoints

GET /v1/webhooks mostra cada URL e os eventos que ela assina.

Por ambiente

Registre uma URL separada para staging, assim os posts de teste nunca chegam à produção.

Escopo webhooks

O gerenciamento de endpoints tem escopo próprio. Uma chave apenas de publicação não pode adicionar um.

Perguntas sobre Webhooks, respondidas

Quais eventos estão disponíveis?

Eventos de posts, entregas, contas, caixa de entrada e automações. delivery.published e delivery.failed disparam uma vez por conta, então um post em três redes gera até três deles; post.published e post.failed disparam uma vez por post.

Como verifico um webhook?

Crie o webhook e guarde o segredo da resposta. Calcule uma assinatura sobre o corpo bruto da solicitação com esse segredo e compare com o cabeçalho de assinatura em cada chamada.

E se o meu endpoint estiver fora do ar?

Qualquer resposta diferente de 2xx ou timeout é repetida com backoff. Responda 2xx rapidamente e processe o evento em segundo plano para ficar bem dentro da janela.

Posso receber eventos de apenas uma conta?

Os eventos de entrega trazem accountId e a plataforma, então filtre do seu lado. Os webhooks são restritos a um espaço de trabalho, não a uma conta individual.

Posso testar sem publicar de verdade?

Aponte um webhook para uma URL de captura de solicitações e agende um post em uma conta de teste. Os eventos são idênticos em todos os ambientes.

Preciso mesmo de webhooks?

Não. GET /v1/posts/:id/deliveries retorna o mesmo status sob demanda. Os webhooks poupam o polling.

Comece a construir com Webhooks hoje

Começar é grátis e a API completa está incluída. Crie uma chave e faça sua primeira chamada em minutos.

Obtenha sua chave de API