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

# Obter Produto

> Retorna informações detalhadas de um produto específico

#### Escopo

```bash theme={null}
    read products
```


## OpenAPI

````yaml GET /public_api/products/{id}/
openapi: 3.0.3
info:
  title: Cakto API
  version: 1.0.0
  description: Documentação da API pública do Cakto.
servers:
  - url: https://api.cakto.com.br
    description: Cakto API
security: []
paths:
  /public_api/products/{id}/:
    get:
      tags:
        - products
      description: >-
        Public API for managing products, inherits from ProductRetrieveAPI and
        ProductAPI,

        customizes the schema generation and authentication/permission settings.
      operationId: products_retrieve
      parameters:
        - in: path
          name: id
          schema:
            type: string
            format: uuid
          description: Id do Produto
          required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductSchemaSerializerFull'
              examples:
                Successo:
                  value:
                    id: cd287b31-d4b7-4e94-858a-66e05ce2f4a2
                    short_id: 19bruPi
                    name: Product Name Example
                    status: active
                    type: unique
                    description: Description example
                    category: 0673d296-1802-45e0-bc93-112f7514dddb
                    price: '5.00'
                    installments: 12
                    image: null
                    guarantee: 7
                    salesPage: https://example-sales-page.com.br/product-page
                    supportEmail: teste@teste.com
                    supportWhatsapp: null
                    contentDeliveries:
                      - cakto
                      - telegram
                      - discord
                    emailAccessLink: null
                    confirmEmail: false
                    affiliate: true
                    affiliateRequest: false
                    affiliateCommission: '10.00'
                    affiliateContact: false
                    affiliateDescription: teste
                    affiliateSupportEmail: ''
                    affiliateMarketplace: false
                    affiliateClick: last
                    cookieTime: -1
                    affiliateShareBump: false
                    affiliateShareUpsell: false
                    affiliateCloneQuiz: false
                    affiliateCloneQuizUrl: ''
                    affiliateSalesPage: ''
                    upsell: false
                    upsellPage: ''
                    redirectUpsellWithBumpFail: true
                    defaultPaymentMethod: credit_card
                    showCouponField: true
                    showAddressFields: false
                    threeDsRetryEnabled: true
                    offers:
                      - id: 77BcHrY
                        name: Product Name Example
                        image: null
                        price: 5
                        units: 1
                        default: true
                        status: active
                        cost_per_item: '0.00'
                        profit_per_item: '0.00'
                        type: unique
                        intervalType: year
                        interval: 1
                        recurrence_period: 30
                        quantity_recurrences: -1
                        trial_days: 0
                        max_retries: 3
                        retry_interval: 1
                        checkout: 200300400
                        height: null
                        width: null
                        length: null
                        weight: null
                    invoiceDescription: CardDesc
                    paymentMethods:
                      - boleto
                      - credit_card
                      - picpay
                      - pix
                    paymentsOrder:
                      - openfinance_nubank
                      - credit_card
                      - boleto
                      - pix
                      - picpay
                      - applepay
                      - googlepay
                    ticketExpiration: 7
                    pixExpiresIn: 3600
                    twoCardPayment: false
                    bumps: []
                    tracking_pixels:
                      id: 200300400
                      fbPixPurchaseTrigger: true
                      fbPixConversionValue: 50
                      fbBoletoPurchaseTrigger: true
                      fbBoletoConversionValue: 100
                      fbPicpayPurchaseTrigger: true
                      fbPicpayConversionValue: 100
                      fbNubankPurchaseTrigger: true
                      fbNubankConversionValue: 100
                      googleAnalyticsTrackingId: null
                      tiktokPixPurchaseTrigger: true
                      tiktokPixConversionValue: 100
                      tiktokBoletoPurchaseTrigger: true
                      tiktokBoletoConversionValue: 100
                      tiktokPicpayPurchaseTrigger: true
                      tiktokPicpayConversionValue: 100
                      tiktokNubankPurchaseTrigger: true
                      tiktokNubankConversionValue: 100
                      kwaiPixPurchaseTrigger: true
                      kwaiPixConversionValue: 100
                      kwaiBoletoPurchaseTrigger: true
                      kwaiBoletoConversionValue: 100
                      kwaiPicpayPurchaseTrigger: true
                      kwaiPicpayConversionValue: 100
                      kwaiNubankPurchaseTrigger: true
                      kwaiNubankConversionValue: 100
                      facebook_pixels:
                        - id: 200300400
                          name: null
                          description: null
                          status: active
                          pixelId: '123456789010102030'
                          error: null
                          domain: ''
                          apiToken: TokenExample123
                          fbPixPurchaseTrigger: null
                          fbPixConversionValue: null
                          fbBoletoPurchaseTrigger: null
                          fbBoletoConversionValue: null
                          fbPicpayPurchaseTrigger: null
                          fbPicpayConversionValue: null
                          fbNubankPurchaseTrigger: null
                          fbNubankConversionValue: null
                          createdAt: '2022-09-01T17:43:12.795070-03:00'
                      google_ads_pixels: []
                      taboola_pixels: []
                      outbrain_pixels: []
                      tiktok_pixels: []
                      kwai_pixels: []
                      pixel_domains: []
                    disable_orderbump_pixel_events: true
                    producerName: Testeando
                    createdAt: '2022-03-28T13:04:26.191272-03:00'
                    updatedAt: '2027-11-26T22:16:34.095632-03:00'
          description: Corpo da resposta status 200
        '401':
          description: Request não autenticado devido à ausência ou invalidez do token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthenticatedError'
              examples:
                Token ausente ou inválido:
                  $ref: '#/components/examples/UnauthenticatedErrorExample'
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductGet404'
              examples:
                ProdutoNãoEncontrado:
                  value:
                    detail: Não encontrado.
          description: Corpo da resposta status 404
      security:
        - OAuth Token: []
