# Échanger un code promo Échange un code d'une promotion par code promo. Après avoir échangé un code de promo, l'utilisateur reçoit des biens gratuits et/ou le prix du panier et/ou des objets spécifiques sera réduit. Endpoint: POST /v2/project/{project_id}/promocode/redeem Version: 2.0.0 Security: AuthForCart ## Path parameters: - `project_id` (integer, required) ID de projet. Ce paramètre se trouve dans le Compte éditeur à côté du nom du projet. Example: 44056 ## Request fields (application/json): - `cart` (object,null) - `cart.id` (string, required) ID de panier. - `coupon_code` (string) Code unique du code promo. Comprend des lettres et des chiffres. Example: "SUMMER2021" - `selected_unit_items` (object) Récompense sélectionnée par l'utilisateur. La clé d'objet est l'UGS d'une unité et la valeur est l'UGS de l'un des objets de l'unité. Example: {"game_1":"game_1_steam","game_2":"game_2_playstation"} ## Response 200 fields (application/json): - `cart_id` (string) ID de panier. Example: "cart_id" - `is_free` (boolean) Si ce paramètre est défini sur true, l'objet est gratuit. - `items` (array) Example: [{"attributes":[],"can_be_bought":{"$ref":"../schemas/Can_be_bought.yaml"},"description":"Take it, take it all! All of Xsolla's riches in one Mega Booster.","groups":[{"external_id":"powerups","name":"Power Ups"}],"image_url":"https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png","is_free":false,"limits":{"$ref":"../schemas/Catalog_item_limits.yaml"},"name":"Xsolla Booster Mega","periods":{"$ref":"../schemas/item-periods.yaml"},"price":{"amount":"50.0000000000000000","amount_without_discount":"100.0000000000000000","currency":"USD"},"promotions":{"$ref":"../schemas/Catalog_item_promotions.yaml"},"quantity":123,"sku":"com.xsolla.booster_mega_1","type":"virtual_good","virtual_item_type":"consumable","virtual_prices":[],"vp_rewards":{"$ref":"../schemas/reward-chain-client/client-item-value-point-reward.yaml"}}] - `items.can_be_bought` (boolean) Si true, l'utilisateur peut acheter l'objet. Example: true - `items.description` (string) - `items.groups` (array) - `items.groups.external_id` (string) - `items.groups.name` (string) - `items.image_url` (string) - `items.limits` (object,null) Limites d'objets. - `items.limits.per_item` (object,null) Informations sur les limites pour un objet. - `items.limits.per_item.available` (integer) Nombre d'objets restants que tous les utilisateurs peuvent acheter. Example: 3 - `items.limits.per_item.total` (integer) Nombre maximal d'objets que tous les utilisateurs peuvent acheter. Example: 5 - `items.limits.per_user` (object,null) Limites d'objets pour un utilisateur. - `items.limits.per_user.available` (integer) Nombre d'objets restants que l'utilisateur actuel peut acheter. Example: 3 - `items.limits.per_user.limit_exceeded_visibility` (string) Détermine la visibilité de l'objet dans le catalogue une fois la limite d'achat atteinte, jusqu'à la prochaine réinitialisation de la limite. S'applique aux objets pour lesquels des réinitialisations de limite récurrentes sont configurées dans le tableau recurrent_schedule. Si aucune réinitialisation de limite n'est configurée, l'objet n'apparaît plus dans le catalogue après l'atteinte de la limite d'achat, quelle que soit la valeur de limit_exceeded_visibility. Enum: "show", "hide" - `items.limits.per_user.recurrent_schedule` (object) Délai d'actualisation récurrent des limites d'un objet pour un utilisateur. - `items.limits.per_user.recurrent_schedule.interval_type` (string) Type de délai d'actualisation récurrent. Enum: "daily", "weekly", "monthly", "hourly" - `items.limits.per_user.recurrent_schedule.reset_next_date` (integer) Date et heure de la réinitialisation des limites (horodatage Unix). Example: 1677553200 - `items.limits.per_user.total` (integer) Nombre maximal d'objets qu'un utilisateur unique peut acheter. Example: 5 - `items.periods` (array,null) Période de vente d'objets. - `items.periods.date_from` (string) Date de mise en vente de l'objet spécifié. Example: "2020-08-11T10:00:00+03:00" - `items.periods.date_until` (string,null) Date de retrait de la vente de l'objet spécifié. Peut prendre la valeur null. Example: "2020-08-11T20:00:00+03:00" - `items.promotions` (array) Promotions appliquées à des objets spécifiques du panier. Le tableau est renvoyé dans les cas suivants : * Une promotion par réduction est configurée pour un objet spécifique. * Un code promo avec le paramètre Discount on selected items est appliqué. Si aucune promotion de ce type n'est appliquée, un tableau vide est renvoyé. - `items.promotions.bonus` (array) - `items.promotions.bonus.bundle_type` (string) Type de lot bonus. Disponible uniquement pour le type d'objet bundle. Enum: "standard", "virtual_currency_package" - `items.promotions.bonus.image_url` (string) URL de l'image de l'objet bonus. Non disponible pour le type d'objet bonus physical_good. - `items.promotions.bonus.name` (string) Nom de l'objet bonus. Non disponible pour le type d'objet bonus physical_good. - `items.promotions.bonus.quantity` (integer) - `items.promotions.bonus.sku` (string) - `items.promotions.bonus.type` (string) Type d'objet bonus. Enum: "virtual_good", "virtual_currency", "bundle", "physical_good", "game_key", "nft" - `items.promotions.date_end` (string,null) - `items.promotions.date_start` (string,null) - `items.promotions.discount` (object,null) - `items.promotions.discount.percent` (string,null) - `items.promotions.discount.value` (string,null) - `items.promotions.limits` (object) - `items.promotions.limits.per_user` (object) - `items.promotions.limits.per_user.available` (integer) - `items.promotions.limits.per_user.total` (integer) - `items.type` (string) - `items.vp_rewards` (array) Récompense en points de valeur pour l'objet. - `items.vp_rewards.amount` (integer) Montant des points de valeur. - `items.vp_rewards.image_url` (string) URL de l'image. Example: "https://image.example.com" - `items.vp_rewards.is_clan` (boolean) Détermine l'utilisation du point de valeur dans les chaînes de récompense de clan. Example: true - `items.vp_rewards.item_id` (integer) Internal ID unique de l'objet. Example: 1 - `items.vp_rewards.name` (string) Nom du point de valeur. - `items.vp_rewards.sku` (string) ID unique du point de valeur. - `price` (object,null) Prix du panier. Example: {"amount":"6150.0000000000000000","amount_without_discount":"6150.0000000000000000","currency":"USD"} - `price.amount` (string) Example: "6150.0000000000000000" - `price.amount_without_discount` (string) Example: "6150.0000000000000000" - `price.currency` (string) Example: "USD" - `rewards` (object) - `rewards.discount` (object,null) Pourcentage de la remise. Le prix du panier sera réduit d'une valeur calculée à l'aide de ce pourcentage et arrondie à 2 décimales. - `rewards.discounted_items` (array,null) Liste des objets bénéficiant d'une remise grâce à un code promo. - `rewards.discounted_items.sku` (string, required) UGS de l'objet. - `rewards.is_selectable` (boolean) Si true, l'utilisateur doit choisir le bonus avant d'échanger un code promo. ## Response 401 fields (application/json): - `errorCode` (integer) Example: 1501 - `errorMessage` (string) Example: "[0401-1501]: Authorization failed: Provide authorization" - `statusCode` (integer) Example: 401 ## Response 403 fields (application/json): - `errorCode` (integer) - `errorMessage` (string) Example: "Authorization header not sent." - `statusCode` (integer) Example: 403 - `transactionId` (string) Example: "x-x-x-x-transactionId-mock-x-x-x" ## Response 404 fields (application/json): - `errorCode` (integer) Example: 4001 - `errorMessage` (string) Example: "[0401-9807]: Enter valid promo code." - `statusCode` (integer) Example: 404 ## Response 422 fields (application/json): - `errorCode` (integer) Example: 1102 - `errorMessage` (string) Example: "[0401-1102]: Unprocessable Entity. The property `coupon_code` is required" - `statusCode` (integer) Example: 422 - `transactionId` (string) Example: "x-x-x-x-transactionId-mock-x-x-x"