# Products

## Get products

> Retrieves all products for the specified store.\
> DO NOT USE THIS ROUTE FOR DISPLAYING PRODUCTS ON YOUR STOREFRONT, use the storefront API instead!

```json
{"openapi":"3.1.1","info":{"title":"PayNow Management API","version":"v1"},"tags":[{"name":"products"}],"security":[{"APIKey":[]}],"components":{"securitySchemes":{"APIKey":{"type":"apiKey","description":"An API Key token generated in the Dashboard in the format 'APIKey TOKEN_HERE'.","name":"Authorization","in":"header"}},"schemas":{"FlakeId":{"type":"string","additionalProperties":false,"format":"flake-id"},"ProductDto":{"required":["allow_one_time_purchase","allow_subscription","commands","customer_stock_limit","description","gameservers","id","name","price","remove_after_enabled","remove_after_time_scale","remove_after_time_value","single_game_server_only","slug","sort_order","stock_available","store_id","store_stock_limit","subscription_interval_scale","subscription_interval_value","tags","trial","upselling","version_id"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"store_id":{"$ref":"#/components/schemas/FlakeId"},"version_id":{"$ref":"#/components/schemas/FlakeId"},"image_url":{"type":["null","string"],"description":"The URL to the product image."},"slug":{"type":"string","description":"The unique slug for the product."},"name":{"type":"string","description":"The display name of the product."},"description":{"type":"string","description":"The detailed description of the product."},"label":{"type":["null","string"],"description":"The display label for the product."},"sort_order":{"type":"integer","description":"The sort order for displaying the product.","format":"int32"},"price":{"type":"integer","description":"The price of the product, in the lowest denominator (e.g. cents).","format":"int64"},"single_game_server_only":{"type":"boolean","description":"Indicates whether the product is limited to a single game server."},"allow_one_time_purchase":{"type":"boolean","description":"Indicates whether one-time purchases are allowed."},"allow_subscription":{"type":"boolean","description":"Indicates whether subscription purchases are allowed."},"subscription_interval_value":{"type":"integer","description":"The subscription interval value.","format":"int32"},"subscription_interval_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"trial":{"$ref":"#/components/schemas/ProductTrialConfigurationDto"},"upselling":{"$ref":"#/components/schemas/ProductUpsellConfigurationDto"},"remove_after_enabled":{"type":"boolean","description":"Indicates whether automatic removal is enabled."},"remove_after_time_value":{"type":"integer","description":"The time value for automatic removal.","format":"int32"},"remove_after_time_scale":{"$ref":"#/components/schemas/ProductRemoveAfterIntervalScale"},"stock_available":{"$ref":"#/components/schemas/ProductStockAvailableDto"},"store_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"customer_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"stock_limit_do_not_include_removed":{"type":["null","boolean"],"description":"Indicates whether removed items should be excluded from stock limits."},"tags":{"type":"array","items":{"$ref":"#/components/schemas/ProductTagDto"},"description":"The tags associated with the product."},"gameservers":{"type":"array","items":{"$ref":"#/components/schemas/ProductGameServerDto"},"description":"The game servers associated with the product."},"commands":{"type":"array","items":{"$ref":"#/components/schemas/ProductCommandDto"},"description":"The commands to be executed at different stages."},"created_by":{"$ref":"#/components/schemas/ActorDto"},"created_at":{"type":["null","string"],"description":"The date and time when the product was created.","format":"date-time"},"updated_by":{"$ref":"#/components/schemas/ActorDto"},"updated_at":{"type":["null","string"],"description":"The date and time when the product was last updated.","format":"date-time"},"deliverable_actions":{"$ref":"#/components/schemas/ProductDeliverableActionsDto"},"metadata":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Additional metadata for the product."},"payout_splits":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductPayoutSplitDto"},"description":"The payout splits for revenue distribution."},"tax_code":{"$ref":"#/components/schemas/ProductTaxCode"},"allow_concurrent_active_items":{"type":["null","boolean"],"description":"Indicates whether concurrent active items are allowed."},"is_hidden":{"type":["null","boolean"],"description":"Indicates whether the product is hidden."},"is_gifting_disabled":{"type":["null","boolean"],"description":"Indicates whether gifting is disabled."},"enabled_at":{"type":["null","string"],"description":"The date and time when the product becomes enabled.","format":"date-time"},"enabled_until":{"type":["null","string"],"description":"The date and time until which the product remains enabled.","format":"date-time"},"required_product_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of products required for purchasing this product."},"required_product_all":{"type":["null","boolean"],"description":"Indicates whether all required products are needed."},"custom_variable_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of associated custom variables."},"is_gift_cards_disabled":{"type":["null","boolean"],"description":"Indicates if applying gift cards should be disabled on the product."},"is_coupons_disabled":{"type":["null","boolean"],"description":"Indicates if applying coupons should be disabled on the product."},"is_affiliate_links_disabled":{"type":["null","boolean"],"description":"Indicates if applying affiliate links should be disabled on the product."},"tier_group_id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"ProductSubscriptionIntervalScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"ProductTrialConfigurationDto":{"required":["allow_repeat_trials","enabled","new_customer_order_lookback_scale","new_customer_order_lookback_value","new_customers_only","period_scale","period_value","repeat_trial_cooldown_scale","repeat_trial_cooldown_value","revoke_immediately_when_canceled"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if trials should be enabled for the product."},"period_value":{"type":"integer","description":"The trial period value.","format":"int32"},"period_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"revoke_immediately_when_canceled":{"type":"boolean","description":"Indicates if the trial should be revoked immediately when canceled or at the end of the trial."},"new_customers_only":{"type":"boolean","description":"Restricts trials to customers who have no orders within the lookback period.\nWhen enabled, customers with recent orders will be ineligible for trials."},"new_customer_order_lookback_value":{"type":"integer","description":"The lookback period value for determining if a customer is \"new\".\nOnly used when new_customers_only is enabled.","format":"int32"},"new_customer_order_lookback_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"allow_repeat_trials":{"type":"boolean","description":"Allows customers to trial again after a cooldown period following their previous trial.\nWhen disabled, customers can only trial once and never become eligible again."},"repeat_trial_cooldown_value":{"type":"integer","description":"The cooldown period value before a customer becomes eligible for another trial.\nOnly used when allow_repeat_trial is enabled.","format":"int32"},"repeat_trial_cooldown_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"}},"additionalProperties":false,"description":"Represents the configuration for trials of a product"},"ProductUpsellConfigurationDto":{"required":["enabled","recommendations"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if upselling should be enabled for the product.\nIf disabled, the product will never be recommended regardless of the global config."},"recommendations":{"type":"array","items":{"$ref":"#/components/schemas/ProductUpsellRecommendationDto"},"description":"Upselling recommendation for the product."}},"additionalProperties":false},"ProductUpsellRecommendationDto":{"required":["discount_amount","discount_type","prefer_as_subscription","recommended_product_id","type"],"type":"object","properties":{"recommended_product_id":{"$ref":"#/components/schemas/FlakeId"},"type":{"$ref":"#/components/schemas/UpsellTypeDto"},"discount_type":{"$ref":"#/components/schemas/UpsellDiscountTypeDto"},"discount_amount":{"type":"integer","format":"int64"},"minimum_base_product_quantity":{"type":["null","integer"],"format":"int32"},"minimum_recommended_product_quantity":{"type":["null","integer"],"format":"int32"},"quantity_to_add":{"type":["null","integer"],"format":"int32"},"prefer_as_subscription":{"type":"boolean"}},"additionalProperties":false},"UpsellTypeDto":{"enum":["unknown","additional","alternative","increase_quantity"],"type":"string"},"UpsellDiscountTypeDto":{"enum":["unknown","none","fixed","percentage"],"type":"string"},"ProductRemoveAfterIntervalScale":{"enum":["invalid","day","week","month"],"type":"string"},"ProductStockAvailableDto":{"required":["customer_available","store_available"],"type":"object","properties":{"store_available":{"type":"integer","description":"Indicates how many stock is left store-wide.","format":"int32"},"customer_available":{"type":"integer","format":"int32"}},"additionalProperties":false},"ProductStockLimitDto":{"required":["enabled","include_trials","time_scale"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates whether stock limit is enabled."},"quantity":{"type":["null","integer"],"description":"The quantity limit.","format":"int32"},"time_value":{"type":["null","integer"],"description":"The time value for stock limit period.","format":"int32"},"time_scale":{"$ref":"#/components/schemas/ProductStockTimeScale"},"include_trials":{"type":"boolean","description":"Indicates if trials should be included in the active stock limit calculation."}},"additionalProperties":false},"ProductStockTimeScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"ProductTagDto":{"required":["id","name","slug"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"slug":{"type":"string","description":"The unique slug for the tag."},"name":{"type":"string","description":"The display name of the tag."}},"additionalProperties":false},"ProductGameServerDto":{"required":["enabled","id","name"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"name":{"type":"string","description":"The name of the game server."},"enabled":{"type":"boolean","description":"Indicates whether this game server is enabled."}},"additionalProperties":false},"ProductCommandDto":{"required":["content","online_only","stage"],"type":"object","properties":{"stage":{"$ref":"#/components/schemas/ProductCommandStage"},"content":{"type":"string","description":"Content of the command."},"online_only":{"type":"boolean","description":"Value indicating whether the command should only execute when the player is online."},"override_execute_on_gameserver_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"Value indicating on which game servers should the command be executed.\nIf left empty or null, then the default behavior applies\n(executing on all game servers or on the selected game server is selection is enabled)"}},"additionalProperties":false},"ProductCommandStage":{"enum":["invalid","on_purchase","on_expire","on_refund","on_renew","on_chargeback","on_trial_start","on_trial_expire"],"type":"string","description":"Defines the stages at which product commands can be executed."},"ActorDto":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/PayNowActorType"},"id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"PayNowActorType":{"enum":["anonymous","user","api_key","customer","game_server","internal","admin","platform","global_customer"],"type":"string"},"ProductDeliverableActionsDto":{"required":["grant_giftcard"],"type":"object","properties":{"grant_giftcard":{"type":"boolean","description":"Value indicating whether to grant a giftcard with the product with the subtotal amount."}},"additionalProperties":false},"ProductPayoutSplitDto":{"required":["platform_fee","user_id"],"type":"object","properties":{"user_id":{"$ref":"#/components/schemas/FlakeId"},"percentage":{"type":["null","integer"],"description":"The percentage of the payment allocated to the user, in basis points (500 = 5%).\nThe last payout split must have this field set to `null` to receive the remaining portion.","format":"int64"},"platform_fee":{"type":"integer","description":"The platform fee percentage your platform receives, in basis points (500 = 5%).","format":"int64"}},"additionalProperties":false},"ProductTaxCode":{"enum":["unknown","digital_goods_subscription","digital_goods_permanent","saas","downloaded_software","digital_goods_subscription_gaming","digital_goods_permanent_gaming","iaas","paas","saas_security","saas_storage"],"type":"string","description":"Determines the category of the product for taxation purposes.\nContact support for help with setting the correct tax code."},"PayNowError":{"required":["code","message","status"],"type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code.","format":"int32"},"code":{"type":"string","description":"The PayNow parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"trace_id":{"type":["null","string"],"description":"A distributed trace ID used for debugging."},"errors":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ValidationError"},"description":"An array of multiple errors. Only used by some API services."}},"additionalProperties":false,"description":"Represents a PayNow error"},"ValidationError":{"required":["code","message","path","validation"],"type":"object","properties":{"code":{"type":"string","description":"The parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"path":{"type":"string","description":"The path leading to the validation error."},"validation":{"type":"string","description":"Type of the validation that failed."}},"additionalProperties":false,"description":"A validation error."}}},"paths":{"/v1/stores/{storeId}/products":{"get":{"tags":["products"],"summary":"Get products","description":"Retrieves all products for the specified store.\nDO NOT USE THIS ROUTE FOR DISPLAYING PRODUCTS ON YOUR STOREFRONT, use the storefront API instead!","operationId":"Products_GetProducts","parameters":[{"name":"storeId","in":"path","description":"The ID of the store to retrieve products for.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductDto"}}}}},"default":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayNowError"}}}}}}}}}
```

