# Supprimer un code promo du panier

Supprime un code promo d'un panier.
Après la suppression du code promo, le prix total de tous les objets du panier sera recalculé sans les bonus et les remises accordés par un code promo.

Endpoint: PUT /v2/project/{project_id}/promocode/remove
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):

  - `cart` (object,null)

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

## 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"},{"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.virtual_item_type` (string)
    Type d'objet virtuel.

Valeurs possibles :
- consumable — Objet qui disparaît de l'inventaire après utilisation (par exemple des munitions).
- non_consumable — Objet conservé dans l'inventaire sans limite de durée.
- non_renewing_subscription — Objet à durée limitée pouvant représenter un accès à des services ou du contenu pendant une période définie.
    Enum: "consumable", "non_consumable", "non_renewing_subscription"

  - `items.virtual_prices` (array)

  - `items.description` (string)

  - `items.attributes` (array)
    Liste des attributs et de leurs valeurs correspondantes pour l'objet. Peut être utilisée pour le filtrage du catalogue.

  - `items.attributes.external_id` (string)
    ID unique de l'attribut. Le external_id ne peut comprendre que des caractères alphanumériques latins minuscules et majuscules, des tirets et des traits bas.

  - `items.attributes.name` (string)
    Nom de l'attribut.
    Example: "Genre"

  - `items.attributes.values` (array)

  - `items.attributes.values.external_id` (string)
    ID unique de la valeur d'un attribut. Le external_id ne peut comprendre que des caractères alphanumériques latins minuscules, des tirets et des tirets bas.

  - `items.attributes.values.value` (string)
    Valeur de l'attribut.
    Example: "Strategy"

  - `items.image_url` (string)

  - `items.quantity` (integer)

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

  - `items.price` (object,null)
    Prix de l'objet.

  - `items.price.amount` (string)
    Prix de l'objet avec remise.
    Example: "2.9900"

  - `items.price.amount_without_discount` (string)
    Prix de l'objet.
    Example: "2.9900"

  - `items.price.currency` (string)
    Devise du prix de l'objet. Code à trois lettres selon [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).
    Example: "USD"

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

## 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 422 fields (application/json):

  - `statusCode` (integer)
    Example: 422

  - `errorCode` (integer)
    Example: 1102

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

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


