# Appliquer le code promo

Applique un code à un panier. Lorsqu'un code promo est appliqué, le total du panier est recalculé pour tenir compte d'une remise sur l'ensemble du panier ou sur certains objets. Des objets bonus peuvent également être ajoutés. La remise est appliquée lors du paiement et les objets bonus sont attribués une fois le paiement effectué. Avant le paiement, l'utilisateur peut supprimer le code promo pour annuler la remise et retirer les objets bonus du panier.

Endpoint: POST /v2/project/{project_id}/promocode/redeem
Version: 2.0.0
Security: AuthForCart

## Path parameters:

  - `project_id` (integer, required)
    ID du projet. Vous trouverez ce paramètre dans le Compte éditeur, à côté du nom du projet, ainsi que dans l'URL affichée dans la barre d'adresse du navigateur lorsque vous utilisez ce projet. L'URL présente le format suivant : https://publisher.xsolla.com//projects/.
    Example: 44056

## Request fields (application/json):

  - `coupon_code` (string)
    Code unique du code promo. Comprend des lettres et des chiffres.
    Example: "SUMMER2021"

  - `cart` (object,null)

  - `cart.id` (string, required)
    ID de panier.

  - `selected_unit_items` (object)
    Clé de jeu spécifique à une plateforme sélectionnée comme bonus par l'utilisateur. Passez le bonus.item.sku [reçu](/fr/api/liveops/promotions-coupons/get-coupon-rewards-by-code#promotions-coupons/get-coupon-rewards-by-code/t=response&c=200&path=bonus/item) comme clé, et le bonus.item.unit_items.sku choisi comme valeur associée.

## Response 200 fields (application/json):

  - `cart_id` (string)
    ID de panier.
    Example: "cart_id"

  - `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"

  - `is_free` (boolean)
    Détermine la gratuité de l'objet.

  - `items` (array)
    Example: [{"attributes":[],"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,"name":"Xsolla Booster Mega","price":{"amount":"50.0000000000000000","amount_without_discount":"100.0000000000000000","currency":"USD"},"quantity":123,"sku":"com.xsolla.booster_mega_1","type":"virtual_good","virtual_item_type":"consumable","virtual_prices":[],"promotions":[{"name":"Bonus promotion","date_start":"2020-04-15T16:16:00+03:00","date_end":"2026-04-15T16:16:00+03:00","discount":{"percent":"50.00"},"bonus":[{"quantity":1,"name":"Xsolla Minigun","image_url":"https://cdn.xsolla.net/img/misc/images/2fc5c491a47413a8e8000447889093c2.png","sku":"com.xsolla.minigun_1","type":"virtual_good"}]}],"can_be_bought":true,"vp_rewards":[{"item_id":175232,"sku":"com.xsolla.value_point_1","amount":130,"name":"Value point","image_url":"https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg","is_clan":false},{"item_id":186321,"sku":"com.xsolla.clan_value_point_1","amount":50,"name":"Clan Reward VP 1","image_url":"https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg","is_clan":true}],"limits":{"per_user":{"available":3,"recurrent_schedule":{"interval_type":"weekly","reset_next_date":1746057600},"total":5}},"periods":[{"date_from":"2020-08-11T10:00:00+03:00","date_until":"2020-08-11T20:00:00+03:00"}]}]

  - `items.sku` (string)

  - `items.groups` (array)

  - `items.groups.external_id` (string)

  - `items.groups.name` (string)

  - `items.name` (string,null)

  - `items.type` (string)

  - `items.description` (string)

  - `items.image_url` (string)

  - `items.quantity` (integer)

  - `items.is_free` (boolean)
    Détermine la gratuité de l'objet.

  - `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.name` (string)

  - `items.promotions.date_start` (string,null)

  - `items.promotions.date_end` (string,null)

  - `items.promotions.discount` (object,null)

  - `items.promotions.discount.percent` (string,null)

  - `items.promotions.discount.value` (string,null)

  - `items.promotions.bonus` (array)

  - `items.promotions.bonus.sku` (string)

  - `items.promotions.bonus.quantity` (integer)

  - `items.promotions.bonus.type` (string)
    Type d'objet bonus.
    Enum: "virtual_good", "virtual_currency", "bundle", "physical_good", "game_key", "nft"

  - `items.promotions.bonus.name` (string)
    Nom de l'objet bonus. Non disponible pour le type d'objet bonus physical_good.

  - `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.bundle_type` (string)
    Type de lot bonus. Disponible uniquement pour le type d'objet bundle.
    Enum: "standard", "virtual_currency_package"

  - `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.can_be_bought` (boolean)
    Si true, l'utilisateur peut acheter l'objet.

  - `items.vp_rewards` (array)
    Liste des récompenses en points de valeur associées à cet objet.

  - `items.vp_rewards.item_id` (integer)
    Internal ID unique de l'objet.

  - `items.vp_rewards.sku` (string)
    ID unique du point de valeur.

  - `items.vp_rewards.amount` (integer)
    Montant des points de valeur.

  - `items.vp_rewards.name` (string)
    Nom du point de valeur.

  - `items.vp_rewards.image_url` (string)
    URL de l'image

  - `items.vp_rewards.is_clan` (boolean)
    Détermine l'utilisation du point de valeur dans les chaînes de récompense de clan.

  - `items.loyalty_rewards` (array)
    Points de fidélité reçus par l'utilisateur en récompense de l'achat de l'objet.

  - `items.loyalty_rewards.name` (string)
    Nom des points de fidélité.

  - `items.loyalty_rewards.sku` (string)
    UGS des points de fidélité. Transmettez cette valeur dans le paramètre loyalty_point_sku des autres appels API, par exemple lors de la création d'une commande payée avec des points de fidélité.

  - `items.loyalty_rewards.description` (string)
    Description des points de fidélité.

  - `items.loyalty_rewards.image_url` (string,null)
    URL de l'image

  - `items.loyalty_rewards.amount` (integer)
    Nombre de points de fidélité reçus par l'utilisateur pour l'achat de l'objet.

  - `items.limits` (object,null)
    Limites d'objets.

  - `items.limits.per_user` (object,null)
    Limites d'objets pour un utilisateur.

  - `items.limits.per_user.total` (integer)
    Nombre maximal d'objets qu'un utilisateur unique peut acheter.
    Example: 5

  - `items.limits.per_user.available` (integer)
    Nombre d'objets restants que l'utilisateur actuel peut acheter.
    Example: 3

  - `items.limits.per_user.recurrent_schedule` (any)

  - `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 une fois la limite d'achat atteinte, quelle que soit la valeur de limit_exceeded_visibility.

