diff --git a/README.md b/README.md
index 52e1c6fb..285dc035 100644
--- a/README.md
+++ b/README.md
@@ -96,8 +96,9 @@ source.onmessage = (event) => {
 8. [webhooks.onError()](#webhooksonerror)
 9. [webhooks.removeListener()](#webhooksremovelistener)
 10. [createNodeMiddleware()](#createnodemiddleware)
-11. [Webhook events](#webhook-events)
-12. [emitterEventNames](#emittereventnames)
+11. [createWebMiddleware()](#createwebmiddleware)
+12. [Webhook events](#webhook-events)
+13. [emitterEventNames](#emittereventnames)
 
 ### Constructor
 
@@ -570,6 +571,63 @@ Used for internal logging. Defaults to [`console`](https://developer.mozilla.org
   
 
 
+### createWebMiddleware()
+
+```js
+import { Webhooks, createWebMiddleware } from "@octokit/webhooks";
+
+const webhooks = new Webhooks({
+  secret: "mysecret",
+});
+
+const middleware = createWebMiddleware(webhooks, { path: "/webhooks" });
+
+// Example usage in Deno
+Deno.serve({ port: 3000 }, middleware);
+```
+
+The middleware returned from `createWebMiddleware` can also be used in serverless environments like AWS Lambda, Cloudflare Workers, and Vercel.
+
+
+  
+    
+      | + +webhooks+        
+          Webhooks instance
+        
+ | +        Required.
++ | 
+    
+      | + +path+        
+          string
+        
+ | +        Custom path to match requests against. Defaults to +/api/github/webhooks.
+ | 
+    
+      | + +log+        
+          object
+        
+ | +
+Used for internal logging. Defaults to [`console`](https://developer.mozilla.org/en-US/docs/Web/API/console) with `debug` and `info` doing nothing.
+
++ | 
+  
+
+
 ### Webhook events
 
 See the full list of [event types with example payloads](https://docs.github.com/developers/webhooks-and-events/webhook-events-and-payloads/).
diff --git a/package.json b/package.json
index c0c7f0aa..6f35a2f2 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,8 @@
   "scripts": {
     "build": "node scripts/build.mjs && tsc -p tsconfig.json",
     "generate-types": "node --loader=ts-node/esm scripts/generate-types.ts",
-    "lint": "prettier --check 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json",
-    "lint:fix": "prettier --write 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json",
+    "lint": "prettier --check 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json 'src/event-handler/README.md'",
+    "lint:fix": "prettier --write 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json 'src/event-handler/README.md'",
     "pretest": "npm run -s lint",
     "test": "vitest",
     "validate:ts": "tsc --noEmit --noImplicitAny --target es2023 --esModuleInterop --moduleResolution node16 --module node16 --allowImportingTsExtensions test/typescript-validate.ts"
diff --git a/src/event-handler/README.md b/src/event-handler/README.md
index 2cd3dfb7..afd2c764 100644
--- a/src/event-handler/README.md
+++ b/src/event-handler/README.md
@@ -5,21 +5,23 @@ If you implement the route to receive webhook events from GitHub yourself then y
 ## Example
 
 ```js
-const { createEventHandler } = require('@octokit/webhooks')
+import { createEventHandler } from "@octokit/webhooks";
 const eventHandler = createEventHandler({
-  async transform (event) {
+  async transform(event) {
     // optionally transform passed event before handlers are called
-    return event
-  }
-})
-eventHandler.on('installation', asyncInstallationHook)
+    return event;
+  },
+});
+eventHandler.on("installation", asyncInstallationHook);
 
 // put this inside your webhooks route handler
-eventHandler.receive({
-  id: request.headers['x-github-delivery'],
-  name: request.headers['x-github-event'],
-  payload: request.body
-}).catch(handleErrorsFromHooks)
+eventHandler
+  .receive({
+    id: request.headers["x-github-delivery"],
+    name: request.headers["x-github-event"],
+    payload: request.body,
+  })
+  .catch(handleErrorsFromHooks);
 ```
 
 ## 🚨 Verify events
@@ -27,11 +29,11 @@ eventHandler.receive({
 If you receive events through a publicly accessible URL, make sure to verify that the event request is coming from GitHub:
 
 ```js
-import { verify } from '@octokit/webhooks';
-const secret = 'mysecret'
+import { verify } from "@octokit/webhooks";
+const secret = "mysecret";
 
-if (!verify(secret, request.payload, request.headers['x-hub-signature'])) {
-  throw new Error('Signature does not match event payload & secret')
+if (!verify(secret, request.payload, request.headers["x-hub-signature-256"])) {
+  throw new Error("Signature does not match event payload & secret");
 }
 ```