What Are Webhooks?
Webhooks allow you to receive real-time updates when events happen in your Marker.io workspace. Think of them as “reverse APIs”—instead of pulling for data, we push it to your server when something happens.
Common use cases:
Push website feedback into tools you manage internally
Use Zapier Webhooks to connect Marker.io with any app in the Zapier ecosystem
Integrate Marker.io with unsupported project management tools
Trigger automations or alerts in Slack, Discord, etc.
Keep external databases in sync with feedback reports
Supported Events
Event Type | Description |
| Triggered when a new issue is submitted |
| (coming soon) |
| (coming soon) |
| (coming soon) |
| (coming soon) |
Setting up Webhooks
Creating a Webhook
To create a new webhook:
Go to Workspace Settings > Webhooks
Click Create webhook
Fill in the fields:
Name: A label for your webhook (e.g., “Slack alerts”)
URL: The endpoint where Marker.io will send the payload
Events: Select the events you want to listen to
Projects: Apply to all projects or select specific ones
Configuration Options
Events
Issue created: Triggers when someone reports a new issue
Issue updated: (coming soon)
Issue status updated: (coming soon)
Issue assignee updated: (coming soon)
Comment created: (coming soon)
Project targeting
All Projects: Webhook triggers for any selected event across your workspace
Specific Projects: Disable "Apply to all" and manually select target projects
Managing Your Webhooks
Once your webhooks are created, you can manage them from the Workspace Settings > Webhooks page.
Click on any webhook name to update its name, URL, events, or project scope.
Use "Send sample webhook" to test your endpoint
Delete webhooks permanently if it's no longer needed.
Payload Format
Each webhook event sends a POST request with the following top-level structure:
{
"type": "issue.created",
"webhookId": "6863faaef12d42a21ab51437",
"webhookTimestamp": 1751547415678,
"data": {
// Event-specific payload
}
}
type
: What happened (like "issue.created")webhookId
: Unique ID of the webhookwebhookTimestamp
: UNIX timestamp (ms) when the event was triggereddata
: Full details of the event
Example: issue.created
Here's what you'll get when an issue is created:
{
"type": "issue.created",
"webhookId": "68690db898b5767ca2c3fbd7",
"webhookTimestamp": 1751876876200,
"data": {
"id": "6864f4ee8ea25470b6b7bc34",
"createdAt": "2025-07-07T08:27:56.199Z",
"updatedAt": "2025-07-07T08:27:56.199Z",
"markerId": "NT-1",
"title": "Sample issue",
"description": "Sample description",
"publicUrl": "https://marker.io/i/6864f4ee8ea25470b6b7bc34?advanced=1",
"privateUrl": "https://marker.io/projects/67dd8d16c5821a340c9af705/issues/all/6864f4ee8ea25470b6b7bc34",
"project": {
"id": "67dd8d16c5821a340c9af705",
"name": "No tool"
},
"destination": {
"id": "67dd8d16c5821a340c9af706",
"name": "No tool",
"platform": "notool"
},
"reporter": {
"id": "67dbe7d5a3808f271be6a5c6",
"name": "Sarah Johnson",
"email": "sarah.johnson@example.com",
"role": "admin"
},
"assignee": {
"id": "67dbe7d5a3808f271be6a5c6",
"name": "Alex Chen",
"email": "alex.chen@example.com"
},
"status": "open",
"priority": "medium",
"issueType": {
"id": "68501c291b2970f6885c6289",
"name": "Improvement",
"description": "Enhancements, feature requests, or suggestions."
},
"dueDate": "2025-07-14T08:27:56.199Z",
"platform": "notool",
"key": null,
"url": null,
"platformShortId": null,
"platformTitle": null,
"platformAssignees": [],
"platformPriority": null,
"platformStatus": null,
"fields": [
{
"id": "notool/assignee",
"fieldKey": "notool/assignee",
"label": "Assignee",
"fieldType": "markerUserSelect",
"value": null
},
{
"id": "notool/priority",
"fieldKey": "notool/priority",
"label": "Priority",
"fieldType": "select",
"value": null
},
{
"id": "notool/duedate",
"fieldKey": "notool/duedate",
"label": "Due date",
"fieldType": "datetime",
"value": null
}
],
"attachments": [],
"screenshotUrl": null,
"console": null,
"network": {
"details": {
"success": 4,
"failed": 0
},
"summary": "4 successful",
"url": "https://marker.io/i/6864f4ee8ea25470b6b7bc34?advanced=1&activePane=console"
},
"browser": {
"name": "Chrome",
"version": "137.0.0.0",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
},
"operatingSystem": {
"family": "OS X",
"version": "15.5.0"
},
"screenSize": {
"width": 1920,
"height": 1080,
"pixelRatio": 1
},
"viewport": {
"width": 1920,
"height": 974
},
"zoom": {
"zoomFactor": null
},
"website": {
"url": "https://app.marker.io/demo?destinationId=67938ea9b6c2d6a91868d8ad",
"pageTitle": "Marker.io",
"domain": "app.marker.io"
},
"browserStackLaunchUrl": null,
"fullStorySessionUrl": null,
"logRocketSessionUrl": null,
"customData": {
"plan": "free",
"username": "jane",
"collectionSize": 130
},
"contextString": "Captured in Chrome 137.0.0.0, 1920 x 974 viewport, @1x pixel ratio, OS X 15.5.0, desktop device"
}
}
Note: Some values may be null
depending on the context (e.g., no assignee). More fields may appear automatically for integration projects.
Testing Webhooks
Want to make sure everything's working? Here's how:
Go to your Webhooks page
Click the three dots next to your webhook
Hit Send sample webhook
Check if your endpoint gets the test data
💡 Note: When you create a new webhook, we automatically send a sample issue.created
payload to your endpoint. This helps confirm your server is receiving and processing events correctly.
Security & Signatures
Marker.io signs each webhook payload using your webhook’s secret. The signature is included in the X-Hub-Signature-256
header.
'Content-type': 'application/json' 'X-Hub-Signature-256': [YOUR SIGNATURE TOKEN]
To validate a webhook:
Compute an HMAC SHA-256 hash of the raw request body using your webhook secret.
Compare your computed hash to the one in the
X-Hub-Signature-256
header.Use a constant-time comparison method (e.g.,
crypto.timingSafeEqual
) to prevent timing attacks (never compare using==
).
Important notes:
Signature format:
sha256=<hex_digest>
The hash is based on the raw payload and the secret.
Ensure the payload is handled as UTF-8 if applicable.
Availability
Webhooks are available on the Team and Business plan.
FAQ
Why am I not receiving any webhooks?
Use a 3rd party service like webhook.site to confirm events are firing
Make sure your webhook is enabled and URL is publicly accessible
Your server must return a
200 OK
within 30 secondsVerify your server can handle the JSON we're sending
I'm using Cloudflare and not getting anything
Some customers reported issues when Bot Fight Mode is enabled. Try disabling it in Cloudflare settings to allow our webhook traffic.
Migrating from an old webhook project?
Follow this migration guide to switch from legacy to workspace-wide notifications.
With this guide, you can leverage the full potential of Marker.io's Webhooks integration, ensuring a seamless feedback collection and integration process.