## Create product

> Creates a new product in the specified store.\
> Creating dynamic products while creating a checkout session via this endpoint without prior approval is prohibited and will result in store deactivation per our User Agreement.

```json
{"openapi":"3.1.1","info":{"title":"PayNow Management API","version":"v1"},"tags":[{"name":"products"}],"security":[{"APIKey":[]}],"components":{"securitySchemes":{"APIKey":{"type":"apiKey","description":"An API Key token generated in the Dashboard in the format 'APIKey TOKEN_HERE'.","name":"Authorization","in":"header"}},"schemas":{"FlakeId":{"type":"string","additionalProperties":false,"format":"flake-id"},"UpsertProductRequestDto":{"type":"object","properties":{"slug":{"type":["null","string"],"description":"The unique URL-safe identifier (slug) for the product."},"name":{"type":["null","string"],"description":"The display name of the product."},"description":{"type":["null","string"],"description":"The detailed description of the product."},"label":{"type":["null","string"],"description":"The display label for the product."},"price":{"type":["null","integer"],"description":"The price of the product in the lowest denominator (e.g. cents).","format":"int64"},"single_game_server_only":{"type":["null","boolean"],"description":"Indicates whether the customer is prompted to select a game server before purchasing."},"allow_one_time_purchase":{"type":["null","boolean"],"description":"Indicates whether one-time purchases are allowed."},"allow_subscription":{"type":["null","boolean"],"description":"Indicates whether subscription purchases are allowed."},"subscription_interval_value":{"type":["null","integer"],"description":"The subscription interval value.","format":"int32"},"subscription_interval_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"trial":{"$ref":"#/components/schemas/UpsertProductTrialConfigurationDto"},"upselling":{"$ref":"#/components/schemas/UpsertProductUpsellConfigurationDto"},"remove_after_enabled":{"type":["null","boolean"],"description":"Indicates whether automatic removal is enabled."},"remove_after_time_value":{"type":["null","integer"],"description":"The time value for automatic removal.","format":"int32"},"remove_after_time_scale":{"$ref":"#/components/schemas/ProductRemoveAfterIntervalScale"},"store_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"customer_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"stock_limit_do_not_include_removed":{"type":["null","boolean"],"description":"Indicates whether removed items should be excluded from stock limits."},"tags":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The tag IDs associated with the product."},"gameservers":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The gameserver IDs associated with the product."},"commands":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductCommandDto"},"description":"The commands to be executed at different stages."},"deliverable_actions":{"$ref":"#/components/schemas/ProductDeliverableActionsDto"},"metadata":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Additional metadata for the product."},"payout_splits":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductPayoutSplitDto"},"description":"The payout splits for revenue distribution.\nRequires special approval."},"tax_code":{"$ref":"#/components/schemas/ProductTaxCode"},"allow_concurrent_active_items":{"type":["null","boolean"],"description":"Indicates whether concurrent active items are allowed."},"is_hidden":{"type":["null","boolean"],"description":"Indicates whether the product is hidden."},"is_gifting_disabled":{"type":["null","boolean"],"description":"Indicates whether gifting is disabled."},"enabled_at":{"type":["null","string"],"description":"The date and time when the product becomes enabled.\nSet to `null` to keep enabled.","format":"date-time"},"enabled_until":{"type":["null","string"],"description":"The date and time until which the product remains enabled.\nSet to `null` to keep enabled.","format":"date-time"},"required_product_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of products required for purchasing this product."},"required_product_all":{"type":["null","boolean"],"description":"Indicates whether all required products are needed."},"custom_variable_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of associated custom variables."},"is_gift_cards_disabled":{"type":["null","boolean"],"description":"Indicates if applying gift cards should be disabled on the product."},"is_coupons_disabled":{"type":["null","boolean"],"description":"Indicates if applying coupons should be disabled on the product."},"is_affiliate_links_disabled":{"type":["null","boolean"],"description":"Indicates if applying affiliate links should be disabled on the product."},"tier_group_id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"ProductSubscriptionIntervalScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"UpsertProductTrialConfigurationDto":{"type":"object","properties":{"enabled":{"type":["null","boolean"],"description":"Indicates if trials should be enabled for the product."},"period_value":{"type":["null","integer"],"description":"The trial period value.","format":"int32"},"period_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"revoke_immediately_when_canceled":{"type":["null","boolean"],"description":"Indicates if the trial should be revoked immediately when canceled or at the end of the trial."},"new_customers_only":{"type":["null","boolean"],"description":"Restricts trials to customers who have no orders within the lookback period.\nWhen enabled, customers with recent orders will be ineligible for trials."},"new_customer_order_lookback_value":{"type":["null","integer"],"description":"The lookback period value for determining if a customer is \"new\".\nOnly used when new_customers_only is enabled.","format":"int32"},"new_customer_order_lookback_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"allow_repeat_trials":{"type":["null","boolean"],"description":"Allows customers to trial again after a cooldown period following their previous trial.\nWhen disabled, customers can only trial once and never become eligible again."},"repeat_trial_cooldown_value":{"type":["null","integer"],"description":"The cooldown period value before a customer becomes eligible for another trial.\nOnly used when allow_repeat_trials is enabled.","format":"int32"},"repeat_trial_cooldown_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"}},"additionalProperties":false,"description":"Represents the configuration for trials of a product"},"UpsertProductUpsellConfigurationDto":{"type":"object","properties":{"enabled":{"type":["null","boolean"]},"recommendations":{"type":["null","array"],"items":{"$ref":"#/components/schemas/UpsertProductUpsellRecommendationDto"}}},"additionalProperties":false},"UpsertProductUpsellRecommendationDto":{"required":["discount_amount","discount_type","prefer_as_subscription","recommended_product_id","type"],"type":"object","properties":{"recommended_product_id":{"$ref":"#/components/schemas/FlakeId"},"type":{"$ref":"#/components/schemas/UpsellTypeDto"},"discount_type":{"$ref":"#/components/schemas/UpsellDiscountTypeDto"},"discount_amount":{"type":"integer","format":"int64"},"minimum_base_product_quantity":{"type":["null","integer"],"format":"int32"},"minimum_recommended_product_quantity":{"type":["null","integer"],"format":"int32"},"quantity_to_add":{"type":["null","integer"],"format":"int32"},"prefer_as_subscription":{"type":"boolean"}},"additionalProperties":false},"UpsellTypeDto":{"enum":["unknown","additional","alternative","increase_quantity"],"type":"string"},"UpsellDiscountTypeDto":{"enum":["unknown","none","fixed","percentage"],"type":"string"},"ProductRemoveAfterIntervalScale":{"enum":["invalid","day","week","month"],"type":"string"},"ProductStockLimitDto":{"required":["enabled","include_trials","time_scale"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates whether stock limit is enabled."},"quantity":{"type":["null","integer"],"description":"The quantity limit.","format":"int32"},"time_value":{"type":["null","integer"],"description":"The time value for stock limit period.","format":"int32"},"time_scale":{"$ref":"#/components/schemas/ProductStockTimeScale"},"include_trials":{"type":"boolean","description":"Indicates if trials should be included in the active stock limit calculation."}},"additionalProperties":false},"ProductStockTimeScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"ProductCommandDto":{"required":["content","online_only","stage"],"type":"object","properties":{"stage":{"$ref":"#/components/schemas/ProductCommandStage"},"content":{"type":"string","description":"Content of the command."},"online_only":{"type":"boolean","description":"Value indicating whether the command should only execute when the player is online."},"override_execute_on_gameserver_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"Value indicating on which game servers should the command be executed.\nIf left empty or null, then the default behavior applies\n(executing on all game servers or on the selected game server is selection is enabled)"}},"additionalProperties":false},"ProductCommandStage":{"enum":["invalid","on_purchase","on_expire","on_refund","on_renew","on_chargeback","on_trial_start","on_trial_expire"],"type":"string","description":"Defines the stages at which product commands can be executed."},"ProductDeliverableActionsDto":{"required":["grant_giftcard"],"type":"object","properties":{"grant_giftcard":{"type":"boolean","description":"Value indicating whether to grant a giftcard with the product with the subtotal amount."}},"additionalProperties":false},"ProductPayoutSplitDto":{"required":["platform_fee","user_id"],"type":"object","properties":{"user_id":{"$ref":"#/components/schemas/FlakeId"},"percentage":{"type":["null","integer"],"description":"The percentage of the payment allocated to the user, in basis points (500 = 5%).\nThe last payout split must have this field set to `null` to receive the remaining portion.","format":"int64"},"platform_fee":{"type":"integer","description":"The platform fee percentage your platform receives, in basis points (500 = 5%).","format":"int64"}},"additionalProperties":false},"ProductTaxCode":{"enum":["unknown","digital_goods_subscription","digital_goods_permanent","saas","downloaded_software","digital_goods_subscription_gaming","digital_goods_permanent_gaming","iaas","paas","saas_security","saas_storage"],"type":"string","description":"Determines the category of the product for taxation purposes.\nContact support for help with setting the correct tax code."},"ProductDto":{"required":["allow_one_time_purchase","allow_subscription","commands","customer_stock_limit","description","gameservers","id","name","price","remove_after_enabled","remove_after_time_scale","remove_after_time_value","single_game_server_only","slug","sort_order","stock_available","store_id","store_stock_limit","subscription_interval_scale","subscription_interval_value","tags","trial","upselling","version_id"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"store_id":{"$ref":"#/components/schemas/FlakeId"},"version_id":{"$ref":"#/components/schemas/FlakeId"},"image_url":{"type":["null","string"],"description":"The URL to the product image."},"slug":{"type":"string","description":"The unique slug for the product."},"name":{"type":"string","description":"The display name of the product."},"description":{"type":"string","description":"The detailed description of the product."},"label":{"type":["null","string"],"description":"The display label for the product."},"sort_order":{"type":"integer","description":"The sort order for displaying the product.","format":"int32"},"price":{"type":"integer","description":"The price of the product, in the lowest denominator (e.g. cents).","format":"int64"},"single_game_server_only":{"type":"boolean","description":"Indicates whether the product is limited to a single game server."},"allow_one_time_purchase":{"type":"boolean","description":"Indicates whether one-time purchases are allowed."},"allow_subscription":{"type":"boolean","description":"Indicates whether subscription purchases are allowed."},"subscription_interval_value":{"type":"integer","description":"The subscription interval value.","format":"int32"},"subscription_interval_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"trial":{"$ref":"#/components/schemas/ProductTrialConfigurationDto"},"upselling":{"$ref":"#/components/schemas/ProductUpsellConfigurationDto"},"remove_after_enabled":{"type":"boolean","description":"Indicates whether automatic removal is enabled."},"remove_after_time_value":{"type":"integer","description":"The time value for automatic removal.","format":"int32"},"remove_after_time_scale":{"$ref":"#/components/schemas/ProductRemoveAfterIntervalScale"},"stock_available":{"$ref":"#/components/schemas/ProductStockAvailableDto"},"store_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"customer_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"stock_limit_do_not_include_removed":{"type":["null","boolean"],"description":"Indicates whether removed items should be excluded from stock limits."},"tags":{"type":"array","items":{"$ref":"#/components/schemas/ProductTagDto"},"description":"The tags associated with the product."},"gameservers":{"type":"array","items":{"$ref":"#/components/schemas/ProductGameServerDto"},"description":"The game servers associated with the product."},"commands":{"type":"array","items":{"$ref":"#/components/schemas/ProductCommandDto"},"description":"The commands to be executed at different stages."},"created_by":{"$ref":"#/components/schemas/ActorDto"},"created_at":{"type":["null","string"],"description":"The date and time when the product was created.","format":"date-time"},"updated_by":{"$ref":"#/components/schemas/ActorDto"},"updated_at":{"type":["null","string"],"description":"The date and time when the product was last updated.","format":"date-time"},"deliverable_actions":{"$ref":"#/components/schemas/ProductDeliverableActionsDto"},"metadata":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Additional metadata for the product."},"payout_splits":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductPayoutSplitDto"},"description":"The payout splits for revenue distribution."},"tax_code":{"$ref":"#/components/schemas/ProductTaxCode"},"allow_concurrent_active_items":{"type":["null","boolean"],"description":"Indicates whether concurrent active items are allowed."},"is_hidden":{"type":["null","boolean"],"description":"Indicates whether the product is hidden."},"is_gifting_disabled":{"type":["null","boolean"],"description":"Indicates whether gifting is disabled."},"enabled_at":{"type":["null","string"],"description":"The date and time when the product becomes enabled.","format":"date-time"},"enabled_until":{"type":["null","string"],"description":"The date and time until which the product remains enabled.","format":"date-time"},"required_product_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of products required for purchasing this product."},"required_product_all":{"type":["null","boolean"],"description":"Indicates whether all required products are needed."},"custom_variable_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of associated custom variables."},"is_gift_cards_disabled":{"type":["null","boolean"],"description":"Indicates if applying gift cards should be disabled on the product."},"is_coupons_disabled":{"type":["null","boolean"],"description":"Indicates if applying coupons should be disabled on the product."},"is_affiliate_links_disabled":{"type":["null","boolean"],"description":"Indicates if applying affiliate links should be disabled on the product."},"tier_group_id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"ProductTrialConfigurationDto":{"required":["allow_repeat_trials","enabled","new_customer_order_lookback_scale","new_customer_order_lookback_value","new_customers_only","period_scale","period_value","repeat_trial_cooldown_scale","repeat_trial_cooldown_value","revoke_immediately_when_canceled"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if trials should be enabled for the product."},"period_value":{"type":"integer","description":"The trial period value.","format":"int32"},"period_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"revoke_immediately_when_canceled":{"type":"boolean","description":"Indicates if the trial should be revoked immediately when canceled or at the end of the trial."},"new_customers_only":{"type":"boolean","description":"Restricts trials to customers who have no orders within the lookback period.\nWhen enabled, customers with recent orders will be ineligible for trials."},"new_customer_order_lookback_value":{"type":"integer","description":"The lookback period value for determining if a customer is \"new\".\nOnly used when new_customers_only is enabled.","format":"int32"},"new_customer_order_lookback_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"allow_repeat_trials":{"type":"boolean","description":"Allows customers to trial again after a cooldown period following their previous trial.\nWhen disabled, customers can only trial once and never become eligible again."},"repeat_trial_cooldown_value":{"type":"integer","description":"The cooldown period value before a customer becomes eligible for another trial.\nOnly used when allow_repeat_trial is enabled.","format":"int32"},"repeat_trial_cooldown_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"}},"additionalProperties":false,"description":"Represents the configuration for trials of a product"},"ProductUpsellConfigurationDto":{"required":["enabled","recommendations"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if upselling should be enabled for the product.\nIf disabled, the product will never be recommended regardless of the global config."},"recommendations":{"type":"array","items":{"$ref":"#/components/schemas/ProductUpsellRecommendationDto"},"description":"Upselling recommendation for the product."}},"additionalProperties":false},"ProductUpsellRecommendationDto":{"required":["discount_amount","discount_type","prefer_as_subscription","recommended_product_id","type"],"type":"object","properties":{"recommended_product_id":{"$ref":"#/components/schemas/FlakeId"},"type":{"$ref":"#/components/schemas/UpsellTypeDto"},"discount_type":{"$ref":"#/components/schemas/UpsellDiscountTypeDto"},"discount_amount":{"type":"integer","format":"int64"},"minimum_base_product_quantity":{"type":["null","integer"],"format":"int32"},"minimum_recommended_product_quantity":{"type":["null","integer"],"format":"int32"},"quantity_to_add":{"type":["null","integer"],"format":"int32"},"prefer_as_subscription":{"type":"boolean"}},"additionalProperties":false},"ProductStockAvailableDto":{"required":["customer_available","store_available"],"type":"object","properties":{"store_available":{"type":"integer","description":"Indicates how many stock is left store-wide.","format":"int32"},"customer_available":{"type":"integer","format":"int32"}},"additionalProperties":false},"ProductTagDto":{"required":["id","name","slug"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"slug":{"type":"string","description":"The unique slug for the tag."},"name":{"type":"string","description":"The display name of the tag."}},"additionalProperties":false},"ProductGameServerDto":{"required":["enabled","id","name"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"name":{"type":"string","description":"The name of the game server."},"enabled":{"type":"boolean","description":"Indicates whether this game server is enabled."}},"additionalProperties":false},"ActorDto":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/PayNowActorType"},"id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"PayNowActorType":{"enum":["anonymous","user","api_key","customer","game_server","internal","admin","platform","global_customer"],"type":"string"},"PayNowError":{"required":["code","message","status"],"type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code.","format":"int32"},"code":{"type":"string","description":"The PayNow parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"trace_id":{"type":["null","string"],"description":"A distributed trace ID used for debugging."},"errors":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ValidationError"},"description":"An array of multiple errors. Only used by some API services."}},"additionalProperties":false,"description":"Represents a PayNow error"},"ValidationError":{"required":["code","message","path","validation"],"type":"object","properties":{"code":{"type":"string","description":"The parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"path":{"type":"string","description":"The path leading to the validation error."},"validation":{"type":"string","description":"Type of the validation that failed."}},"additionalProperties":false,"description":"A validation error."}}},"paths":{"/v1/stores/{storeId}/products":{"post":{"tags":["products"],"summary":"Create product","description":"Creates a new product in the specified store.\nCreating dynamic products while creating a checkout session via this endpoint without prior approval is prohibited and will result in store deactivation per our User Agreement.","operationId":"Products_CreateProduct","parameters":[{"name":"storeId","in":"path","description":"The ID of the store to create the product in.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertProductRequestDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/UpsertProductRequestDto"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/UpsertProductRequestDto"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDto"}}}},"default":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayNowError"}}}}}}}}}
```

