WebhooksAPI

Entérate en cuanto una publicación llega, o no llega

Registra una URL una vez y FoPost la llamará cada vez que se resuelva una entrega. Cada evento incluye el id de la publicación, la cuenta, la plataforma, el enlace permanente o el texto del error, para que tu sistema reaccione sin hacer sondeos.

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"]
  }'

Se dispara al resolverse

Un evento por cada entrega en una cuenta, enviado en cuanto la red confirma o rechaza.

Firmados

Cada solicitud lleva un encabezado de firma para que verifiques que viene de nosotros.

Con reintentos

Una respuesta que no sea 2xx se reintenta con espera progresiva antes de descartar el evento.

Eventos

Los eventos cubren todo el ciclo de publicación

delivery.published se dispara cuando una red acepta la entrega de una cuenta e incluye el enlace permanente. delivery.failed se dispara cuando no se va a publicar e incluye el texto del error de la plataforma. post.published y post.failed se disparan una vez por publicación, cuando todas las cuentas se han resuelto.

Leer la referencia 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

El enlace permanente, listo para guardarlo o enlazarlo desde tu CMS.

delivery.failed

El mensaje de error de la propia red, para que corrijas la causa sin adivinar.

Por espacio de trabajo

Un webhook pertenece a un espacio de trabajo y solo ve las publicaciones de ese espacio.

Verifica

Comprueba el payload antes de actuar

Cada solicitud se firma con el secreto que recibes al crear el webhook. Calcula la firma sobre el cuerpo sin procesar, compárala con el encabezado y rechaza lo que no coincida. Responde 2xx rápido y haz el trabajo después.

Ver la verificación de firmas
Controlador
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();
});

Encabezado de firma

Verifica con el secreto que recibiste al crearlo. Para rotarlo, vuelve a crearlo.

Con marca de tiempo

timestamp te permite ignorar repeticiones antiguas y ordenar los eventos correctamente.

Idempotente por id

Los reintentos llevan el mismo id de evento, así que es fácil descartar una entrega doble.

Gestiona

Crea, lista y elimina endpoints desde el código

Los webhooks son objetos normales de la API. Crea uno por entorno, lístalos para auditar qué hay registrado y borra los que ya no necesites. Apúntalos a una URL de staging durante el desarrollo y cambia a producción con una sola llamada.

Empieza a construir
Automatizaciones ejecutándose según un calendario, desde un feed y en varias redes

Listar endpoints

GET /v1/webhooks muestra cada URL y los eventos a los que está suscrita.

Por entorno

Registra una URL aparte para staging, así las publicaciones de prueba nunca llegan a producción.

Scope webhooks

Gestionar endpoints requiere su propio scope. Una clave solo de publicación no puede añadir ninguno.

Preguntas sobre Webhooks, respondidas

¿Qué eventos hay disponibles?

Eventos de publicaciones, entregas, cuentas, bandeja de entrada y automatizaciones. delivery.published y delivery.failed se disparan una vez por cuenta, así que una publicación en tres redes genera hasta tres; post.published y post.failed se disparan una vez por publicación.

¿Cómo verifico un webhook?

Crea el webhook y guarda el secreto de la respuesta. Calcula una firma sobre el cuerpo sin procesar de la solicitud con ese secreto y compárala con el encabezado de firma en cada llamada.

¿Qué pasa si mi endpoint está caído?

Cualquier respuesta que no sea 2xx o un tiempo de espera agotado se reintenta con espera progresiva. Responde 2xx rápido y procesa el evento en segundo plano para mantenerte holgadamente dentro del plazo.

¿Puedo recibir eventos de una sola cuenta?

Los eventos de entrega incluyen accountId y platform, así que filtra por tu lado. Los webhooks se limitan a un espacio de trabajo, no a una cuenta concreta.

¿Puedo probar sin publicar de verdad?

Apunta un webhook a una URL de captura de solicitudes y programa una publicación en una cuenta de prueba. Los eventos son idénticos en todos los entornos.

¿De verdad necesito webhooks?

No. GET /v1/posts/:id/deliveries devuelve el mismo estado cuando lo pidas. Los webhooks te ahorran el sondeo.

Empieza hoy a construir con la Webhooks

Empezar es gratis y la API completa está incluida. Crea una clave y haz tu primera llamada en minutos.

Consigue tu clave de API