Skip to content

Webhooks

Webhooks push events from your workspace to an HTTPS endpoint you control, seconds after they happen.

Create a subscription

Under Settings → Apps → Webhooks → New webhook (or POST /webhooks with the webhooks:manage scope) provide:

  • URL — must be https:// on port 443 or 8443 and must not resolve to a private address.
  • Events — any subset of the event catalogue.
  • Boards — optional filter; empty means all boards.

The response contains the signing secret (whsec_…) exactly once. Store it; you need it to verify signatures.

Delivery

Each event is delivered as POST with a JSON body:

json
{
  "id": "66dc0a3f8e9b4c1234567890",
  "type": "ticket.state_changed",
  "occurredAt": "2026-09-07T12:05:00Z",
  "workspace": "https://acme.stoneity.com",
  "actor": { "id": 17, "name": "Ayşe Yılmaz" },
  "changes": { "field": "State", "oldValue": "Open", "newValue": "In Progress" },
  "data": { "...ticket representation..." }
}

Headers:

HeaderValue
webhook-idEvent id (use as idempotency key)
webhook-timestampUnix seconds when the delivery was sent
webhook-signaturev1,<base64 HMAC-SHA256> — see Verifying signatures
Content-Typeapplication/json
User-AgentStoneity-Webhooks/1.0

Respond with any 2xx within 10 seconds. Do the real work asynchronously.

Retries

Delivery is at least once. A non-2xx response or a timeout is retried after 1 min, 5 min, 30 min, 2 h, 8 h and 24 h (7 attempts in total). Retries reuse the same webhook-id, so deduplicate on it.

  • 410 Gone disables the subscription immediately.
  • 20 consecutive failed deliveries pause the subscription and notify workspace administrators. Resume it from the settings page once your endpoint is healthy.

Delivery log

Every attempt is visible for 30 days under the subscription's Deliveries panel (status, HTTP code, duration, response excerpt, payload) and via GET /webhooks/{id}/deliveries. Any delivery can be re-sent with the same payload.

Secret rotation

Rotate secret issues a new whsec_…. For 24 hours deliveries are signed with both the new and the old secret (two space-separated signatures), so you can switch without downtime.

Testing

Test on a subscription queues a webhook.test event so you can check connectivity and signature verification before real traffic arrives.

Stoneity Public API v1