components:
  schemas:
    ProductSchemaSerializerFull:
      type: object
      description: >-
        Secure file replacement (context)

        -------------------------------

        When an update replaces an existing uploaded file (e.g. a profile
        picture), the

        old file usually remains in storage unless you explicitly delete it.
        Over time,

        this leaves orphaned files and increases storage costs.


        What this class does

        --------------------

        This is an opt-in base serializer that deletes old files from storage
        *after* a

        successful update that replaces (or clears) a Django
        ``models.FileField`` /

        ``models.ImageField``.


        It is configured via ``Meta.delete_replaced_files_fields``:

        - As a list/tuple/set of field names, or

        - As a dict mapping field name → options.


        Supported options (per field)

        -----------------------------

        - ``delete_on_clear`` (bool, default True): when the update sets the
        field to
          ``None``/empty, delete the previous stored file.

        Example usage (simple)

        ----------------------

        ```python

        class UserUpdateSerializer(DeleteOldFilesMixin,
        serializers.ModelSerializer):  # DeleteOldFilesMixin should be first
        that the actual serializer
            class Meta:
                model = User
                fields = ["id", "picture", "first_name", "last_name"]
                delete_replaced_files_fields = ["picture"]
        ```


        Example usage (per-field options)

        --------------------------------

        ```python

        class DocumentUpdateSerializer(DeleteOldFilesMixin,
        serializers.ModelSerializer):  # DeleteOldFilesMixin should be first
        that the actual serializer
            class Meta:
                model = Document
                fields = ["id", "picture", "document_image"]
                delete_replaced_files_fields = {
                    "picture": {"delete_on_clear": True},
                    "document_image": {"delete_on_clear": False},
                }
        ```
      properties:
        id:
          type: string
          description: Identificador único do produto
          maxLength: 255
        short_id:
          type: string
          title: ID Curto
          description: Identificador curto do produto
          maxLength: 40
        name:
          type: string
          title: Nome
          description: Nome do produto
          maxLength: 255
        status:
          allOf:
            - $ref: '#/components/schemas/ProductStatus'
          description: |-
            Status atual do produto

            * `active` - Ativo
            * `waiting_config` - Aguardando Configuração
            * `blocked` - Bloqueado
            * `deleted` - Deletado
        type:
          allOf:
            - $ref: '#/components/schemas/ProductType'
          title: Tipo
          description: |-
            Tipo de venda do produto, ex.: venda única, assinatura...

            * `unique` - Pagamento único
            * `subscription` - Assinatura recorrente
        description:
          type: string
          title: Descrição
          description: Descrição do produto
        category:
          type: string
          nullable: true
          title: Categoria
          description: Categoria do produto
        price:
          type: string
          format: decimal
          pattern: ^-?\d{0,8}(?:\.\d{0,2})?$
          title: Preço
          description: Preço do produto
        currency:
          allOf:
            - $ref: '#/components/schemas/CurrencyEnum'
          title: Moeda
          description: |-
            Moeda do produto

            * `BRL` - Real
            * `EUR` - Euro
            * `MXN` - Peso Mexicano
            * `PEN` - Sol Peruano
            * `USD` - Dólar
            * `CLP` - Peso Chileno
            * `COP` - Peso Colombiano
            * `ARS` - Peso Argentino
            * `BOB` - Boliviano
            * `UYU` - Peso Uruguayo
        installments:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Parcelas
          description: Número máximo de parcelas que o produto pode ser dividido
        image:
          type: string
          format: uri
          nullable: true
        guarantee:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Garantia (dias)
          description: Número de dias que o produto aceita reembolso
        salesPage:
          type: string
          format: uri
          nullable: true
          title: Página de vendas
          description: Link da página de vendas do produto
          maxLength: 2048
        supportEmail:
          type: string
          format: email
          nullable: true
          title: E-mail de suporte
          description: E-mail para suporte ao cliente final do produto
          maxLength: 254
        supportWhatsapp:
          type: string
          nullable: true
          title: WhatsApp de suporte
          description: >-
            Número de WhatsApp para suporte ao cliente, em formato ITU E.164,
            ex.: +5511999993333
          maxLength: 128
        contentDeliveries:
          type: array
          items:
            $ref: '#/components/schemas/ContentDeliveriesEnum'
          description: Métodos de entrega de conteúdo do produto
        emailAccessLink:
          type: string
          format: uri
          nullable: true
          title: Link de acesso
          description: Link a ser enviado por e-mail para acesso ao conteúdo após a compra
          maxLength: 2048
        confirmEmail:
          type: boolean
          title: Pedir para confirmar e-mail
          description: >-
            Define se o cliente deve repetir o e-mail digitado no checkout antes
            de finalizar a compra
        member_area:
          type: string
          readOnly: true
          description: ID da área de membros
        affiliate:
          type: boolean
          title: Habilitar programa de afiliados
          description: Define se o produto é aberto para afiliações
        affiliateRequest:
          type: boolean
          title: Solicitar afiliação
          description: Define se o produtor deve aprovar manualmente cada afiliação
        affiliateCommission:
          type: string
          format: decimal
          pattern: ^-?\d{0,8}(?:\.\d{0,2})?$
          nullable: true
          title: Comissão padrão para afiliados (%)
          description: Porcentagem de comissão padrão para afiliados do produto
        affiliateContact:
          type: boolean
          title: Compartilhar contato do cliente com afiliados
          description: >-
            Define se informações do cliente serão compartilhadas com os
            afiliados após a venda
        affiliateDescription:
          type: string
          nullable: true
          title: Descrição para afiliados
          description: >-
            Descrição do produto que será exibida para os afiliados no
            marketplace e/ou páginas dedicadas a afiliação
        affiliateSupportEmail:
          type: string
          format: email
          nullable: true
          title: E-mail de suporte para afiliados
          description: E-mail para suporte aos afiliados do produto
          maxLength: 254
        affiliateMarketplace:
          type: boolean
          title: Mostrar no marketplace de afiliados
          description: Define se o produto será exibido no marketplace de afiliados
        affiliateClick:
          allOf:
            - $ref: '#/components/schemas/AffiliateClickEnum'
          title: Modelo de atribuição de clique
          description: >-
            Define como a comissão da venda será atribuída caso haja múltiplos
            cookies de afiliados rastreados na venda


            * `first` - Primeiro clique

            * `last` - Último clique
        cookieTime:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Expiração do cookie de afiliado (dias)
          description: Quantidade de dias que o cookie de afiliado permanecerá ativo
        affiliateShareBump:
          type: boolean
          title: Dividir comissão de orderbump
          description: Define se a comissão do orderbump será dividida com o afiliado
        affiliateShareUpsell:
          type: boolean
          title: Dividir comissão de upsell
          description: Define se a comissão do upsell será dividida com o afiliado
        affiliateCloneQuiz:
          type: boolean
          title: Habilitar clonagem do quiz
          description: Habilitar clonagem do quiz
        affiliateCloneQuizUrl:
          type: string
          format: uri
          nullable: true
          title: Link para clonagem do quiz
          description: Link para clonagem do quiz
          maxLength: 2048
        affiliateSalesPage:
          type: string
          format: uri
          nullable: true
          title: Página de vendas do afiliado
          description: Página de vendas do afiliado
          maxLength: 2048
        upsell:
          type: boolean
          title: Habilitar upsell
          description: Define se o produto terá uma oferta de upsell após a compra
        upsellPage:
          type: string
          format: uri
          nullable: true
          title: Página de upsell
          description: >-
            URL da página de upsell para onde o cliente será redirecionado após
            a compra
          maxLength: 2048
        redirectUpsellWithBumpFail:
          type: boolean
          title: Redirecionar upsell com falha no bump
          description: >-
            Define se o cliente deve ser redirecionado para a página de upsell
            mesmo que um dos pagamentos de orderbump falhe
        sendConfirmationEmail:
          type: boolean
          title: Enviar e-mail de confirmação
          description: Define se o cliente deve receber um e-mail de confirmação de compra
        confirmationEmailDelay:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Delay do e-mail de confirmação
          description: >-
            Quantidade de minutos que o e-mail de confirmação de compra deve
            atrasar para o envio
        whatsappAbandonmentRecovery:
          type: boolean
          title: Recuperar carrinho abandonado por WhatsApp
          description: >-
            Define se o cliente que abandonou o checkout deve receber uma
            mensagem de recuperação no WhatsApp. Opt-in do produtor: nasce
            desligado e só dispara para abandono com celular válido
        defaultPaymentMethod:
          type: string
          title: Método de pagamento padrão
          description: Método de pagamento selecionado por padrão no checkout
          nullable: true
        showCouponField:
          type: boolean
          title: Mostrar campo de cupom no checkout
        showAddressFields:
          type: boolean
          title: Mostrar campos de endereço no checkout
          description: Exibe campos de endereço no checkout, como CEP, rua, número, etc
        showDocNumberField:
          type: boolean
          title: Mostrar campo de documento no checkout
          description: Exibe campo de documento no checkout, como CPF ou CNPJ
        autoSelectOrderBumps:
          type: boolean
          title: Pré-selecionar order bumps
          description: >-
            Se ativo, os order bumps deste produto entram pré-selecionados no
            checkout.
        absorbInstallmentInterest:
          type: boolean
          title: Parcelamento sem juros
          description: Produtor absorve o juro do parcelamento (cliente paga sem juros)
        threeDsRetryEnabled:
          type: boolean
          title: Habilitar retentativas de pagamento 3DS
          description: >-
            Caso o pagamento falhe no cartão de crédito, será tentado novamente
            via 3DS
        offers:
          type: array
          items:
            $ref: '#/components/schemas/OfferProductRetrieve'
          readOnly: true
        invoiceDescription:
          type: string
          nullable: true
          title: Descrição na fatura
          description: Descrição que aparecerá na fatura do cartão de crédito do cliente
          maxLength: 255
        paymentMethods:
          type: array
          items:
            $ref: '#/components/schemas/PaymentMethodsEnum'
          description: Métodos de pagamento que o produto aceita
        paymentsOrder:
          title: Ordem dos métodos de pagamento
          description: Ordem na qual os métodos de pagamento são exibidos no checkout
        ticketExpiration:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Vencimento do boleto
          description: Quantidade de dias que o boleto será válido para pagamento
        pixExpiresIn:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Vencimento do pix
          description: Vencimento do pix em segundos
        twoCardPayment:
          type: boolean
          title: Aceitar dois cartões
        bumps:
          type: array
          items:
            $ref: '#/components/schemas/OrderBump'
          readOnly: true
          description: Orderbumps do produto
        tracking_pixels:
          allOf:
            - $ref: '#/components/schemas/TrackingPixel'
          readOnly: true
        disable_orderbump_pixel_events:
          type: boolean
          title: Desativar eventos de orderbump no Pixel
          description: Define se eventos de orderbump não serão enviados no Pixel
        producerName:
          type: string
          nullable: true
          title: Nome do produtor
          description: Nome público do produtor ou empresa responsável pelo produto
          maxLength: 255
        createdAt:
          type: string
          format: date-time
          readOnly: true
          title: Data de criação
          description: Data e hora de criação
        updatedAt:
          type: string
          format: date-time
          readOnly: true
          title: Data de atualização
          description: Data e hora da última atualização
      required:
        - bumps
        - contentDeliveries
        - createdAt
        - description
        - member_area
        - name
        - offers
        - paymentMethods
        - tracking_pixels
        - updatedAt
    UnauthenticatedError:
      type: object
      properties:
        detail:
          type: string
    ProductGet404:
      type: object
      properties:
        detail:
          type: string
      required:
        - detail
    ProductStatus:
      enum:
        - active
        - waiting_config
        - blocked
        - deleted
      type: string
      description: |-
        * `active` - Ativo
        * `waiting_config` - Aguardando Configuração
        * `blocked` - Bloqueado
        * `deleted` - Deletado
    ProductType:
      enum:
        - unique
        - subscription
      type: string
      description: |-
        * `unique` - Pagamento único
        * `subscription` - Assinatura recorrente
    CurrencyEnum:
      enum:
        - BRL
        - EUR
        - MXN
        - PEN
        - USD
        - CLP
        - COP
        - ARS
        - BOB
        - UYU
      type: string
      description: |-
        * `BRL` - Real
        * `EUR` - Euro
        * `MXN` - Peso Mexicano
        * `PEN` - Sol Peruano
        * `USD` - Dólar
        * `CLP` - Peso Chileno
        * `COP` - Peso Colombiano
        * `ARS` - Peso Argentino
        * `BOB` - Boliviano
        * `UYU` - Peso Uruguayo
    ContentDeliveriesEnum:
      enum:
        - external
        - cakto
        - cakto_v2
        - cakto_v3
        - telegram
        - discord
        - emailAccess
        - files
        - disabled
      type: string
    AffiliateClickEnum:
      enum:
        - first
        - last
      type: string
      description: |-
        * `first` - Primeiro clique
        * `last` - Último clique
    OfferProductRetrieve:
      type: object
      description: >-
        Secure file replacement (context)

        -------------------------------

        When an update replaces an existing uploaded file (e.g. a profile
        picture), the

        old file usually remains in storage unless you explicitly delete it.
        Over time,

        this leaves orphaned files and increases storage costs.


        What this class does

        --------------------

        This is an opt-in base serializer that deletes old files from storage
        *after* a

        successful update that replaces (or clears) a Django
        ``models.FileField`` /

        ``models.ImageField``.


        It is configured via ``Meta.delete_replaced_files_fields``:

        - As a list/tuple/set of field names, or

        - As a dict mapping field name → options.


        Supported options (per field)

        -----------------------------

        - ``delete_on_clear`` (bool, default True): when the update sets the
        field to
          ``None``/empty, delete the previous stored file.

        Example usage (simple)

        ----------------------

        ```python

        class UserUpdateSerializer(DeleteOldFilesMixin,
        serializers.ModelSerializer):  # DeleteOldFilesMixin should be first
        that the actual serializer
            class Meta:
                model = User
                fields = ["id", "picture", "first_name", "last_name"]
                delete_replaced_files_fields = ["picture"]
        ```


        Example usage (per-field options)

        --------------------------------

        ```python

        class DocumentUpdateSerializer(DeleteOldFilesMixin,
        serializers.ModelSerializer):  # DeleteOldFilesMixin should be first
        that the actual serializer
            class Meta:
                model = Document
                fields = ["id", "picture", "document_image"]
                delete_replaced_files_fields = {
                    "picture": {"delete_on_clear": True},
                    "document_image": {"delete_on_clear": False},
                }
        ```
      properties:
        id:
          type: string
          title: Identificador
          description: Identificador único da oferta
          maxLength: 40
        name:
          type: string
          title: Nome
          description: Nome da oferta, exibido no checkout e em outros locais
          maxLength: 255
        image:
          type: string
          format: uri
          nullable: true
        price:
          type: number
          format: double
          description: Preço da oferta
        currency:
          allOf:
            - $ref: '#/components/schemas/CurrencyEnum'
          title: Moeda
          description: |-
            Moeda da oferta

            * `BRL` - Real
            * `EUR` - Euro
            * `MXN` - Peso Mexicano
            * `PEN` - Sol Peruano
            * `USD` - Dólar
            * `CLP` - Peso Chileno
            * `COP` - Peso Colombiano
            * `ARS` - Peso Argentino
            * `BOB` - Boliviano
            * `UYU` - Peso Uruguayo
        units:
          type: integer
          maximum: 2147483647
          minimum: 1
          title: Unidades
          description: >-
            Número de unidades que o cliente irá adquirir ao comprar esta
            oferta.
        default:
          type: boolean
          readOnly: true
          description: Indica se esta é a oferta padrão do produto
        status:
          allOf:
            - $ref: '#/components/schemas/OfferStatus'
          description: |-
            Status atual da oferta

            * `active` - Ativo
            * `disabled` - Desabilitado
            * `deleted` - Deletado
        type:
          allOf:
            - $ref: '#/components/schemas/ProductType'
          title: Tipo de pagamento
          description: |-
            Tipo de pagamento da oferta (ex: unique, subscription)

            * `unique` - Pagamento único
            * `subscription` - Assinatura recorrente
        intervalType:
          allOf:
            - $ref: '#/components/schemas/IntervalTypeEnum'
          title: Tipo de intervalo
          description: >-
            Tipo de intervalo do acesso concedido pela oferta (ex: month, week,
            lifetime)


            * `week` - Semana

            * `month` - Mês

            * `year` - Ano

            * `lifetime` - Vitalício
        interval:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Quantidade de intervalos
          description: >-
            Número de intervalos que serão concedidos ao comprar esta oferta.
            Ex: `interval=2` e `intervalType=month` concede 2 meses de acesso.
        recurrence_period:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Período de recorrência
          description: Número de dias entre cada cobrança da assinatura
        quantity_recurrences:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Quantidade de recorrências
          description: >-
            Número de cobranças que serão feitas na assinatura. Use -1 para
            cobranças ilimitadas.
        trial_days:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Dias de teste
          description: Número de dias de teste grátis antes da primeira cobrança
        max_retries:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Quantidade de retentativas de cobrança
          description: >-
            Número máximo de retentativas de cobrança em caso de falha no
            pagamento
        retry_interval:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Intervalo entre retentativas
          description: Número de dias entre cada retentativa de cobrança
        checkout:
          type: integer
          nullable: true
          readOnly: true
          description: ID do checkout associado à oferta
      required:
        - checkout
        - default
        - name
        - price
    PaymentMethodsEnum:
      enum:
        - pix
        - pix_auto
        - boleto
        - credit_card
        - debit_card
        - threeDs
        - picpay
        - pagaleve
        - googlepay
        - applepay
        - paypal_wallet
        - openfinance_nubank
        - mercadopago_wallet
        - oxxo
        - spei
        - pse
        - nequi
        - safetypay
      type: string
      description: |-
        * `pix` - Pix
        * `pix_auto` - Pix Automático
        * `boleto` - Boleto
        * `credit_card` - Cartão de Crédito
        * `debit_card` - Cartão de Débito
        * `threeDs` - Cartão de Crédito 3DS
        * `picpay` - Pic Pay
        * `pagaleve` - Pagaleve
        * `googlepay` - Google Pay
        * `applepay` - Apple Pay
        * `paypal_wallet` - PayPal Wallet
        * `openfinance_nubank` - Nubank
        * `mercadopago_wallet` - Mercado Pago Wallet
        * `oxxo` - OXXO
        * `spei` - SPEI
        * `pse` - PSE
        * `nequi` - Nequi
        * `safetypay` - SafetyPay
    OrderBump:
      type: object
      properties:
        id:
          type: string
          title: Identificador
          description: Identificador único do order bump no sistema
          maxLength: 40
        product:
          type: string
          description: Produto que será oferecido como order bump
          readOnly: true
          title: Produto
        installments:
          type: integer
          readOnly: true
          description: Número de parcelas do produto associado à oferta
        referencePrice:
          type: number
          format: double
          nullable: true
          description: Preço de referência exibido no orderbump
        offer:
          allOf:
            - $ref: '#/components/schemas/Offer'
          readOnly: true
          description: Oferta associada ao orderbump
        cta:
          type: string
          nullable: true
          title: Call to Action
          description: Texto do botão de call to action do order bump
          maxLength: 255
        title:
          type: string
          nullable: true
          title: Título
          description: Título do order bump
          maxLength: 255
        description:
          type: string
          nullable: true
          title: Descrição
          description: Descrição do order bump
        position:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Posição
          description: Posição na qual o order bump será exibido no checkout
        image:
          type: string
          nullable: true
          readOnly: true
          description: URL da imagem do orderbump
        showImage:
          type: boolean
          title: Exibir imagem
          description: Indica se a imagem do order bump será exibida no checkout
      required:
        - image
        - installments
        - offer
        - product
    TrackingPixel:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        fbPixPurchaseTrigger:
          type: boolean
        fbPixConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        fbBoletoPurchaseTrigger:
          type: boolean
        fbBoletoConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        fbPicpayPurchaseTrigger:
          type: boolean
        fbPicpayConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        fbNubankPurchaseTrigger:
          type: boolean
        fbNubankConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        googleAnalyticsTrackingId:
          type: string
          nullable: true
          maxLength: 255
        tiktokPixPurchaseTrigger:
          type: boolean
        tiktokPixConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        tiktokBoletoPurchaseTrigger:
          type: boolean
        tiktokBoletoConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        tiktokPicpayPurchaseTrigger:
          type: boolean
        tiktokPicpayConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        tiktokNubankPurchaseTrigger:
          type: boolean
        tiktokNubankConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        kwaiPixPurchaseTrigger:
          type: boolean
        kwaiPixConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        kwaiBoletoPurchaseTrigger:
          type: boolean
        kwaiBoletoConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        kwaiPicpayPurchaseTrigger:
          type: boolean
        kwaiPicpayConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        kwaiNubankPurchaseTrigger:
          type: boolean
        kwaiNubankConversionValue:
          type: integer
          maximum: 100
          minimum: 1
        facebook_pixels:
          type: array
          items:
            $ref: '#/components/schemas/FacebookPixel'
          description: Pixels do Facebook associados
        google_ads_pixels:
          type: array
          items:
            $ref: '#/components/schemas/GoogleAdsPixel'
          description: Pixels do Google Ads associados
        taboola_pixels:
          type: array
          items:
            $ref: '#/components/schemas/TaboolaPixel'
          description: Pixels do Taboola associados
        outbrain_pixels:
          type: array
          items:
            $ref: '#/components/schemas/OutbrainPixel'
          description: Pixels do Outbrain associados
        tiktok_pixels:
          type: array
          items:
            $ref: '#/components/schemas/TikTokPixel'
          description: Pixels do TikTok associados
        kwai_pixels:
          type: array
          items:
            $ref: '#/components/schemas/KwaiPixel'
          description: Pixels do Kwai associados
        pixel_domains:
          type: array
          items:
            $ref: '#/components/schemas/PixelDomain'
          readOnly: true
          description: Domínios verificados para uso com pixels
      required:
        - facebook_pixels
        - google_ads_pixels
        - id
        - kwai_pixels
        - outbrain_pixels
        - pixel_domains
        - taboola_pixels
        - tiktok_pixels
    OfferStatus:
      enum:
        - active
        - disabled
        - deleted
      type: string
      description: |-
        * `active` - Ativo
        * `disabled` - Desabilitado
        * `deleted` - Deletado
    IntervalTypeEnum:
      enum:
        - week
        - month
        - year
        - lifetime
      type: string
      description: |-
        * `week` - Semana
        * `month` - Mês
        * `year` - Ano
        * `lifetime` - Vitalício
    Offer:
      type: object
      description: >-
        Secure file replacement (context)

        -------------------------------

        When an update replaces an existing uploaded file (e.g. a profile
        picture), the

        old file usually remains in storage unless you explicitly delete it.
        Over time,

        this leaves orphaned files and increases storage costs.


        What this class does

        --------------------

        This is an opt-in base serializer that deletes old files from storage
        *after* a

        successful update that replaces (or clears) a Django
        ``models.FileField`` /

        ``models.ImageField``.


        It is configured via ``Meta.delete_replaced_files_fields``:

        - As a list/tuple/set of field names, or

        - As a dict mapping field name → options.


        Supported options (per field)

        -----------------------------

        - ``delete_on_clear`` (bool, default True): when the update sets the
        field to
          ``None``/empty, delete the previous stored file.

        Example usage (simple)

        ----------------------

        ```python

        class UserUpdateSerializer(DeleteOldFilesMixin,
        serializers.ModelSerializer):  # DeleteOldFilesMixin should be first
        that the actual serializer
            class Meta:
                model = User
                fields = ["id", "picture", "first_name", "last_name"]
                delete_replaced_files_fields = ["picture"]
        ```


        Example usage (per-field options)

        --------------------------------

        ```python

        class DocumentUpdateSerializer(DeleteOldFilesMixin,
        serializers.ModelSerializer):  # DeleteOldFilesMixin should be first
        that the actual serializer
            class Meta:
                model = Document
                fields = ["id", "picture", "document_image"]
                delete_replaced_files_fields = {
                    "picture": {"delete_on_clear": True},
                    "document_image": {"delete_on_clear": False},
                }
        ```
      properties:
        id:
          type: string
          readOnly: true
          title: Identificador
          description: Identificador único da oferta
        name:
          type: string
          title: Nome
          description: Nome da oferta, exibido no checkout e em outros locais
          maxLength: 255
        image:
          type: string
          format: uri
          nullable: true
        price:
          type: number
          format: double
          description: Preço da oferta
        currency:
          allOf:
            - $ref: '#/components/schemas/CurrencyEnum'
          title: Moeda
          description: |-
            Moeda da oferta

            * `BRL` - Real
            * `EUR` - Euro
            * `MXN` - Peso Mexicano
            * `PEN` - Sol Peruano
            * `USD` - Dólar
            * `CLP` - Peso Chileno
            * `COP` - Peso Colombiano
            * `ARS` - Peso Argentino
            * `BOB` - Boliviano
            * `UYU` - Peso Uruguayo
        units:
          type: integer
          maximum: 2147483647
          minimum: 1
          title: Unidades
          description: >-
            Número de unidades que o cliente irá adquirir ao comprar esta
            oferta.
        default:
          type: boolean
          readOnly: true
          description: Indica se esta é a oferta padrão do produto
        product:
          type: string
          description: Produto ao qual esta oferta pertence
          title: Produto
        status:
          allOf:
            - $ref: '#/components/schemas/OfferStatus'
          description: |-
            Status atual da oferta

            * `active` - Ativo
            * `disabled` - Desabilitado
            * `deleted` - Deletado
        type:
          allOf:
            - $ref: '#/components/schemas/ProductType'
          title: Tipo de pagamento
          description: |-
            Tipo de pagamento da oferta (ex: unique, subscription)

            * `unique` - Pagamento único
            * `subscription` - Assinatura recorrente
        intervalType:
          allOf:
            - $ref: '#/components/schemas/IntervalTypeEnum'
          title: Tipo de intervalo
          description: >-
            Tipo de intervalo do acesso concedido pela oferta (ex: month, week,
            lifetime)


            * `week` - Semana

            * `month` - Mês

            * `year` - Ano

            * `lifetime` - Vitalício
        interval:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Quantidade de intervalos
          description: >-
            Número de intervalos que serão concedidos ao comprar esta oferta.
            Ex: `interval=2` e `intervalType=month` concede 2 meses de acesso.
        recurrence_period:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Período de recorrência
          description: Número de dias entre cada cobrança da assinatura
        quantity_recurrences:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Quantidade de recorrências
          description: >-
            Número de cobranças que serão feitas na assinatura. Use -1 para
            cobranças ilimitadas.
        trial_days:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Dias de teste
          description: Número de dias de teste grátis antes da primeira cobrança
        max_retries:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Quantidade de retentativas de cobrança
          description: >-
            Número máximo de retentativas de cobrança em caso de falha no
            pagamento
        retry_interval:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          title: Intervalo entre retentativas
          description: Número de dias entre cada retentativa de cobrança
      required:
        - default
        - id
        - name
        - price
        - product
    FacebookPixel:
      type: object
      properties:
        id:
          type: integer
          description: ID do pixel do Facebook
        name:
          type: string
          nullable: true
          maxLength: 255
        description:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/PixelStatus'
        pixelId:
          type: string
          maxLength: 255
        error:
          type: string
          nullable: true
        domain:
          type: string
          nullable: true
          maxLength: 255
        apiToken:
          type: string
          nullable: true
          maxLength: 255
        fbPixPurchaseTrigger:
          type: boolean
          nullable: true
        fbPixConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        fbBoletoPurchaseTrigger:
          type: boolean
          nullable: true
        fbBoletoConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        fbPicpayPurchaseTrigger:
          type: boolean
          nullable: true
        fbPicpayConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        fbNubankPurchaseTrigger:
          type: boolean
          nullable: true
        fbNubankConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - createdAt
        - pixelId
    GoogleAdsPixel:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          maxLength: 255
        description:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/PixelStatus'
        pixelId:
          type: string
          maxLength: 255
        conversionLabel:
          type: string
          maxLength: 255
        checkoutVisitTrigger:
          type: boolean
        cardPixApprovalTrigger:
          type: boolean
        boletoTrigger:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - conversionLabel
        - createdAt
        - name
        - pixelId
    TaboolaPixel:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          nullable: true
          maxLength: 255
        description:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/PixelStatus'
        eventName:
          type: string
          maxLength: 255
        accountId:
          type: string
          maxLength: 255
        checkoutVisitTrigger:
          type: boolean
        cardPixApprovalTrigger:
          type: boolean
        boletoTrigger:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - accountId
        - createdAt
        - eventName
    OutbrainPixel:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          nullable: true
          maxLength: 255
        description:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/PixelStatus'
        eventName:
          type: string
          maxLength: 255
        pixelId:
          type: string
          maxLength: 255
        checkoutVisitTrigger:
          type: boolean
        cardPixApprovalTrigger:
          type: boolean
        boletoTrigger:
          type: boolean
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - createdAt
        - eventName
        - pixelId
    TikTokPixel:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          nullable: true
          maxLength: 255
        description:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/PixelStatus'
        pixelId:
          type: string
          maxLength: 255
        apiToken:
          type: string
          nullable: true
          maxLength: 255
        error:
          type: string
          nullable: true
        tiktokPixPurchaseTrigger:
          type: boolean
          nullable: true
        tiktokPixConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        tiktokBoletoPurchaseTrigger:
          type: boolean
          nullable: true
        tiktokBoletoConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        tiktokPicpayPurchaseTrigger:
          type: boolean
          nullable: true
        tiktokPicpayConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        tiktokNubankPurchaseTrigger:
          type: boolean
          nullable: true
        tiktokNubankConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - createdAt
        - pixelId
    KwaiPixel:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          nullable: true
          maxLength: 255
        description:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/PixelStatus'
        pixelId:
          type: string
          maxLength: 255
        kwaiPixPurchaseTrigger:
          type: boolean
          nullable: true
        kwaiPixConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        kwaiBoletoPurchaseTrigger:
          type: boolean
          nullable: true
        kwaiBoletoConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        kwaiPicpayPurchaseTrigger:
          type: boolean
          nullable: true
        kwaiPicpayConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        kwaiNubankPurchaseTrigger:
          type: boolean
          nullable: true
        kwaiNubankConversionValue:
          type: integer
          maximum: 100
          minimum: 1
          nullable: true
        createdAt:
          type: string
          format: date-time
          readOnly: true
      required:
        - createdAt
        - pixelId
    PixelDomain:
      type: object
      properties:
        id:
          type: integer
        user:
          type: string
          readOnly: true
        domain:
          type: string
          maxLength: 255
        isVerified:
          type: boolean
        lastVerified:
          type: string
          format: date-time
          nullable: true
      required:
        - domain
        - user
    PixelStatus:
      enum:
        - active
        - disabled
        - with_error
      type: string
      description: |-
        * `active` - Ativo
        * `disabled` - Desabilitado
        * `with_error` - Com erro
  examples:
    UnauthenticatedErrorExample:
      summary: Token ausente ou inválido
      description: Token ausente ou inválido
      value:
        detail: As credenciais de autenticação não foram fornecidas.
  securitySchemes:
    OAuth Token:
      type: http
      scheme: bearer
      in: header
      name: Authorization
      description: >-
        Token de autenticação do tipo `Bearer {access_token}`, onde
        `{access_token}` é o token obtido no fluxo de
        [autenticação](/authentication).

````