REST APIPOST

Webhooks

Recibe notificaciones HTTP firmadas cuando tus publicaciones se publiquen, se programen o fallen

POSThttps://post.adaptlypost.com/post/api/v1/webhooks

Registra un endpoint de webhook. Cada webhook recibe todos los eventos de publicaciones, firmados con su secreto.

Clave API (token Bearer)

Parámetros del cuerpo

ParametroTipoDescripcion
urlOBLIGATORIOstringEndpoint http(s) accesible públicamente que recibirá las entregas de eventos. Se rechazan hosts privados. Máx. 10 webhooks por espacio de trabajo.

Eventos

Cada webhook registrado recibe todos los eventos siguientes. El nombre del evento se envía en el payload y en la cabecera x-adaptly-event, para que puedas filtrar en tu lado.

EventoDescripción
post.publishedTodas las plataformas de la publicación publicaron correctamente
post.partially_failedAlgunas plataformas publicaron, otras fallaron
post.failedLa publicación falló en todas las plataformas
post.scheduledSe programó una publicación para el futuro

Verificación de firmas

Cada entrega está firmada con el secreto de tu webhook (whsec_...). Calcula un HMAC-SHA256 sobre "{timestamp}.{rawBody}" y compáralo con la cabecera x-adaptly-signature antes de confiar en el payload.

El secreto se muestra solo una vez

El secreto de firma (whsec_...) se devuelve solo en la respuesta a la solicitud de creación — nunca en respuestas de lista, obtención o actualización. Guárdalo de forma segura. Si lo pierdes, elimina el webhook y crea uno nuevo.
Verificar una entrega (Node.js)
const crypto = require('crypto');

const expected =
  'sha256=' +
  crypto
    .createHmac('sha256', webhookSecret)
    .update(`${req.headers['x-adaptly-timestamp']}.${rawBody}`)
    .digest('hex');

const isValid = expected === req.headers['x-adaptly-signature'];

Entrega y reintentos

Tu endpoint debe responder con un estado 2xx en 10 segundos. Las entregas fallidas se reintentan hasta 5 veces con backoff exponencial. Las entregas pueden llegar más de una vez: haz tu handler idempotente.

Desactivación automática

Tras 20 entregas fallidas consecutivas, el webhook se desactiva automáticamente. Reactívalo con PATCH { "active": true } o desde el panel.

Gestión de webhooks

Los webhooks se gestionan con los siguientes endpoints, con la misma autenticación por clave API:

GET    /api/v1/webhooks           # list registered webhooks
GET    /api/v1/webhooks/:id       # get one webhook
PATCH  /api/v1/webhooks/:id       # update url or active
DELETE /api/v1/webhooks/:id       # delete a webhook
POST   /api/v1/webhooks/:id/test  # send a signed webhook.test event

También puedes gestionar los webhooks visualmente desde el panel, en la página de tokens de API.

Especificación OpenAPI

Hay disponible públicamente una especificación OpenAPI 3.0 legible por máquina de toda la API REST — incluidos los webhooks y el esquema del payload de eventos. Impórtala en Make, n8n o cualquier herramienta compatible con OpenAPI.

curl https://post.adaptlypost.com/post/api/v1/openapi.json
Registrar un webhook
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/webhooks \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
  "url": "https://your-server.com/webhook"
}'
Enviar un evento de prueba
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/webhooks/<webhook-id>/test \
  --header 'Authorization: Bearer <api-key>'
Ejemplo de entrega de evento
POST <your-url>
x-adaptly-event: post.published
x-adaptly-webhook-id: wh_abc123
x-adaptly-timestamp: 1784643600
x-adaptly-signature: sha256=3f5a...

{
  "id": "deliver-webhook-...",
  "event": "post.published",
  "createdAt": "2026-07-21T14:20:00.000Z",
  "data": {
    "post": {
      "id": "post_xyz789",
      "status": "COMPLETED",
      "platforms": [
        {
          "platform": "TWITTER",
          "status": "PUBLISHED",
          "platformPostId": "1234567890",
          "publishedAt": "2026-07-21T14:19:58.000Z"
        }
      ]
    }
  }
}
201
{
  "id": "wh_abc123",
  "url": "https://your-server.com/webhook",
  "active": true,
  "secret": "whsec_c99807...",
  "createdAt": "2026-07-21T14:00:00.000Z",
  "updatedAt": "2026-07-21T14:00:00.000Z",
  "lastSuccessAt": null,
  "lastFailureAt": null,
  "disabledAt": null
}