Skip to content

Webhooks

Dojo can send HTTP webhooks when events occur in your repositories. Webhooks are signed with HMAC-SHA256 for security and support filtering by branch and event type.

POST /api/repos/{owner}/{name}/hooks
{
"url": "https://your-server.com/webhook",
"secret": "your-webhook-secret",
"events": ["push", "stack.submitted", "stack.merged"],
"branch_filter": "main",
"active": true
}

Parameters:

FieldRequiredDescription
urlHTTPS endpoint to receive webhooks
secretShared secret for HMAC-SHA256 signature
eventsEvent types to subscribe to (default: all)
branch_filterOnly trigger for matching branch names (glob supported)
activeEnable/disable (default: true)
EventDescription
pushCommits pushed to a ref
stack.submittedStack submitted for review
stack.mergedStack merged
review.approvedStack approved by reviewer
review.rejectedChanges requested on stack
review.commentedComment left on stack
workspace.createdNew workspace created
workspace.committedWorkspace committed

Webhooks are delivered as POST requests with:

HeaderDescription
Content-Typeapplication/json
X-Dojo-EventEvent type (e.g., push)
X-Dojo-SignatureHMAC-SHA256 signature of the body
X-Dojo-DeliveryUnique delivery ID
import { createHmac } from "crypto";
function verifyWebhook(body: string, signature: string, secret: string): boolean {
const expected = createHmac("sha256", secret)
.update(body)
.digest("hex");
return `sha256=${expected}` === signature;
}
{
"event": "push",
"repository": {
"owner": "mies",
"name": "dojo"
},
"ref": "main",
"commits": [
{
"commit_id": "abc123...",
"message": "feat: add search API",
"author_name": "claude",
"timestamp": 1707500000
}
],
"timestamp": 1707500000
}
Terminal window
# List webhooks
GET /api/repos/{owner}/{name}/hooks
# Update a webhook
PATCH /api/repos/{owner}/{name}/hooks/{hookId}
# Delete a webhook
DELETE /api/repos/{owner}/{name}/hooks/{hookId}
# View delivery history
GET /api/repos/{owner}/{name}/hooks/{hookId}/deliveries

Failed deliveries (non-2xx responses) are logged but not automatically retried. Check the delivery history endpoint for failed deliveries.