Built for startups,
scaled for unicorns
Successfully submitted!
Error! Please try again

Want the full setup walkthrough?
Use these docs for exact setup steps, supported fields, and troubleshooting.
GrowSurf webhooks push participant, reward, fraud-status, and program events to your endpoint as they happen, so your app can stay in sync without making repeated API calls.
Use this setup when you want to store each participant's share link, mirror referral activity into your own database, or hand GrowSurf events off to internal services the moment they happen.

Go to the Options step in the Program Editor, open the Webhooks card, enter your endpoint URL, and publish your changes. GrowSurf lets you send a test request right from the integration so you can inspect the exact payload shape first.
Open the advanced webhook settings and select the events that match the job. The most common sync flow starts with NEW_PARTICIPANT_ADDED, then layers in PARTICIPANT_REACHED_A_GOAL, PARTICIPANT_FRAUD_STATUS_UPDATED, or CAMPAIGN_ENDED only when your downstream system needs those state changes.
The NEW_PARTICIPANT_ADDED payload includes the participant record, their shareUrl, campaign context, and referrer details when the signup came from another participant. That makes it the clean event for saving GrowSurf share links or mirroring participant records into your own database.
Reach for PARTICIPANT_REACHED_A_GOAL when you need to react to reward milestones, PARTICIPANT_FRAUD_STATUS_UPDATED when ops should review a risk change, and CAMPAIGN_ENDED when your app should close out or archive a program.

Add a webhook secret so GrowSurf includes the GrowSurf-Signature header on outgoing requests, then validate that HMAC before you process production traffic. If deliveries begin to fail, GrowSurf retries them automatically and the current app exposes Webhook Event Logs so you can inspect recent failures while you fix the endpoint.
app.post('/growsurf/webhooks', function(req, res) {
const body = req.body;
if (body.event === 'NEW_PARTICIPANT_ADDED') {
upsertParticipant({
email: body.data.email,
shareUrl: body.data.shareUrl,
referrerId: body.data.referredBy || null
});
}
res.json({ received: true });
});Point GrowSurf's test send at webhook.site or your own staging endpoint first so you can confirm headers and payload structure before you deploy the real handler.
Each program can have up to five webhooks, so subscribe only to the events each destination actually needs instead of broadcasting every event everywhere.
Yes. The advanced webhook settings let you select the specific event types to emit for each webhook URL.
GrowSurf supports up to five webhooks per program.
GrowSurf retries failed deliveries with exponential backoff for several days. After repeated failures, the webhook is marked undeliverable until you fix the endpoint and re-enable it.
Trusted by marketing and product teams at fast-growing B2C, fintech, and SaaS companies
