Intro

Glossary

Webhook docs use different words for the same ideas. These are the terms we use across webhooks.fyi, with links to where each is covered in depth.

The basics

Webhook

An HTTP request — usually a POST with a JSON or form-encoded body — that one system sends to another to report that something happened. See What are webhooks?

Provider

The system that sends webhooks, such as Stripe or GitHub. Also called the producer or sender. See Best Practices for Webhook Providers.

Consumer

The system that receives webhooks. Also called the listener or receiver. See Best Practices for Webhook Consumers.

Endpoint

The URL a consumer registers to receive webhooks, and the code behind it. Also called the webhook URL, callback URL, notification URL, or request URL. Many providers support several endpoints per account — see Multiple URLs.

Event

Something that happened in the provider's system, identified by an event type such as payment_intent.succeeded (Stripe) or pull_request (GitHub). Consumers usually subscribe to the event types they care about.

Payload

The body of the webhook request. A fat or snapshot payload contains the full object that changed; a thin payload contains only identifiers, and the consumer fetches the details from the provider's API. See Dataless Notifications.

Subscription

The registration that connects an endpoint to a set of events. Some providers, such as Microsoft Graph, require subscriptions to be renewed before they expire.

Security

Signature

A value sent with each webhook — usually in a header — that lets the consumer verify who sent it and that the payload wasn't modified. See HMAC and Asymmetric Key Signatures.

Signing secret

The key a provider uses to sign webhooks with HMAC, shared with the consumer when the endpoint is created. Stripe and Standard Webhooks prefix theirs with whsec_.

HMAC

Hash-based Message Authentication Code. The most common webhook signature method: both sides compute a hash of the payload using the shared signing secret and compare. See HMAC.

Shared secret

A password, token, or Basic Auth credential sent with every webhook. Simple, but it authenticates the sender without protecting the payload. See Shared Secret.

Asymmetric signature

A signature created with the provider's private key and verified with its public key, using algorithms such as Ed25519, ECDSA, or RSA. Unlike HMAC, consumers can't create valid signatures themselves. See Asymmetric Key Signatures.

Non-repudiation

The guarantee that only the provider could have produced a message. Asymmetric signatures and mTLS provide it; HMAC does not, because the consumer holds the same secret.

JWT and JWK

JSON Web Tokens carry signed claims; JSON Web Keys publish the public keys used to verify them. Plaid uses both. See OAuth2, JWTs, and JWKs.

mTLS

Mutual TLS: both provider and consumer present certificates during the TLS handshake. See Mutual TLS Authentication.

Verification challenge

A request sent when an endpoint is registered, which the consumer must answer to prove it controls the URL. Also called a handshake, URL validation, or challenge-response check (CRC). See One Time Verification.

Replay attack

Re-sending a captured, validly signed webhook to trigger the same action again. Prevented with signed timestamps and, ideally, by remembering event IDs. See Replay Prevention.

Timestamp tolerance

How old a webhook's signed timestamp may be before the consumer rejects it — commonly five minutes. See Replay Prevention.

Constant-time comparison

Comparing two signatures in a way that takes the same time whether they differ in the first character or the last, so attackers can't learn the expected signature from response timing. In Node.js, crypto.timingSafeEqual. See HMAC.

Raw body

The exact bytes of the request body as received. Signatures are computed over these bytes, so parsing and re-serializing JSON before verifying will break them. See HMAC.

SSRF

Server-Side Request Forgery: using a provider's webhook system to send requests into the provider's own network. See SSRF and Egress Security.

Egress proxy

A proxy that all outgoing webhook traffic must pass through, which blocks requests to internal and reserved addresses. See SSRF and Egress Security.

Operations

At-least-once delivery

A delivery guarantee where every event arrives one or more times. Most providers work this way, so consumers must handle duplicates. See Idempotency.

Idempotency

The property that processing an event more than once has the same effect as processing it once. An idempotency key — such as X-GitHub-Delivery or webhook-id — identifies repeats. See Idempotency and Duplicate Events.

Retry

A provider's repeated attempt to deliver an event after a failure, usually with exponential backoff — waiting longer between each attempt. See Retries and Timeouts.

Event ordering

Whether events arrive in the order they happened. Most providers don't guarantee it. See Event Ordering.

Heartbeat

A periodic request from the provider to check that an endpoint is healthy. See Resiliency.

Circuit breaker

Logic that pauses or slows delivery to an endpoint that keeps failing. See Resiliency.

Key rotation

Replacing a signing secret or key without dropping webhooks, usually by signing with the old and new keys during a transition. See Zero Downtime Rotation.

Versioning

Labeling the signature scheme or payload format so providers can improve them without breaking existing consumers. See Forward Compatibility.

Fan-out

Sending the same event to several endpoints, each with its own configuration. See Multiple URLs.

Tunnel

A tool that exposes a local development server on a public URL so providers can reach it. See Testing and Local Development.

Standard Webhooks

An open specification for webhook headers, signatures, and delivery behavior. See Standardization Efforts.

Previous
← What are webhooks?