---
title: "Create Product"
method: POST
path: "/products"
tags: ["Products"]
---

# Create Product

`POST /products`

Creates a new product for an account.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `account_id` string — The unique identifier of the account to create this product for.
  - `collect_shipping_address` boolean, nullable — Whether to collect a shipping address at checkout.
  - `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 — The call-to-action button label.
  - `custom_cta_url` string, nullable — A URL the call-to-action button links to.
  - `custom_statement_descriptor` string, nullable — Custom bank statement descriptor. Must start with WHOP*.
  - `description` string, nullable — A written description displayed on the product page.
  - `global_affiliate_percentage` number, nullable — The commission rate affiliates earn.
  - `global_affiliate_status` 'enabled' | 'disabled' — The enrollment status in the global affiliate program.
  - `headline` string, nullable — A short marketing headline for the product page.
  - `member_affiliate_percentage` number, nullable — The commission rate members earn.
  - `member_affiliate_status` 'enabled' | 'disabled' — The enrollment status in the member affiliate program.
  - `metadata` object, nullable — Custom key-value pairs to store on the product.
  - `product_tax_code_id` string, nullable — The unique identifier of the tax classification code. See the available [product categories](https://docs.numeral.com/essentials/product-categories).
  - `redirect_purchase_url` string, nullable — A URL to redirect the customer to after purchase.
  - `route` string, nullable — The URL slug for the product's public link.
  - `send_welcome_message` boolean, nullable — Whether to send an automated welcome message via support chat when a user joins this product. Defaults to true.
  - `title` string, required — The display name of the product. Maximum 80 characters.
  - `visibility` string — Whether the product is visible to customers.

## Response `200`

product created

- Product
  - `account` object, nullable, required — Account that sells this product.
  - `created_at` string, 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_url` string, nullable, required — URL the call-to-action button links to instead of checkout.
  - `custom_statement_descriptor` string, nullable, required — Custom text label on customer's bank statement.
  - `description` string, nullable, required — Written description displayed on product page.
  - `external_identifier` string, nullable, required — External identifier stored on the product for your own reference.
  - `gallery_images` ProductGalleryImage[], required
    - `content_type` string, nullable, required — Uploaded file MIME type, such as image/jpeg.
    - `id` string, required — Gallery image ID.
    - `url` string, nullable, required — Pre-optimized URL for rendering this image on the client.
  - `global_affiliate_percentage` number, 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.
  - `headline` string, nullable, required — Short marketing headline displayed on product page.
  - `id` string, required — Product ID, prefixed `prod_`.
  - `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_percentage` number, 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_count` number, required — Active memberships for this product; 0 if public member counts are disabled.
  - `metadata` object, nullable, required — Custom key-value pairs stored on the product.
  - `owner_user` object, nullable, required — User who owns the account selling this product.
  - `product_tax_code` object, nullable, required — Tax classification code for this product, or `null` if no tax code is set.
  - `published_reviews_count` number, required — Published customer reviews for this product.
  - `route` string, required — URL slug for the product's public link.
  - `title` string, required — Product display name shown to customers.
  - `updated_at` string, required — When the product was last updated, as an ISO 8601 timestamp.
  - `verified` boolean, required — Whether the product has been verified by Whop.
  - `visibility` string, nullable, required — Whether the product is publicly visible, hidden, or archived.

## Other responses

- `401` — Unauthorized

---

[API](https://skmtc.net/whop/apis/whop-api.md) · [All operations](https://skmtc.net/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whop/whop-api/versions/866821546d67/schema)