## Get product

> Retrieves a specific product by ID from the specified store.\
> DO NOT USE THIS ROUTE FOR DISPLAYING PRODUCTS ON YOUR STOREFRONT, use the storefront API instead.

```json
{"openapi":"3.1.1","info":{"title":"PayNow Management API","version":"v1"},"tags":[{"name":"products"}],"security":[{"APIKey":[]}],"components":{"securitySchemes":{"APIKey":{"type":"apiKey","description":"An API Key token generated in the Dashboard in the format 'APIKey TOKEN_HERE'.","name":"Authorization","in":"header"}},"schemas":{"FlakeId":{"type":"string","additionalProperties":false,"format":"flake-id"},"ProductDto":{"required":["allow_one_time_purchase","allow_subscription","commands","customer_stock_limit","description","gameservers","id","name","price","remove_after_enabled","remove_after_time_scale","remove_after_time_value","single_game_server_only","slug","sort_order","stock_available","store_id","store_stock_limit","subscription_interval_scale","subscription_interval_value","tags","trial","upselling","version_id"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"store_id":{"$ref":"#/components/schemas/FlakeId"},"version_id":{"$ref":"#/components/schemas/FlakeId"},"image_url":{"type":["null","string"],"description":"The URL to the product image."},"slug":{"type":"string","description":"The unique slug for the product."},"name":{"type":"string","description":"The display name of the product."},"description":{"type":"string","description":"The detailed description of the product."},"label":{"type":["null","string"],"description":"The display label for the product."},"sort_order":{"type":"integer","description":"The sort order for displaying the product.","format":"int32"},"price":{"type":"integer","description":"The price of the product, in the lowest denominator (e.g. cents).","format":"int64"},"single_game_server_only":{"type":"boolean","description":"Indicates whether the product is limited to a single game server."},"allow_one_time_purchase":{"type":"boolean","description":"Indicates whether one-time purchases are allowed."},"allow_subscription":{"type":"boolean","description":"Indicates whether subscription purchases are allowed."},"subscription_interval_value":{"type":"integer","description":"The subscription interval value.","format":"int32"},"subscription_interval_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"trial":{"$ref":"#/components/schemas/ProductTrialConfigurationDto"},"upselling":{"$ref":"#/components/schemas/ProductUpsellConfigurationDto"},"remove_after_enabled":{"type":"boolean","description":"Indicates whether automatic removal is enabled."},"remove_after_time_value":{"type":"integer","description":"The time value for automatic removal.","format":"int32"},"remove_after_time_scale":{"$ref":"#/components/schemas/ProductRemoveAfterIntervalScale"},"stock_available":{"$ref":"#/components/schemas/ProductStockAvailableDto"},"store_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"customer_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"stock_limit_do_not_include_removed":{"type":["null","boolean"],"description":"Indicates whether removed items should be excluded from stock limits."},"tags":{"type":"array","items":{"$ref":"#/components/schemas/ProductTagDto"},"description":"The tags associated with the product."},"gameservers":{"type":"array","items":{"$ref":"#/components/schemas/ProductGameServerDto"},"description":"The game servers associated with the product."},"commands":{"type":"array","items":{"$ref":"#/components/schemas/ProductCommandDto"},"description":"The commands to be executed at different stages."},"created_by":{"$ref":"#/components/schemas/ActorDto"},"created_at":{"type":["null","string"],"description":"The date and time when the product was created.","format":"date-time"},"updated_by":{"$ref":"#/components/schemas/ActorDto"},"updated_at":{"type":["null","string"],"description":"The date and time when the product was last updated.","format":"date-time"},"deliverable_actions":{"$ref":"#/components/schemas/ProductDeliverableActionsDto"},"metadata":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Additional metadata for the product."},"payout_splits":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductPayoutSplitDto"},"description":"The payout splits for revenue distribution."},"tax_code":{"$ref":"#/components/schemas/ProductTaxCode"},"allow_concurrent_active_items":{"type":["null","boolean"],"description":"Indicates whether concurrent active items are allowed."},"is_hidden":{"type":["null","boolean"],"description":"Indicates whether the product is hidden."},"is_gifting_disabled":{"type":["null","boolean"],"description":"Indicates whether gifting is disabled."},"enabled_at":{"type":["null","string"],"description":"The date and time when the product becomes enabled.","format":"date-time"},"enabled_until":{"type":["null","string"],"description":"The date and time until which the product remains enabled.","format":"date-time"},"required_product_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of products required for purchasing this product."},"required_product_all":{"type":["null","boolean"],"description":"Indicates whether all required products are needed."},"custom_variable_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of associated custom variables."},"is_gift_cards_disabled":{"type":["null","boolean"],"description":"Indicates if applying gift cards should be disabled on the product."},"is_coupons_disabled":{"type":["null","boolean"],"description":"Indicates if applying coupons should be disabled on the product."},"is_affiliate_links_disabled":{"type":["null","boolean"],"description":"Indicates if applying affiliate links should be disabled on the product."},"tier_group_id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"ProductSubscriptionIntervalScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"ProductTrialConfigurationDto":{"required":["allow_repeat_trials","enabled","new_customer_order_lookback_scale","new_customer_order_lookback_value","new_customers_only","period_scale","period_value","repeat_trial_cooldown_scale","repeat_trial_cooldown_value","revoke_immediately_when_canceled"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if trials should be enabled for the product."},"period_value":{"type":"integer","description":"The trial period value.","format":"int32"},"period_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"revoke_immediately_when_canceled":{"type":"boolean","description":"Indicates if the trial should be revoked immediately when canceled or at the end of the trial."},"new_customers_only":{"type":"boolean","description":"Restricts trials to customers who have no orders within the lookback period.\nWhen enabled, customers with recent orders will be ineligible for trials."},"new_customer_order_lookback_value":{"type":"integer","description":"The lookback period value for determining if a customer is \"new\".\nOnly used when new_customers_only is enabled.","format":"int32"},"new_customer_order_lookback_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"allow_repeat_trials":{"type":"boolean","description":"Allows customers to trial again after a cooldown period following their previous trial.\nWhen disabled, customers can only trial once and never become eligible again."},"repeat_trial_cooldown_value":{"type":"integer","description":"The cooldown period value before a customer becomes eligible for another trial.\nOnly used when allow_repeat_trial is enabled.","format":"int32"},"repeat_trial_cooldown_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"}},"additionalProperties":false,"description":"Represents the configuration for trials of a product"},"ProductUpsellConfigurationDto":{"required":["enabled","recommendations"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if upselling should be enabled for the product.\nIf disabled, the product will never be recommended regardless of the global config."},"recommendations":{"type":"array","items":{"$ref":"#/components/schemas/ProductUpsellRecommendationDto"},"description":"Upselling recommendation for the product."}},"additionalProperties":false},"ProductUpsellRecommendationDto":{"required":["discount_amount","discount_type","prefer_as_subscription","recommended_product_id","type"],"type":"object","properties":{"recommended_product_id":{"$ref":"#/components/schemas/FlakeId"},"type":{"$ref":"#/components/schemas/UpsellTypeDto"},"discount_type":{"$ref":"#/components/schemas/UpsellDiscountTypeDto"},"discount_amount":{"type":"integer","format":"int64"},"minimum_base_product_quantity":{"type":["null","integer"],"format":"int32"},"minimum_recommended_product_quantity":{"type":["null","integer"],"format":"int32"},"quantity_to_add":{"type":["null","integer"],"format":"int32"},"prefer_as_subscription":{"type":"boolean"}},"additionalProperties":false},"UpsellTypeDto":{"enum":["unknown","additional","alternative","increase_quantity"],"type":"string"},"UpsellDiscountTypeDto":{"enum":["unknown","none","fixed","percentage"],"type":"string"},"ProductRemoveAfterIntervalScale":{"enum":["invalid","day","week","month"],"type":"string"},"ProductStockAvailableDto":{"required":["customer_available","store_available"],"type":"object","properties":{"store_available":{"type":"integer","description":"Indicates how many stock is left store-wide.","format":"int32"},"customer_available":{"type":"integer","format":"int32"}},"additionalProperties":false},"ProductStockLimitDto":{"required":["enabled","include_trials","time_scale"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates whether stock limit is enabled."},"quantity":{"type":["null","integer"],"description":"The quantity limit.","format":"int32"},"time_value":{"type":["null","integer"],"description":"The time value for stock limit period.","format":"int32"},"time_scale":{"$ref":"#/components/schemas/ProductStockTimeScale"},"include_trials":{"type":"boolean","description":"Indicates if trials should be included in the active stock limit calculation."}},"additionalProperties":false},"ProductStockTimeScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"ProductTagDto":{"required":["id","name","slug"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"slug":{"type":"string","description":"The unique slug for the tag."},"name":{"type":"string","description":"The display name of the tag."}},"additionalProperties":false},"ProductGameServerDto":{"required":["enabled","id","name"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"name":{"type":"string","description":"The name of the game server."},"enabled":{"type":"boolean","description":"Indicates whether this game server is enabled."}},"additionalProperties":false},"ProductCommandDto":{"required":["content","online_only","stage"],"type":"object","properties":{"stage":{"$ref":"#/components/schemas/ProductCommandStage"},"content":{"type":"string","description":"Content of the command."},"online_only":{"type":"boolean","description":"Value indicating whether the command should only execute when the player is online."},"override_execute_on_gameserver_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"Value indicating on which game servers should the command be executed.\nIf left empty or null, then the default behavior applies\n(executing on all game servers or on the selected game server is selection is enabled)"}},"additionalProperties":false},"ProductCommandStage":{"enum":["invalid","on_purchase","on_expire","on_refund","on_renew","on_chargeback","on_trial_start","on_trial_expire"],"type":"string","description":"Defines the stages at which product commands can be executed."},"ActorDto":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/PayNowActorType"},"id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"PayNowActorType":{"enum":["anonymous","user","api_key","customer","game_server","internal","admin","platform","global_customer"],"type":"string"},"ProductDeliverableActionsDto":{"required":["grant_giftcard"],"type":"object","properties":{"grant_giftcard":{"type":"boolean","description":"Value indicating whether to grant a giftcard with the product with the subtotal amount."}},"additionalProperties":false},"ProductPayoutSplitDto":{"required":["platform_fee","user_id"],"type":"object","properties":{"user_id":{"$ref":"#/components/schemas/FlakeId"},"percentage":{"type":["null","integer"],"description":"The percentage of the payment allocated to the user, in basis points (500 = 5%).\nThe last payout split must have this field set to `null` to receive the remaining portion.","format":"int64"},"platform_fee":{"type":"integer","description":"The platform fee percentage your platform receives, in basis points (500 = 5%).","format":"int64"}},"additionalProperties":false},"ProductTaxCode":{"enum":["unknown","digital_goods_subscription","digital_goods_permanent","saas","downloaded_software","digital_goods_subscription_gaming","digital_goods_permanent_gaming","iaas","paas","saas_security","saas_storage"],"type":"string","description":"Determines the category of the product for taxation purposes.\nContact support for help with setting the correct tax code."},"PayNowError":{"required":["code","message","status"],"type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code.","format":"int32"},"code":{"type":"string","description":"The PayNow parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"trace_id":{"type":["null","string"],"description":"A distributed trace ID used for debugging."},"errors":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ValidationError"},"description":"An array of multiple errors. Only used by some API services."}},"additionalProperties":false,"description":"Represents a PayNow error"},"ValidationError":{"required":["code","message","path","validation"],"type":"object","properties":{"code":{"type":"string","description":"The parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"path":{"type":"string","description":"The path leading to the validation error."},"validation":{"type":"string","description":"Type of the validation that failed."}},"additionalProperties":false,"description":"A validation error."}}},"paths":{"/v1/stores/{storeId}/products/{productId}":{"get":{"tags":["products"],"summary":"Get product","description":"Retrieves a specific product by ID from the specified store.\nDO NOT USE THIS ROUTE FOR DISPLAYING PRODUCTS ON YOUR STOREFRONT, use the storefront API instead.","operationId":"Products_GetProduct","parameters":[{"name":"storeId","in":"path","description":"The ID of the store the product belongs to.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}},{"name":"productId","in":"path","description":"The ID of the product to retrieve.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDto"}}}},"default":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayNowError"}}}}}}}}}
```

