Introduction
Webhooks allow Mudstack to send real-time updates from your workspace to external services. When an event happens (like a file upload, comment, or review), Mudstack will deliver a JSON payload to your configured endpoint.
Only workspace admins can create, manage, or view webhooks.
Managing Webhooks
You can manage webhooks from Workspace Settings
→ Webhooks
.
Creating a Webhook
- Click
Create a webhook
in the top right corner.
- Enter a Name for the webhook.
- Provide a URL for the endpoint that will receive the payloads.
- Check Allow sensitive data to control if the payload will contain IP or just IDs. If this is unchecked, you must call the api upon receiving the payload.
- Set which events should be sent to the webhook URL
- Add custom headers if needed
The URL and Allow sensitive data options are not editable after creation
Webhooks cannot be edited. To change a webhook, you’ll need to delete it and create a new one. A Secret will be generated after creation for verifying webhook signatures.
Disabling a Webhook
- Toggle the webhook status off by clicking on a webhook, then unchecking the
Enabled
option.
Deleting a Webhook
- Click Delete next to the webhook entry in the table.
Event Payload Examples with Sensitive Data
asset_created
{
"accountId": "b8f71389-2a45-4938-b6d5-0a70f9b9858c",
"workspaceId": "2c8a5e43-58cb-47ec-b8a5-f0de2dcf9121",
"type": "asset_created",
"payload": {
"assetId": "c1822d26-51b1-4923-8d8a-28d496f965cc",
"assetName": "Bot_moodboard_03.png",
"assetPath": "/Concepts/Robot/",
"createdAt": "2025-10-01T22:58:17.062Z"
},
"id": "0e54816a-4c6f-4e64-9826-99ec42f79ef7"
}
asset_status_changed
{
"accountId": "b8f71389-2a45-4938-b6d5-0a70f9b9858c",
"workspaceId": "2c8a5e43-58cb-47ec-b8a5-f0de2dcf9121",
"type": "asset_status_changed",
"payload": {
"assetId": "afdc6c97-82da-4d14-8a1f-915ba0ac2f1b",
"statusName": "record updated",
"statusId": "7b9a9f46-fc5d-4409-8a8f-d1383ebd9f6c",
"changedAt": "2025-10-01T22:58:17.062Z"
},
"id": "c3a72db9-6b8f-4b25-81ff-51a999edca1b"
}
asset_version_added
{
"accountId": "b8f71389-2a45-4938-b6d5-0a70f9b9858c",
"workspaceId": "2c8a5e43-58cb-47ec-b8a5-f0de2dcf9121",
"type": "asset_version_added",
"payload": {
"assetId": "e8e2b38c-8a4a-4ff8-b9e3-5b78915b2ee3",
"checksum": "2dc626b2bc1b7c6cce987e6383b191486f1a1895689e4bf32411d58b203709627ffbf7052a2f5303913fa1d98d8a0e5c40907476e7312fadcc349aac9fcd5a40",
"name": "DPN_flying_bot.fbx",
"sizeBytes": 652175,
"createdAt": "2025-10-01T23:06:14.299Z",
"versionId": "b6bac2a0-ad3b-482a-b966-b4f8a4e595c5"
},
"id": "708fc78d-f3bb-441d-a699-2ef43cd3e26d"
}
commit_added
{
"accountId": "b8f71389-2a45-4938-b6d5-0a70f9b9858c",
"workspaceId": "2c8a5e43-58cb-47ec-b8a5-f0de2dcf9121",
"type": "commit_added",
"payload": {
"authorEmail": "josef@mudstack.com",
"authorName": "Josef Bell",
"commitDescription": "Changed the colors to properly match the armor defaults",
"commitId": "e7a3b44f-44d1-4938-b28e-12f8163cfa6a",
"commitTitle": "Updated cape on robot4arms",
"createdAt": "2025-10-01T23:00:00.496Z"
},
"id": "d93e5e4b-ff6a-4eb8-b123-0d12f5c1d46c"
}
{
"accountId": "b8f71389-2a45-4938-b6d5-0a70f9b9858c",
"workspaceId": "2c8a5e43-58cb-47ec-b8a5-f0de2dcf9121",
"type": "asset_comment_added",
"payload": {
"assetId": "42f19bc0-13e7-4d3d-a935-9304823f93a7",
"authorName": "Joe Bell",
"authorEmail": "josef@mudstack.com",
"commentText": "<p>did you update this <strong><span user_id=\"f56a78b0-fcdb-4b2b-bb9d-a4c31bf059b8\" data-username=\"Josef Bell\" data-linked-resource-type=\"userinfo\">@Josef Bell</span></strong>?</p>",
"commentId": "d24587e3-b04f-43ef-bf9a-7d3316405db8",
"createdAt": "2025-10-02T21:23:38.891Z"
},
"id": "cc02b8c1-45e4-4cc4-b6fd-6a0b9a8c31f5"
}
asset_reviewer_added
{
"accountId": "b8f71389-2a45-4938-b6d5-0a70f9b9858c",
"workspaceId": "2c8a5e43-58cb-47ec-b8a5-f0de2dcf9121",
"type": "asset_reviewer_added",
"payload": {
"assetId": "b5e1af7b-1f24-48a5-81b2-83f374ec3e35",
"createdAt": "2025-10-02T21:25:01.770Z",
"requesterName": "Joe Bell",
"requesterEmail": "josef@mudstack.com",
"requesterId": "c5ec24a9-46b9-4d13-a441-7a2f9d9deeb7",
"reviewerId": "0dbe34a8-9a9a-4e4f-b4b1-78f0d67a0b8f"
},
"id": "0dc7597c-0e1f-4b9e-a52a-20689b69d52b"
}
asset_review_added
{
"accountId": "b8f71389-2a45-4938-b6d5-0a70f9b9858c",
"workspaceId": "2c8a5e43-58cb-47ec-b8a5-f0de2dcf9121",
"type": "asset_review_added",
"payload": {
"assetId": "9d0ee2e7-3f25-4e38-b1cc-2cfb88f57df1",
"createdAt": "2025-10-02T21:25:01.770Z",
"authorName": "Joe Bell",
"authorEmail": "josef@mudstack.com",
"reviewId": "8f0c9b6e-24f5-4b9e-b5ac-6e593d6cd5ea",
"reviewText": "<p>The color space on this export didn’t convert properly.</p>",
"reviewType": "change_request"
},
"id": "6a4f9cb0-2a2b-4b38-b621-d3db4cf94936"
}
Reviews will have a reviewType
of approved
or change_request
depending on the message.
If Allow sensitive data
is unchecked, the responses will only include the type, date, and ids.
Example Integrations
Jira
Use our downloadable sample to automatically create Jira issues when new assets or tasks are added in Mudstack. You can import this into an Automation Rule and enter your webhook URL info
The sample will parse a ticket id found at in the commitTitle
on the commit_added
event. This allows us to map the message to a specific ticket in Jira
Zapier
A general Zap structure will contain the following:
- Webhook catch (use the zap url in Mudstack, and generate some events to show in Zapier)
- IF USING THE API, an Authentication step to use the API
- Formatter for the Date/Time conversion
- Paths to do specific action based on the
type
of event from Mudstack
- Code to generate a url to the file for the message
- API calls to enrich webhook data
- Integration point to send the data out of Zapier
Best Practices
- Use Paths for splitting multiple event types in a single Zap
- Use Formatter to convert Date / Time into something more human readable before sending to other systems.
- You can use the Code block to concatenate assetIDs to generate links, make sure you pass in the input data from the webhook. These urls are only accessbile by users that have permssions in the account and workspace of the file.
# Extract the input values
account_id = input_data.get('accountId', '')
workspace_id = input_data.get('workspaceId', '')
asset_id = input_data.get('assetId', '')
# Construct the URL using string formatting
url = f"https://app.dev.mudstack.com/sh/asset/{account_id}/{workspace_id}/{asset_id}"
# Prepare the output as a dictionary
output = {'url': url}
Using the API with Webhooks
Webhooks push essential event data, but often you’ll need more context.
You can use the Mudstack API in conjunction with webhooks to:
- Fetch full asset metadata from an asset_id.
- Retrieve commit details with a commit_id.
- Join user and workspace information to enrich webhook payloads, like the user name or other file metadata.
Make sure to add this to your Automation
- Make sure you have a step to authenticate before using the API.
- GET Requests to gather additional information
The webhook response will contain the account, workspace, and object IDs for you to collect additional data from the API
If you don’t currently have your API Key, ask us about generating your API Key
Example:
- When a webhook sends asset_created with only an asset ID, call the API to fetch additional fields like tags, linked versions, or folder structure.
- Adding an attachment to a comment or review
- Adding change context to a commit
Best Practices with the API
- When attempting to GET Attachments from a comment or review, make sure to have an error handler. This will allow you to support posting when it returns with an error if there are no attachments on the comment.
- Make sure file attachments are uploaded to their destination, NOT referencing the url. Our file urls have a 15 min time limit, so they must be uploaded and stored elsewhere to have any permanence.