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
Automatically create Zendesk tickets and Intercom conversations for new issues
Supported Events
Event Type | Description |
| Triggered when a new issue is submitted |
| Triggered when an issue property has been updated (title, description, status, issue type, priority, assignee, new attachment) |
| Triggered when an issue has been deleted |
| Specific event triggered when an issue status has been updated |
| Specific event triggered when an issue's assignee has been updated, added or removed |
| Triggered when issue has a new comment or an attachment is added |
| Triggered when issue has a comment deleted |
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: Triggered when a new issue is submitted
issue.updated: Triggered when an issue property has been updated (title, description, status, issue type, priority, assignee, new attachment)
issue.deleted: Triggered when an issue has been deleted
issue.status_updated: Specific event triggered when an issue status has been updated
issue.assignee_updated: Specific event triggered when an issue's assignee has been updated, added or removed
comment.created: Triggered when issue has a new comment or an attachment is added
comment.deleted: Triggered when issue has a comment deleted
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
Payload example for issue.created
Payload example for issue.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",
},
"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"
}
}
Payload example for issue.updated
Payload example for issue.updated
// issue.updated payload
{
"type": "issue.updated",
"webhookId": "689da5be40f81136a8de18e0",
"webhookTimestamp": 1755176063428,
// WebhookIssue
"data": {
"id": "689cb58c92282025ee91bfc9",
"createdAt": "2025-08-13T15:55:56.983Z",
"updatedAt": "2025-08-14T13:06:58.156Z",
"markerId": null,
"title": "text",
"description": "d",
"publicUrl": "https://marker.io/i/689cb58c92282025ee91bfc9?advanced=1",
"privateUrl": "https://marker.io/projects/67dbebc7c1f84c6577b7c307/issues/all/689cb58c92282025ee91bfc9",
"project": {
"id": "67dbebc7c1f84c6577b7c307",
"name": "Jira"
},
"destination": {
"id": "67dc06756a6dd9e4b9ccb6b0",
"name": "PK - Paddy's Kanban",
"platform": "jira"
},
"reporter": {
"id": "67dbe7d5a3808f271be6a5c6",
"name": "Paddy OH",
"email": "paddy@marker.io"
},
"assignee": null,
"status": "open",
"priority": null,
"issueType": {
"id": "67dc06766a6dd9e4b9ccb6e6",
"name": "Epic",
"description": ""
},
"dueDate": null,
"platform": "jira",
"key": "PK-71",
"url": "https://atlassian.net/browse/PK-71",
"platformShortId": "PK-71",
"platformTitle": "text (getting updated in Jira)",
"platformAssignees": [],
"platformPriority": "Lowest",
"platformIssueType": "Epic",
"platformStatus": {
"label": "In Progress",
"color": "#0052cc",
"value": "10015",
"category": "none"
},
"kind": "advanced",
"fields": [
{
"id": "jira/customfield_10014",
"fieldKey": "com.atlassian.jira.plugin.system.customfieldtypes:float",
"label": "Story Points",
"fieldType": "number",
"value": 1
},
{
"id": "jira/components",
"fieldKey": "components",
"label": "Components",
"fieldType": "select",
"value": null
},
{
"id": "jira/fixVersions",
"fieldKey": "fixVersions",
"label": "Fix versions",
"fieldType": "select",
"value": null
},
{
"id": "jira/labels",
"fieldKey": "labels",
"label": "Labels",
"fieldType": "select",
"value": null
},
{
"id": "jira/duedate",
"fieldKey": "duedate",
"label": "Due date",
"fieldType": "datetime",
"value": null
},
{
"id": "jira/assignee",
"fieldKey": "assignee",
"label": "Assignee",
"fieldType": "select",
"value": null
},
{
"id": "jira/reporter",
"fieldKey": "reporter",
"fieldType": "select",
"label": "Reporter",
"value": {
"label": "Gary Gaspar",
"value": "557058:3807bc55-56c6-4f88-b86a-6177836dc33a",
"avatar": "https://secure.gravatar.com/avatar/e3de4b4f375da76f7b817b932325a95d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FGG-1.png",
"customProperties": {
"member": {
"self": "https://atlassian.net/rest/api/2/user?accountId=557058:3807bc55-56c6-4f88-b86a-6177836dc33a",
"accountId": "557058:3807bc55-56c6-4f88-b86a-6177836dc33a",
"accountType": "atlassian",
"emailAddress": "gary@marker.io",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/e3de4b4f375da76f7b817b932325a95d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FGG-1.png",
"24x24": "https://secure.gravatar.com/avatar/e3de4b4f375da76f7b817b932325a95d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FGG-1.png",
"16x16": "https://secure.gravatar.com/avatar/e3de4b4f375da76f7b817b932325a95d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FGG-1.png",
"32x32": "https://secure.gravatar.com/avatar/e3de4b4f375da76f7b817b932325a95d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FGG-1.png"
},
"displayName": "Gary Gaspar",
"active": true,
"timeZone": "Europe/Brussels",
"locale": "en_US",
"groups": {
"size": 8,
"items": []
},
"applicationRoles": {
"size": 3,
"items": []
},
"expand": "groups,applicationRoles"
}
}
}
},
{
"id": "jira/issuelinks",
"fieldKey": "issuelinks",
"fieldType": "jiraIssueLinks",
"label": "Issue links",
"value": []
},
{
"id": "jira/priority",
"fieldKey": "priority",
"fieldType": "select",
"label": "Priority",
"value": {
"value": "5",
"label": "Lowest",
"image": "https://atlassian.net/images/icons/priorities/lowest_new.svg"
}
}
],
"attachments": [],
"screenshotUrl": "https://s3-eu-west-1.amazonaws.com/codename.screenshots.test/616a944d89b34c7782eb94dd382ac2.jpg",
"console": null,
"network": null,
"browser": {
"name": "Chrome",
"version": "138.0.0.0",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
},
"operatingSystem": {
"family": "OS X",
"version": "15.5.0"
},
"screenSize": {
"width": 1440,
"height": 900,
"pixelRatio": 2
},
"viewport": {
"width": 1440,
"height": 444
},
"zoom": {
"zoomFactor": null
},
"website": {
"url": "https://localhost:1234/?mkrproject=67dc06756a6dd9e4b9ccb6b0",
"pageTitle": null,
"domain": "localhost"
},
"browserStackLaunchUrl": null,
"fullStorySessionUrl": null,
"logRocketSessionUrl": null,
"customData": {
"plan": "free",
"username": "jacob",
"books": [
"The Five Guys",
"Jamie Foxx the Biography"
],
"subscribedAt": "2025-08-13T15:54:26.262Z",
"collectionSize": 130
},
"contextString": "Captured in Chrome 138.0.0.0, 1440 x 444 viewport, @2x pixel ratio, OS X 15.5.0, desktop device"
},
// end WebhookIssue
"updatedFrom": {
// one of... See event list for triggers
"title:": "string",
"description:": "string",
"status": "open",
"priority": "high",
"assignee": {
"id": "67dbe7d5a3808f271be6a5c6",
"name": "Paddy OH",
"email": "paddy@marker.io"
},
"issueType": {
"id": "67dc06766a6dd9e4b9ccb6e6",
"name": "Epic",
"description": ""
},
"platformTitle": "Old title",
"platformAssignees": ["John"],
"platformPriority": "low",
"platformIssueType": "bug",
"platformStatus": {
"label": "Backlog",
"color": "#dfe1e6",
"value": "10017",
"category": "todo",
}
}
Payload example for issue.deleted
Payload example for issue.deleted
// issue.deleted payload
{
"type": "issue.deleted",
"webhookId": "689da5be40f81136a8de18e0",
"webhookTimestamp": 1755176063428,
"data": {
// WebhookIssue
},
}
Payload example for issue.status_updated
Payload example for issue.status_updated
// issue.status_updated payload
{
"type": "issue.status_updated",
"webhookId": "689da5be40f81136a8de18e0",
"webhookTimestamp": 1755176063428,
"data": {
// WebhookIssue
},
"updatedFrom": {
"status": "open"
}
}
Payload example for issue.assignee_updated
Payload example for issue.assignee_updated
// issue.assignee_updated payload
{
"type": "issue.assignee_updated",
"webhookId": "689da5be40f81136a8de18e0",
"webhookTimestamp": 1755176063428,
"data": {
// WebhookIssue
},
"updatedFrom": {
"assignee": {
"id": "67dbe7d5a3808f271be6a5c6",
"name": "Paddy OH",
"email": "paddy@marker.io"
}
}
}
Payload example for comment.created
Payload example for comment.created
// comment.created payload
{
"type": "comment.created",
"webhookId": "689da5be40f81136a8de18e0",
"webhookTimestamp": 1755175925768,
"data": {
"id": "689ddbf546956c9a1b8a7c2c",
"createdAt": "2025-08-14T12:52:05.185Z",
"updatedAt": null,
"commentType": "text",
"authorType": "user",
"author": {
"id": "67dbe7d5a3808f271be6a5c6",
"name": "Paddy OH",
"email": "paddy@marker.io"
},
"text": "Hey, when will this be fixed?",
"visibility": "Everyone",
"userTags": [],
"attachments": [],
"issue": {
"id": "689da5e840f81136a8de1a87",
"title": "test",
"markerId": null,
"publicUrl": "https://marker.io/i/689da5e840f81136a8de1a87?advanced=1",
"privateUrl": "https://marker.io/projects/67dbebc7c1f84c6577b7c307/issues/all/689da5e840f81136a8de1a87",
"project": {
"id": "67dbebc7c1f84c6577b7c307",
"name": "Jira"
}
}
}
}
Payload example for comment.deleted
Payload example for comment.deleted
// comment.deleted payload
{
"type": "comment.deleted",
"webhookId": "689da5be40f81136a8de18e0",
"webhookTimestamp": 1755175977455,
"data": {
"id": "689ddbf546956c9a1b8a7c2c",
"createdAt": "2025-08-14T12:52:05.185Z",
"updatedAt": null,
"commentType": "text",
"authorType": "user",
"author": {
"id": "67dbe7d5a3808f271be6a5c6",
"name": "Paddy OH",
"email": "paddy@marker.io"
},
"text": "Hey, when will this be fixed?",
"visibility": "Everyone",
"userTags": [],
"attachments": [],
"issue": {
"id": "689da5e840f81136a8de1a87",
"title": "test",
"markerId": null,
"publicUrl": "https://marker.io/i/689da5e840f81136a8de1a87?advanced=1",
"privateUrl": "https://marker.io/projects/67dbebc7c1f84c6577b7c307/issues/all/689da5e840f81136a8de1a87",
"project": {
"id": "67dbebc7c1f84c6577b7c307",
"name": "Jira"
}
}
}
}
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 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.
If you're still not receiving our webhooks events withing Cloudflare, we recommend you to whitelist our Webhooks IPs:
52.208.73.11
54.73.118.211
34.246.65.9
52.30.24.231
34.241.95.106
54.171.216.243
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.