skillmake
← marketplace
engineersapisha:f34fc9e9e23fdcf6manual

hookdeck-webhook-skills

Use when receiving and verifying webhooks from Stripe, Shopify, GitHub, and 30+ other providers with signature verification, idempotency, and retry-safe handler patterns.

Install confidence
curl --create-dirs -fsSL https://skillmake.xyz/i/hookdeck-webhook-skills -o ~/.claude/skills/hookdeck-webhook-skills/SKILL.md
Pinned content
sha:f34fc9e9e23fdcf6
Generated with
manual
Source
github.com

The file served at /api/marketplace/hookdeck-webhook-skills-f34fc9e9/raw matches this hash. Inspect before install, then copy the command.

4,178 chars · ~1,045 tokens
---
name: hookdeck-webhook-skills
description: Use when receiving and verifying webhooks from Stripe, Shopify, GitHub, and 30+ other providers with signature verification, idempotency, and retry-safe handler patterns.
source: https://github.com/hookdeck/webhook-skills
generated: 2026-05-17T04:18:22.422Z
category: api
audience: engineers
---

## When to use

- Receiving and verifying a Stripe, Shopify, or GitHub webhook in Express, Next.js, or FastAPI
- Choosing the right signature algorithm per provider (HMAC-SHA256, Ed25519, ECDSA, RSA)
- Adding idempotency so retried webhook deliveries do not double-process
- Tunneling localhost for webhook testing with the Hookdeck CLI
- Handling async work outside the webhook request so the provider does not retry on timeout
- Onboarding a new webhook provider with copy-pasteable verification code

## Key concepts

### Skill-per-provider layout

Each of the 37+ providers ships as its own skill with a SKILL.md entry point, references/verification.md, and examples/ folder containing Express, Next.js, and FastAPI implementations.

### Signature verification matrix

Different providers sign with different algorithms: HMAC-SHA256 (Stripe, Shopify, Slack, GitHub, Linear, Mailgun), HMAC-SHA1 (Twilio, Vercel), Ed25519 (Discord), ECDSA (SendGrid), RSA-SHA256 (PayPal). The skill maps each provider to the correct primitive.

### Timing-safe comparison

All verification code uses constant-time comparison (e.g. crypto.timingSafeEqual) instead of === so attackers cannot infer signature bytes from response timing.

### Idempotency pattern

The webhook-handler-patterns skill captures event IDs in a deduplication store so retries from the provider (or from Hookdeck) produce the same end state even when delivered multiple times.

### Async processing handoff

Handlers verify, enqueue, and respond 2xx quickly; the real work runs on a queue so providers do not retry due to slow handlers.

### Hookdeck CLI localhost tunnel

npx hookdeck-cli listen forwards inbound webhooks from a Hookdeck source to a local port and path so developers can test signature verification end-to-end without deploying.

## API reference

```
npx skills add hookdeck/webhook-skills --skill stripe-webhooks
```

Installs a single provider skill into the project so the agent has Stripe-specific verification and handler guidance.

```
npx skills add hookdeck/webhook-skills --skill stripe-webhooks
```

```
/plugin install stripe-webhooks@webhook-skills
```

Installs the Stripe webhook skill through the Claude Code plugin marketplace.

```
/plugin install stripe-webhooks@webhook-skills
```

```
npx hookdeck-cli listen <port> <source> --path <path>
```

Starts a Hookdeck CLI tunnel that forwards webhooks from a source (e.g. stripe) to a local server path.

```
npx hookdeck-cli listen 3000 stripe --path /webhooks/stripe
```

```
stripe.webhooks.constructEvent(body, sig, secret)
```

Reference signature verification entry point used by the Stripe webhook skill examples; parses the body, verifies the Stripe-Signature header, and returns a typed Event.

```
const event = stripe.webhooks.constructEvent(
  req.rawBody,
  req.headers['stripe-signature'],
  process.env.STRIPE_WEBHOOK_SECRET
);
```

## Gotchas

- Verifying the parsed JSON instead of the raw request body fails signature checks; frameworks must expose req.rawBody for Stripe-style HMAC.
- Using === to compare signature bytes leaks timing information; always use a timing-safe comparison.
- Responding 5xx or timing out causes providers to retry, so any non-idempotent handler will double-charge or double-create.
- Reusing one webhook signing secret across staging and production lets a staging compromise replay into prod; rotate per-environment.
- Clock skew between server and provider can cause replay-protection windows to reject legitimate events; sync NTP and allow a small tolerance.
- Discord and SendGrid require Ed25519/ECDSA, not HMAC; the wrong primitive will silently always reject (or, worse, always accept).

---
Generated by SkillMake from https://github.com/hookdeck/webhook-skills on 2026-05-17T04:18:22.422Z.
Verify against source before relying on details.

File: ~/.claude/skills/hookdeck-webhook-skills/SKILL.md