This webhook event is used to notify clients when product asset information changes in Skulytics.
The product_asset_updated webhook helps clients keep product images, videos, 360-degree assets, and primary-image information synchronized with Skulytics.
When product asset data changes, Skulytics sends this webhook with the complete latest Product Assets payload for the affected product.
Clients can use meta.changed_attributes to identify which asset fields changed.
Event Type
product_asset_updated
When This Webhook Is Sent
The product_asset_updated webhook is sent when product asset data changes.
Changes may include:
- The primary image changes.
- The primary image is removed.
- A product image is added or removed.
- A product image URL changes.
- A product image priority or order changes.
- The number of product images changes.
- A product image file or
content_lengthchanges. - A product video is added, updated, or removed.
- The default product video changes.
- A 360-degree asset is added, updated, or removed.
- A 360-degree asset URL changes.
- A 360-degree asset angle or sequence changes.
The webhook is not sent when the latest asset data is identical to the existing asset data.
Supported Asset Types
The webhook supports changes to:
primary_imageproduct_imagesproduct_videosproduct_asset_360
Event Sent
Example — Product Asset Updated
{
"type": "product_asset_updated",
"webhook_version": "3",
"action_date": "06/20/2026 02:01:59",
"payload": [
{
"product_id": 989,
"sku": "GNE27JYMFS",
"primary_image": "https://assets.skulytics.io/assets/images/GNE27JYMFS-105136575.webp",
"product_images": [
{
"id": 105136575,
"url": "https://assets.skulytics.io/assets/images/GNE27JYMFS-105136575.webp",
"priority": 0,
"content_length": "339.42 KB"
},
{
"id": 105136585,
"url": "https://assets.skulytics.io/assets/images/GNE27JYMFS-105136585.webp",
"priority": 1,
"content_length": "866.22 KB"
},
{
"id": 105136591,
"url": "https://assets.skulytics.io/assets/images/GNE27JYMFS-105136591.webp",
"priority": 2,
"content_length": "11.05 KB"
}
],
"product_videos": [
{
"url": "https://www.youtube.com/embed/yiNkSyEpMVM",
"is_default": 1
},
{
"url": "https://www.youtube.com/embed/ICdQxd9ra4A",
"is_default": 0
}
],
"product_asset_360": [
{
"url": "https://assets.skulytics.io/assets/images/GNE27JYMFS-59317.webp",
"angle": 1
},
{
"url": "https://assets.skulytics.io/assets/images/GNE27JYMFS-59318.webp",
"angle": 2
},
{
"url": "https://assets.skulytics.io/assets/images/GNE27JYMFS-59319.webp",
"angle": 3
}
],
"date_modified": "12/24/2025 10:46 AM"
}
],
"meta": {
"changed_attributes": [
"primary_image",
"product_images",
"product_videos"
]
}
}Payload Behavior
When the webhook is sent, the payload contains the complete current Product Assets data for the affected product.
The payload is not limited to the asset fields or records that changed.
For example, if only the primary image changes, the payload still includes:
- The complete
product_imagesarray. - The complete
product_videosarray. - The complete
product_asset_360array. - Asset records whose values did not change.
- The current
date_modifiedvalue.
Clients should use meta.changed_attributes to identify which asset data changed.
Empty Asset Behavior
Asset collection fields are returned as arrays.
When no records are available for an asset collection, the corresponding field returns an empty array:
{
"product_images": [],
"product_videos": [],
"product_asset_360": []
}When no primary image is available, primary_image may return null.
Payload Details
| Name | Type | Definition |
|---|---|---|
| type | string | Specifies the webhook event type. For this event, the value is product_asset_updated. |
| webhook_version | string | Specifies the webhook version. For Public API v3 webhook events, the value is 3. |
| action_date | string | The date and time when the asset update event was generated, formatted as MM/DD/YYYY HH:MM:SS. |
| payload | array | An array containing the complete latest Product Assets data for the affected product. |
| meta | object | Change-tracking information for the webhook event. |
| meta.changed_attributes | array | A list of asset fields whose values changed. |
Product Asset Object Details
| Name | Type | Definition |
|---|---|---|
| product_id | integer | Unique Skulytics product identifier. |
| sku | string | Normalized product identifier used by Skulytics. |
| primary_image | string | null | URL of the product's current primary image. Returns null when no primary image is available. |
| product_images | array | Complete collection of product image records. |
| product_videos | array | Complete collection of product video records. |
| product_asset_360 | array | Complete collection of 360-degree product asset records. |
| date_modified | string | Date and time when the product asset data was last modified. |
Product Image Details
| Name | Type | Definition |
|---|---|---|
| product_images[].id | integer | Unique image asset identifier. |
| product_images[].url | string | URL of the product image. |
| product_images[].priority | integer | Display priority or ordering position of the image. Lower values have a higher display priority. |
| product_images[].content_length | string | null | File size of the product image, including its unit, when available. |
The complete product_images array is included whenever the webhook is sent.
Changes to product_images may include:
- An image is added.
- An image is removed.
- An image URL changes.
- An image priority changes.
- The image order changes.
- The number of images changes.
- An image file or
content_lengthchanges.
When any of these changes occur, meta.changed_attributes includes:
product_images
Product Video Details
| Name | Type | Definition |
|---|---|---|
| product_videos[].url | string | URL of the product video. |
| product_videos[].is_default | integer | Indicates whether the video is the default video. Typically 1 for the default video and 0 for other videos. |
The complete product_videos array is included whenever the webhook is sent.
Changes to product_videos may include:
- A video is added.
- A video is removed.
- A video URL changes.
- The default video changes.
- The video collection changes.
When any of these changes occur, meta.changed_attributes includes:
product_videos
Product 360 Asset Details
| Name | Type | Definition |
|---|---|---|
| product_asset_360[].url | string | URL of the 360-degree product image or asset. |
| product_asset_360[].angle | integer | Angle or sequence position of the asset within the 360-degree image set. |
The complete product_asset_360 array is included whenever the webhook is sent.
Changes to product_asset_360 may include:
- A 360-degree asset is added.
- A 360-degree asset is removed.
- An asset URL changes.
- An asset angle changes.
- The sequence of the asset collection changes.
When any of these changes occur, meta.changed_attributes includes:
product_asset_360
Changed Attributes
The meta.changed_attributes field identifies which asset fields changed.
Supported values include:
| Value | Definition |
|---|---|
| primary_image | The product's primary image changed. |
| product_images | The product image collection, order, priority, quantity, URL, file, or file size changed. |
| product_videos | The product video collection, URL, or default-video selection changed. |
| product_asset_360 | The 360-degree asset collection, URL, angle, or sequence changed. |
The changed-attribute path stops at the asset-field level.
Primary Image Changes
When the primary image changes, meta.changed_attributes includes:
{
"meta": {
"changed_attributes": [
"primary_image"
]
}
}If the primary image and the product image collection both change, both fields are included:
{
"meta": {
"changed_attributes": [
"primary_image",
"product_images"
]
}
}When the primary image is removed, the payload returns:
{
"primary_image": null
}This is considered an asset update and triggers the webhook.
