How to Create a GitHub App (and What to Put in the Webhook URL Field)

WebhookBox TeamPublished July 31, 2026Updated July 31, 20269 min read

To create a GitHub App, you register it under Settings → Developer settings → GitHub Apps — and the registration form asks for one thing most people don't have yet: a Webhook URL. The field is required whenever the "Active" checkbox is selected, and it comes selected by default.

The fix takes about 30 seconds: open webhookbox.net, copy the webhook URL it mints for you instantly (no signup), and paste it into the form. Your app registers cleanly, every event GitHub sends is captured and inspectable, and when your real server is ready you forward or replay everything to it. This guide walks through the whole registration, field by field.

What is a GitHub App (and when you need one)

A GitHub App is GitHub's first-class way to build an integration. Unlike a personal access token (tied to an employee's account) or an OAuth App (which acts on behalf of whoever authorized it), a GitHub App has its own identity: it is installed on an organization or on specific repositories, gets fine-grained permissions (for example "read issues, write pull requests, nothing else"), authenticates with short-lived installation tokens, and — the part this guide cares about — can receive webhooks for the events it subscribes to.

That's why connecting a tool to a company's GitHub almost always means creating a GitHub App under the organization: CI bots, code-review assistants, issue triagers, deployment tools and internal dashboards all follow this model. GitHub's own docs recommend GitHub Apps over OAuth Apps for new integrations.

Step 1 — Get your webhook URL first (30 seconds, no signup)

  1. Open webhookbox.net. A unique webhook inbox is minted for you on the spot — no account, no credit card.
  2. You get two real endpoints: one for Development and one for Production, in the form https://hooks.webhookbox.net/ep_….
  3. Copy the Production URL — that's what goes into the GitHub form in the next step.
WebhookBox panel with the unique webhook URL, the environment toggle and the Copy URL button
Open webhookbox.net, select Production and hit Copy URL — no signup needed.

How long does it live? An anonymous inbox lasts 7 days (or 500 requests). Create a free account and the same URL becomes permanent — the claim keeps your full capture history, and nothing needs to change on the GitHub side. See plans and limits.

Step 2 — Create the GitHub App, field by field

Open the registration form

For a personal account: click your profile picture → SettingsDeveloper settings GitHub AppsNew GitHub App.

For an organization (the usual case for company integrations): profile picture → Your organizationsSettings next to the org → Developer settingsGitHub Apps New GitHub App. Registering under the org keeps ownership with the company instead of an individual employee — the full navigation is in GitHub's registration docs.

Name, description and Homepage URL

The Create GitHub App form with the name, description and homepage URL fields
The top of the registration form: name (max 34 characters), description and homepage.
  • GitHub App name — required, up to 34 characters, unique across GitHub. It is lowercased with spaces turned into dashes when displayed.
  • Description — optional; shown to users when they install the app.
  • Homepage URL — required, but low-stakes: your company site or even the repository URL of the project works.

Identifying and authorizing users (optional)

The Callback URL only matters if people will log in through your app (the OAuth user-authorization flow). For a server-to-server integration that reacts to events, leave it empty. Keep "Expire user authorization tokens" checked — it's GitHub's recommendation. The same goes for the Setup URL under "Post installation": skip it unless you need to redirect users somewhere after installing.

Webhook — Active, Webhook URL and Secret

This is the section that blocks most registrations. Keep Active checked — your integration exists to receive events — and paste the WebhookBox URL you copied in Step 1 into Webhook URL:

GitHub App webhook section with a WebhookBox capture URL pasted into the required Webhook URL field
The required field, solved: a real endpoint that stores and displays everything GitHub sends.

The Webhook secret is optional — it's an extra security layer, recommended once you head to production. GitHub uses it to sign every delivery (the X-Hub-Signature-256 header), which is how your server can verify a request really came from GitHub. If you want one, generate a high-entropy value:

terminal
openssl rand -hex 32

If you set it, store it in your password manager — you'll configure the same value on the receiving side later. WebhookBox recognizes GitHub's signature scheme and can verify each delivery against your secret, so you can confirm the signatures are valid before you have written a single line of server code.

Permissions

Grant the least you need — permissions define what the app can touch, and installers see the list. Metadata: Read-only is included automatically. For example, an issue-triage bot needs Issues: Read & write and nothing else. You can add permissions later (existing installations are asked to approve the change).