## Delete product

> Deletes a product from the specified store.

```json
{"openapi":"3.1.1","info":{"title":"PayNow Management API","version":"v1"},"tags":[{"name":"products"}],"security":[{"APIKey":[]}],"components":{"securitySchemes":{"APIKey":{"type":"apiKey","description":"An API Key token generated in the Dashboard in the format 'APIKey TOKEN_HERE'.","name":"Authorization","in":"header"}},"schemas":{"FlakeId":{"type":"string","additionalProperties":false,"format":"flake-id"},"PayNowError":{"required":["code","message","status"],"type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code.","format":"int32"},"code":{"type":"string","description":"The PayNow parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"trace_id":{"type":["null","string"],"description":"A distributed trace ID used for debugging."},"errors":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ValidationError"},"description":"An array of multiple errors. Only used by some API services."}},"additionalProperties":false,"description":"Represents a PayNow error"},"ValidationError":{"required":["code","message","path","validation"],"type":"object","properties":{"code":{"type":"string","description":"The parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"path":{"type":"string","description":"The path leading to the validation error."},"validation":{"type":"string","description":"Type of the validation that failed."}},"additionalProperties":false,"description":"A validation error."}}},"paths":{"/v1/stores/{storeId}/products/{productId}":{"delete":{"tags":["products"],"summary":"Delete product","description":"Deletes a product from the specified store.","operationId":"Products_DeleteProduct","parameters":[{"name":"storeId","in":"path","description":"The ID of the store the product belongs to.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}},{"name":"productId","in":"path","description":"The ID of the product to delete.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}}],"responses":{"204":{"description":"No Content"},"default":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayNowError"}}}}}}}}}
```

