Skip to content

Vote recorded

POST

Sent to the tenant’s webhook URL once per vote, shortly after the vote is recorded. Verify webhook-signature before trusting the body and deduplicate by webhook-id: delivery is at-least-once. Any non-2xx response, a redirect or no response within 10 seconds is retried with growing delays for about a day, then the delivery is abandoned; the vote feed remains the source for reconciliation.

webhook-id
required
string format: uuid

Event id (UUIDv7), the same on every retry; not data.id

webhook-timestamp
required
integer format: int64

Send time of this attempt, epoch seconds; signed, so a stale value exposes a replay

webhook-signature
required
string

v1,<base64 HMAC-SHA256> of {webhook-id}.{webhook-timestamp}.{body} keyed with the tenant’s webhook secret

Media typeapplication/json

Standard Webhooks envelope of vote.created

object
data

The vote, in the same shape as the vote feed; ip is always set

object
createdAt
string format: date-time
id
string format: uuid
ip
string
ref
string
serverSlug
string
tenantSlug
string
timestamp

When the vote was recorded

string format: date-time
type
string
Allowed values: vote.created

Any 2xx acknowledges delivery