Products

Product Deleted

Sent when a product is deleted

Required permissions:

  • access_pass:basic:read
  • webhook_receive:products
postWebhookproduct.deleted

Headers

webhook-idstring required

A unique identifier for this webhook request

Example:msg_xxxxxxxxxxxxxxxxxxxxxxxx
webhook-signaturestring required

The signature of the webhook request with the webhook version prepended

Example:v1,BASE64ENCODEDSIGNATURE
webhook-timestampstring required

The timestamp in seconds since the Unix epoch that the webhook was sent at on the server

Example:1727606400

Payload

account_idstring nullable

The account ID that this webhook event is associated with

api_version'v1' required

The API version for this webhook

api_version_datestring nullable required

The dated API version (Api-Version-Date) the payload is serialized to

idstring required

A unique ID for every single webhook request

previous_attributesobject

For some .updated events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event

timestampstring date-time required

The timestamp in ISO 8601 format that the webhook was sent at on the server

type'product.deleted' required

The webhook event type

Example payload

{
  "account_id": "biz_xxxxxxxxxxxxxx",
  "api_version": "v1",
  "api_version_date": "2026-07-20",
  "data": {
    "account": {
      "id": "biz_xxxxxxxxxxxxxx",
      "route": "biz_xxxxxxxxxxxxxx",
      "title": "Shine Time Auto Detailing"
    },
    "created_at": "2026-01-01T12:00:00.000Z",
    "custom_cta": "order_now",
    "custom_cta_url": "https://shinetime.example/book",
    "custom_statement_descriptor": "WHOP*SHINETIME",
    "default_plan": {
      "billing_period": 30,
      "id": "plan_xxxxxxxxxxxxxx",
      "initial_price": {
        "amount": "-2.50",
        "currency": "usd",
        "decimals": 2,
        "display_decimals": 2
      },
      "plan_type": "renewal",
      "renewal_price": {
        "amount": "-2.50",
        "currency": "usd",
        "decimals": 2,
        "display_decimals": 2
      },
      "unlimited_stock": true,
      "visibility": "visible"
    },
    "description": "Full interior extraction, leather conditioning, and an ozone odor treatment.",
    "external_identifier": "SHINE-CERAMIC-01",
    "gallery_images": [
      {
        "content_type": "image/png",
        "id": "file_xxxxxxxxxxxxxx",
        "url": "https://whop-assets-example.s3.amazonaws.com/uploads/image/2026-01-01/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    ],
    "global_affiliate_percentage": 10,
    "global_affiliate_status": "enabled",
    "headline": "Steam, shampoo, and odor removal in one visit",
    "id": "prod_xxxxxxxxxxxxxx",
    "labels": [
      "interior"
    ],
    "marketplace_status": "not_available",
    "member_affiliate_percentage": 5,
    "member_affiliate_status": "enabled",
    "metadata": {
      "bay": "1",
      "duration_hours": "4"
    },
    "owner_user": {
      "id": "user_xxxxxxxxxxxxxx",
      "name": "Marcus Webb",
      "username": "marcuswebb"
    },
    "product_tax_code": {
      "id": "ptc_xxxxxxxxxxxxxx",
      "name": "General - Digital Goods",
      "product_type": "digital"
    },
    "route": "interior-deep-clean",
    "title": "Interior Deep Clean",
    "updated_at": "2026-01-01T12:00:00.000Z",
    "variant_attributes": {
      "color": [
        "Red",
        "Blue"
      ],
      "size": [
        "M",
        "S"
      ]
    },
    "variants": [
      {
        "account": {
          "id": "biz_xxxxxxxxxxxxxx",
          "title": "Shine Time Auto Detailing"
        },
        "adaptive_pricing_enabled": true,
        "attributes": {
          "color": "Blue",
          "size": "S"
        },
        "billing_period": 30,
        "cancel_discount_intervals": 3,
        "cancel_discount_percentage": 20,
        "checkout_styling": {
          "background_color": "#0f172a",
          "border_style": "rounded",
          "button_color": "#f59e0b",
          "font_family": "roboto"
        },
        "created_at": "2026-01-01T12:00:00.000Z",
        "currency": "usd",
        "custom_fields": [
          {
            "field_type": "text",
            "id": "field_xxxxxxxxxxxxxx",
            "name": "Vehicle make and model",
            "placeholder": "2021 Audi S5",
            "required": true
          }
        ],
        "description": "Two hand washes a month, interior vacuum, and a quarterly sealant top-up.",
        "expiration_days": 365,
        "formatted_price": "$59.00 / month",
        "id": "plan_xxxxxxxxxxxxxx",
        "image": {
          "blurhash": "LA6bDXT$E3b:R6i+RibEIWbp%ej1",
          "url": "https://whop-assets-example.s3.amazonaws.com/uploads/image/2026-01-01/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        },
        "initial_price_due": {
          "amount": "-2.50",
          "currency": "usd",
          "decimals": 2,
          "display_decimals": 2
        },
        "internal_notes": "Maintenance tier. Upsell the interior shampoo add-on at renewal.",
        "invoice": {
          "id": "inv_xxxxxxxxxxxxxx"
        },
        "metadata": {
          "custom_cta": "subscribe",
          "custom_cta_url": "https://shinetime.example/wash-club"
        },
        "offer_cancel_discount": true,
        "payment_method_configuration": {
          "disabled": [
            "crypto"
          ],
          "enabled": [
            "card"
          ],
          "include_platform_defaults": true
        },
        "plan_type": "renewal",
        "product": {
          "id": "prod_xxxxxxxxxxxxxx",
          "title": "Ceramic Coating Package"
        },
        "purchase_url": "https://whop.com/checkout/plan_xxxxxxxxxxxxxx",
        "release_method": "buy_now",
        "renewal_price": 59,
        "sku": "CERAMIC-COATING-S-BLUE",
        "split_pay_required_payments": 4,
        "strike_through_initial_price": 99,
        "strike_through_renewal_price": 79,
        "three_ds_level": "frictionless_if_required",
        "title": "Unlimited Wash Club",
        "trial_period_days": 7,
        "updated_at": "2026-01-01T12:00:00.000Z",
        "visibility": "visible"
      }
    ],
    "visibility": "visible"
  },
  "id": "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
  "timestamp": "2025-01-01T00:00:00.000Z",
  "type": "product.deleted"
}

Response

Return a 200 status to indicate that the data was received successfully

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.