REST APIPOST

Webhooks

Receba notificações HTTP assinadas quando suas publicações forem publicadas, agendadas ou falharem

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

Registre um endpoint de webhook. Cada webhook recebe todos os eventos de publicações, assinados com seu segredo.

Chave API (Bearer token)

Parâmetros do corpo

ParametroTipoDescricao
urlOBRIGATORIOstringEndpoint http(s) acessível publicamente que receberá as entregas de eventos. Hosts privados são rejeitados. Máx. 10 webhooks por espaço de trabalho.

Eventos

Cada webhook registrado recebe todos os eventos a seguir. O nome do evento é enviado no payload e no cabeçalho x-adaptly-event, para que você possa filtrar do seu lado.

EventoDescrição
post.publishedTodas as plataformas da publicação publicaram com sucesso
post.partially_failedAlgumas plataformas publicaram, outras falharam
post.failedA publicação falhou em todas as plataformas
post.scheduledUma publicação foi agendada

Verificação de assinaturas

Cada entrega é assinada com o segredo do seu webhook (whsec_...). Calcule um HMAC-SHA256 sobre "{timestamp}.{rawBody}" e compare com o cabeçalho x-adaptly-signature antes de confiar no payload.

O segredo é exibido apenas uma vez

O segredo de assinatura (whsec_...) é retornado apenas na resposta à solicitação de criação — nunca em respostas de listagem, obtenção ou atualização. Guarde-o com segurança. Se você perdê-lo, exclua o webhook e crie um novo.
Verificar uma 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 e novas tentativas

Seu endpoint deve responder com status 2xx em 10 segundos. Entregas com falha são repetidas até 5 vezes com backoff exponencial. Entregas podem chegar mais de uma vez — torne seu handler idempotente.

Desativação automática

Após 20 entregas com falha consecutivas, o webhook é desativado automaticamente. Reative-o via PATCH { "active": true } ou pelo painel.

Gerenciando webhooks

Os webhooks são gerenciados com os seguintes endpoints, com a mesma autenticação por chave de 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

Você também pode gerenciar webhooks visualmente pelo painel, na página de tokens de API.

Especificação OpenAPI

Uma especificação OpenAPI 3.0 legível por máquina de toda a API REST — incluindo webhooks e o esquema do payload de eventos — está disponível publicamente. Importe-a no Make, n8n ou qualquer ferramenta compatível com OpenAPI.

curl https://post.adaptlypost.com/post/api/v1/openapi.json
Registrar um 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 um evento de teste
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/webhooks/<webhook-id>/test \
  --header 'Authorization: Bearer <api-key>'
Exemplo 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
}