Products

Unpublish Product

Removes a product from the whop.com marketplace. The product moves to not_available.

post/products/{id}/unpublish

Headers

Idempotency-Keystring
Example:d9105228-4a08-46b1-8b91-42fed586d383

A unique key that makes this request safe to retry. See Idempotent requests.

Response

product removed from the marketplace

accountobject nullable required

Account that sells this product.

created_atstring required

When the product was created, as an ISO 8601 timestamp.

custom_cta'get_access' | 'join' | 'order_now' | 'shop_now' | 'call_now' | 'donate_now' | 'contact_us' | 'sign_up' | 'subscribe' | 'purchase' | 'get_offer' | 'apply_now' | 'complete_order' | 'null' nullable required

Call-to-action button label shown on the product purchase page.

custom_cta_urlstring nullable required

URL the call-to-action button links to instead of checkout.

custom_statement_descriptorstring nullable required

Custom text label on customer's bank statement.

descriptionstring nullable required

Written description displayed on the product page. null if none is set.

external_identifierstring nullable required

External identifier stored on the product for your own reference.

global_affiliate_percentagenumber nullable required

Commission rate affiliates earn through the global affiliate program.

global_affiliate_status'enabled' | 'disabled' | 'null' nullable required

Enrollment status in the global affiliate program.

headlinestring nullable required

Short marketing headline displayed on product page.

idstring required

Product ID, prefixed prod_.

labelsstring[] required
marketplace_status'not_available' | 'pending_review' | 'live_marketplace' required

Listing state on the whop.com marketplace. pending_review means submitted and awaiting review; live_marketplace means approved and discoverable.

member_affiliate_percentagenumber nullable required

Commission rate members earn through the member affiliate program.

member_affiliate_status'enabled' | 'disabled' | 'null' nullable required

Enrollment status in the member affiliate program.

member_countnumber required

Active memberships for this product; 0 if public member counts are disabled.

metadataobject nullable required

Custom key-value pairs stored on the product.

owner_userobject nullable required

User who owns the account selling this product.

product_tax_codeobject nullable required

Tax classification code for this product, or null if no tax code is set.

published_reviews_countnumber required

Published customer reviews for this product.

routestring required

URL slug for the product's public link.

titlestring required

Product display name shown to customers.

updated_atstring required

When the product was last updated, as an ISO 8601 timestamp.

verifiedboolean required

Whether the product has been verified by Whop.

visibilitystring nullable required

Whether the product is publicly visible, hidden, or archived.

Example response

{
  "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",
  "visibility": "visible"
}

Changes

Changed in 7 of the 44 revisions of this API.208

    • added the required property default_plan to the response with the 200 status

      response-required-property-added

    • added the required property labels to the response with the 200 status

      response-required-property-added

    This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

    • added the non-success response with the status 409

      response-non-success-status-added

    • added the optional property error/code to the response with the 401 status

      response-optional-property-added

    • added the optional property error/code to the response with the 404 status

      response-optional-property-added

    This revision also has 9 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

    • the security scope access_pass:update was added to the endpoint's security scheme bearerAuth

      api-security-scope-added

    • the security scope product:update was removed from the endpoint's security scheme bearerAuth

      api-security-scope-removed

    This revision also has 16 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

    • added the new apply_now enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new call_now enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new complete_order enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new contact_us enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new disabled enum value to the global_affiliate_status response property for the response status 200

      response-property-enum-value-added

    • added the new disabled enum value to the member_affiliate_status response property for the response status 200

      response-property-enum-value-added

    • added the new donate_now enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new enabled enum value to the global_affiliate_status response property for the response status 200

      response-property-enum-value-added

    • added the new enabled enum value to the member_affiliate_status response property for the response status 200

      response-property-enum-value-added

    • added the new get_access enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new get_offer enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new join enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new order_now enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new purchase enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new shop_now enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new sign_up enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new subscribe enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new undefined enum value to the custom_cta response property for the response status 200

      response-property-enum-value-added

    • added the new undefined enum value to the global_affiliate_status response property for the response status 200

      response-property-enum-value-added

    • added the new undefined enum value to the member_affiliate_status response property for the response status 200

      response-property-enum-value-added

    This revision also has 4 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

    • endpoint added

      endpoint-added

    This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

Of the 44 revisions, 1 has no diff computed.