Skip to content

Handling webhooks

When events occur in Plane, webhooks are sent to your Webhook URL.

Webhook headers

HeaderDescription
X-Plane-DeliveryUnique delivery ID
X-Plane-EventEvent type (e.g., issue, issue_comment)
X-Plane-SignatureHMAC-SHA256 signature for verification

Verify signature

Always verify the X-Plane-Signature header:

python
import hmac
import hashlib

def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

Webhook payload

json
{
  "event": "issue",
  "action": "created",
  "webhook_id": "webhook-uuid",
  "workspace_id": "workspace-uuid",
  "data": { ... },
  "activity": {
    "actor": { "id": "user-uuid", "display_name": "John Doe" }
  }
}

See Webhook Events for all event types.