> ## Documentation Index
> Fetch the complete documentation index at: https://docs.centralcart.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Upsells

> Devolve as ofertas de upsell aplicáveis ao carrinho atual.
<Note>Use `placement: "CHECKOUT"` na etapa de pagamento e `placement: "POST_SALE"` na página de obrigado. As regras casam por produto gatilho presente no carrinho, por regra global, ou pelos produtos mais vendidos da loja, que só valem no checkout. Produtos sem estoque saem da resposta. Um mesmo produto pode aparecer mais de uma vez quando a regra é do tipo `ALTERNATIVE` e há vários gatilhos no carrinho; cada entrada traz o seu `upsell.upsell_trigger_id`.</Note>



## OpenAPI

````yaml /openapi/storefront-checkout.yaml post /webstore/upsells
openapi: 3.1.0
info:
  title: CentralCart Storefront API (Checkout)
  version: 1.0.0
  description: >-
    Carrinho, upsells, cupons, criação de pedido e acompanhamento do pagamento.
    Nenhum destes endpoints exige autenticação. A loja é resolvida pelo header
    `x-store-domain`.
servers:
  - url: https://api.centralcart.io/v1
    description: Produção
security: []
paths:
  /webstore/upsells:
    post:
      tags:
        - Checkout
      summary: List Upsells
      description: >-
        Devolve as ofertas de upsell aplicáveis ao carrinho atual.

        <Note>Use `placement: "CHECKOUT"` na etapa de pagamento e `placement:
        "POST_SALE"` na página de obrigado. As regras casam por produto gatilho
        presente no carrinho, por regra global, ou pelos produtos mais vendidos
        da loja, que só valem no checkout. Produtos sem estoque saem da
        resposta. Um mesmo produto pode aparecer mais de uma vez quando a regra
        é do tipo `ALTERNATIVE` e há vários gatilhos no carrinho; cada entrada
        traz o seu `upsell.upsell_trigger_id`.</Note>
      operationId: listWebstoreUpsells
      parameters:
        - $ref: '#/components/parameters/StoreDomain'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                cart:
                  type: array
                  description: IDs dos pacotes atualmente no carrinho.
                  items:
                    type: number
                placement:
                  type: string
                  description: >-
                    Onde a oferta será exibida. Qualquer valor diferente de
                    `POST_SALE` é tratado como `CHECKOUT`.
                  enum:
                    - CHECKOUT
                    - POST_SALE
                  default: CHECKOUT
            example:
              cart:
                - 1
                - 3
              placement: CHECKOUT
      responses:
        '200':
          description: Ofertas de upsell aplicáveis. Array vazio quando não há nenhuma.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  description: >-
                    Produto no mesmo formato de `GET /webstore/package`,
                    acrescido do objeto `upsell`.
                  properties:
                    id:
                      type: number
                    name:
                      type: string
                    slug:
                      type: string
                    pricing:
                      type: object
                      properties:
                        price:
                          type: number
                          description: Preço já com a oferta aplicada, quando houver.
                        compare_at:
                          type: number
                          nullable: true
                    upsell:
                      type: object
                      properties:
                        type:
                          type: string
                          nullable: true
                          description: >-
                            `null` para ofertas de produtos populares, que não
                            vêm de uma regra.
                          enum:
                            - ADDITIONAL
                            - ALTERNATIVE
                            - POST_SALE
                        source:
                          type: string
                          description: >-
                            De onde a oferta veio: `product` (regra com gatilho
                            específico), `all` (regra global) ou `popular` (mais
                            vendidos da loja).
                          enum:
                            - product
                            - all
                            - popular
                        upsell_trigger_id:
                          type: number
                          nullable: true
                          description: >-
                            Reenvie este valor no item do carrinho para que a
                            oferta seja aceita no checkout.
                        offer_price:
                          type: number
                          nullable: true
                          description: >-
                            Preço de oferta da regra. `null` quando a regra não
                            define um preço próprio.
                        original_price:
                          type: number
                          description: Preço sem a oferta, para exibir o valor riscado.
                        has_discount:
                          type: boolean
                        in_cart:
                          type: boolean
                          description: Se o produto ofertado já está no carrinho.
              example:
                - id: 7
                  name: Chave Bônus
                  slug: chave-bonus
                  pricing:
                    price: 5
                    compare_at: 15
                  upsell:
                    type: ADDITIONAL
                    source: product
                    upsell_trigger_id: 1
                    offer_price: 5
                    original_price: 15
                    has_discount: true
                    in_cart: false
        '404':
          $ref: '#/components/responses/StoreNotFound'
      security: []
components:
  parameters:
    StoreDomain:
      name: x-store-domain
      in: header
      required: true
      description: 'Domínio da sua loja (ex: sualoja.centralcart.ai)'
      schema:
        type: string
  responses:
    StoreNotFound:
      description: Loja não encontrada para o `x-store-domain` informado
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            errors:
              - message: Store not found.
  schemas:
    Error:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
              code:
                type: string
              ref:
                type: string

````