Webhook
Send recording events to any HTTPS endpoint, with custom payloads, auth headers, and retry handling.
Webhook automations send HTTP requests with recording data to any endpoint when content is added to a folder. This enables custom integrations with internal tools, automation platforms like Zapier, and systems without native Screendesk integrations.

When to Use Webhooks
Webhooks are the most flexible automation type. Use them for:
Custom internal tools — Send data to your own applications
Automation platforms — Trigger workflows in Zapier, Make (Integromat), or n8n
Data warehouses — Stream data to analytics platforms
Incident management — Trigger PagerDuty or Opsgenie alerts
CRM systems — Update customer records automatically
Chat platforms — Send to Discord, Teams, or other chat tools
Logging systems — Forward events to Datadog, Sentry, or LogRocket
Webhooks vs. Native Integrations
Use webhooks when:
No native integration exists for your tool
You need custom payload formats
You're building internal tools
You want maximum flexibility
Use native integrations (Slack, Linear, Jira) when:
They exist for your tool
You want easier setup
You need OAuth authentication
You want pre-built formatting
Setup
Configure webhook endpoint
Webhook URL (required): Enter the destination endpoint:
HTTPS Required
Webhook URLs must use HTTPS (not HTTP). This ensures data is encrypted in transit.
HTTP Method: Choose the request method:
POST (default) — Standard for webhooks
PUT — For update-style endpoints
PATCH — For partial updates
DELETE — For deletion workflows
Most webhooks use POST.
Test the webhook
Click Send Test Webhook to verify your configuration:
Screendesk sends a test request to your endpoint
Check that your endpoint receives the request
Review the response in the test results modal
Verify authentication works
Confirm payload format is correct
Test results show:
✅ Success — HTTP 2xx status code received
⚠️ Warning — Non-2xx status with response body
❌ Failed — Timeout, connection error, or 4xx/5xx status
View the full request and response in the test results.
Integration Examples
Zapier
Create workflows with 5000+ apps:
Create a Zap
Go to zapier.com and click Create Zap
For the trigger, search for Webhooks by Zapier
Choose Catch Hook as the trigger event
Copy the provided webhook URL
Slack (via Webhook)
Post to Slack without OAuth:
Webhook URL: Get an incoming webhook URL from Slack:
Go to api.slack.com/apps
Create an app or select existing
Enable Incoming Webhooks
Add webhook to channel
Copy the webhook URL
Custom Payload:
Native Slack Integration
For a simpler setup with more features, use the native Slack integration instead. It provides OAuth authentication, channel selection, and richer formatting options.
PagerDuty
Trigger incidents from critical recordings:
Webhook URL:
Headers:
Custom Payload:
Get your integration key from PagerDuty → Services → Integrations → Events API V2.
Discord
Post to Discord channels:
Webhook URL: Get from Discord:
Open channel settings
Go to Integrations → Webhooks
Create webhook
Copy URL
Custom Payload:
Microsoft Teams
Post to Teams channels:
Webhook URL: Get from Teams:
Open channel
Click ⋯ (More options)
Connectors → Incoming Webhook
Configure and copy URL
Custom Payload:
Webhook Security
Verify webhook signatures
Screendesk signs all webhooks with HMAC-SHA256. Verify requests are legitimate:
Signature header:
Verification (Node.js):
Verification (Python):
Always Verify Signatures
Without verification, anyone who knows your webhook URL can send fake requests. Always verify the X-Screendesk-Signature header in production.
Retry Policy
Failed webhooks are automatically retried with exponential backoff:
Initial
—
0s
1st retry
1 minute
1m
2nd retry
5 minutes
6m
3rd retry
30 minutes
36m
4th retry
2 hours
2h 36m
5th retry
12 hours
14h 36m
After 5 failed attempts, the webhook is marked as permanently failed.
Success criteria:
HTTP status code 2xx (200-299)
Response received within 30 seconds
Your endpoint should:
Respond with 2xx as quickly as possible
Process webhooks asynchronously if needed
Be idempotent (handle duplicate deliveries)
Return within 30 seconds
Troubleshooting
Connection errors
Symptom: "Failed to connect" or timeout errors
Solutions:
Verify URL is correct and publicly accessible
Ensure endpoint uses HTTPS (not HTTP)
Check firewall allows Screendesk IPs
Confirm endpoint responds within 30 seconds
Test endpoint with curl:
Authentication errors
Symptom: 401 Unauthorized or 403 Forbidden
Solutions:
Verify API keys or tokens are correct
Check header names match exactly (case-sensitive)
Ensure tokens haven't expired
Confirm permissions allow webhook access
Test with a tool like Postman first
Invalid payload
Symptom: 400 Bad Request with validation errors
Solutions:
Validate JSON syntax in custom payload
Check template variables are spelled correctly
Ensure required fields are present
Test payload structure with the endpoint's documentation
Use default payload first, then customize
Timeout errors
Symptom: "Request timed out after 30 seconds"
Solutions:
Optimize endpoint to respond faster
Return 2xx immediately, process asynchronously
Reduce database queries or external API calls
Cache data when possible
Check for infinite loops or blocking operations
View execution logs
Check webhook delivery history:
Open folder Settings → Automations
Click the webhook automation
View Execution Log tab
Logs show:
Timestamp
HTTP status code
Request payload sent
Response body received
Error messages
Retry attempts
Best Practices
Respond quickly
Return 2xx status as fast as possible:
❌ Don't do this:
✅ Do this:
Make endpoints idempotent
Handle duplicate deliveries gracefully:
Log webhook requests
Keep logs for debugging:
Log all incoming webhook requests
Store request body and headers
Track processing status
Keep logs for at least 30 days
Alert on high failure rates
Monitor and alert
Set up monitoring for:
Webhook failure rate > 5%
Response time > 10 seconds
Missing webhooks (check counts)
Authentication failures
Endpoint downtime
Use your logging platform or APM tool to track these metrics.
Test thoroughly
Before going live:
Test with the Send Test Webhook button
Verify all data fields are present
Check template variables populate correctly
Confirm authentication works
Test with your full processing pipeline
Verify retries work as expected
Last updated
Was this helpful?