Skip to main content

validateWebhookSignature()

Available from v3.2.30

Validates that the signature that was received by a webhook endpoint is authentic. If the validation fails, an error is thrown.

API

The function accepts an object with three key-value pairs:

secret

The same webhook secret that was passed to renderMediaOnLambda()'s webhook options.

body

The body that was received by the endpoint - takes a parsed JSON object, not a string.

signatureHeader

The X-Remotion-Signature header from the request that was received by the endpoint.

Example

In the following Next.JS webhook endpoint, an error gets thrown if the signature does not match the one expected one or is missing..

pages/api/webhook.ts
tsx
import {
validateWebhookSignature,
WebhookPayload,
} from "@remotion/lambda/client";
 
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
validateWebhookSignature({
secret: process.env.WEBHOOK_SECRET as string,
body: req.body,
signatureHeader: req.headers["x-remotion-signature"] as string,
});
 
// If code reaches this path, the webhook is authentic.
const payload = req.body as WebhookPayload;
if (payload.type === "success") {
// ...
} else if (payload.type === "timeout") {
// ...
}
 
res.status(200).json({
success: true,
});
}
pages/api/webhook.ts
tsx
import {
validateWebhookSignature,
WebhookPayload,
} from "@remotion/lambda/client";
 
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
validateWebhookSignature({
secret: process.env.WEBHOOK_SECRET as string,
body: req.body,
signatureHeader: req.headers["x-remotion-signature"] as string,
});
 
// If code reaches this path, the webhook is authentic.
const payload = req.body as WebhookPayload;
if (payload.type === "success") {
// ...
} else if (payload.type === "timeout") {
// ...
}
 
res.status(200).json({
success: true,
});
}

See Webhooks for an Express example.

See also