# Aplicar código promocional

Aplica um código a um carrinho. Quando um código promocional é aplicado, o total do carrinho é recalculado para refletir um desconto no carrinho inteiro ou em itens selecionados. Itens bônus também podem ser adicionados ao carrinho. O desconto é aplicado na compra, enquanto itens bônus são concedidos após um pagamento bem-sucedido. Antes do pagamento, o usuário pode remover o código promocional, o que cancela o desconto e remove os itens bônus do carrinho.

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

## Path parameters:

  - `project_id` (integer, required)
    ID de projeto. Você pode encontrar esse parâmetro na sua Conta de Distribuidor, próximo ao nome do projeto e na barra de endereços do navegador ao trabalhar com um projeto. O URL tem o seguinte formato: https://publisher.xsolla.com//projects/.
    Example: 44056

## Request fields (application/json):

  - `coupon_code` (string)
    Código exclusivo do código promocional. Contém letras e números.
    Example: "SUMMER2021"

  - `cart` (object,null)

  - `cart.id` (string, required)
    ID do carrinho.

  - `selected_unit_items` (object)
    Chave de jogo de plataforma específica selecionada como bônus pelo usuário. Passe o bonus.item.sku [recebido](/pt/api/liveops/promotions-coupons/get-coupon-rewards-by-code#promotions-coupons/get-coupon-rewards-by-code/t=response&c=200&path=bonus/item) como uma chave, e o bonus.item.unit_items.sku escolhido com o seu valor.

## Response 200 fields (application/json):

  - `cart_id` (string)
    ID do carrinho.
    Example: "cart_id"

  - `price` (object,null)
    Preço do carrinho.
    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)
    Se o item é gratuito ou não.

  - `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)
    Se o item é gratuito ou não.

  - `items.promotions` (array)
    Promoções aplicadas a itens específicos no carrinho. A matriz é retornada nos seguintes casos:

* Uma promoção de desconto é configurada para um item específico.

* Um código promocional com a configuração Desconto em itens selecionados é aplicado.

Se nenhuma promoção no nível do item for aplicada, é retornada uma matriz vazia.

  - `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)
    Tipo de item bônus.
    Enum: "virtual_good", "virtual_currency", "bundle", "physical_good", "game_key", "nft"

  - `items.promotions.bonus.name` (string)
    Nome do item bônus. Indisponível para o tipo de item bônus physical_good.

  - `items.promotions.bonus.image_url` (string)
    URL da imagem do item bônus. Indisponível para o tipo de item bônus physical_good.

  - `items.promotions.bonus.bundle_type` (string)
    Tipo de item de pacote de bônus. Disponível apenas para o tipo de item bônus 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)
    Se true, o usuário pode comprar um item.

  - `items.vp_rewards` (array)
    Lista de recompensas de pontos de valor para o item.

  - `items.vp_rewards.item_id` (integer)
    ID de item exclusivo interno.

  - `items.vp_rewards.sku` (string)
    ID de ponto de valor exclusivo.

  - `items.vp_rewards.amount` (integer)
    Quantidade de pontos de valor.

  - `items.vp_rewards.name` (string)
    Nome do ponto de valor.

  - `items.vp_rewards.image_url` (string)
    URL da imagem.

  - `items.vp_rewards.is_clan` (boolean)
    Se o ponto de valor é usado em cadeias de recompensa de clã ou não.

  - `items.loyalty_rewards` (array)
    Pontos de fidelidade que o usuário recebe como recompensa por comprar o item.

  - `items.loyalty_rewards.name` (string)
    Nome dos pontos de fidelidade.

  - `items.loyalty_rewards.sku` (string)
    SKU de pontos de fidelidade. Passe esse valor no parâmetro loyalty_point_sku de outras chamadas de API, por exemplo, ao criar um pedido pago com pontos de fidelidade.

  - `items.loyalty_rewards.description` (string)
    Descrição dos pontos de fidelidade.

  - `items.loyalty_rewards.image_url` (string,null)
    URL da imagem.

  - `items.loyalty_rewards.amount` (integer)
    Quantidade de pontos de fidelidade que o usuário recebe por comprar o item.

  - `items.limits` (object,null)
    Limites de itens.

  - `items.limits.per_user` (object,null)
    Limites de item para um usuário.

  - `items.limits.per_user.total` (integer)
    Quantidade máxima de itens que o usuário atual pode comprar.
    Example: 5

  - `items.limits.per_user.available` (integer)
    Quantidade restante de itens que o usuário atual pode comprar.
    Example: 3

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

  - `items.limits.per_user.limit_exceeded_visibility` (string)
    Determina a visibilidade do item no catálogo após o limite de compra ser atingido, até o próximo limite ser redefinido.

