Webhooks
Recibe notificaciones HTTP firmadas cuando tus publicaciones se publiquen, se programen o fallen
https://post.adaptlypost.com/post/api/v1/webhooksRegistra un endpoint de webhook. Cada webhook recibe todos los eventos de publicaciones, firmados con su secreto.
Parámetros del cuerpo
| Parametro | Tipo | Descripcion |
|---|---|---|
urlOBLIGATORIO | string | Endpoint 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.
| Evento | Descripción |
|---|---|
post.published | Todas las plataformas de la publicación publicaron correctamente |
post.partially_failed | Algunas plataformas publicaron, otras fallaron |
post.failed | La publicación falló en todas las plataformas |
post.scheduled | Se 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.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 eventTambié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.jsoncurl --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"
}'curl --request POST \
--url https://post.adaptlypost.com/post/api/v1/webhooks/<webhook-id>/test \
--header 'Authorization: Bearer <api-key>'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"
}
]
}
}
}{
"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
}