Skip to content
GitHub webhook tester

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. 1. Configure

    Create an endpoint, then add its Webhook URL under repository Settings → Webhooks with application/json and Active selected.

  2. 2. Send

    Click Add webhook. GitHub creates the selected setup example by sending one ping delivery immediately.

  3. 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. 4. Diagnose

    If no request appears, compare the Payload URL, Active setting and GitHub's Recent deliveries result.

Explore the inspectorSample data

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.

Requests1 sample
POST

/

200
200 OK3 msapplication/json548 B

Payload 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
Request captured

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.

Ready to inspect a request?