What triggers a webhook
Volta fires webhook events for the following publishing outcomes:post.published— the post was successfully published to the social platformpost.failed— Volta attempted to publish the post but the platform returned an error
Setting up a webhook
Go to Settings → Webhooks
In the dashboard, open Settings in the left sidebar, then click the Webhooks tab.
Enter your endpoint URL
Click Add Webhook and paste in the public HTTPS URL where you want Volta to send events — for example,
https://your-app.com/hooks/volta. The URL must be publicly reachable from the internet.Webhook payload
Every webhook request is aPOST with a Content-Type: application/json body. Here’s an example payload for a published event:
event field will be post.failed and a reason field may be present with additional context from the platform.
Verifying webhook signatures
Every request Volta sends includes anX-Postsider-Signature header. Its value is sha256=<hex>, where the hex string is an HMAC-SHA256 digest of the raw request body, signed with your webhook secret. Always verify this signature before processing the payload.
Here’s how to verify it using the official SDK:
sha256= followed by the hex-encoded HMAC-SHA256(secret, rawBody) and compare it to the header value using a constant-time comparison to prevent timing attacks.
Use
JSON.stringify(req.body) only if your framework parses JSON automatically. If you have access to the raw request bytes, use those instead — parsing and re-serializing JSON can change byte ordering and break the signature check.Retry behavior
If your endpoint returns a non-2xx HTTP status code or fails to respond within 10 seconds, Volta will retry the delivery automatically:| Attempt | Delay |
|---|---|
| 1st retry | ~30 seconds |
| 2nd retry | ~2 minutes |
| 3rd retry | ~10 minutes |
postId as a deduplication key.
Security and SSRF protection
Volta validates every webhook URL before sending and blocks requests to:- Private IP ranges (
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16) - Loopback addresses (
127.0.0.1,::1,localhost) - Link-local addresses (
169.254.x.x) - Non-HTTP protocols (
file:,ftp:,data:,javascript:)