## Update product

> Updates an existing product in the specified store.

```json
{"openapi":"3.1.1","info":{"title":"PayNow Management API","version":"v1"},"tags":[{"name":"products"}],"security":[{"APIKey":[]}],"components":{"securitySchemes":{"APIKey":{"type":"apiKey","description":"An API Key token generated in the Dashboard in the format 'APIKey TOKEN_HERE'.","name":"Authorization","in":"header"}},"schemas":{"FlakeId":{"type":"string","additionalProperties":false,"format":"flake-id"},"UpsertProductRequestDto":{"type":"object","properties":{"slug":{"type":["null","string"],"description":"The unique URL-safe identifier (slug) for the product."},"name":{"type":["null","string"],"description":"The display name of the product."},"description":{"type":["null","string"],"description":"The detailed description of the product."},"label":{"type":["null","string"],"description":"The display label for the product."},"price":{"type":["null","integer"],"description":"The price of the product in the lowest denominator (e.g. cents).","format":"int64"},"single_game_server_only":{"type":["null","boolean"],"description":"Indicates whether the customer is prompted to select a game server before purchasing."},"allow_one_time_purchase":{"type":["null","boolean"],"description":"Indicates whether one-time purchases are allowed."},"allow_subscription":{"type":["null","boolean"],"description":"Indicates whether subscription purchases are allowed."},"subscription_interval_value":{"type":["null","integer"],"description":"The subscription interval value.","format":"int32"},"subscription_interval_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"trial":{"$ref":"#/components/schemas/UpsertProductTrialConfigurationDto"},"upselling":{"$ref":"#/components/schemas/UpsertProductUpsellConfigurationDto"},"remove_after_enabled":{"type":["null","boolean"],"description":"Indicates whether automatic removal is enabled."},"remove_after_time_value":{"type":["null","integer"],"description":"The time value for automatic removal.","format":"int32"},"remove_after_time_scale":{"$ref":"#/components/schemas/ProductRemoveAfterIntervalScale"},"store_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"customer_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"stock_limit_do_not_include_removed":{"type":["null","boolean"],"description":"Indicates whether removed items should be excluded from stock limits."},"tags":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The tag IDs associated with the product."},"gameservers":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The gameserver IDs associated with the product."},"commands":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductCommandDto"},"description":"The commands to be executed at different stages."},"deliverable_actions":{"$ref":"#/components/schemas/ProductDeliverableActionsDto"},"metadata":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Additional metadata for the product."},"payout_splits":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductPayoutSplitDto"},"description":"The payout splits for revenue distribution.\nRequires special approval."},"tax_code":{"$ref":"#/components/schemas/ProductTaxCode"},"allow_concurrent_active_items":{"type":["null","boolean"],"description":"Indicates whether concurrent active items are allowed."},"is_hidden":{"type":["null","boolean"],"description":"Indicates whether the product is hidden."},"is_gifting_disabled":{"type":["null","boolean"],"description":"Indicates whether gifting is disabled."},"enabled_at":{"type":["null","string"],"description":"The date and time when the product becomes enabled.\nSet to `null` to keep enabled.","format":"date-time"},"enabled_until":{"type":["null","string"],"description":"The date and time until which the product remains enabled.\nSet to `null` to keep enabled.","format":"date-time"},"required_product_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of products required for purchasing this product."},"required_product_all":{"type":["null","boolean"],"description":"Indicates whether all required products are needed."},"custom_variable_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of associated custom variables."},"is_gift_cards_disabled":{"type":["null","boolean"],"description":"Indicates if applying gift cards should be disabled on the product."},"is_coupons_disabled":{"type":["null","boolean"],"description":"Indicates if applying coupons should be disabled on the product."},"is_affiliate_links_disabled":{"type":["null","boolean"],"description":"Indicates if applying affiliate links should be disabled on the product."},"tier_group_id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"ProductSubscriptionIntervalScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"UpsertProductTrialConfigurationDto":{"type":"object","properties":{"enabled":{"type":["null","boolean"],"description":"Indicates if trials should be enabled for the product."},"period_value":{"type":["null","integer"],"description":"The trial period value.","format":"int32"},"period_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"revoke_immediately_when_canceled":{"type":["null","boolean"],"description":"Indicates if the trial should be revoked immediately when canceled or at the end of the trial."},"new_customers_only":{"type":["null","boolean"],"description":"Restricts trials to customers who have no orders within the lookback period.\nWhen enabled, customers with recent orders will be ineligible for trials."},"new_customer_order_lookback_value":{"type":["null","integer"],"description":"The lookback period value for determining if a customer is \"new\".\nOnly used when new_customers_only is enabled.","format":"int32"},"new_customer_order_lookback_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"allow_repeat_trials":{"type":["null","boolean"],"description":"Allows customers to trial again after a cooldown period following their previous trial.\nWhen disabled, customers can only trial once and never become eligible again."},"repeat_trial_cooldown_value":{"type":["null","integer"],"description":"The cooldown period value before a customer becomes eligible for another trial.\nOnly used when allow_repeat_trials is enabled.","format":"int32"},"repeat_trial_cooldown_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"}},"additionalProperties":false,"description":"Represents the configuration for trials of a product"},"UpsertProductUpsellConfigurationDto":{"type":"object","properties":{"enabled":{"type":["null","boolean"]},"recommendations":{"type":["null","array"],"items":{"$ref":"#/components/schemas/UpsertProductUpsellRecommendationDto"}}},"additionalProperties":false},"UpsertProductUpsellRecommendationDto":{"required":["discount_amount","discount_type","prefer_as_subscription","recommended_product_id","type"],"type":"object","properties":{"recommended_product_id":{"$ref":"#/components/schemas/FlakeId"},"type":{"$ref":"#/components/schemas/UpsellTypeDto"},"discount_type":{"$ref":"#/components/schemas/UpsellDiscountTypeDto"},"discount_amount":{"type":"integer","format":"int64"},"minimum_base_product_quantity":{"type":["null","integer"],"format":"int32"},"minimum_recommended_product_quantity":{"type":["null","integer"],"format":"int32"},"quantity_to_add":{"type":["null","integer"],"format":"int32"},"prefer_as_subscription":{"type":"boolean"}},"additionalProperties":false},"UpsellTypeDto":{"enum":["unknown","additional","alternative","increase_quantity"],"type":"string"},"UpsellDiscountTypeDto":{"enum":["unknown","none","fixed","percentage"],"type":"string"},"ProductRemoveAfterIntervalScale":{"enum":["invalid","day","week","month"],"type":"string"},"ProductStockLimitDto":{"required":["enabled","include_trials","time_scale"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates whether stock limit is enabled."},"quantity":{"type":["null","integer"],"description":"The quantity limit.","format":"int32"},"time_value":{"type":["null","integer"],"description":"The time value for stock limit period.","format":"int32"},"time_scale":{"$ref":"#/components/schemas/ProductStockTimeScale"},"include_trials":{"type":"boolean","description":"Indicates if trials should be included in the active stock limit calculation."}},"additionalProperties":false},"ProductStockTimeScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"ProductCommandDto":{"required":["content","online_only","stage"],"type":"object","properties":{"stage":{"$ref":"#/components/schemas/ProductCommandStage"},"content":{"type":"string","description":"Content of the command."},"online_only":{"type":"boolean","description":"Value indicating whether the command should only execute when the player is online."},"override_execute_on_gameserver_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"Value indicating on which game servers should the command be executed.\nIf left empty or null, then the default behavior applies\n(executing on all game servers or on the selected game server is selection is enabled)"}},"additionalProperties":false},"ProductCommandStage":{"enum":["invalid","on_purchase","on_expire","on_refund","on_renew","on_chargeback","on_trial_start","on_trial_expire"],"type":"string","description":"Defines the stages at which product commands can be executed."},"ProductDeliverableActionsDto":{"required":["grant_giftcard"],"type":"object","properties":{"grant_giftcard":{"type":"boolean","description":"Value indicating whether to grant a giftcard with the product with the subtotal amount."}},"additionalProperties":false},"ProductPayoutSplitDto":{"required":["platform_fee","user_id"],"type":"object","properties":{"user_id":{"$ref":"#/components/schemas/FlakeId"},"percentage":{"type":["null","integer"],"description":"The percentage of the payment allocated to the user, in basis points (500 = 5%).\nThe last payout split must have this field set to `null` to receive the remaining portion.","format":"int64"},"platform_fee":{"type":"integer","description":"The platform fee percentage your platform receives, in basis points (500 = 5%).","format":"int64"}},"additionalProperties":false},"ProductTaxCode":{"enum":["unknown","digital_goods_subscription","digital_goods_permanent","saas","downloaded_software","digital_goods_subscription_gaming","digital_goods_permanent_gaming","iaas","paas","saas_security","saas_storage"],"type":"string","description":"Determines the category of the product for taxation purposes.\nContact support for help with setting the correct tax code."},"ProductDto":{"required":["allow_one_time_purchase","allow_subscription","commands","customer_stock_limit","description","gameservers","id","name","price","remove_after_enabled","remove_after_time_scale","remove_after_time_value","single_game_server_only","slug","sort_order","stock_available","store_id","store_stock_limit","subscription_interval_scale","subscription_interval_value","tags","trial","upselling","version_id"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"store_id":{"$ref":"#/components/schemas/FlakeId"},"version_id":{"$ref":"#/components/schemas/FlakeId"},"image_url":{"type":["null","string"],"description":"The URL to the product image."},"slug":{"type":"string","description":"The unique slug for the product."},"name":{"type":"string","description":"The display name of the product."},"description":{"type":"string","description":"The detailed description of the product."},"label":{"type":["null","string"],"description":"The display label for the product."},"sort_order":{"type":"integer","description":"The sort order for displaying the product.","format":"int32"},"price":{"type":"integer","description":"The price of the product, in the lowest denominator (e.g. cents).","format":"int64"},"single_game_server_only":{"type":"boolean","description":"Indicates whether the product is limited to a single game server."},"allow_one_time_purchase":{"type":"boolean","description":"Indicates whether one-time purchases are allowed."},"allow_subscription":{"type":"boolean","description":"Indicates whether subscription purchases are allowed."},"subscription_interval_value":{"type":"integer","description":"The subscription interval value.","format":"int32"},"subscription_interval_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"trial":{"$ref":"#/components/schemas/ProductTrialConfigurationDto"},"upselling":{"$ref":"#/components/schemas/ProductUpsellConfigurationDto"},"remove_after_enabled":{"type":"boolean","description":"Indicates whether automatic removal is enabled."},"remove_after_time_value":{"type":"integer","description":"The time value for automatic removal.","format":"int32"},"remove_after_time_scale":{"$ref":"#/components/schemas/ProductRemoveAfterIntervalScale"},"stock_available":{"$ref":"#/components/schemas/ProductStockAvailableDto"},"store_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"customer_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"stock_limit_do_not_include_removed":{"type":["null","boolean"],"description":"Indicates whether removed items should be excluded from stock limits."},"tags":{"type":"array","items":{"$ref":"#/components/schemas/ProductTagDto"},"description":"The tags associated with the product."},"gameservers":{"type":"array","items":{"$ref":"#/components/schemas/ProductGameServerDto"},"description":"The game servers associated with the product."},"commands":{"type":"array","items":{"$ref":"#/components/schemas/ProductCommandDto"},"description":"The commands to be executed at different stages."},"created_by":{"$ref":"#/components/schemas/ActorDto"},"created_at":{"type":["null","string"],"description":"The date and time when the product was created.","format":"date-time"},"updated_by":{"$ref":"#/components/schemas/ActorDto"},"updated_at":{"type":["null","string"],"description":"The date and time when the product was last updated.","format":"date-time"},"deliverable_actions":{"$ref":"#/components/schemas/ProductDeliverableActionsDto"},"metadata":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Additional metadata for the product."},"payout_splits":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductPayoutSplitDto"},"description":"The payout splits for revenue distribution."},"tax_code":{"$ref":"#/components/schemas/ProductTaxCode"},"allow_concurrent_active_items":{"type":["null","boolean"],"description":"Indicates whether concurrent active items are allowed."},"is_hidden":{"type":["null","boolean"],"description":"Indicates whether the product is hidden."},"is_gifting_disabled":{"type":["null","boolean"],"description":"Indicates whether gifting is disabled."},"enabled_at":{"type":["null","string"],"description":"The date and time when the product becomes enabled.","format":"date-time"},"enabled_until":{"type":["null","string"],"description":"The date and time until which the product remains enabled.","format":"date-time"},"required_product_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of products required for purchasing this product."},"required_product_all":{"type":["null","boolean"],"description":"Indicates whether all required products are needed."},"custom_variable_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of associated custom variables."},"is_gift_cards_disabled":{"type":["null","boolean"],"description":"Indicates if applying gift cards should be disabled on the product."},"is_coupons_disabled":{"type":["null","boolean"],"description":"Indicates if applying coupons should be disabled on the product."},"is_affiliate_links_disabled":{"type":["null","boolean"],"description":"Indicates if applying affiliate links should be disabled on the product."},"tier_group_id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"ProductTrialConfigurationDto":{"required":["allow_repeat_trials","enabled","new_customer_order_lookback_scale","new_customer_order_lookback_value","new_customers_only","period_scale","period_value","repeat_trial_cooldown_scale","repeat_trial_cooldown_value","revoke_immediately_when_canceled"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if trials should be enabled for the product."},"period_value":{"type":"integer","description":"The trial period value.","format":"int32"},"period_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"revoke_immediately_when_canceled":{"type":"boolean","description":"Indicates if the trial should be revoked immediately when canceled or at the end of the trial."},"new_customers_only":{"type":"boolean","description":"Restricts trials to customers who have no orders within the lookback period.\nWhen enabled, customers with recent orders will be ineligible for trials."},"new_customer_order_lookback_value":{"type":"integer","description":"The lookback period value for determining if a customer is \"new\".\nOnly used when new_customers_only is enabled.","format":"int32"},"new_customer_order_lookback_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"allow_repeat_trials":{"type":"boolean","description":"Allows customers to trial again after a cooldown period following their previous trial.\nWhen disabled, customers can only trial once and never become eligible again."},"repeat_trial_cooldown_value":{"type":"integer","description":"The cooldown period value before a customer becomes eligible for another trial.\nOnly used when allow_repeat_trial is enabled.","format":"int32"},"repeat_trial_cooldown_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"}},"additionalProperties":false,"description":"Represents the configuration for trials of a product"},"ProductUpsellConfigurationDto":{"required":["enabled","recommendations"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if upselling should be enabled for the product.\nIf disabled, the product will never be recommended regardless of the global config."},"recommendations":{"type":"array","items":{"$ref":"#/components/schemas/ProductUpsellRecommendationDto"},"description":"Upselling recommendation for the product."}},"additionalProperties":false},"ProductUpsellRecommendationDto":{"required":["discount_amount","discount_type","prefer_as_subscription","recommended_product_id","type"],"type":"object","properties":{"recommended_product_id":{"$ref":"#/components/schemas/FlakeId"},"type":{"$ref":"#/components/schemas/UpsellTypeDto"},"discount_type":{"$ref":"#/components/schemas/UpsellDiscountTypeDto"},"discount_amount":{"type":"integer","format":"int64"},"minimum_base_product_quantity":{"type":["null","integer"],"format":"int32"},"minimum_recommended_product_quantity":{"type":["null","integer"],"format":"int32"},"quantity_to_add":{"type":["null","integer"],"format":"int32"},"prefer_as_subscription":{"type":"boolean"}},"additionalProperties":false},"ProductStockAvailableDto":{"required":["customer_available","store_available"],"type":"object","properties":{"store_available":{"type":"integer","description":"Indicates how many stock is left store-wide.","format":"int32"},"customer_available":{"type":"integer","format":"int32"}},"additionalProperties":false},"ProductTagDto":{"required":["id","name","slug"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"slug":{"type":"string","description":"The unique slug for the tag."},"name":{"type":"string","description":"The display name of the tag."}},"additionalProperties":false},"ProductGameServerDto":{"required":["enabled","id","name"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"name":{"type":"string","description":"The name of the game server."},"enabled":{"type":"boolean","description":"Indicates whether this game server is enabled."}},"additionalProperties":false},"ActorDto":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/PayNowActorType"},"id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"PayNowActorType":{"enum":["anonymous","user","api_key","customer","game_server","internal","admin","platform","global_customer"],"type":"string"},"PayNowError":{"required":["code","message","status"],"type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code.","format":"int32"},"code":{"type":"string","description":"The PayNow parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"trace_id":{"type":["null","string"],"description":"A distributed trace ID used for debugging."},"errors":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ValidationError"},"description":"An array of multiple errors. Only used by some API services."}},"additionalProperties":false,"description":"Represents a PayNow error"},"ValidationError":{"required":["code","message","path","validation"],"type":"object","properties":{"code":{"type":"string","description":"The parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"path":{"type":"string","description":"The path leading to the validation error."},"validation":{"type":"string","description":"Type of the validation that failed."}},"additionalProperties":false,"description":"A validation error."}}},"paths":{"/v1/stores/{storeId}/products/{productId}":{"patch":{"tags":["products"],"summary":"Update product","description":"Updates an existing product in the specified store.","operationId":"Products_UpdateProduct","parameters":[{"name":"storeId","in":"path","description":"The ID of the store the product belongs to.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}},{"name":"productId","in":"path","description":"The ID of the product to update.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertProductRequestDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/UpsertProductRequestDto"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/UpsertProductRequestDto"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDto"}}}},"default":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayNowError"}}}}}}}}}
```