Subscribe to events

The event list depends on the permissions you granted: pick the ones your integration cares about (for example Issues, Pull request, Push). With no extra permissions you'll still see Installation target, Meta and Security advisory available.

Where can this GitHub App be installed?

Permissions, event subscription and installation scope options at the end of the GitHub App form
Permissions, events and installation scope — then the Create GitHub App button.

Only on this account (default) is right for internal company tooling. Choose Any account only if other users or orgs will install your app. Click Create GitHub App — done. On the next screen, note the App ID and generate a private key (a .pem file): you'll need both to authenticate API calls later.

Step 3 — Install the app and watch events arrive

A GitHub App does nothing until it is installed. From the app's settings page, open Install App in the sidebar, pick your organization, and choose All repositories or a selected list.

The moment you install it, GitHub sends your first delivery: an installation event (repository webhooks send a ping; GitHub Apps send installation instead). Switch to your WebhookBox tab — the request is already there:

WebhookBox panel with the unique webhook URL and recent deliveries arriving as cards
Every delivery shows up in the panel feed the moment it arrives — open a card to inspect headers and payload.

Open the request to inspect the headers that matter — X-GitHub-Event (the event type), X-GitHub-Delivery (a unique delivery id) and X-Hub-Signature-256 (the HMAC signature) — and the full JSON payload as a navigable tree. Now trigger a real event: open an issue or push a commit in an installed repository and watch it land. This is the fastest way to learn the exact payload shape you'll be coding against.

On the GitHub side, the app's Advanced tab lists every recent delivery with its response code — and a Redeliver button, handy once your real endpoint takes over.

When your real server is ready

You have two clean paths out of the temporary setup — and neither loses data:

Flow diagram: GitHub delivers webhooks to WebhookBox, which stores them and forwards or replays to your server
GitHub delivers once to a stable address; WebhookBox stores, forwards and replays.
  1. Switch the URL. Edit the GitHub App and replace the Webhook URL with your production endpoint. Everything captured during development stays in WebhookBox, and you can batch-resend it to the new destination so your server processes the backlog too.
  2. Keep the inbox in front. Leave the GitHub App pointing at WebhookBox and turn on forwarding to your server (automatic retries with backoff, plus per-delivery visibility). You get a permanent record of every event, replay on demand — and you never touch the GitHub App's settings again. The sender is configured once, forever.

That second path is the quiet superpower of starting with a webhook inbox: the integration was receiving, storing and verifying events from minute one — before your server existed — and going live was a switch you flipped on your side, not GitHub's. We unpack that pattern — and why it's worth keeping in production — in how to receive webhooks instantly.

FAQ

Is the Webhook URL required when creating a GitHub App?

Yes, whenever the "Active" checkbox in the Webhook section is selected — and it is selected by default. If you uncheck it, the app registers without a URL but receives no events at all, which defeats the purpose of most integrations. The practical fix is pasting a capture URL (for example a free WebhookBox endpoint) and pointing it at your real server later.

Can I change the webhook URL after the GitHub App is created?

Yes. Open the app under Settings → Developer settings → GitHub Apps → Edit, change the Webhook URL and save. Note that past deliveries are not resent automatically: you can redeliver them one by one from the Advanced tab, or — if the old URL was a webhook inbox like WebhookBox — batch-resend everything it captured to the new destination.

What is the difference between a GitHub App and an OAuth App?

A GitHub App has its own identity, fine-grained per-repository permissions, built-in webhooks and short-lived installation tokens. An OAuth App acts as the user who authorized it, with broader scopes. GitHub recommends GitHub Apps for new integrations, especially for organizations.

How long does the free WebhookBox URL last?

Without an account, an inbox lives for 7 days or 500 requests, whichever comes first. Creating a free account claims the same URL permanently — nothing to reconfigure on the GitHub side — with 1 endpoint, 5,000 stored requests and 7-day retention on the Free plan; paid plans extend those limits.

Does WebhookBox verify GitHub webhook signatures?

Yes. GitHub signs every delivery with the X-Hub-Signature-256 header (HMAC of the payload using your webhook secret). WebhookBox detects GitHub deliveries, shows the signature headers, and can verify each delivery against the secret you configure.