Peak Forms · Developers
Process responses via webhook.
Peak One sends every submission as signed JSON to your server. You verify the signature, detect duplicates by ID and process the rest as usual.
HMAC-SHA256, timestamp and event ID in every delivery.
One delivery
Headers and body.
The body always has the same envelope. Under data you find lead, answers, source and campaign.
- Peak-Webhook-Id
- Event ID, same on retry
- Peak-Webhook-Timestamp
- Unix seconds
- Peak-Signature
- t=<time>,v1=<HMAC-SHA256>
- Body
- { id, type, createdAt, scope, data }
Peak One webhook format
Test deliveries also carry test: true so you can ignore them.
Eventos
Four events to subscribe to.
form.submitted
Every submitted request from Forms or Pages.
lead.created
A form, page or booking brought a contact.
lead.qualified
A lead was marked as a fit.
booking.created
A meeting via Peak Booking was confirmed.
Sample code
Verify the signature and embed.
The signed text is “<timestamp>.<raw body>” with your webhook secret. Verify on the raw body before you parse it.
import { createHmac, timingSafeEqual } from "node:crypto";
export function verifyPeakWebhook(secret, rawBody, header, toleranceSeconds = 300) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
const t = Number(parts.t);
if (!t || !parts.v1 || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
const want = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest();
const got = Buffer.from(parts.v1, "hex");
return want.length === got.length && timingSafeEqual(want, got);
}<iframe src="https://app.peak-atlas.com/f/<public-id>?embed=1"
title="Kontakt" loading="lazy"
style="width:100%;min-height:640px;border:0"
data-peak-form="<public-id>"></iframe>How to start
From endpoint to first delivery.
Create an endpoint
Enter a public https address. Internal addresses and IP ranges are refused.
Store the secret
Peak One creates a secret with the prefix whsec_. Keep it server-side.
Send a test
“Send test” delivers a sample event. Check signature and duplicate detection.
Frequently asked questions
How often is a webhook retried?
Up to six attempts, spread from one minute to twelve hours, always with the same ID. Respond quickly with 2xx and process asynchronously.
Does the iframe resize?
Yes, with the full embed code from Peak Forms. It contains a short script that follows the height.
Does the webhook contain all answers?
Yes, under data.answers, plus name, e-mail and campaign details where available.
Goes well with this
Peak Forms
Build on real events.
Create a free account and send yourself the first test event.