Valeurs possibles :
- show — L'objet est renvoyé dans les appels API de récupération du catalogue après avoir atteint la limite d'achat. Dans les appels côté client, une fois la limite atteinte, l'objet est renvoyé avec l'indicateur can_be_bought: false. La prochaine date de réinitialisation est renvoyée dans reset_next_date.
- hide — L'objet n'est pas renvoyé dans les appels API de récupération du catalogue après avoir atteint la limite d'achat, jusqu'à la réinitialisation de la limite.
    Enum: "show", "hide"

  - `items.limits.per_item` (object,null)
    Informations sur les limites pour un objet.

  - `items.limits.per_item.total` (integer)
    Nombre maximal d'objets que tous les utilisateurs peuvent acheter.
    Example: 5

  - `items.limits.per_item.available` (integer)
    Nombre d'objets restants que tous les utilisateurs peuvent acheter.
    Example: 3

  - `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"

  - `rewards` (object)

  - `rewards.bonus` (array)

  - `rewards.bonus.item` (object)

  - `rewards.bonus.item.sku` (string)
    ID unique de l'objet. L'UGS ne peut comprendre que des caractères alphanumériques latins minuscules et majuscules, des points, des tirets et des traits bas.
    Example: "game_01"

  - `rewards.bonus.item.name` (string)
    Nom de l'objet.
    Example: "Game name"

  - `rewards.bonus.item.type` (string)
    Type d'objet. Valeurs possibles :virtual_good — objets virtuelsvirtual_currency — monnaie virtuellebundle — lotunit — package de clés de jeu
    Example: "unit"

  - `rewards.bonus.item.description` (string)
    Description de l'objet.
    Example: "Game description"

  - `rewards.bonus.item.image_url` (string)
    URL de l'image
    Example: "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png"

  - `rewards.bonus.item.unit_items` (array)
    Tableau de clés de jeu spécifiques à une plateforme. Utilisé uniquement lorsque le type d'objet est unit (bonus.item.type = 'unit'). Si le package de clés de jeu comprend des clés spécifiques à certaines plateformes, l'utilisateur peut en choisir une comme bonus.

  - `rewards.bonus.item.unit_items.sku` (string)
    Identifiant unique du package de clés de jeu spécifiques à une plateforme. Caractères autorisés : a-z, A-Z, 0-9, point (.), tiret (-) et tiret bas (_). Il combine les valeurs bonus.item.​sku et bonus.item.unit_items.drm_sku. Par exemple, si `bonus.item.​sku = 'cool_game' et bonus.item.unit_items.drm_sku = 'steam', la valeur sera cool_game_steam.
    Example: "cool_game_steam"

  - `rewards.bonus.item.unit_items.is_free` (boolean)

  - `rewards.bonus.item.unit_items.type` (string)
    Indique que l'objet est une clé de jeu.
    Enum: "game_key"

  - `rewards.bonus.item.unit_items.name` (string)
    Titre du jeu.
    Example: "Awesome Game"

  - `rewards.bonus.item.unit_items.drm_name` (string)
    Nom du DRM.
    Example: "Steam"

  - `rewards.bonus.item.unit_items.drm_sku` (string)
    Identifiant DRM unique utilisé comme suffixe pour indiquer une clé de jeu spécifique à une plateforme. Caractères autorisés : a-z, A-Z, 0-9, point (.), tiret (-) et tiret bas (_).
    Example: "steam"

  - `rewards.bonus.quantity` (number)
    Quantité de l'objet.

  - `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.discount.percent` (string)
    Example: "10.00"

  - `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.discounted_items.discount` (object, required)

  - `rewards.discounted_items.discount.percent` (string, required)
    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.is_selectable` (boolean)
    Si true, l'utilisateur doit choisir le bonus avant d'échanger un code promo.

## Response 401 fields (application/json):

  - `statusCode` (integer)
    Example: 401

  - `errorCode` (integer)
    Example: 1501

  - `errorMessage` (string)
    Example: "[0401-1501]: Authorization failed: Provide authorization"

## Response 403 fields (application/json):

  - `statusCode` (integer)
    Example: 403

  - `errorCode` (integer)

  - `errorMessage` (string)
    Example: "Authorization header not sent."

  - `transactionId` (string)
    Example: "x-x-x-x-transactionId-mock-x-x-x"

## Response 404 fields (application/json):

  - `statusCode` (integer)
    Example: 404

  - `errorCode` (integer)
    Example: 4001

  - `errorMessage` (string)
    Example: "[0401-9807]: Enter valid promo code."

## Response 422 fields (application/json):

  - `statusCode` (integer)
    Example: 422

  - `errorCode` (integer)
    Example: 1102

  - `errorMessage` (string)
    Example: "[0401-1102]: Unprocessable Entity. The property `coupon_code` is required"

  - `transactionId` (string)
    Example: "x-x-x-x-transactionId-mock-x-x-x"


