Product Asset Updated

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_length changes.
  • 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_image
  • product_images
  • product_videos
  • product_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_images array.
  • The complete product_videos array.
  • The complete product_asset_360 array.
  • Asset records whose values did not change.
  • The current date_modified value.

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

NameTypeDefinition
typestringSpecifies the webhook event type. For this event, the value is product_asset_updated.
webhook_versionstringSpecifies the webhook version. For Public API v3 webhook events, the value is 3.
action_datestringThe date and time when the asset update event was generated, formatted as MM/DD/YYYY HH:MM:SS.
payloadarrayAn array containing the complete latest Product Assets data for the affected product.
metaobjectChange-tracking information for the webhook event.
meta.changed_attributesarrayA list of asset fields whose values changed.

Product Asset Object Details

NameTypeDefinition
product_idintegerUnique Skulytics product identifier.
skustringNormalized product identifier used by Skulytics.
primary_imagestring | nullURL of the product's current primary image. Returns null when no primary image is available.
product_imagesarrayComplete collection of product image records.
product_videosarrayComplete collection of product video records.
product_asset_360arrayComplete collection of 360-degree product asset records.
date_modifiedstringDate and time when the product asset data was last modified.

Product Image Details

NameTypeDefinition
product_images[].idintegerUnique image asset identifier.
product_images[].urlstringURL of the product image.
product_images[].priorityintegerDisplay priority or ordering position of the image. Lower values have a higher display priority.
product_images[].content_lengthstring | nullFile 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_length changes.

When any of these changes occur, meta.changed_attributes includes:

product_images

Product Video Details

NameTypeDefinition
product_videos[].urlstringURL of the product video.
product_videos[].is_defaultintegerIndicates 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

NameTypeDefinition
product_asset_360[].urlstringURL of the 360-degree product image or asset.
product_asset_360[].angleintegerAngle 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:

ValueDefinition
primary_imageThe product's primary image changed.
product_imagesThe product image collection, order, priority, quantity, URL, file, or file size changed.
product_videosThe product video collection, URL, or default-video selection changed.
product_asset_360The 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.