Aplica-se a itens para os quais redefinições recorrentes de limite estão configurados na matriz recurrent_schedule.

Se os limites redefinidos não forem configurados, o item não aparecerá no catálogo após o limite de compra ser atingido,
independentemente do valor limit_exceeded_visibility.

Possíveis valores:
- show — O item é retornado nas chamadas API de recuperação de catálogo após o limite de compra ser atingido. Nas chamadas API
de recuperação de catálogo, quando o limite for atingido, o item será retornado com a marcação can_be_bought: false. A próxima
data de redefinição é retornada em  reset_next_date.
- hide — O item não é retornado nas chamadas API de recuperação de catálogo após o limite de compra ser atingido, até
o limite ser redefinido.
    Enum: "show", "hide"

  - `items.limits.per_item` (object,null)
    Limites de item para um item.

  - `items.limits.per_item.total` (integer)
    Quantidade máxima de itens que todos os usuários podem comprar.
    Example: 5

  - `items.limits.per_item.available` (integer)
    Quantidade restante de itens que todos os usuários podem comprar.
    Example: 3

  - `items.periods` (array,null)
    Período de venda de itens.

  - `items.periods.date_from` (string)
    Data em que o item especificado estará disponível para venda.
    Example: "2020-08-11T10:00:00+03:00"

  - `items.periods.date_until` (string,null)
    Data em que o item especificado ficará indisponível para venda. Pode ser null.
    Example: "2020-08-11T20:00:00+03:00"

  - `rewards` (object)

  - `rewards.bonus` (array)

  - `rewards.bonus.item` (object)

  - `rewards.bonus.item.sku` (string)
    ID de item exclusivo. O SKU só pode conter caracteres alfanuméricos latinos minúsculos e maiúsculos, pontos, traços e sublinhados.
    Example: "game_01"

  - `rewards.bonus.item.name` (string)
    Nome do item.
    Example: "Game name"

  - `rewards.bonus.item.type` (string)
    Tipo de item. Possíveis valores:virtual_good — itens virtuaisvirtual_currency — moeda virtualbundle — conjuntounit — pacote de chave de jogo
    Example: "unit"

  - `rewards.bonus.item.description` (string)
    Descrição do item.
    Example: "Game description"

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

  - `rewards.bonus.item.unit_items` (array)
    Matriz de chavse de jogo de plataformas específicas. Usado apenas quando o tipo de item é unit (bonus.item.type = 'unit'). Se o pacote de chaves de jogo incluir chaves de plataformas específicas, o usuário poderá escolher uma delas como bônus.

  - `rewards.bonus.item.unit_items.sku` (string)
    ID de pacote de chaves de jogo exclusivos de plataformas específicas. Caracteres permitidos: a–z, A–Z, 0–9, ponto (.), hífen (-), sublinhado (_). Combina os valores bonus.item.​sku e bonus.item.unit_items.drm_sku. Exemplo: se bonus.item.​sku = 'cool_game' e bonus.item.unit_items.drm_sku = 'steam', o valor será cool_game_steam.
    Example: "cool_game_steam"

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

  - `rewards.bonus.item.unit_items.type` (string)
    Indica que o item é uma chave de jogo.
    Enum: "game_key"

  - `rewards.bonus.item.unit_items.name` (string)
    Título do jogo.
    Example: "Awesome Game"

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

  - `rewards.bonus.item.unit_items.drm_sku` (string)
    ID de DRM exclusivo utilizado como sufixo para indicar uma chave de jogo de uma plataforma específica. Caracteres permitidos: a–z, A–Z, 0–9, ponto (.), hífen (-), sublinhado (_).
    Example: "steam"

  - `rewards.bonus.quantity` (number)
    Quantidade do item.

  - `rewards.discount` (object,null)
    Percentual de desconto.
O preço do carrinho será reduzido usando um valor calculado usando essa porcentagem e, em seguida, arredondado para 2 casas decimais.

  - `rewards.discount.percent` (string)
    Example: "10.00"

  - `rewards.discounted_items` (array,null)
    Lista de itens que são descontados por um código promocional.

  - `rewards.discounted_items.sku` (string, required)
    SKU do item.

  - `rewards.discounted_items.discount` (object, required)

  - `rewards.discounted_items.discount.percent` (string, required)
    Percentual de desconto.

O preço do item do carrinho será diminuído usando um valor
calculado usando essa porcentagem e, em seguida, arredondado
para 2 casas decimais.

  - `rewards.is_selectable` (boolean)
    Se true, o usuário deve escolher o bônus antes de resgatar um código promocional.

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