## Update product sort order

> Updates the sort order of products in the specified store.

```json
{"openapi":"3.1.1","info":{"title":"PayNow Management API","version":"v1"},"tags":[{"name":"products"}],"security":[{"APIKey":[]}],"components":{"securitySchemes":{"APIKey":{"type":"apiKey","description":"An API Key token generated in the Dashboard in the format 'APIKey TOKEN_HERE'.","name":"Authorization","in":"header"}},"schemas":{"FlakeId":{"type":"string","additionalProperties":false,"format":"flake-id"},"UpdateProductSortOrderRequestDto":{"required":["product_ids"],"type":"object","properties":{"product_ids":{"type":"array","items":{"$ref":"#/components/schemas/FlakeId"},"description":"An array of product IDs in the order that they should be sorted."}},"additionalProperties":false},"ProductDto":{"required":["allow_one_time_purchase","allow_subscription","commands","customer_stock_limit","description","gameservers","id","name","price","remove_after_enabled","remove_after_time_scale","remove_after_time_value","single_game_server_only","slug","sort_order","stock_available","store_id","store_stock_limit","subscription_interval_scale","subscription_interval_value","tags","trial","upselling","version_id"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"store_id":{"$ref":"#/components/schemas/FlakeId"},"version_id":{"$ref":"#/components/schemas/FlakeId"},"image_url":{"type":["null","string"],"description":"The URL to the product image."},"slug":{"type":"string","description":"The unique slug for the product."},"name":{"type":"string","description":"The display name of the product."},"description":{"type":"string","description":"The detailed description of the product."},"label":{"type":["null","string"],"description":"The display label for the product."},"sort_order":{"type":"integer","description":"The sort order for displaying the product.","format":"int32"},"price":{"type":"integer","description":"The price of the product, in the lowest denominator (e.g. cents).","format":"int64"},"single_game_server_only":{"type":"boolean","description":"Indicates whether the product is limited to a single game server."},"allow_one_time_purchase":{"type":"boolean","description":"Indicates whether one-time purchases are allowed."},"allow_subscription":{"type":"boolean","description":"Indicates whether subscription purchases are allowed."},"subscription_interval_value":{"type":"integer","description":"The subscription interval value.","format":"int32"},"subscription_interval_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"trial":{"$ref":"#/components/schemas/ProductTrialConfigurationDto"},"upselling":{"$ref":"#/components/schemas/ProductUpsellConfigurationDto"},"remove_after_enabled":{"type":"boolean","description":"Indicates whether automatic removal is enabled."},"remove_after_time_value":{"type":"integer","description":"The time value for automatic removal.","format":"int32"},"remove_after_time_scale":{"$ref":"#/components/schemas/ProductRemoveAfterIntervalScale"},"stock_available":{"$ref":"#/components/schemas/ProductStockAvailableDto"},"store_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"customer_stock_limit":{"$ref":"#/components/schemas/ProductStockLimitDto"},"stock_limit_do_not_include_removed":{"type":["null","boolean"],"description":"Indicates whether removed items should be excluded from stock limits."},"tags":{"type":"array","items":{"$ref":"#/components/schemas/ProductTagDto"},"description":"The tags associated with the product."},"gameservers":{"type":"array","items":{"$ref":"#/components/schemas/ProductGameServerDto"},"description":"The game servers associated with the product."},"commands":{"type":"array","items":{"$ref":"#/components/schemas/ProductCommandDto"},"description":"The commands to be executed at different stages."},"created_by":{"$ref":"#/components/schemas/ActorDto"},"created_at":{"type":["null","string"],"description":"The date and time when the product was created.","format":"date-time"},"updated_by":{"$ref":"#/components/schemas/ActorDto"},"updated_at":{"type":["null","string"],"description":"The date and time when the product was last updated.","format":"date-time"},"deliverable_actions":{"$ref":"#/components/schemas/ProductDeliverableActionsDto"},"metadata":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Additional metadata for the product."},"payout_splits":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ProductPayoutSplitDto"},"description":"The payout splits for revenue distribution."},"tax_code":{"$ref":"#/components/schemas/ProductTaxCode"},"allow_concurrent_active_items":{"type":["null","boolean"],"description":"Indicates whether concurrent active items are allowed."},"is_hidden":{"type":["null","boolean"],"description":"Indicates whether the product is hidden."},"is_gifting_disabled":{"type":["null","boolean"],"description":"Indicates whether gifting is disabled."},"enabled_at":{"type":["null","string"],"description":"The date and time when the product becomes enabled.","format":"date-time"},"enabled_until":{"type":["null","string"],"description":"The date and time until which the product remains enabled.","format":"date-time"},"required_product_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of products required for purchasing this product."},"required_product_all":{"type":["null","boolean"],"description":"Indicates whether all required products are needed."},"custom_variable_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"The IDs of associated custom variables."},"is_gift_cards_disabled":{"type":["null","boolean"],"description":"Indicates if applying gift cards should be disabled on the product."},"is_coupons_disabled":{"type":["null","boolean"],"description":"Indicates if applying coupons should be disabled on the product."},"is_affiliate_links_disabled":{"type":["null","boolean"],"description":"Indicates if applying affiliate links should be disabled on the product."},"tier_group_id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"ProductSubscriptionIntervalScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"ProductTrialConfigurationDto":{"required":["allow_repeat_trials","enabled","new_customer_order_lookback_scale","new_customer_order_lookback_value","new_customers_only","period_scale","period_value","repeat_trial_cooldown_scale","repeat_trial_cooldown_value","revoke_immediately_when_canceled"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if trials should be enabled for the product."},"period_value":{"type":"integer","description":"The trial period value.","format":"int32"},"period_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"revoke_immediately_when_canceled":{"type":"boolean","description":"Indicates if the trial should be revoked immediately when canceled or at the end of the trial."},"new_customers_only":{"type":"boolean","description":"Restricts trials to customers who have no orders within the lookback period.\nWhen enabled, customers with recent orders will be ineligible for trials."},"new_customer_order_lookback_value":{"type":"integer","description":"The lookback period value for determining if a customer is \"new\".\nOnly used when new_customers_only is enabled.","format":"int32"},"new_customer_order_lookback_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"},"allow_repeat_trials":{"type":"boolean","description":"Allows customers to trial again after a cooldown period following their previous trial.\nWhen disabled, customers can only trial once and never become eligible again."},"repeat_trial_cooldown_value":{"type":"integer","description":"The cooldown period value before a customer becomes eligible for another trial.\nOnly used when allow_repeat_trial is enabled.","format":"int32"},"repeat_trial_cooldown_scale":{"$ref":"#/components/schemas/ProductSubscriptionIntervalScale"}},"additionalProperties":false,"description":"Represents the configuration for trials of a product"},"ProductUpsellConfigurationDto":{"required":["enabled","recommendations"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates if upselling should be enabled for the product.\nIf disabled, the product will never be recommended regardless of the global config."},"recommendations":{"type":"array","items":{"$ref":"#/components/schemas/ProductUpsellRecommendationDto"},"description":"Upselling recommendation for the product."}},"additionalProperties":false},"ProductUpsellRecommendationDto":{"required":["discount_amount","discount_type","prefer_as_subscription","recommended_product_id","type"],"type":"object","properties":{"recommended_product_id":{"$ref":"#/components/schemas/FlakeId"},"type":{"$ref":"#/components/schemas/UpsellTypeDto"},"discount_type":{"$ref":"#/components/schemas/UpsellDiscountTypeDto"},"discount_amount":{"type":"integer","format":"int64"},"minimum_base_product_quantity":{"type":["null","integer"],"format":"int32"},"minimum_recommended_product_quantity":{"type":["null","integer"],"format":"int32"},"quantity_to_add":{"type":["null","integer"],"format":"int32"},"prefer_as_subscription":{"type":"boolean"}},"additionalProperties":false},"UpsellTypeDto":{"enum":["unknown","additional","alternative","increase_quantity"],"type":"string"},"UpsellDiscountTypeDto":{"enum":["unknown","none","fixed","percentage"],"type":"string"},"ProductRemoveAfterIntervalScale":{"enum":["invalid","day","week","month"],"type":"string"},"ProductStockAvailableDto":{"required":["customer_available","store_available"],"type":"object","properties":{"store_available":{"type":"integer","description":"Indicates how many stock is left store-wide.","format":"int32"},"customer_available":{"type":"integer","format":"int32"}},"additionalProperties":false},"ProductStockLimitDto":{"required":["enabled","include_trials","time_scale"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Indicates whether stock limit is enabled."},"quantity":{"type":["null","integer"],"description":"The quantity limit.","format":"int32"},"time_value":{"type":["null","integer"],"description":"The time value for stock limit period.","format":"int32"},"time_scale":{"$ref":"#/components/schemas/ProductStockTimeScale"},"include_trials":{"type":"boolean","description":"Indicates if trials should be included in the active stock limit calculation."}},"additionalProperties":false},"ProductStockTimeScale":{"enum":["invalid","day","week","month","year"],"type":"string"},"ProductTagDto":{"required":["id","name","slug"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"slug":{"type":"string","description":"The unique slug for the tag."},"name":{"type":"string","description":"The display name of the tag."}},"additionalProperties":false},"ProductGameServerDto":{"required":["enabled","id","name"],"type":"object","properties":{"id":{"$ref":"#/components/schemas/FlakeId"},"name":{"type":"string","description":"The name of the game server."},"enabled":{"type":"boolean","description":"Indicates whether this game server is enabled."}},"additionalProperties":false},"ProductCommandDto":{"required":["content","online_only","stage"],"type":"object","properties":{"stage":{"$ref":"#/components/schemas/ProductCommandStage"},"content":{"type":"string","description":"Content of the command."},"online_only":{"type":"boolean","description":"Value indicating whether the command should only execute when the player is online."},"override_execute_on_gameserver_ids":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FlakeId"},"description":"Value indicating on which game servers should the command be executed.\nIf left empty or null, then the default behavior applies\n(executing on all game servers or on the selected game server is selection is enabled)"}},"additionalProperties":false},"ProductCommandStage":{"enum":["invalid","on_purchase","on_expire","on_refund","on_renew","on_chargeback","on_trial_start","on_trial_expire"],"type":"string","description":"Defines the stages at which product commands can be executed."},"ActorDto":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/PayNowActorType"},"id":{"$ref":"#/components/schemas/FlakeId"}},"additionalProperties":false},"PayNowActorType":{"enum":["anonymous","user","api_key","customer","game_server","internal","admin","platform","global_customer"],"type":"string"},"ProductDeliverableActionsDto":{"required":["grant_giftcard"],"type":"object","properties":{"grant_giftcard":{"type":"boolean","description":"Value indicating whether to grant a giftcard with the product with the subtotal amount."}},"additionalProperties":false},"ProductPayoutSplitDto":{"required":["platform_fee","user_id"],"type":"object","properties":{"user_id":{"$ref":"#/components/schemas/FlakeId"},"percentage":{"type":["null","integer"],"description":"The percentage of the payment allocated to the user, in basis points (500 = 5%).\nThe last payout split must have this field set to `null` to receive the remaining portion.","format":"int64"},"platform_fee":{"type":"integer","description":"The platform fee percentage your platform receives, in basis points (500 = 5%).","format":"int64"}},"additionalProperties":false},"ProductTaxCode":{"enum":["unknown","digital_goods_subscription","digital_goods_permanent","saas","downloaded_software","digital_goods_subscription_gaming","digital_goods_permanent_gaming","iaas","paas","saas_security","saas_storage"],"type":"string","description":"Determines the category of the product for taxation purposes.\nContact support for help with setting the correct tax code."},"PayNowError":{"required":["code","message","status"],"type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code.","format":"int32"},"code":{"type":"string","description":"The PayNow parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"trace_id":{"type":["null","string"],"description":"A distributed trace ID used for debugging."},"errors":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ValidationError"},"description":"An array of multiple errors. Only used by some API services."}},"additionalProperties":false,"description":"Represents a PayNow error"},"ValidationError":{"required":["code","message","path","validation"],"type":"object","properties":{"code":{"type":"string","description":"The parseable error code."},"message":{"type":"string","description":"The human-readable error message."},"path":{"type":"string","description":"The path leading to the validation error."},"validation":{"type":"string","description":"Type of the validation that failed."}},"additionalProperties":false,"description":"A validation error."}}},"paths":{"/v1/stores/{storeId}/products/sort-order":{"post":{"tags":["products"],"summary":"Update product sort order","description":"Updates the sort order of products in the specified store.","operationId":"Products_UpdateProductSortOrder","parameters":[{"name":"storeId","in":"path","description":"The ID of the store to update product sort order in.","required":true,"schema":{"$ref":"#/components/schemas/FlakeId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProductSortOrderRequestDto"}},"text/json":{"schema":{"$ref":"#/components/schemas/UpdateProductSortOrderRequestDto"}},"application/*+json":{"schema":{"$ref":"#/components/schemas/UpdateProductSortOrderRequestDto"}}}},"responses":{"204":{"description":"No Content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDto"}}}},"default":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayNowError"}}}}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.paynow.gg/management/management-api/products.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
