Skip to main content
Every webhook Social media studio delivers follows the same envelope and signing scheme. This page shows the exact request shape, how to verify the signature, and what the data block looks like for common events.

Request Format

Headers

Every delivery includes these headers:

Envelope

Unless you configure a custom payloadTemplate, the body is a JSON object with four fields:
  • event — The exact event name (matches X-Webhook-Event)
  • category — The category the event belongs to (e.g. post, inbox, subscription)
  • timestamp — ISO-8601 timestamp of when the event was dispatched
  • data — The event-specific payload (see examples below)
Retries reuse the same X-Webhook-Delivery-Id. Use it as an idempotency key so a retried delivery doesn’t re-process an already-handled event.

Signature Verification

Every request body is signed with your endpoint’s secret using HMAC-SHA256. Verify it on every request to confirm the delivery genuinely came from Social media studio.
Always verify using the raw request body before it’s parsed as JSON — re-serializing the parsed object will change whitespace and invalidate the signature.

Example Payloads

The data block shape depends on the event. Here are representative examples from commonly-used categories.

Post

Approval

Inbox

WhatsApp

Social Account

Subscription

The newPlanName field contains the internal plan identifier, such as scale for Advanced.

AI

Knowledge Hub

Analytics

Best Time

Referral

See the Webhooks Overview for the full list of 147 events across 26 categories.

Custom Payload Templates

If your endpoint expects a different shape (e.g. Slack, Discord), set a payloadTemplate on your webhook subscription. Available variables are:
  • {{event}}
  • {{category}}
  • {{timestamp}}
  • {{data}} — the full data object as JSON
  • {{data.any_field}} — any nested field from the event-specific payload
Unresolved variables are left in place (e.g. {{data.postId}} stays literal if the event doesn’t provide postId). See the overview page for Discord and Slack template examples.

Testing Locally

While developing:
  1. Use a tunneling tool like ngrok or Cloudflare Tunnel to expose your local server.
  2. Create a webhook subscription in Settings → Webhooks pointing at your tunnel URL.
  3. Click the Test button on the subscription to send a sample event without triggering real activity.
  4. Inspect the payload in Webhook.site if you want to see the raw request before writing a verifier.
If your endpoint fails 10 consecutive deliveries, the subscription is automatically disabled. Re-enable it from the dashboard after fixing the issue.