Skip to content

Webhooks

Webhooks allow you to send feedback data to any HTTP endpoint in real-time. Build custom integrations with Zapier, Make, n8n, or your own systems.

Setup

  1. Go to Integrations in the main navigation and find the Webhook card

  2. Click Connect to configure your webhook

  3. Enter your endpoint URL (must be HTTPS)

  4. Select events to subscribe to

  5. Add custom headers (optional, for authentication)

  6. Test the webhook

  7. Save

Events

Subscribe to these webhook events:

EventDescription
submission.createdNew feedback submitted
survey.createdNew survey created
survey.updatedSurvey settings changed
project.updatedProject settings changed

Webhook Payload

submission.created

{
"event": "submission.created",
"timestamp": "2025-01-18T12:00:00.000Z",
"project_id": "uuid-here",
"data": {
"id": "submission-uuid",
"survey_id": "survey-uuid",
"survey_name": "NPS Survey",
"survey_type": "nps",
"score": 9,
"rating": null,
"message": "Great product, love the new features!",
"email": "[email protected]",
"screenshot_url": "https://s3.amazonaws.com/...",
"metadata": {
"url": "https://example.com/dashboard",
"browser": "Chrome 120",
"viewport": "1920x1080"
},
"created_at": "2025-01-18T12:00:00.000Z"
}
}

Custom Headers

Add authentication or custom headers to your webhook requests:

Authorization: Bearer your-token-here
X-Custom-Header: your-value
X-API-Key: your-api-key

Security

Best Practices

  • Use HTTPS endpoints only
  • Implement authentication via custom headers
  • Validate payload structure on your server
  • Rate limit your endpoint
  • Return 200 OK quickly, process async

Signature Verification (Coming Soon)

Webhook signature verification is coming soon. This will allow you to verify that requests are genuinely from HappyPanda.

X-HappyPanda-Signature: sha256=abc123...

Retry Policy

Failed webhook deliveries are retried automatically:

RetryDelay
1stAfter 1 minute
2ndAfter 5 minutes
3rdAfter 15 minutes
4thAfter 1 hour
5thAfter 6 hours

After 5 failed attempts, the webhook is disabled and you’ll receive a notification.

Testing Webhooks

Use the Test Webhook button to:

  • Send a sample payload to your endpoint
  • Verify the endpoint is reachable
  • Check the response status
  • Debug integration issues

Zapier Integration

  1. Create a Zapier webhook trigger (Webhooks by Zapier)

  2. Copy the Zapier webhook URL

  3. Add it as a webhook in HappyPanda

  4. Build automation workflows in Zapier

Custom CRM Integration

Send feedback directly to your CRM:

  1. Configure webhook to your CRM’s API endpoint
  2. Use custom headers for authentication
  3. Map feedback data to CRM fields
  4. Create contacts or support tickets automatically

Analytics & Data Warehouse

Stream feedback to your analytics platform:

  1. Set up webhook to your data pipeline (Segment, Fivetran, etc.)
  2. Process and transform feedback data
  3. Load into your data warehouse
  4. Build custom dashboards and reports

Alerting

Create custom alerting workflows:

  1. Send webhooks to PagerDuty, Opsgenie, or custom alerting
  2. Filter by score in your system
  3. Route critical feedback to on-call teams

Example: Node.js Webhook Handler

const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook/happypanda', (req, res) => {
const { event, data } = req.body;
if (event === 'submission.created') {
console.log('New feedback:', data.message);
console.log('Score:', data.score);
console.log('Email:', data.email);
// Process the feedback
// - Save to database
// - Send alert if negative
// - etc.
}
// Return 200 quickly
res.status(200).json({ received: true });
});
app.listen(3000);

Troubleshooting

Webhook not triggering

  1. Verify URL - Ensure the URL is correct and reachable
  2. Check event selection - Confirm the event is subscribed
  3. Test endpoint - Your endpoint must return 200 OK
  4. Check webhook status - Ensure webhook is enabled (not disabled from failures)

Receiving unexpected data

  • Review the payload format documentation above
  • Check the event type in the payload
  • Validate JSON schema on your server

Too many requests

  • Implement rate limiting on your endpoint
  • Use batch processing for high-volume projects
  • Consider switching to polling the API instead

Webhook disabled after failures

  • Check your server logs for errors
  • Verify your endpoint returns 200 status
  • Re-enable the webhook after fixing issues

Managing Webhooks

Disable a Webhook

  1. Go to Integrations in the main navigation
  2. Find the Webhook card
  3. Click Configure to access settings
  4. Toggle the webhook off or disconnect

Delete a Webhook

  1. Go to Integrations in the main navigation
  2. Find the Webhook card
  3. Click Disconnect to remove the webhook
  4. Confirm deletion