What You Can Build
With webhooks, you can:- Slack notifications: Get alerts when new interviews are completed
- Zapier automation: Trigger workflows when transcripts are ready
- Custom analysis: Send transcripts to your own AI models
- CRM integration: Update customer records with interview data
- Real-time dashboards: Push data to analytics platforms
Requirements
Webhooks are available exclusively on the Pro plan. Free users can upgrade in Settings → Billing.
- A Hallway Pro subscription
- An endpoint URL that can receive POST requests (HTTPS required)
- Basic understanding of webhook security (HMAC verification)
Creating a Webhook
1
Open Integrations Settings
Go to Settings → Integrations tab. Scroll down to the Webhooks section.
2
Click Add Webhook
Click the Add Webhook button. A dialog will open for configuration.
3
Configure Webhook
Fill in the required fields:
- Name: A friendly name (e.g., “Slack Notifications”)
- URL: Your HTTPS endpoint that will receive webhook payloads
- Description (optional): Notes about what this webhook does
4
Select Events
Choose which events trigger this webhook. Currently available:
session.processing.completed- Triggered when an interview is fully processed
5
Filter by Project (Optional)
By default, webhooks fire for all projects. To limit to specific projects, select them from the dropdown.
6
Save and Copy Secret
Click Create Webhook. A signing secret will be displayed.
Webhook Payload
When an event occurs, Hallway sends a POST request to your endpoint with a JSON payload.Headers
| Header | Description |
|---|---|
Content-Type | application/json |
X-Hallway-Signature | HMAC signature for verification (see Security section) |
User-Agent | Hallway-Webhooks/1.0 |
Payload Structure
Field Descriptions
| Field | Type | Description |
|---|---|---|
id | string | Unique event ID for idempotency |
type | string | Event type that triggered the webhook |
created_at | string | ISO 8601 timestamp of when the event occurred |
api_version | string | API version for payload schema |
account | object | Your Hallway account information |
project | object | Project the session belongs to |
session | object | Interview session details |
respondent_attributes | array | Custom attributes collected from respondent |
transcript | object | Full transcript text and metadata |
insights | object | Summary of extracted insights |
links | object | Direct URLs to view in Hallway |
Security
Signature Verification
Every webhook includes anX-Hallway-Signature header for verification. Always verify signatures to ensure requests come from Hallway.
The signature format is:
tis the Unix timestamp (seconds) when the webhook was sentv1is the HMAC-SHA256 signature
Verification Steps
1
Extract Components
Parse the
X-Hallway-Signature header to get the timestamp and signature.2
Prepare Signed Payload
Concatenate the timestamp and raw request body with a period:
3
Compute Expected Signature
Calculate HMAC-SHA256 of the signed payload using your webhook secret.
4
Compare Signatures
Compare your computed signature with the one in the header using constant-time comparison.
5
Check Timestamp
Verify the timestamp is within 5 minutes of current time to prevent replay attacks.
Code Examples
- Node.js
- Python
- Ruby
Managing Webhooks
Testing Webhooks
To verify your endpoint is working:- Find your webhook in Settings → Integrations → Webhooks
- Click the more options menu (three dots)
- Select Send Test
- A sample payload will be sent to your endpoint
"_test": true so you can identify them.
Viewing Delivery History
To see webhook delivery attempts:- Click the more options menu for your webhook
- Select Delivery History
- View recent deliveries with status, response time, and response codes
Rotating Secrets
If you need to rotate your webhook secret:- Click the more options menu
- Select Rotate Secret
- A new secret will be generated
- Update your endpoint with the new secret immediately
Disabling and Deleting
- Disable: Toggle the webhook off to pause deliveries without deleting configuration
- Delete: Remove the webhook permanently via the options menu
Retry Logic
If your endpoint fails to respond, Hallway retries with exponential backoff:| Attempt | Delay | Total Wait |
|---|---|---|
| 1 | Immediate | 0 |
| 2 | 1 minute | 1 minute |
| 3 | 5 minutes | 6 minutes |
| 4 | 30 minutes | 36 minutes |
| 5 | 2 hours | ~2.5 hours |
Success Criteria
A delivery is considered successful when your endpoint returns:- HTTP status code 2xx (200, 201, 202, etc.)
- Response within 30 seconds
Auto-Disable
If a webhook fails 10 consecutive times, it will be automatically disabled to prevent further failures. You’ll need to manually re-enable it after fixing the issue.Limits
| Limit | Value |
|---|---|
| Maximum webhooks per account | 5 |
| Request timeout | 30 seconds |
| Maximum retry attempts | 5 |
| Signature timestamp tolerance | 5 minutes |
Troubleshooting
Webhook Not Triggering
- Verify the webhook is enabled (not toggled off)
- Check that the event type matches (e.g.,
session.processing.completed) - Ensure the project is included if you set project filters
- Review delivery history for errors
Signature Verification Failing
- Ensure you’re using the raw request body (not parsed JSON)
- Check that your secret is correct (no extra whitespace)
- Verify the timestamp is within 5 minutes
- Use constant-time string comparison
Endpoint Returning Errors
- Your endpoint must return a 2xx status code
- Response must complete within 30 seconds
- Check your server logs for errors
- Use the Send Test feature to debug
Webhook Auto-Disabled
- Check delivery history for the failure pattern
- Fix the underlying issue (endpoint down, auth errors, etc.)
- Re-enable the webhook in Settings
- Consider using the test feature before re-enabling
Best Practices
Verify signatures
Always verify the X-Hallway-Signature header before processing payloads.
Respond quickly
Return a 2xx response immediately, then process asynchronously.
Handle duplicates
Use the event
id field for idempotency in case of retries.Monitor delivery history
Regularly check delivery history to catch issues early.
FAQ
Are webhooks included with Pro?
Are webhooks included with Pro?
Yes, webhooks are included with your Pro subscription at no additional cost. You can create up to 5 webhooks per account.
Can I filter webhooks by project?
Can I filter webhooks by project?
Yes. When creating or editing a webhook, you can select specific projects. Leave empty to receive events from all projects.
What if my endpoint is down?
What if my endpoint is down?
Hallway retries failed deliveries up to 5 times with exponential backoff over approximately 2.5 hours. After 10 consecutive failures, the webhook is auto-disabled.
How do I test without processing a real interview?
How do I test without processing a real interview?
Use the Send Test feature in the webhook options menu. This sends a sample payload with realistic data and
"_test": true flag.Can I receive webhooks for failed sessions?
Can I receive webhooks for failed sessions?
Currently, webhooks only fire for successfully processed sessions (
session.processing.completed). Failed session events may be added in the future.Is there a way to see the actual payload sent?
Is there a way to see the actual payload sent?
Delivery history shows status and timing but not the full payload. For debugging, log incoming requests on your endpoint.
What IP addresses do webhooks come from?
What IP addresses do webhooks come from?
Webhooks are sent from Vercel Edge Functions. Due to dynamic IP allocation, we recommend verifying signatures rather than IP allowlisting.
Next Steps
- Claude AI Integration - Connect Claude to analyze your research data
- Understanding Insights - Learn how insights are extracted
- Exporting Data - Other ways to export your data