Webhook integrations are available on Pro plan and higher.
What Are Webhooks?
Webhooks let Peanuts notify external services whenever you add, update, or delete an entry. This enables powerful automations like:- Adding expenses to a spreadsheet
- Creating tasks in project management tools
- Sending Slack notifications for new entries
- Syncing data to your CRM or database
Setting Up Webhooks
1
Open Your Helper
Navigate to the helper you want to connect.
2
Go to Integrations
Tap the gear icon → Integrations tab.
3
Add Webhook URL
Paste your webhook endpoint URL (from Zapier, Make, n8n, or your custom server).
4
Enable & Save
Toggle the webhook on and save. Peanuts will now send data to your endpoint.
Webhook Payload
When an entry is created, Peanuts sends a POST request with this structure:Event Types
| Event | Description |
|---|---|
entry.created | New entry added |
entry.updated | Existing entry modified |
entry.deleted | Entry removed |
Signature Verification
Peanuts signs every webhook request with HMAC-SHA256. The signature is in theX-Peanuts-Signature header.
How It Works
- Peanuts creates a signature using your webhook secret and the request body
- The signature is sent in the
X-Peanuts-Signatureheader - Your server recreates the signature and compares them
- If they match, the request is authentic
Finding Your Webhook Secret
- Go to your helper’s Integrations settings
- Click Show Secret next to your webhook URL
- Copy the secret for use in your verification code
Verification Examples
Node.js / Express
Node.js / Express
Python / Flask
Python / Flask
PHP
PHP
Popular Integrations
Zapier
Connect Peanuts to 5,000+ apps with no code.1
Create a Zap
Go to zapier.com and create a new Zap.
2
Choose Webhook Trigger
Select Webhooks by Zapier → Catch Hook as your trigger.
3
Copy the Webhook URL
Zapier provides a unique URL. Copy it.
4
Add to Peanuts
Paste the URL in your helper’s Integrations settings.
5
Test & Build
Add a test entry in Peanuts, then continue building your Zap with the received data.
- Expense → Google Sheets row
- Task completed → Slack message
- Meeting logged → Calendar event
Make (Integromat)
Visual automation with advanced logic.1
Create a Scenario
Start a new scenario in make.com.
2
Add Webhook Module
Choose Webhooks → Custom webhook as the first module.
3
Get Webhook URL
Click Add to create a new webhook and copy the URL.
4
Configure in Peanuts
Add the URL to your helper’s webhook settings.
5
Determine Structure
Send a test entry, then click Redetermine data structure in Make.
n8n
Self-hosted workflow automation.1
Add Webhook Node
Create a new workflow with a Webhook trigger node.
2
Configure Path
Set a custom path (e.g.,
/peanuts-expenses).3
Get Production URL
Switch to Production and copy the webhook URL.
4
Connect to Peanuts
Add the URL in your helper’s Integrations.
Google Sheets
Log entries directly to a spreadsheet. Via Zapier:- Trigger: Webhooks by Zapier (Catch Hook)
- Action: Google Sheets → Create Spreadsheet Row
- Map fields:
entry.data.amount→ Column A, etc.
Slack Notifications
Get notified when entries are added. Webhook Setup:- Create an Incoming Webhook in Slack
- Use Zapier/Make to forward Peanuts webhooks to Slack
- Format the message with entry details
Webhook History
Track delivery status for all webhook calls.- Go to helper Settings → Integrations
- Click View History
- See delivery status, response codes, and retry attempts
| Status | Meaning |
|---|---|
| ✅ Delivered | Successfully received (2xx response) |
| ⏳ Pending | Awaiting delivery or retry |
| ❌ Failed | All retry attempts exhausted |
Retry Policy
Failed webhooks are retried automatically:- 3 attempts with exponential backoff
- Retries at 1 minute, 5 minutes, 30 minutes
- After 3 failures, webhook is marked as failed
Best Practices
Security
- Always verify signatures
- Use HTTPS endpoints only
- Store secrets in environment variables
- Rotate secrets periodically
Reliability
- Return 200 quickly, process async
- Implement idempotency (handle duplicates)
- Log webhook payloads for debugging
- Monitor for failures
Quick Response Pattern
Troubleshooting
Webhooks not firing
Webhooks not firing
- Verify the webhook is enabled in settings
- Check the URL is correct and accessible
- Ensure your endpoint returns 2xx status
- Check webhook history for error details
Signature verification failing
Signature verification failing
- Ensure you’re using the raw request body, not parsed JSON
- Check the secret matches exactly (no extra whitespace)
- Verify you’re using SHA256, not SHA1
- Use timing-safe comparison functions
Missing data in payload
Missing data in payload
- Check the entry has data in the expected fields
- Field IDs in payload match your helper’s field configuration
- Some fields may be null if not filled
Duplicate webhooks received
Duplicate webhooks received
- Implement idempotency using
entry.id - Store processed entry IDs temporarily
- Skip if already processed

