Skip to main content
POST
Create product

Authorizations

Authorization
string
header
required

Use your Shoppex API key in the Authorization header.

Body

title
string
required
price
number
required
type
enum<string>
required
Available options:
SERIALS,
FILE,
SERVICE,
DYNAMIC,
INFO_CARD,
SUBSCRIPTION,
PHYSICAL,
GAMING_RCON,
SUBSCRIPTION_V2
cost
number | null
description
string
short_description
string | null

One plain-text line shown under the product title on storefronts (max 200 characters). Send null or an empty string to clear.

Maximum string length: 200
description_tabs
object[]
metadata
object | null

Merchant-defined public key/value pairs surfaced on the storefront product wire. Flat strings only; at most 50 keys. Send {} to clear.

currency
string
gateways
string[]
subtype
enum<string> | null
Available options:
SINGLE,
MULTIPLE,
RANDOM,
REPLACEMENT,
SERIALS,
FILE,
SERVICE,
DYNAMIC
serials
string[]

One key per item; an item with line breaks is split into one key per line. Keys longer than 10,000 characters reject the request.

allowDuplicatesInBatch
boolean
allow_duplicates_in_batch
boolean

Keep repeated keys of serials as separate stock units (placeholder stock). Default false: repeats are dropped and counted in serials_import.duplicates_in_batch.

serviceText
string
service_text
string
stock
number
dynamicWebhook
string | null
dynamic_webhook
string | null

URL Shoppex calls to deliver a DYNAMIC product. A public https URL without a username or password, at most 2048 characters. Send null or an empty string for no webhook.

dynamicWebhookSecret
string
dynamic_webhook_secret
string
fileIds
string[] | null
file_ids
string[] | null
stockDelimiter
enum<string>
Available options:
newline,
stock_delimiter
enum<string>
Available options:
newline,
quantity
object
quantity_min
number
quantity_max
number
deliveryText
string
delivery_text
string
customFields
object[]
custom_fields
object[]
deliveryInstructions
object
delivery_instructions
object
cryptoConfirmationsNeeded
number
crypto_confirmations_needed
number
crypto_confirmations
number
maxRiskLevel
number

Risk score ceiling, 0-100. 100 lets every buyer through.

max_risk_level
number

Risk score ceiling, 0-100. 100 lets every buyer through.

unlisted
boolean
private
boolean
blockVpnProxies
boolean
block_vpn_proxies
boolean
sortPriority
number
sort_priority
number
webhooks
string[]
onHold
boolean
on_hold
boolean
termsOfService
string | null
terms_of_service
string | null
warrantyDays
number
warranty_days
number
warrantyText
string | null
warranty_text
string | null
sku
string | null
deliveryFormat
string | null
delivery_format
string | null
region
string | null
volumeDiscounts
object[]
volume_discounts
object[]
recurringInterval
enum<string> | null
Available options:
DAY,
WEEK,
MONTH,
YEAR
recurring_interval
enum<string> | null
Available options:
DAY,
WEEK,
MONTH,
YEAR
recurringIntervalCount
number | null
recurring_interval_count
number | null
trialPeriod
number | null
trial_period
number | null
discountPercent
number
discount_percent
number
deliveryTime
number | null
delivery_time
number | null
deliveryTimeUnit
enum<string>
Available options:
minutes,
hours,
days
delivery_time_unit
enum<string>
Available options:
minutes,
hours,
days
categoryId
string<uuid> | null
category_id
string<uuid> | null
watermarkEnabled
boolean
watermark_enabled
boolean
watermarkText
string | null
watermark_text
string | null
redirectTime
number | null
redirect_time
number | null
variants
object[] | null
discordIntegration
boolean
discord_integration
boolean
discordSetRole
boolean
discord_set_role
boolean
discordServerId
string | null

Discord server (guild) id. On PATCH, changing this value clears stored primary, required and additional role IDs unless replacements are supplied in the same request.

discord_server_id
string | null

Discord server (guild) id. On PATCH, changing this value clears stored primary, required and additional role IDs unless replacements are supplied in the same request.

discordRoleId
string | null
discord_role_id
string | null
discordRequiredRoleId
string | null
Pattern: ^(?:[1-9][0-9]*|)$
discord_required_role_id
string | null

Existing Discord role required before purchase, independent of delivery. A numeric unsigned 64-bit Discord snowflake (maximum 18446744073709551615). Requires discord_server_id. Clear with null or an empty string. Buyers must sign in to the hosted shop and connect Discord in their account.

Pattern: ^(?:[1-9][0-9]*|)$
additionalRoleIds
string[]

Additional Discord role ids (max 20).

additional_role_ids
string[]

Additional Discord role ids (max 20).

discordRemoveRole
boolean
discord_remove_role
boolean
payWhatYouWant
boolean
pay_what_you_want
boolean
affiliateRevenuePercent
number
affiliate_revenue_percent
number
affiliateCustomerDiscountMode
enum<string>
Available options:
USE_STORE_DEFAULT,
CUSTOM,
DISABLED
affiliate_customer_discount_mode
enum<string>
Available options:
USE_STORE_DEFAULT,
CUSTOM,
DISABLED
affiliateCustomerDiscountPercent
number | null
affiliate_customer_discount_percent
number | null
discordOptional
boolean
discord_optional
boolean
licensingEnabled
boolean
licensing_enabled
boolean
licensePeriod
license_period
label_singular
string
label_plural
string
slug
string | null

Response

Response for status 201

data
object
required
serials_import
object