Product webhooks notify your application when products or product SKUs (variants) are created, modified, or deleted. Use these events to sync your product catalog, track inventory changes, and keep external systems in sync.
Sync product catalog to your e-commerce storefront
Track inventory changes when SKUs are updated
Notify warehouse systems when new SKUs are created
Update search indexes when product details change
Archive product data when items are deleted
A product is created via the Core API
A product is created from the Platform
JSON
{
"type": "product.created",
"id": "evt_a1B2c3D4e5F6g7H8i9J0k1L2",
"created": 1704067200,
"data": {
"object": {
"id": 100001,
"object_id": "prod_XXXXXXXXXXXXXX",
"name": "Premium Poster Collection",
"name_internal": null,
"type": "good",
"active": "active",
"created_at": "2026-01-01T12:00:00.000000Z",
"updated_at": "2026-01-01T12:00:00.000000Z",
"address_required": null,
"countries": null,
"description": "A curated collection of premium art prints.",
"entitlements": null,
"is_imported": null,
"is_hidden": null,
"language": null,
"livemode": true,
"metadata": null,
"shippable": true,
"statement_descriptor": null,
"site_ids": [1]
}
}
}
A product is updated via the Core API
A product is updated from the Platform
The payload includes a previous_attributes object containing only the fields that changed.
JSON
{
"type": "product.updated",
"id": "evt_b2C3d4E5f6G7h8I9j0K1l2M3",
"created": 1704153600,
"data": {
"object": {
"id": 100001,
"object_id": "prod_XXXXXXXXXXXXXX",
"name": "Premium Poster Collection - Updated",
"name_internal": null,
"type": "good",
"active": "active",
"created_at": "2026-01-01T12:00:00.000000Z",
"updated_at": "2026-01-02T12:00:00.000000Z",
"address_required": null,
"countries": null,
"description": "An updated curated collection of premium art prints.",
"entitlements": null,
"is_imported": null,
"is_hidden": null,
"language": null,
"livemode": true,
"metadata": null,
"shippable": true,
"statement_descriptor": null,
"site_ids": [1]
},
"previous_attributes": {
"name": "Premium Poster Collection",
"description": "A curated collection of premium art prints."
}
}
}
A product is deleted (archived) via the Core API
A product is deleted from the Platform
JSON
{
"type": "product.deleted",
"id": "evt_c3D4e5F6g7H8i9J0k1L2m3N4",
"created": 1704240000,
"data": {
"object": {
"id": 100001,
"object_id": "prod_XXXXXXXXXXXXXX",
"name": "Premium Poster Collection",
"name_internal": null,
"type": "good",
"active": "archived",
"created_at": "2026-01-01T12:00:00.000000Z",
"updated_at": "2026-01-03T12:00:00.000000Z",
"address_required": false,
"countries": null,
"description": "A curated collection of premium art prints.",
"entitlements": null,
"is_imported": null,
"is_hidden": null,
"language": null,
"livemode": true,
"metadata": null,
"shippable": false,
"statement_descriptor": null,
"site_ids": [1]
}
}
}
A product SKU (variant) is created via the Core API
A product SKU is created from the Platform
JSON
{
"type": "product_sku.created",
"id": "evt_d4E5f6G7h8I9j0K1l2M3n4O5",
"created": 1704067200,
"data": {
"object": {
"object": "product_sku",
"id": 200001,
"product_id": 100001,
"name": "Premium Poster - Large Format",
"price": 1999,
"weight": 0.3,
"currency": "usd",
"countries": ["US", "CA", "GB"],
"metadata": null,
"expires_at": null,
"entitlements": null,
"inventory_type": 1,
"inventory_quantity": 50
}
}
}
A product SKU is updated via the Core API
A product SKU is updated from the Platform
Inventory quantity changes (e.g., after an order is placed)
The payload includes a previous_attributes object containing only the fields that changed.
JSON
{
"type": "product_sku.updated",
"id": "evt_e5F6g7H8i9J0k1L2m3N4o5P6",
"created": 1704153600,
"data": {
"object": {
"object": "product_sku",
"id": 200001,
"product_id": 100001,
"name": "Premium Poster - Large Format",
"price": 1999,
"weight": 0.3,
"currency": "usd",
"countries": ["US", "CA", "GB"],
"metadata": null,
"expires_at": null,
"entitlements": null,
"inventory_type": 1,
"inventory_quantity": 49
},
"previous_attributes": {
"inventory_quantity": 50
}
}
}
A product SKU is deleted via the Core API
A product SKU is deleted from the Platform
JSON
{
"type": "product_sku.deleted",
"id": "evt_f6G7h8I9j0K1l2M3n4O5p6Q7",
"created": 1704240000,
"data": {
"object": {
"object": "product_sku",
"id": 200001,
"product_id": 100001,
"name": "Premium Poster - Large Format",
"price": 4999,
"weight": null,
"currency": "usd",
"countries": ["US", "CA"],
"metadata": {"category": "prints"},
"expires_at": null,
"entitlements": null,
"inventory_type": 1,
"inventory_quantity": 200
}
}
}
Field Type Description idinteger Unique identifier for the product object_idstring | null External gateway identifier (e.g., Stripe product ID) namestring Product display name name_internalstring | null Internal product name (not shown to customers) typestring Product type (e.g., "good", "service") activestring Product status: "active" or "archived" descriptionstring | null Product description address_requiredboolean | null Whether a shipping address is required countriesarray | null Array of ISO country codes where the product is available entitlementsarray | null Entitlement keys granted by this product is_importedboolean | null Whether the product was imported from an external system is_hiddenboolean | null Whether the product is hidden from customers languagestring | null Language code for the product livemodeboolean Whether this is a live (not test) product metadataobject | null Custom key-value metadata shippableboolean Whether the product requires shipping statement_descriptorstring | null Statement descriptor for charges site_idsarray Array of site IDs where the product is available created_atstring ISO 8601 timestamp when the product was created updated_atstring ISO 8601 timestamp when the product was last modified
Field Type Description objectstring Object type identifier, always product_sku idinteger Unique identifier for the SKU product_idinteger Parent product ID namestring SKU display name priceinteger Price in cents weightfloat | null Weight of the item currencystring Three-letter ISO currency code countriesarray | null Array of ISO country codes where the SKU is available metadataobject | null Custom key-value metadata expires_atstring | null ISO 8601 timestamp when the SKU expires entitlementsarray | null Entitlement keys granted by this SKU inventory_typeinteger Inventory tracking type: 0 (infinite), 1 (finite), 2 (bucket) inventory_quantityinteger Current inventory count (for finite inventory)
Field Type Description previous_attributesobject Contains only the fields that changed, with their previous values before the update. Only includes publishable fields.
The Product object does not include an object field in the payload (unlike most other webhook resources). It uses the top-level type field to identify the event.
The Product SKU object includes object: "product_sku" in the payload.
active on the Product is a string ("active" or "archived"), not a boolean.
inventory_type values: 0 = infinite (never runs out), 1 = finite (tracked quantity), 2 = bucket.
price on the SKU is in cents (e.g., 1999 = $19.99).