Inspect GitHub webhooks as they arrive.
Debug the delivery from a repository event to an HTTP request. Receive it at a temporary URL and inspect the payload without running a local listener.
No account required. Your new endpoint opens in the workspace.
From URL to captured request
1. Configure
Create an endpoint, then add its Webhook URL under repository Settings → Webhooks with application/json and Active selected.
2. Send
Click Add webhook. GitHub creates the selected setup example by sending one ping delivery immediately.
3. Expected result
One POST appears in history with the ping JSON and GitHub delivery headers; a new endpoint returns HTTP 200 by default.
4. Diagnose
If no request appears, compare the Payload URL, Active setting and GitHub's Recent deliveries result.
Select a request, then explore its body, headers and query. These synthetic samples stay in your browser; this demo creates no endpoint and sends no webhook.
/
200Payload preview
{ "zen": "Synthetic setup ping", "hook_id": 123456, "hook": { "type": "Repository", "id": 123456, "name": "web", "active": true, "events": [ "push" ], "config": { "content_type": "json", "insecure_ssl": "0", "url": "https://receiver.example/e/synthetic" } }, "repository": { "id": 123, "name": "synthetic-repo", "full_name": "synthetic-owner/synthetic-repo", "private": false }, "sender": { "login": "synthetic-owner", "id": 456, "type": "User" }}Transport details
- Request URL
- https://receiver.example/e/sample/
- Received at (UTC)
- 01/01/2026, 12:42:13
- Source IP
- 192.0.2.10
- Content type
- application/json
- Payload size
- 548 B
- Request ID
- 00000000-0000-4000-8000-000000000001
- Response
- 200 OK
- Processing time
- 3 ms
Understand the synthetic example
Reduced synthetic repository setup ping, not a push event. zen is GitHub's ping message; hook_id and hook describe the configured webhook; repository and sender identify the synthetic context. X-GitHub-Event identifies ping, X-GitHub-Delivery identifies this delivery, X-GitHub-Hook-ID identifies the hook and User-Agent identifies Hookshot. X-Hub-Signature-256 is conditional on configuring a secret; this demonstrative placeholder is cryptographically invalid. Capture alone does not verify authenticity or run application logic.
Reduced example · headers and JSON body
content-type: application/json
user-agent: GitHub-Hookshot/synthetic
x-github-hook-id: 123456
x-github-event: ping
x-github-delivery: 00000000-0000-4000-8000-000000000003
x-hub-signature-256: sha256=ILLUSTRATIVE_NOT_VALID
{
"zen": "Synthetic setup ping",
"hook_id": 123456,
"hook": {
"type": "Repository",
"id": 123456,
"name": "web",
"active": true,
"events": [
"push"
],
"config": {
"content_type": "json",
"insecure_ssl": "0",
"url": "https://receiver.example/e/synthetic"
}
},
"repository": {
"id": 123,
"name": "synthetic-repo",
"full_name": "synthetic-owner/synthetic-repo",
"private": false
},
"sender": {
"login": "synthetic-owner",
"id": 456,
"type": "User"
}
}Illustrative signatures do not validate. No production data or signing secret is included.
Missing from request history?
If the ping is missing from history, confirm that GitHub used the receiving URL rather than the workspace URL, the endpoint is active, and the repository webhook remains enabled.
Follow the complete GitHub webhook guide for setup, expected fields and troubleshooting.
Connect an event to its HTTP delivery
Body shows the received payload. Headers shows ordinary captured request headers, including X-GitHub-Event and X-GitHub-Delivery when GitHub sends them. Compare the event name, delivery identifier and request timestamp while debugging.
GitHub webhook setup · WebhookKit quickstart
Capture scope and limits
WebhookKit does not automatically verify GitHub webhook signatures or execute your application’s event handler.
Endpoints expire, and captured requests have a separate retention period. Check your workspace’s expiry and current usage limits. Use test data for debugging.