openapi: 3.0.0
info:
  title: 'Yampi API'
  description: 'Documentação oficial da API da Yampi'
  version: '2.0'
servers:
  -
    url: 'https://api.dooki.com.br/v2'
    description: 'Endpoint de produção'
paths:
  /auth/me:
    post:
      tags:
        - Usuários
      summary: 'Visualizar dados do usuário logado'
      description: 'Retorna os dados do usuário atualmente logado'
      operationId: PostAuthMe
      responses:
        '200':
          description: 'Dados do usuário logado'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          description: 'Acesso não autorizado, verifique o User-Token e o User-Secret_Key'
  '/{alias}/catalog/brands':
    get:
      tags:
        - 'Catálogo - Marcas'
      summary: 'Listar marcas'
      description: 'Listar as marcas do catálogo'
      operationId: GetCatalogBrands
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: name
          in: query
          description: 'Filtrar por nome da marca'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de marcas'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Brand' }, { properties: { created_at: { properties: { date: { description: 'Data e hora de criação no formato YYYY-MM-DD H:MM:SS (exemplo: 2000-08-17 16:14:24)', type: string, example: '2000-08-17 10:24:24' }, timezone_type: { description: 'Número de representação do timezone.', type: integer, example: '3' }, timezone: { description: 'Identificador do fuso horário.', type: string, example: America/Sao_Paulo } }, type: object } }, type: object }, { properties: { updated_at: { properties: { date: { description: 'Data e hora de atualização no formato YYYY-MM-DD H:MM:SS (exemplo: 2000-08-17 16:14:24)', type: string, example: '2000-06-23 08:05:17' }, timezone_type: { description: 'Número de representação do timezone.', type: integer, example: '3' }, timezone: { description: 'Identificador do fuso horário.', type: string, example: America/Sao_Paulo } }, type: object } }, type: object }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Catálogo - Marcas'
      summary: 'Criar marca'
      description: 'Cria uma nova marca no catálogo'
      operationId: PostCatalogBrands
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BrandRequest'
      responses:
        '201':
          description: 'Marca criada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/Brand' }
                type: object
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
  '/{alias}/catalog/brands/{id}':
    get:
      tags:
        - 'Catálogo - Marcas'
      summary: 'Visualizar marca'
      description: 'Visualiza as informações de uma marca específica no catálogo'
      operationId: GetCatalogBrandsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da marca'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da marca'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Brand' }
                  - { properties: { created_at: { properties: { date: { description: 'Data e hora de criação no formato YYYY-MM-DD H:MM:SS (exemplo: 2000-08-17 16:14:24)', type: string, example: '2000-08-17 10:24:24' }, timezone_type: { description: 'Número de representação do timezone.', type: integer, example: '3' }, timezone: { description: 'Identificador do fuso horário.', type: string, example: America/Sao_Paulo } }, type: object } }, type: object }
                  - { properties: { updated_at: { properties: { date: { description: 'Data e hora de atualização no formato YYYY-MM-DD H:MM:SS (exemplo: 2000-08-17 16:14:24)', type: string, example: '2000-06-23 08:05:17' }, timezone_type: { description: 'Número de representação do timezone.', type: integer, example: '3' }, timezone: { description: 'Identificador do fuso horário.', type: string, example: America/Sao_Paulo } }, type: object } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Marca não encontrada'
    put:
      tags:
        - 'Catálogo - Marcas'
      summary: 'Atualizar marca'
      description: 'Atualiza os detalhes de uma marca específica'
      operationId: PutCatalogBrandsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da marca'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BrandRequest'
      responses:
        '200':
          description: 'Marca atualizada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/Brand' }
                type: object
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
        '404':
          description: 'Marca não encontrada'
    delete:
      tags:
        - 'Catálogo - Marcas'
      summary: 'Excluir marca'
      description: 'Excluir uma marca específica'
      operationId: DeleteCatalogBrandsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da marca'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Marca excluída com sucesso'
        '404':
          description: 'Marca não encontrada'
  '/{alias}/catalog/bundles':
    get:
      tags:
        - 'Catálogo - Kits'
      summary: 'Listar Kits'
      description: 'Listar todos os Kits cadastrados'
      operationId: GetCatalogBundles
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de Kits'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Bundles' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Catálogo - Kits'
      summary: 'Cadastrar um Kit'
      description: 'Cadastrar um Kit'
      operationId: PostCatalogBundles
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BundlesRequest'
      responses:
        '200':
          description: 'Lista de Kits'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bundles'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Kit não encontrado'
        '422':
          description: 'Verifique os campos obrigatórios: name, image_url e items'
  '/{alias}/catalog/bundles/{id}':
    get:
      tags:
        - 'Catálogo - Kits'
      summary: 'Visualizar um Kit'
      description: 'Visualizar um Kit cadastrado'
      operationId: GetCatalogBundlesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do kit'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de Kits'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bundles'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Kit não encontrado'
    put:
      tags:
        - 'Catálogo - Kits'
      summary: 'Atualizar um Kit'
      description: 'Atualizar um Kit'
      operationId: PutCatalogBundlesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do kit'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BundlesRequest'
      responses:
        '200':
          description: 'Lista de Kits'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bundles'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Kit não encontrado'
        '422':
          description: 'Verifique os campos obrigatórios: name, image_url e items'
    delete:
      tags:
        - 'Catálogo - Kits'
      summary: 'Exclui um Kit'
      description: 'Exclui um Kit'
      operationId: DeleteCatalogBundlesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do kit'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Kit excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Kit não encontrado'
  '/{alias}/catalog/categories':
    get:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Listar categorias'
      description: 'Lista as categorias do catálogo'
      operationId: GetCatalogCategories
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - active
              properties:
                active:
                  type: boolean
                featured:
                  type: boolean
                name:
                  type: string
                slug:
                  type: string
                seo_title:
                  type: string
                seo_keywords:
                  type: string
                seo_description:
                  type: string
                banners_ids:
                  type: array
                  items: { type: integer }
                external_url:
                  type: string
                  format: url
                canonical_url:
                  type: string
                  format: url
              type: object
      responses:
        '200':
          description: 'Lista de categorias obtida com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Category' }, { $ref: '#/components/schemas/CategoryAdditionalResponse' }, { $ref: '#/components/schemas/SimplePaginatorWithMeta' }] } } }, type: object }
    post:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Criar categoria'
      description: 'Cria uma nova categoria no catálogo'
      operationId: PostCatalogCategories
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CategoryRequest'
      responses:
        '201':
          description: 'Categoria criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
  '/{alias}/catalog/categories/{id}':
    get:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Visualizar categoria'
      description: 'Visualiza os detalhes de uma categoria específica'
      operationId: GetCatalogCategoriesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da categoria'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da categoria'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Category' }
                  - { $ref: '#/components/schemas/CategoryAdditionalResponse' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Categoria não encontrada'
    put:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Atualizar categoria'
      description: 'Atualiza os detalhes de uma categoria específica'
      operationId: PutCatalogCategoriesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da categoria'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CategoryRequest'
      responses:
        '200':
          description: 'Categoria atualizada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Category' }
                  - { $ref: '#/components/schemas/CategoryAdditionalResponse' }
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
        '404':
          description: 'Categoria não encontrada'
    delete:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Excluir categoria'
      description: 'Exclui uma categoria específica'
      operationId: DeleteCatalogCategoriesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da categoria'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Categoria excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Categoria não encontrada'
  '/{alias}/catalog/categories/{id}/products':
    get:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Listar produtos associados a uma categoria'
      description: 'Lista os produtos que estão associados a uma categoria específica'
      operationId: GetCatalogCategoriesIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da categoria'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de produtos associados a uma categoria'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductCategory' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Categoria não encontrada'
    put:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Associar produtos a uma categoria'
      description: 'Associa uma lista de produtos a uma categoria específica'
      operationId: PutCatalogCategoriesIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da categoria'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                product_ids:
                  description: 'IDs dos produtos a serem associados'
                  type: array
                  items: { type: integer, example: 1 }
              type: object
      responses:
        '200':
          description: 'Produtos associados à categoria com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductCategory' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Categoria não encontrada'
    delete:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Excluir produtos de uma categoria'
      description: 'Remove a associação de produtos a uma categoria específica'
      operationId: DeleteCatalogCategoriesIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da categoria'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                product_ids:
                  description: 'IDs dos produtos a serem removidos'
                  type: array
                  items: { type: integer, example: 1 }
              type: object
      responses:
        '200':
          description: 'Produtos removidos da categoria com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Categoria não encontrada'
  '/{alias}/catalog/categories/{id}/banners':
    get:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Listar banners associados a uma categoria'
      description: 'Lista de todos os banners associados a uma categoria específica'
      operationId: GetCatalogCategoriesIdBanners
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da categoria'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de banners associados à categoria'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/BannerCategory' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Categoria não encontrada'
  '/{alias}/catalog/categories/{id}/copy-products':
    post:
      tags:
        - 'Catálogo - Categorias'
      summary: 'Associar produtos de outras categorias'
      description: 'Esse recurso é útil quando você precisa transferir produtos de outras categorias'
      operationId: PostCatalogCategoriesIdCopy-products
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da categoria de destino'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                categories_ids:
                  description: 'IDs das categorias de origem, no formato: [1,2,3,4]'
                  type: array
                  items: { type: integer }
              type: object
      responses:
        '200':
          description: 'Produtos associados com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductCategory' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Categoria não encontrada'
  '/{alias}/catalog/collections':
    get:
      tags:
        - 'Catálogo - Coleções'
      summary: 'Listar coleções'
      description: 'Lista todas as coleções. Use o parâmetro `onlyParents=true` para listar apenas as coleções pai'
      operationId: GetCatalogCollections
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: includes
          in: query
          description: 'Recursos adicionais a serem incluídos na resposta'
          schema:
            description: 'Pode incluir ''products'' e/ou ''banners'''
            type: string
            enum:
              - products
              - banners
            example: products
        -
          name: onlyParents
          in: query
          description: 'Filtra apenas coleções pai'
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: 'Lista de coleções'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Collection' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Catálogo - Coleções'
      summary: 'Criar coleção'
      description: 'Cria uma nova coleção com os parâmetros especificados'
      operationId: PostCatalogCollections
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Dados para criar a coleção'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CollectionRequest'
      responses:
        '200':
          description: 'Coleção criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/collections/{id}':
    get:
      tags:
        - 'Catálogo - Coleções'
      summary: 'Visualizar coleção'
      description: 'Retorna os detalhes de uma coleção específica'
      operationId: GetCatalogCollectionsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da coleção'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da coleção'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Coleção não encontrada'
    put:
      tags:
        - 'Catálogo - Coleções'
      summary: 'Atualizar coleção'
      description: 'Atualiza os detalhes de uma coleção específica'
      operationId: PutCatalogCollectionsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da coleção'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Dados para atualização da coleção'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CollectionRequest'
      responses:
        '200':
          description: 'Coleção atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Coleção não encontrada'
    delete:
      tags:
        - 'Catálogo - Coleções'
      summary: 'Excluir coleção'
      description: 'Exclui uma coleção específica'
      operationId: DeleteCatalogCollectionsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da coleção'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Coleção excluída com sucesso'
        '404':
          description: 'Coleção não encontrada'
  '/{alias}/catalog/collections/{id}/products':
    get:
      tags:
        - 'Catálogo - Coleções'
      summary: 'Listar produtos associados a uma coleção'
      description: 'Retorna a lista de produtos associados a uma coleção específica'
      operationId: GetCatalogCollectionsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da coleção'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Produtos associados à categoria com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductCollection' } } }, type: object }
        '404':
          description: 'Coleção não encontrada'
    post:
      tags:
        - 'Catálogo - Coleções'
      summary: 'Associar produtos a uma coleção'
      description: 'Associa uma lista de produtos a uma coleção específica'
      operationId: PostCatalogCollectionsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da coleção'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                products_ids:
                  type: array
                  items: { type: integer }
              type: object
      responses:
        '200':
          description: 'Produtos associados com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Coleção não encontrada'
    delete:
      tags:
        - 'Catálogo - Coleções'
      summary: 'Excluir produtos de uma coleção'
      description: 'Exclui uma lista de produtos de uma coleção específica'
      operationId: DeleteCatalogCollectionsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da coleção'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                products_ids:
                  description: 'Lista de IDs dos produtos a serem excluídos da coleção'
                  type: array
                  items: { type: integer }
                  example: '[1,2,3,4,5]'
              type: object
      responses:
        '200':
          description: 'Produtos excluídos com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Coleção não encontrada'
  '/{alias}/catalog/comments':
    get:
      tags:
        - 'Catálogo - Comentários de produtos'
      summary: 'Listar comentários de produtos'
      description: 'Lista todos os comentários dos produtos'
      operationId: GetCatalogComments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de comentários dos produtos'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductComment' } }, answer: { oneOf: [{ $ref: '#/components/schemas/ProductCommentAnswer' }], nullable: true, type: object } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Comentário não encontrado'
    post:
      tags:
        - 'Catálogo - Comentários de produtos'
      summary: 'Criar comentário de produto'
      description: 'Cria um novo comentário para um produto'
      operationId: PostCatalogComments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentRequest'
      responses:
        '200':
          description: 'Comentário criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductComment'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Comentário não encontrado'
  '/{alias}/catalog/comments/{id}':
    get:
      tags:
        - 'Catálogo - Comentários de produtos'
      summary: 'Visualizar comentário de produto'
      description: 'Obtém os detalhes de um comentário específico de um produto'
      operationId: GetCatalogCommentsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do comentário'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do comentário'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductComment' } }, answer: { oneOf: [{ $ref: '#/components/schemas/ProductCommentAnswer' }], nullable: true, type: object } }, type: object }
        '404':
          description: 'Comentário não encontrado'
    put:
      tags:
        - 'Catálogo - Comentários de produtos'
      summary: 'Atualizar comentário de produto'
      description: 'Atualiza os detalhes de um comentário específico de um produto'
      operationId: PutCatalogCommentsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do comentário'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentRequest'
      responses:
        '200':
          description: 'Comentário atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductComment'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Comentário não encontrado'
    delete:
      tags:
        - 'Catálogo - Comentários de produtos'
      summary: 'Excluir comentário de produto'
      description: 'Exclui um comentário específico de um produto'
      operationId: DeleteCatalogCommentsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do comentário'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Comentário excluído com sucesso'
        '404':
          description: 'Comentário não encontrado'
  '/{alias}/catalog/customizations':
    get:
      tags:
        - 'Catálogo - Customizações'
      summary: 'Listar customizações'
      description: 'Obtém uma lista de todas as customizações disponíveis'
      operationId: GetCatalogCustomizations
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de customizações'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Customization' }, { $ref: '#/components/schemas/CustomizationAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Nenhuma customização encontrada'
    post:
      tags:
        - 'Catálogo - Customizações'
      summary: 'Criar customização'
      description: 'Cria uma nova customização'
      operationId: PostCatalogCustomizations
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Dados da customização'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomizationRequest'
      responses:
        '200':
          description: 'Customização criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customization'
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/customizations/{id}':
    get:
      tags:
        - 'Catálogo - Customizações'
      summary: 'Visualizar customização'
      description: 'Visualiza os detalhes de uma customização específica'
      operationId: GetCatalogCustomizationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da customização'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da customização'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Customization' }
                  - { $ref: '#/components/schemas/CustomizationAdditionalResponse' }
    put:
      tags:
        - 'Catálogo - Customizações'
      summary: 'Atualizar customização'
      description: 'Atualiza uma customização existente'
      operationId: PutCatalogCustomizationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da customização'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Dados da customização'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomizationRequest'
      responses:
        '200':
          description: 'Customização atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customization'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Customização não encontrada'
    delete:
      tags:
        - 'Catálogo - Customizações'
      summary: 'Excluir customização'
      description: 'Exclui uma customização existente'
      operationId: DeleteCatalogCustomizationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da customização'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Customização excluída com sucesso'
        '404':
          description: 'Customização não encontrada'
  '/{alias}/catalog/feeds':
    get:
      tags:
        - 'Catálogo - Feeds'
      summary: 'Listar feeds'
      description: 'Lista todos os feeds de catálogo disponíveis'
      operationId: GetCatalogFeeds
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de feeds'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Feed' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Feeds não encontrados'
    post:
      tags:
        - 'Catálogo - Feeds'
      summary: 'Criar feed'
      description: 'Cria um novo feed de catálogo'
      operationId: PostCatalogFeeds
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeedRequest'
      responses:
        '200':
          description: 'Feed criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Feed'
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/feeds/{id}':
    get:
      tags:
        - 'Catálogo - Feeds'
      summary: 'Visualizar feed'
      description: 'Obtém os detalhes de um feed específico'
      operationId: GetCatalogFeedsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do feed'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do feed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Feed'
        '404':
          description: 'Feed não encontrado'
    put:
      tags:
        - 'Catálogo - Feeds'
      summary: 'Atualizar feed'
      description: 'Atualiza os detalhes de um feed específico'
      operationId: PutCatalogFeedsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do feed'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeedRequest'
      responses:
        '200':
          description: 'Feed atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Feed'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Feed não encontrado'
    delete:
      tags:
        - 'Catálogo - Feeds'
      summary: 'Excluir feed'
      description: 'Exclui um feed específico'
      operationId: DeleteCatalogFeedsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do feed'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Feed excluído com sucesso'
        '404':
          description: 'Feed não encontrado'
  '/{alias}/catalog/filters/{filterId}/values':
    get:
      tags:
        - 'Catálogo - Valores de filtros'
      summary: 'Listar valores de um filtro'
      description: 'Retorna uma lista de valores associados a um filtro específico'
      operationId: GetCatalogFiltersFilterIdValues
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: filterId
          in: path
          description: 'ID do filtro'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Valores listados com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/FilterOption' }, { $ref: '#/components/schemas/FilterOptionAdditionalResponse' }] } }
                  meta: { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
                type: object
        '404':
          description: 'Filtro não encontrado'
    post:
      tags:
        - 'Catálogo - Valores de filtros'
      summary: 'Criar valor de filtro'
      description: 'Cria um novo valor associado a um filtro específico'
      operationId: PostCatalogFiltersFilterIdValues
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: filterId
          in: path
          description: 'ID do filtro'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FilterOptionRequest'
      responses:
        '200':
          description: 'Valor de filtro criado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/FilterOption' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Filtro não encontrado'
  '/{alias}/catalog/filters/{filterId}/values/{id}':
    get:
      tags:
        - 'Catálogo - Valores de filtros'
      summary: 'Visualizar valor de um filtro'
      description: 'Retorna detalhes de um valor específico associado a um filtro'
      operationId: GetCatalogFiltersFilterIdValuesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: filterId
          in: path
          description: 'ID do filtro'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do valor de filtro'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Valor de filtro visualizado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/FilterOption' }, { $ref: '#/components/schemas/FilterOptionAdditionalResponse' }] } }
                type: object
        '404':
          description: 'Valor de filtro não encontrado'
    put:
      tags:
        - 'Catálogo - Valores de filtros'
      summary: 'Atualizar valor de filtro'
      description: 'Atualiza um valor específico associado a um filtro'
      operationId: PutCatalogFiltersFilterIdValuesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: filterId
          in: path
          description: 'ID do filtro'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do valor de filtro'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FilterOptionRequest'
      responses:
        '200':
          description: 'Valor de filtro atualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/FilterOption' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Valor de filtro não encontrado'
    delete:
      tags:
        - 'Catálogo - Valores de filtros'
      summary: 'Excluir valor de filtro'
      description: 'Exclui um valor específico associado a um filtro'
      operationId: DeleteCatalogFiltersFilterIdValuesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: filterId
          in: path
          description: 'ID do filtro'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do valor de filtro'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Valor de filtro excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Valor de filtro não encontrado'
  '/{alias}/catalog/filters':
    get:
      tags:
        - 'Catálogo - Filtros'
      summary: 'Listar filtros de busca de produtos'
      description: 'Obtém uma lista de filtros disponíveis para busca de produtos'
      operationId: GetCatalogFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de filtros'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/FilterOption' }, { $ref: '#/components/schemas/FilterOptionAdditionalResponse' }] } }
                  meta: { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
                type: object
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Catálogo - Filtros'
      summary: 'Criar filtro de busca de produtos'
      description: 'Cria um novo filtro para a busca de produtos'
      operationId: PostCatalogFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FilterRequest'
      responses:
        '200':
          description: 'Filtro criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Filter'
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/filters/{id}':
    get:
      tags:
        - 'Catálogo - Filtros'
      summary: 'Visualizar filtro'
      description: 'Obtém os detalhes de um filtro específico'
      operationId: GetCatalogFiltersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do filtro'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do filtro'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/FilterOption' }, { $ref: '#/components/schemas/FilterOptionAdditionalResponse' }] } }
                type: object
        '404':
          description: 'Filtro não encontrado'
    put:
      tags:
        - 'Catálogo - Filtros'
      summary: 'Atualizar filtro'
      description: 'Atualiza os detalhes de um filtro específico'
      operationId: PutCatalogFiltersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do filtro'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FilterRequest'
      responses:
        '200':
          description: 'Filtro atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Filter'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Filtro não encontrado'
    delete:
      tags:
        - 'Catálogo - Filtros'
      summary: 'Excluir filtro'
      description: 'Exclui um filtro específico'
      operationId: DeleteCatalogFiltersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do filtro'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Filtro excluído com sucesso'
        '404':
          description: 'Filtro não encontrado'
  '/{alias}/catalog/flags':
    get:
      tags:
        - 'Catálogo - Selos'
      summary: 'Listar selos'
      description: 'Lista de selos com base nos parâmetros fornecidos'
      operationId: GetCatalogFlags
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Flag'
      responses:
        '200':
          description: 'Lista de selos retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Flag' }, { $ref: '#/components/schemas/FlagAdditionalResponse' }] } } }, type: object }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Catálogo - Selos'
      summary: 'Criar selo'
      description: 'Cria um novo selo no catálogo'
      operationId: PostCatalogFlags
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FlagRequest'
      responses:
        '201':
          description: 'Selo criado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Flag' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/flags/{id}':
    get:
      tags:
        - 'Catálogo - Selos'
      summary: 'Visualizar selo'
      description: 'Visualiza os detalhes de um selo específico do catálogo'
      operationId: GetCatalogFlagsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do selo'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do selo'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Flag' }
                  - { $ref: '#/components/schemas/FlagAdditionalResponse' }
                  - { $ref: '#/components/schemas/Restrictions' }
        '404':
          description: 'Selo não encontrado'
    put:
      tags:
        - 'Catálogo - Selos'
      summary: 'Atualizar selo'
      description: 'Atualiza os detalhes de um selo específico do catálogo'
      operationId: PutCatalogFlagsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do selo'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FlagRequest'
      responses:
        '200':
          description: 'Response da criação do selo'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Flag' }
                  - { $ref: '#/components/schemas/FlagAdditionalResponse' }
                  - { $ref: '#/components/schemas/Restrictions' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Selo não encontrado'
    delete:
      tags:
        - 'Catálogo - Selos'
      summary: 'Excluir selo'
      description: 'Exclui um selo específico do catálogo'
      operationId: DeleteCatalogFlagsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do selo'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                product_ids:
                  description: 'IDs dos produtos a serem removidos'
                  type: array
                  items: { type: integer, example: 1 }
              type: object
      responses:
        '200':
          description: 'Selo excluído com sucesso'
        '404':
          description: 'Selo não encontrado'
  '/{alias}/catalog/flags/{id}/products':
    get:
      tags:
        - 'Catálogo - Selos'
      summary: 'Listar produtos associados a um selo'
      description: 'Lista os produtos associados a um selo específico do catálogo'
      operationId: GetCatalogFlagsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do selo'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Produtos associados à categoria com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductFlag' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Selo não encontrado'
    post:
      tags:
        - 'Catálogo - Selos'
      summary: 'Associar produtos a um selo'
      description: 'Associa produtos a um selo específico do catálogo'
      operationId: PostCatalogFlagsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do selo'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                products_ids:
                  type: array
                  items: { type: integer }
                  example: [1, 2, 3, 4, 5]
              type: object
      responses:
        '200':
          description: 'Produtos associados com sucesso ao selo'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Selo não encontrado'
    delete:
      tags:
        - 'Catálogo - Selos'
      summary: 'Excluir produtos de um selo'
      description: 'Exclui produtos de um selo específico do catálogo'
      operationId: DeleteCatalogFlagsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do selo'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                products_ids:
                  type: array
                  items: { type: integer }
                  example: [1, 2, 3, 4, 5]
              type: object
      responses:
        '200':
          description: 'Produtos excluídos com sucesso do selo'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Selo não encontrado'
  '/{alias}/catalog/variations/{variationId}/values':
    get:
      tags:
        - 'Catálogo - Valores de variações'
      summary: 'Listar valores de uma variação'
      description: 'Lista os valores de uma variação específica'
      operationId: GetCatalogVariationsVariationIdValues
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: variationId
          in: path
          description: 'ID da variação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Valores de variação listados com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/GridOption' }, { $ref: '#/components/schemas/GridOptionAdditionalResponse' }] } }
                  meta: { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Variação não encontrada'
    post:
      tags:
        - 'Catálogo - Valores de variações'
      summary: 'Criar valor de variação'
      description: 'Cria um novo valor para uma variação específica'
      operationId: PostCatalogVariationsVariationIdValues
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: variationId
          in: path
          description: 'ID da variação'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridOptionRequest'
      responses:
        '201':
          description: 'Valor de variação criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GridOption'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Variação não encontrada'
  '/{alias}/catalog/variations/{variationId}/values/{id}':
    get:
      tags:
        - 'Catálogo - Valores de variações'
      summary: 'Visualizar valor de uma variação'
      description: 'Retorna os detalhes de um valor específico de uma variação'
      operationId: GetCatalogVariationsVariationIdValuesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: variationId
          in: path
          description: 'ID da variação'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do valor da variação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes dos valores das variações'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/GridOption' }, { $ref: '#/components/schemas/GridOptionAdditionalResponse' }] } }
                type: object
        '404':
          description: 'Valor de variação não encontrado'
    put:
      tags:
        - 'Catálogo - Valores de variações'
      summary: 'Atualizar valor de variação'
      description: 'Atualiza os detalhes de um valor específico de uma variação'
      operationId: PutCatalogVariationsVariationIdValuesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: variationId
          in: path
          description: 'ID da variação'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do valor da variação'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridOptionRequest'
      responses:
        '200':
          description: 'Valor de variação atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GridOption'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Valor de variação não encontrado'
    delete:
      tags:
        - 'Catálogo - Valores de variações'
      summary: 'Excluir valor de variação'
      description: 'Exclui um valor específico de uma variação'
      operationId: DeleteCatalogVariationsVariationIdValuesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: variationId
          in: path
          description: 'ID da variação'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do valor da variação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Valor de variação excluído com sucesso'
        '404':
          description: 'Valor de variação não encontrado'
  '/{alias}/catalog/variations':
    get:
      tags:
        - 'Catálogo - Variações'
      summary: 'Listar variações'
      description: 'Lista de variações de produtos'
      operationId: GetCatalogVariations
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridRequest'
      responses:
        '200':
          description: 'Lista de variações retornada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Grid' }, { $ref: '#/components/schemas/GridAdditionalResponse' }] } }
                  meta: { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Variações não encontradas'
    post:
      tags:
        - 'Catálogo - Variações'
      summary: 'Criar variação'
      description: 'Cria uma nova variação de produto'
      operationId: PostCatalogVariations
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridRequest'
      responses:
        '201':
          description: 'Variação criada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Grid' }, { $ref: '#/components/schemas/GridAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/variations/{id}':
    get:
      tags:
        - 'Catálogo - Variações'
      summary: 'Visualizar variação'
      description: 'Visualiza uma variação de produto específica'
      operationId: GetCatalogVariationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da variação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes das variações'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Grid' }, { $ref: '#/components/schemas/GridAdditionalResponse' }] } }
                type: object
        '404':
          description: 'Variação não encontrada'
    put:
      tags:
        - 'Catálogo - Variações'
      summary: 'Atualizar variação'
      description: 'Atualiza uma variação de produto específica'
      operationId: PutCatalogVariationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da variação'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridRequest'
      responses:
        '200':
          description: 'Variação atualizada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Grid' }, { $ref: '#/components/schemas/GridAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Variação não encontrada'
    delete:
      tags:
        - 'Catálogo - Variações'
      summary: 'Excluir variação'
      description: 'Exclui uma variação de produto específica'
      operationId: DeleteCatalogVariationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da variação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Variação excluída com sucesso'
        '404':
          description: 'Variação não encontrada'
  '/{alias}/catalog/groups':
    get:
      tags:
        - 'Catálogo - Grupos'
      summary: 'Listar grupos de produtos'
      description: 'Retorna uma lista de grupos de produtos'
      operationId: GetCatalogGroups
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de grupos'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Group' }, { $ref: '#/components/schemas/GroupAdditionalResponse' }] } } }, type: object }
        '404':
          description: 'Nenhum grupo encontrado'
    post:
      tags:
        - 'Catálogo - Grupos'
      summary: 'Criar grupo de produtos'
      description: 'Cria um novo grupo de produtos'
      operationId: PostCatalogGroups
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GroupRequest'
      responses:
        '200':
          description: 'Grupo criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/groups/{id}':
    get:
      tags:
        - 'Catálogo - Grupos'
      summary: 'Visualizar grupo de produtos'
      description: 'Visualiza os detalhes de um grupo de produtos'
      operationId: GetCatalogGroupsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do valor da variação'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Group' }, { $ref: '#/components/schemas/GroupAdditionalResponse' }] } }
                type: object
        '404':
          description: 'Grupo não encontrado'
    put:
      tags:
        - 'Catálogo - Grupos'
      summary: 'Atualizar grupo de produtos'
      description: 'Atualiza os detalhes de um grupo de produtos'
      operationId: PutCatalogGroupsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GroupRequest'
      responses:
        '200':
          description: 'Grupo criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Grupo não encontrado'
    delete:
      tags:
        - 'Catálogo - Grupos'
      summary: 'Excluir grupo de produtos'
      description: 'Exclui um grupo de produtos'
      operationId: DeleteCatalogGroupsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Grupo excluído com sucesso'
        '404':
          description: 'Grupo não encontrado'
  '/{alias}/catalog/groups/{id}/products':
    get:
      tags:
        - 'Catálogo - Grupos'
      summary: 'Listar produtos associados a um grupo'
      description: 'Lista de produtos associados a um grupo'
      operationId: GetCatalogGroupsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de produtos associados ao grupo'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductGroup' } } }, type: object }
        '404':
          description: 'Grupo não encontrado'
    put:
      tags:
        - 'Catálogo - Grupos'
      summary: 'Associar produtos a um grupo'
      description: 'Associa produtos a um grupo específico'
      operationId: PutCatalogGroupsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                products_ids:
                  description: 'Lista de IDs dos produtos a serem associados ao grupo'
                  type: array
                  items: { type: integer }
                  example: '[1,2,3,4,5]'
              type: object
      responses:
        '200':
          description: 'Produtos associados com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Grupo não encontrado'
    delete:
      tags:
        - 'Catálogo - Grupos'
      summary: 'Excluir produtos de um grupo'
      description: 'Exclui produtos de um grupo específico'
      operationId: DeleteCatalogGroupsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                products_ids:
                  description: 'Lista de IDs dos produtos a serem associados ao grupo'
                  type: array
                  items: { type: integer }
                  example: '[1,2,3,4,5]'
              type: object
      responses:
        '200':
          description: 'Produtos excluídos com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Grupo não encontrado'
  '/{alias}/catalog/looks':
    get:
      tags:
        - 'Catálogo - Looks'
      summary: 'Listar looks'
      description: 'Obtém uma lista de looks'
      operationId: GetCatalogLooks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: includes
          in: query
          description: 'Inclui dados adicionais (ex: products)'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de looks'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Look' }, { $ref: '#/components/schemas/LookAdditionalResponse' }] } }
                  meta: { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
                type: object
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Catálogo - Looks'
      summary: 'Criar look'
      description: 'Cria um novo look'
      operationId: PostCatalogLooks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LookRequest'
      responses:
        '200':
          description: 'Look criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Look'
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/looks/{id}':
    get:
      tags:
        - 'Catálogo - Looks'
      summary: 'Visualizar look'
      description: 'Obtém os detalhes de um look específico'
      operationId: GetCatalogLooksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do look'
          required: true
          schema:
            type: integer
        -
          name: includes
          in: query
          description: 'Inclui dados adicionais (ex: products)'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes do look'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Look' }, { $ref: '#/components/schemas/LookAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Look não encontrado'
    put:
      tags:
        - 'Catálogo - Looks'
      summary: 'Atualizar look'
      description: 'Atualiza um look específico'
      operationId: PutCatalogLooksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do look'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LookRequest'
      responses:
        '200':
          description: 'Look atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Look'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Look não encontrado'
    delete:
      tags:
        - 'Catálogo - Looks'
      summary: 'Excluir look'
      description: 'Exclui um look específico'
      operationId: DeleteCatalogLooksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do look'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Look excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Look não encontrado'
  '/{alias}/catalog/products/{id}/skus':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar SKUs de um produto'
      description: 'Lista todos os SKUs associados a um produto específico'
      operationId: GetCatalogProductsIdSkus
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de SKUs'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Sku' }, { $ref: '#/components/schemas/SkuAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/skus/batch-update-skus':
    put:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Atualizar SKUs em massa'
      description: 'Atualiza múltiplos ou todos SKUs de um produto em uma única operação síncrona ou assincrona, dependendo da quantidade de SKUs a serem atualizados.'
      operationId: PutCatalogProductsIdSkusBatch-update-skus
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchUpdateProductSkusRequest'
      responses:
        '200':
          description: 'Atualização dos SKUs iniciada, com informação se foi sincrona ou assincronamente'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { type: { description: 'Indica se a operação foi síncrona ou assíncrona', type: string, enum: [sync, async] }, updated: { description: 'Número de SKUs atualizados (0 se assíncrono)', type: integer }, status: { description: 'Status da operação em lote', type: string, enum: [queued, processing, completed] } }, type: object }
                type: object
        '400':
          description: 'Já existe uma operação de edição em massa em andamento para este produto.'
        '404':
          description: 'Resource not found'
  '/{alias}/catalog/products/{product}/skus/batch-update-skus-progress':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Progresso da atualização em massa de SKUs de um produto'
      description: 'Retorna o progresso da operação em lote de atualização de SKUs para um produto específico.'
      operationId: GetCatalogProductsProductSkusBatch-update-skus-progress
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Retorna o progresso da operação em lote de atualização de SKUs para um produto específico.'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { total: { description: 'Total de SKUs para processar', type: integer }, processed: { description: 'Quantidade de SKUs já processados', type: integer }, status: { description: 'Status atual da operação', type: string, enum: [queued, processing, completed] }, started_at: { description: 'Data e hora de início da operação', type: string }, updated_at: { description: 'Data e hora de atualização do progresso da operação', type: string }, finished_at: { description: 'Data e hora de término da operação (se concluída)', type: string } }, type: object }
                type: object
        '404':
          description: 'Resource not found'
  '/{alias}/catalog/products/{product}/skus/batch-delete-skus':
    delete:
      tags:
        - 'Modulo - Recurso'
      summary: 'Exclusão em massa de SKUs de um produto'
      description: 'Exclui múltiplos ou todos SKUs de um produto em uma única operação síncrona ou assincrona, dependendo da quantidade de SKUs a serem excluídos.'
      operationId: DeleteCatalogProductsProductSkusBatch-delete-skus
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Recurso'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Retorna o progresso da operação em lote de exclusão de SKUs para um produto específico.'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { type: { description: 'Indica se a operação foi síncrona ou assíncrona', type: string, enum: [sync, async] }, deleted: { description: 'Número de SKUs excluídos (0 se assíncrono)', type: integer }, status: { description: 'Status da operação em lote', type: string, enum: [queued, processing, completed] } }, type: object }
                type: object
        '400':
          description: 'Já existe uma operação de exclusão em massa em andamento para este produto.'
        '404':
          description: 'Recurso não encontrado'
  '/{alias}/catalog/products/{product}/skus/batch-delete-skus-progress':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Progresso da exclusão em massa de SKUs de um produto'
      description: 'Retorna o progresso da operação em lote de exclusão de SKUs para um produto específico.'
      operationId: GetCatalogProductsProductSkusBatch-delete-skus-progress
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Retorna o progresso da operação em lote de exclusão de SKUs para um produto específico.'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { total: { description: 'Total de SKUs para processar', type: integer }, processed: { description: 'Quantidade de SKUs já processados', type: integer }, status: { description: 'Status atual da operação', type: string, enum: [queued, processing, completed] }, started_at: { description: 'Data e hora de início da operação', type: string }, updated_at: { description: 'Data e hora de atualização do progresso da operação', type: string }, finished_at: { description: 'Data e hora de término da operação (se concluída)', type: string } }, type: object }
                type: object
        '404':
          description: 'Recurso não encontrado'
  '/{alias}/catalog/products/{id}/similars':
    get:
      tags:
        - 'Catálogo - Produtos relacionados'
      summary: 'Listar produtos relacionados'
      description: 'Lista todos os produtos relacionados a um produto específico'
      operationId: GetCatalogProductsIdSimilars
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de produtos relacionados'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Product' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto não encontrado'
    put:
      tags:
        - 'Catálogo - Produtos relacionados'
      summary: 'Ordenar produtos relacionados'
      description: 'Atualiza a ordem dos produtos relacionados a um produto específico'
      operationId: PutCatalogProductsIdSimilars
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Ordem dos produtos relacionados'
        required: true
        content:
          application/json:
            schema:
              required:
                - orders
              properties:
                orders:
                  description: 'Ordem dos produtos relacionados'
                  type: object
                  example: ['101941', '101940', '101938', '101934', '101933', '101932', '1107']
              type: object
      responses:
        '200':
          description: 'Ordem dos produtos relacionados atualizada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Ordem dos produtos relacionados atualizada com sucesso' }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto não encontrado'
    delete:
      tags:
        - 'Catálogo - Produtos relacionados'
      summary: 'Excluir produtos relacionados'
      description: 'Exclui a associação de produtos relacionados de um produto específico'
      operationId: DeleteCatalogProductsIdSimilars
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'IDs dos produtos a serem desrelacionados'
        required: true
        content:
          application/json:
            schema:
              required:
                - products_ids
              properties:
                products_ids:
                  description: 'IDs dos produtos a serem desrelacionados'
                  type: array
                  items: { type: integer }
                  example: [1, 2, 3, 4, 5]
              type: object
      responses:
        '200':
          description: 'Produtos relacionados desassociados com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/similars/batch':
    post:
      tags:
        - 'Catálogo - Produtos relacionados'
      summary: 'Relacionar produtos em lote'
      description: 'Associa produtos relacionados entre si em uma única chamada'
      operationId: PostCatalogProductsSimilarsBatch
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'IDs dos produtos que se relacionarão entre si'
        required: true
        content:
          application/json:
            schema:
              required:
                - data
              properties:
                data:
                  description: 'IDs dos produtos que se relacionarão entre si'
                  type: array
                  items: { type: integer }
                  example: [1, 2, 3, 4, 5]
              type: object
      responses:
        '200':
          description: 'Produtos relacionados associados em batch com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { type: integer }, example: [1, 2, 3, 4, 5] }
                type: object
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/products':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar produtos'
      description: 'Retorna uma lista de produtos'
      operationId: GetCatalogProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - dates
                - brand
                - affiliation
                - extras
                - texts
                - seo
                - filters
                - filtersSearch
                - flags
                - variations
                - categories
                - prices
                - images
                - skus
                - firstImage
                - searchAttributes
                - reviews
                - combos
                - collections
                - shortCollections
                - groups
                - similarsIds
                - categoriesIds
                - seller
                - services
                - spreadsheet
                - metadata
              example: '?include=dates,brand'
        -
          $ref: '#/components/parameters/ProductCriteria'
      responses:
        '200':
          description: 'Lista de produtos'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Product' }, { $ref: '#/components/schemas/ProductAdditionalResponse' }] } }
                  meta: { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
                type: object
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Criar produto'
      description: 'Cria um novo produto'
      operationId: PostCatalogProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductRequest'
      responses:
        '200':
          description: 'Produto criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
  '/{alias}/catalog/products/{id}':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Visualizar um produto'
      description: 'Retorna informações do produto específico'
      operationId: GetCatalogProductsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - dates
                - brand
                - affiliation
                - extras
                - texts
                - seo
                - filters
                - filtersSearch
                - flags
                - variations
                - categories
                - prices
                - images
                - skus
                - firstImage
                - searchAttributes
                - reviews
                - combos
                - collections
                - shortCollections
                - groups
                - similarsIds
                - categoriesIds
                - seller
                - services
                - spreadsheet
                - metadata
              example: '?include=dates,brand'
      responses:
        '200':
          description: 'Detalhes do Produto'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Product' }, { $ref: '#/components/schemas/ProductAdditionalResponse' }] } }
                type: object
        '404':
          description: 'Produto não encontrado'
    put:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Atualizar produto'
      description: 'Atualiza um produto específico'
      operationId: PutCatalogProductsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductRequest'
      responses:
        '200':
          description: 'Produto atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
        '404':
          description: 'Produto não encontrado'
    delete:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Excluir produto'
      description: 'Exclui um produto específico'
      operationId: DeleteCatalogProductsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Produto excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/skus/order':
    put:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Atualizar ordem dos SKUs de um produto'
      description: 'Atualiza a ordem dos SKUs associados a um produto específico'
      operationId: PutCatalogProductsIdSkusOrder
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'IDs dos SKUs na ordem desejada'
        required: true
        content:
          application/json:
            schema:
              properties:
                orders:
                  description: 'Array de IDs dos SKUs na ordem desejada'
                  type: array
                  items: { type: integer }
              type: object
      responses:
        '200':
          description: 'Ordem dos SKUs atualizada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Sku' }
                  - { $ref: '#/components/schemas/SkuAdditionalResponse' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/combos':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar combos de um produto'
      description: 'Retorna uma lista de combos associados a um produto específico'
      operationId: GetCatalogProductsIdCombos
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de combos retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Combo' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/flags':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar selos de um produto'
      description: 'Retorna uma lista de selos associados a um produto específico'
      operationId: GetCatalogProductsIdFlags
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de selos retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Flag' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/groups':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar grupos de um produto'
      description: 'Retorna uma lista de grupos associados a um produto específico'
      operationId: GetCatalogProductsIdGroups
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de grupos retornada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Group' }, { $ref: '#/components/schemas/GroupAdditionalResponse' }] } }
                  meta: { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
                type: object
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/marketplaces/attributes':
    get:
      tags:
        - 'Marketplaces - Atributos'
      summary: 'Listar atributos de um produto no Marketplace'
      description: 'Lista todos os atributos de um produto no marketplace'
      operationId: GetCatalogProductsIdMarketplacesAttributes
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de atributos do produto obtida com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceAttribute' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto não encontrado'
    put:
      tags:
        - 'Marketplaces - Atributos'
      summary: 'Atualizar atributos de um produto'
      description: 'Atualiza os atributos de um produto no marketplace'
      operationId: PutCatalogProductsIdMarketplacesAttributes
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SyncAttributesRequest'
      responses:
        '200':
          description: 'Atributos do produto atualizados com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarketplaceAttribute'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/batch-edit':
    put:
      tags:
        - 'Catálogo - Atualização em massa'
      summary: 'Atualizar produtos em lote'
      description: 'Permite a atualização em massa de produtos do catálogo, permitindo modificar atributos específicos, como ativação/inativação ou valores de preços, em múltiplos itens simultaneamente.'
      operationId: PutCatalogProductsBatch-edit
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - attribute
                - value
                - restrictions
              properties:
                attribute:
                  description: 'Atributo do produto a ser atualizado. Valores possíveis: ''active'', ''price_sale'', ''price_discount'', ''all_prices''.'
                  type: string
                  example: price_sale
                operation_type:
                  description: 'Tipo de operação a ser aplicada sobre o atributo. Obrigatório para atributos de preço. Valores possíveis: ''increment'' ou ''decrement''.'
                  type: string
                  example: increment
                value_type:
                  description: 'Tipo do valor aplicado. Obrigatório para atributos de preço. Valores possíveis: ''fixed'' ou ''percent''.'
                  type: string
                  example: fixed
                value:
                  description: 'Se attribute for ''active'', value deve ser boolean; se for ''price_sale'', ''price_discount'' ou ''all_prices'', value deve ser number.'
                  example: 2
                  oneOf: [{ type: number, example: 2 }, { type: boolean, example: true }]
                restrictions:
                  description: 'Objeto contendo restrições para a atualização em lote, como total de produtos afetados.'
                  properties: { include: { description: 'Itens que devem ser incluídos na operação de atualização.', properties: { products_ids: { type: array, items: { type: integer } }, brands_ids: { type: array, items: { type: integer } }, collections_ids: { type: array, items: { type: integer } }, categories_ids: { type: array, items: { type: integer } } }, type: object }, exclude: { description: 'Itens que devem ser excluídos da operação de atualização.', properties: { products_ids: { type: array, items: { type: integer } }, brands_ids: { type: array, items: { type: integer } }, collections_ids: { type: array, items: { type: integer } }, categories_ids: { type: array, items: { type: integer } } }, type: object } }
                  type: object
              type: object
      responses:
        '200':
          description: 'Produtos atualizados com sucesso'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Produtos atualizados com sucesso' }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produtos não encontrados'
  '/{alias}/catalog/products/{id}/comments':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar comentários de um produto'
      description: 'Retorna uma lista de comentários associados a um produto específico'
      operationId: GetCatalogProductsIdComments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de comentários retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductComment' } }, answer: { oneOf: [{ $ref: '#/components/schemas/ProductCommentAnswer' }], nullable: true, type: object } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/reviews':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar avaliações de um produto'
      description: 'Retorna uma lista de avaliações associadas a um produto específico'
      operationId: GetCatalogProductsIdReviews
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de avaliações retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductReview' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/collections':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar coleções que um produto pertence'
      description: 'Retorna uma lista de coleções às quais um produto específico pertence'
      operationId: GetCatalogProductsIdCollections
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de coleções retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CollectionsWithRelations' } } }, type: object }
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/promotions':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar promoções que um produto pertence'
      description: 'Retorna uma lista de promoções às quais um produto específico pertence'
      operationId: GetCatalogProductsIdPromotions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de promoções retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Promotion' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/recommendations':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar recomendações para um produto'
      description: 'Retorna uma lista de produtos recomendados com base no produto específico'
      operationId: GetCatalogProductsIdRecommendations
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de recomendações retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductRecommendation' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/stocks':
    get:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Listar estoques de todos os SKUs de um produto'
      description: 'Obtém informações de estoque de todos os SKUs de um produto específico'
      operationId: GetCatalogProductsIdStocks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Estoques listados com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductStockResponse' } } }, type: object }
        '404':
          description: 'Produto não encontrado'
  '/{alias}/catalog/products/{id}/stocks/sync':
    post:
      tags:
        - 'Catálogo - Sincronizar estoques'
      summary: 'Sincronizar estoques'
      description: 'Permite a sincronização de estoques de um produto específico'
      operationId: PostCatalogProductsIdStocksSync
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                -
                  properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductStockResponse' } } }
                  type: object
      responses:
        '200':
          description: 'Estoques sincronizados com sucesso'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Estoques sincronizados com sucesso' }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Produto ou SKU não encontrado'
  '/{alias}/catalog/products/{id}/duplicate':
    post:
      tags:
        - 'Catálogo - Produtos'
      summary: 'Duplicar produto'
      description: 'Cria uma cópia duplicada de um produto existente com base no ID fornecido'
      operationId: PostCatalogProductsIdDuplicate
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Produto duplicado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Produto duplicado com sucesso' }
                type: object
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/products/export/marketplace':
    get:
      tags:
        - 'Marketplaces - Anúncios'
      summary: 'Criar anúncio'
      description: 'Exporta produtos do catálogo para uma conta de Marketplace específica'
      operationId: GetCatalogProductsExportMarketplace
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: 'id[]'
          in: query
          description: 'ID do produto (pode ser passado múltiplas vezes para exportar vários produtos)'
          required: true
          schema:
            type: array
            items:
              type: integer
        -
          name: account_id
          in: query
          description: 'ID da conta de Marketplace para onde os produtos serão exportados'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Anúncio criado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceAccount' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/public/catalog/banners':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações de banners'
      description: 'Retorna as Informações dos banners'
      operationId: GetPublicCatalogBanners
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações de banners'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BannersPublic'
      security: []
  '/{alias}/public/catalog/brands':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar marcas da loja'
      description: 'Retorna as informações públicas das marcas de uma loja'
      operationId: GetPublicCatalogBrands
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: active
          in: query
          description: 'Filtrar por marcas ativas - exemplo: `/{alias}/public/catalog/brands?active=true`'
          required: false
          schema:
            type: boolean
        -
          name: id
          in: query
          description: 'ID das marcas - exemplo: `/{alias}/public/catalog/brands?id[]=1&id[]=2`'
          required: false
          schema:
            type: array
            items:
              type: integer
        -
          name: q
          in: query
          description: 'Nome das marcas - exemplo: `/{alias}/public/catalog/brands?q=Marca1`'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: 'Informações públicas das marcas da Loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandSearch'
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/public/catalog/products/{productId}/bundles':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar kits associados ao produto'
      description: 'Retorna os kits que contêm o produto informado, incluindo os demais produtos que compõem cada kit.'
      operationId: GetPublicCatalogProductsProductIdBundles
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: productId
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
        -
          name: page
          in: query
          description: 'Número da página'
          required: false
          schema:
            type: integer
        -
          name: include_inactive
          in: query
          description: 'Quando true, retorna todos os kits incluindo os inativos. Por padrão retorna apenas kits ativos.'
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: 'Retorna os kits associados ao produto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bundles'
      security: []
  '/{alias}/public/catalog/categories{?id[]={categoryId}}':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar Categorias de uma loja'
      description: 'Retorna as Informações públicas de categorias de uma loja'
      operationId: 'GetPublicCatalogCategories?id[]={categoryId}'
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: 'id[]'
          in: query
          description: 'ID da categoria - exemplo: `/{alias}/public/catalog/categories?id[]=5287&id[]=7821`'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Informações públicas das categorias da Loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryPublic'
        '404':
          description: 'Categorias não encontradas'
      security: []
  '/{alias}/public/catalog/collections{?id[]={collectionId}}':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar Coleções de uma loja'
      description: 'Retorna as Informações públicas das coleções'
      operationId: 'GetPublicCatalogCollections?id[]={collectionId}'
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: 'id[]'
          in: query
          description: 'ID da coleção - exemplo: `/{alias}/public/catalog/collections?id[]=5287&id[]=7821`'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações públicas de uma Coleção'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CollectionPublic'
        '404':
          description: 'Coleção não encontrada'
      security: []
  '/{alias}/public/catalog/collections/active':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar coleções ativas de uma loja'
      description: 'Retorna as coleções ativas e dentro do período de validade, com banners incluídos por padrão'
      operationId: GetPublicCatalogCollectionsActive
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Número da página (padrão: 1)'
          required: false
          schema:
            type: integer
            minimum: 1
        -
          name: limit
          in: query
          description: 'Quantidade de itens por página, entre 1 e 100 (padrão: 16)'
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
        -
          name: featured
          in: query
          description: 'Filtra por destaque: `1` retorna apenas coleções em destaque, `0` apenas fora de destaque. Ausente ou inválido retorna todas.'
          required: false
          schema:
            type: integer
            enum:
              - 0
              - 1
        -
          name: q
          in: query
          description: 'Busca por nome da coleção (contém, case-insensitive). Máximo de 100 caracteres.'
          required: false
          schema:
            type: string
            maxLength: 100
      responses:
        '200':
          description: 'Lista de coleções ativas da loja'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { properties: { id: { type: integer, example: 5287 }, name: { type: string, example: 'Promoção de Verão' }, url: { type: string, format: uri, example: 'https://loja.yampi.com.br/promocao-de-verao/l' }, url_path: { type: string, example: /promocao-de-verao/l }, banners: { properties: { data: { type: array, items: { $ref: '#/components/schemas/BannersPublic' } } }, type: object } }, type: object } }
                type: object
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/public/catalog/products/comments':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações das dúvidas do produto'
      description: 'Retorna as Informações das dúvidas do produto'
      operationId: GetPublicCatalogProductsComments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'id do produto'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações das dúvidas no produto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentPublic'
      security: []
  '/{alias}/public/catalog/freebies':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar brindes ativos da loja'
      description: 'Retorna todos os brindes ativos e vigentes da loja'
      operationId: GetPublicCatalogFreebies
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de brindes ativos da loja'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { $ref: '#/components/schemas/Freebie' } }
                type: object
      security: []
  '/{alias}/public/catalog/pixels':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações dos pixels loja'
      description: 'Retorna as Informações dos pixels da loja'
      operationId: GetPublicCatalogPixels
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações de pixels da loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PixelsPublic'
      security: []
  '/{alias}/public/catalog/products/{productId}/discounts':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar descontos ativos de um produto'
      description: 'Retorna os descontos progressivos e compre X leve Y ativos que se aplicam ao produto informado'
      operationId: GetPublicCatalogProductsProductIdDiscounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: productId
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Descontos ativos do produto'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { progressive_discounts: { type: array, items: { properties: { id: { type: integer, example: 10 }, min_value: { type: number, format: float, example: 0 }, max_value: { type: number, format: float, example: 500 }, percent: { type: number, format: float, example: 10 }, min_quantity: { type: integer, example: 2 }, discount_type: { type: string, example: amount }, accumulate: { type: boolean, example: false }, start_at: { $ref: '#/components/schemas/BaseTimestamp' }, end_at: { $ref: '#/components/schemas/BaseTimestamp' } }, type: object } }, buy_x_get_y: { type: array, items: { properties: { id: { type: integer, example: 42 }, name: { type: string, example: 'Compre 2 leve 3' }, entry_condition_type: { type: string, example: quantity }, entry_condition_value: { type: number, format: float, example: 2 }, discount_method: { type: string, example: percent }, discount_value: { type: number, format: float, example: 100 }, accumulate: { type: boolean, example: false }, start_at: { $ref: '#/components/schemas/BaseTimestamp' }, end_at: { $ref: '#/components/schemas/BaseTimestamp' }, specification: { properties: { cart_usage_limit: { type: integer, example: 0 }, get_products_quantity: { type: integer, example: 1 }, get_products: { properties: { products: { type: array, items: { properties: { id: { type: integer }, name: { type: string }, slug: { type: string }, image_url: { type: string, nullable: true }, price_sale: { type: number, nullable: true }, price_discount: { type: number, nullable: true } }, type: object } }, brands: { type: array, items: { properties: { id: { type: integer }, name: { type: string } }, type: object } }, categories: { type: array, items: { properties: { id: { type: integer }, name: { type: string } }, type: object } }, collections: { type: array, items: { properties: { id: { type: integer }, name: { type: string } }, type: object } } }, type: object } }, type: object, nullable: true } }, type: object } } }, type: object }
                type: object
      security: []
  '/{alias}/public/catalog/products/{slug}':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações públicas do produto'
      description: 'Retorna as Informações públicas de um Produto'
      operationId: GetPublicCatalogProductsSlug
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: slug
          in: path
          description: 'slug do produto'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações públicas de um Produto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductPublicGroup'
        '404':
          description: 'Produto não encontrado'
      security: []
  '/{alias}/public/catalog/products/{id}/groups':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações dos grupos do produto'
      description: 'Retorna as Informações dos produtos do grupo'
      operationId: GetPublicCatalogProductsIdGroups
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'id do produto'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações de grupos de produtos'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductPublicGroup'
        '404':
          description: 'Produto não encontrado'
      security: []
  '/{alias}/public/catalog/products/{id}/flags':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações dos selos do produto'
      description: 'Retorna as Informações dos selos do produto'
      operationId: GetPublicCatalogProductsIdFlags
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'id do produto'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações de selos no produto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductPublicFlag'
        '404':
          description: 'Produto não encontrado'
      security: []
  '/{alias}/public/catalog/products/{id}/combos':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações de Compre Junto do produto'
      description: 'Retorna as Informações de Compre Junto do produto'
      operationId: GetPublicCatalogProductsIdCombos
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'id do produto'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações de Compre Junto do produto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComboPublic'
        '404':
          description: 'Produto não encontrado'
      security: []
  '/{alias}/public/catalog/products/{id}/similars':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar produtos relacionados'
      description: 'Retorna as Informações dos produtos relacionados'
      operationId: GetPublicCatalogProductsIdSimilars
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'id do produto'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações de Produtos similares'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductPublicGroup'
        '404':
          description: 'Produto não encontrado'
      security: []
  '/{alias}/public/catalog/products/{id}/pixels':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações dos pixels do produto'
      description: 'Retorna as Informações dos pixels do produto'
      operationId: GetPublicCatalogProductsIdPixels
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'id do produto'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações de pixels no produto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PixelsPublic'
        '404':
          description: 'Pixel não encontrado'
      security: []
  '/{alias}/public/catalog/products/{id}/installments':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações dos parcelas do produto'
      description: 'Retorna as Informações das parcelas do produto'
      operationId: GetPublicCatalogProductsIdInstallments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'id do produto'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InstallmentsPublicRequest'
      responses:
        '200':
          description: 'Retorna as Informações das parcelas do produto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstallmentsPublic'
        '404':
          description: 'Produto não encontrado'
      security: []
  '/{alias}/public/catalog/products/{id}/filters':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Visualizar informações dos filtros do produto'
      description: 'Retorna as informações dos filtros do produto'
      operationId: GetPublicCatalogProductsIdFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'id do produto'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna as Informações de filtros no produto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FilterPublic'
        '404':
          description: 'Produto não encontrado'
      security: []
  '/{alias}/public/catalog/products/{productId}/collections':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar Coleções de uma loja por produto'
      description: 'Retorna as informações públicas das coleções associadas a um produto'
      operationId: GetPublicCatalogProductsProductIdCollections
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: productId
          in: path
          description: 'ID do produto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de coleções públicas associadas ao produto'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/CollectionPublic' }] } } }, type: object }
        '404':
          description: 'Produto não encontrado'
      security: []
  '/{alias}/public/catalog/products/reviews':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar as avaliações dos produtos de uma loja'
      description: 'Retorna as informações públicas das avaliações dos produtos de uma loja'
      operationId: GetPublicCatalogProductsReviews
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Informações públicas das avaliações dos produtos de uma loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicProductReview'
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/public/catalog/products/reviews/ratings':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar as notas de avaliações dos produtos de uma loja'
      description: 'Retorna as informações públicas das notas em avaliações dos produtos de uma loja'
      operationId: GetPublicCatalogProductsReviewsRatings
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Informações públicas das notas em avaliações dos produtos de uma loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicRating'
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/public/catalog/reviews':
    get:
      tags:
        - 'Público - Catálogo'
      summary: 'Listar avaliações de uma loja'
      description: 'Retorna as informações públicas das avaliações'
      operationId: GetPublicCatalogReviews
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'IDs dos reviews. Enviar como array:`?id[]=5287&id[]=7821`'
          required: true
          style: form
          explode: true
          schema:
            type: array
            items:
              type: integer
              example: 42
      responses:
        '200':
          description: 'Retorna as Informações públicas de uma avaliação'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicProductReview'
        '404':
          description: 'Avaliação não encontrada'
      security: []
  '/{alias}/catalog/reviews':
    get:
      tags:
        - 'Catálogo - Avaliações de produtos'
      summary: 'Listar avaliações'
      description: 'Obtém uma lista de avaliações de produtos'
      operationId: GetCatalogReviews
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir informações adicionais, como detalhes do produto'
          required: false
          schema:
            type: string
            enum:
              - product
      responses:
        '200':
          description: 'Lista de avaliações obtida com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductReview' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Review não encontrado'
    post:
      tags:
        - 'Catálogo - Avaliações de produtos'
      summary: 'Criar review'
      description: 'Cria uma nova review para um produto'
      operationId: PostCatalogReviews
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReviewRequest'
      responses:
        '200':
          description: 'Review criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductReview'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Review não encontrado'
  '/{alias}/catalog/reviews/{id}':
    get:
      tags:
        - 'Catálogo - Avaliações de produtos'
      summary: 'Visualizar review'
      description: 'Obtém os detalhes de uma review do produto'
      operationId: GetCatalogReviewsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da review'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do review'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductReview'
        '404':
          description: 'Review não encontrado'
    patch:
      tags:
        - 'Catálogo - Avaliações de produtos'
      summary: 'Aprovar ou rejeitar uma review do produto'
      description: 'Aprova ou desaprova uma review do produto'
      operationId: PatchCatalogReviewsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da review'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                approved:
                  description: 'Indica se o review foi aprovado'
                  type: boolean
              type: object
      responses:
        '200':
          description: 'Review atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductReview'
        '404':
          description: 'Review não encontrado'
  '/{alias}/catalog/skus/{skuId}/images':
    get:
      tags:
        - 'Catálogo - Imagens'
      summary: 'Listar imagens de um SKU'
      description: 'Retorna a lista de imagens associadas a um SKU específico'
      operationId: GetCatalogSkusSkuIdImages
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de imagens do SKU encontrada'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/SkuPhoto' } } }, type: object }
        '404':
          description: 'SKU não encontrado'
    post:
      tags:
        - 'Catálogo - Imagens'
      summary: 'Criar imagens de um SKU'
      description: 'Adiciona novas imagens a um SKU específico. Há disponíveis três formas de upload através do parâmetro `upload_option`: resize, crop e fill_canvas. A imagem pode ser enviada via URL ou upload direto'
      operationId: PostCatalogSkusSkuIdImages
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Dados da imagem a ser criada'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SkuPhotoRequest'
      responses:
        '200':
          description: 'Imagens criadas com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/SkuPhoto' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'SKU não encontrado'
  '/{alias}/catalog/skus/{skuId}/images/{id}':
    get:
      tags:
        - 'Catálogo - Imagens'
      summary: 'Visualizar imagem de um SKU'
      description: 'Visualiza uma imagem específica de um SKU'
      operationId: GetCatalogSkusSkuIdImagesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID da imagem'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da imagem'
          content:
            application/json:
              schema: {  }
        '404':
          description: 'Imagem ou SKU não encontrados'
    delete:
      tags:
        - 'Catálogo - Imagens'
      summary: 'Excluir imagem de um SKU'
      description: 'Remove uma imagem específica de um SKU'
      operationId: DeleteCatalogSkusSkuIdImagesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID da imagem a ser excluída'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Imagem excluída com sucesso'
        '404':
          description: 'Imagem ou SKU não encontrados'
  '/{alias}/catalog/skus/{skuId}/images/order':
    put:
      tags:
        - 'Catálogo - Imagens'
      summary: 'Atualizar ordem das imagens de um SKU'
      description: 'Atualiza a ordem de exibição das imagens de um SKU'
      operationId: PutCatalogSkusSkuIdImagesOrder
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Dados para atualizar a ordem das imagens'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SkuPhotoOrderRequest'
      responses:
        '200':
          description: 'Ordem das imagens atualizada com sucesso'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Imagem ou SKU não encontrados'
  '/{alias}/catalog/skus':
    get:
      tags:
        - 'Catálogo - SKUs'
      summary: 'Listar SKUs'
      description: 'Retorna uma lista de SKUs disponíveis'
      operationId: GetCatalogSkus
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: stock_quantity
          in: query
          description: 'Filtrar por quantidade de estoque'
          schema:
            type: integer
        -
          name: stock_min_quantity
          in: query
          description: 'Filtrar por quantidade mínima de estoque'
          schema:
            type: integer
      responses:
        '200':
          description: 'SKUs encontrados com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Sku' }, { $ref: '#/components/schemas/SkuAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'SKUs não encontrados'
    post:
      tags:
        - 'Catálogo - SKUs'
      summary: 'Criar SKU'
      description: 'Cria um novo SKU para um produto'
      operationId: PostCatalogSkus
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SkuRequest'
      responses:
        '200':
          description: 'SKU criado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Sku' }
                  - { $ref: '#/components/schemas/SkuAdditionalResponse' }
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/skus/{id}':
    put:
      tags:
        - 'Catálogo - SKUs'
      summary: 'Atualizar SKU'
      description: 'Atualiza o SKU de um produto'
      operationId: PutCatalogSkusId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SkuRequest'
      responses:
        '200':
          description: 'SKU atualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Sku' }
                  - { $ref: '#/components/schemas/SkuAdditionalResponse' }
        '400':
          description: 'Requisição inválida'
    delete:
      tags:
        - 'Catálogo - SKUs'
      summary: 'Excluir SKU'
      description: 'Exclui o SKU de um produto'
      operationId: DeleteCatalogSkusId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'SKU excluído com sucesso'
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/stock-notifications':
    get:
      tags:
        - 'Catálogo - Notificações de estoque'
      summary: 'Listar notificações de estoque'
      description: 'Lista as notificações de estoque'
      operationId: GetCatalogStock-notifications
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Listagem de notificações de estoque'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/StockNotification' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
    post:
      tags:
        - 'Catálogo - Notificações de estoque'
      summary: 'Criar notificação de estoque'
      description: 'Cria uma nova notificação de estoque'
      operationId: PostCatalogStock-notifications
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockNotificationRequest'
      responses:
        '200':
          description: 'Notificação de estoque criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockNotification'
        '400':
          description: 'Requisição inválida'
  '/{alias}/catalog/stock-notifications/{id}':
    get:
      tags:
        - 'Catálogo - Notificações de estoque'
      summary: 'Visualiza notificação de estoque'
      description: 'Visualiza os detalhes de notificação de estoque'
      operationId: GetCatalogStock-notificationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da notificação de estoque'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da notificação de estoque'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockNotification'
    put:
      tags:
        - 'Catálogo - Notificações de estoque'
      summary: 'Atualizar notificação de estoque'
      description: 'Atualiza uma notificação de estoque existente'
      operationId: PutCatalogStock-notificationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da notificação de estoque'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockNotificationRequest'
      responses:
        '200':
          description: 'Notificação de estoque atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockNotification'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Notificação de estoque não encontrada'
    delete:
      tags:
        - 'Catálogo - Notificações de estoque'
      summary: 'Excluir notificação de estoque'
      description: 'Exclui uma notificação de estoque existente'
      operationId: DeleteCatalogStock-notificationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da notificação de estoque'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Notificação de estoque excluída com sucesso'
        '404':
          description: 'Notificação de estoque não encontrada'
  '/{alias}/catalog/skus/{skuId}/stocks':
    get:
      tags:
        - 'Catálogo - Estoques de SKU'
      summary: 'Listar estoques'
      description: 'Obtém a lista de estoques associados a um SKU específico'
      operationId: GetCatalogSkusSkuIdStocks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de estoques de um SKU'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductStock' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'SKU não encontrado'
    post:
      tags:
        - 'Catálogo - Estoques de SKU'
      summary: 'Criar estoque de um SKU'
      description: 'Cria um novo estoque associado a um SKU específico'
      operationId: PostCatalogSkusSkuIdStocks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CatalogStockRequest'
      responses:
        '200':
          description: 'Estoque criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductStock'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'SKU não encontrado'
  '/{alias}/catalog/skus/{skuId}/stocks/{id}':
    put:
      tags:
        - 'Catálogo - Estoques de SKU'
      summary: 'Atualizar estoque de um SKU'
      description: 'Atualiza os detalhes de um estoque específico associado a um SKU'
      operationId: PutCatalogSkusSkuIdStocksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do stock'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CatalogStockRequest'
      responses:
        '200':
          description: 'Estoque atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductStock'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'SKU ou stock não encontrados'
    delete:
      tags:
        - 'Catálogo - Estoques de SKU'
      summary: 'Excluir estoque de um SKU'
      description: 'Exclui um estoque específico associado a um SKU'
      operationId: DeleteCatalogSkusSkuIdStocksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: skuId
          in: path
          description: 'ID do SKU'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do stock'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Estoque excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'SKU ou stock não encontrados'
  '/{alias}/catalog/skus/stocks/{stock}':
    get:
      tags:
        - 'Catálogo - Estoques de SKU'
      summary: 'Listar SKUs por estoque'
      description: 'Retorna os dados básicos dos SKUs que possuem vínculo com o estoque informado'
      operationId: GetCatalogSkusStocksStock
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: stockId
          in: path
          description: 'ID do estoque'
          required: true
          schema:
            type: integer
        -
          name: stock_status
          in: query
          description: 'Filtra os SKUs pelo status do estoque'
          required: false
          schema:
            type: string
            enum:
              - in_stock
              - out_of_stock
              - low_stock
      responses:
        '200':
          description: 'Lista de SKUs do estoque'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/SkuByStock' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Estoque não encontrado'
  '/{alias}/checkout/banks':
    get:
      tags:
        - 'Checkout - Bancos'
      summary: 'Listar bancos'
      description: 'Listar os bancos'
      operationId: GetCheckoutBanks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de bancos'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Bank' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/checkout/banks/{id}':
    get:
      tags:
        - 'Checkout - Bancos'
      summary: 'Visualizar banco'
      description: 'Visualiza as informações de um banco específico'
      operationId: GetCheckoutBanksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do banco'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do banco'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/Bank' }
                type: object
        '400':
          description: 'Requisição inválida'
  '/{alias}/checkout/carts':
    get:
      tags:
        - 'Checkout - Carrinhos abandonados'
      summary: 'Listar carrinhos abandonados'
      description: 'listas os carrinhos abandonados com filtros personalizados'
      operationId: GetCheckoutCarts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - customer
                - payment
                - address
                - promocode
                - items
                - seller
                - transactions
                - whatsapp
                - whatsapp_app
                - spreadsheet
                - metadata
                - search
                - emails
              example: '?include=customer,payment,address'
        -
          $ref: '#/components/parameters/CartCriteria'
      responses:
        '200':
          description: 'Lista de carrinhos abandonados'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Cart' }, { $ref: '#/components/schemas/CartAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Carrinhos abandonados não encontrados'
  '/{alias}/checkout/carts/{id}/transactions':
    get:
      tags:
        - 'Checkout - Carrinhos abandonados'
      summary: 'Listar dados de transações de carrinhos abandonados'
      description: 'Detalha as transações relacionadas a um carrinho abandonado específico'
      operationId: GetCheckoutCartsIdTransactions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do carrinho'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes das transações de um carrinho abandonado'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Transaction' }, { $ref: '#/components/schemas/TransactionAdditionalResponse' }] } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Estatísticas não encontradas'
  '/{alias}/checkout/gateways':
    get:
      tags:
        - 'Checkout - Gateways de pagamento'
      summary: 'Listar gateways de pagamento'
      description: 'Lista as informações dos gateways de pagamento'
      operationId: GetCheckoutGateways
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de gateways de pagamento'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CheckoutGateway' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
  '/{alias}/checkout/gateways/{gatewayAlias}':
    get:
      tags:
        - 'Checkout - Gateways de pagamento'
      summary: 'Visualizar gateway de pagamento'
      description: 'Visualiza as informações de um gateways de pagamento específico'
      operationId: GetCheckoutGatewaysGatewayAlias
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: gatewayAlias
          in: path
          description: 'Alias do gateway de pagamento'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes do gateway de pagamento'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { $ref: '#/components/schemas/CheckoutGateway' } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Gateway de pagamento não encontrado'
  '/{alias}/checkout/payments/{paymentId}/config':
    get:
      tags:
        - 'Checkout - Configurações de pagamentos'
      summary: 'Listar configurações de pagamento'
      description: 'Lista as configurações de um tipo de pagamento específico'
      operationId: GetCheckoutPaymentsPaymentIdConfig
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes das configurações de pagamento'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutPaymentConfig'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Configurações de pagamento não encontradas'
    post:
      tags:
        - 'Checkout - Configurações de pagamentos'
      summary: 'Criar configuração de pagamento'
      description: 'Cria uma nova configuração para um tipo de pagamento específico com base nos dados fornecidos'
      operationId: PostCheckoutPaymentsPaymentIdConfig
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - payment_id
                - affiliation_id
                - active
                - default_display
              properties:
                payment_id:
                  type: integer
                  example: 6
                affiliation_id:
                  type: integer
                  example: 3
                active:
                  type: boolean
                  example: true
                default_display:
                  type: boolean
                  example: false
                accumulate_discount:
                  type: boolean
                  example: false
                ignore_promotions:
                  type: boolean
                  example: false
                percent_discount:
                  type: number
                  format: float
                  example: 0
                min_installment_value:
                  type: number
                  format: float
                  example: 25
                max_installments_without_tax:
                  type: integer
                  example: 1
                billet_expire_days:
                  type: integer
                  example: 1
              type: object
      responses:
        '201':
          description: 'Configuração de pagamento criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutPaymentConfig'
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Forma de pagamento não encontrada'
  '/{alias}/checkout/payments/{paymentId}/config/{id}':
    get:
      tags:
        - 'Checkout - Configurações de pagamentos'
      summary: 'Visualizar configuração de pagamento'
      description: 'Visualiza as configurações de um tipo de pagamento específico'
      operationId: GetCheckoutPaymentsPaymentIdConfigId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID da configuração de pagamento'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Configuração de pagamento visualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutPaymentConfig'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Configuração de pagamento não encontrada'
    put:
      tags:
        - 'Checkout - Configurações de pagamentos'
      summary: 'Atualizar configuração de pagamento'
      description: 'Atualiza as configurações de um tipo de pagamento específico'
      operationId: PutCheckoutPaymentsPaymentIdConfigId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID da configuração de pagamento'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckoutPaymentConfig'
      responses:
        '200':
          description: 'Configuração de pagamento atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutPaymentConfig'
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Configuração de pagamento não encontrada'
    delete:
      tags:
        - 'Checkout - Configurações de pagamentos'
      summary: 'Excluir configuração de pagamento'
      description: 'Excluir as configurações de um tipo de pagamento específico'
      operationId: DeleteCheckoutPaymentsPaymentIdConfigId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID da configuração de pagamento'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Configuração de pagamento excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Configuração de pagamento não encontrada'
  '/{alias}/checkout/payments/{paymentId}/installments':
    get:
      tags:
        - 'Checkout - Parcelamento'
      summary: 'Listar parcelamentos de um pagamento'
      description: 'Lista as parcelas de um tipo de pagamento específico'
      operationId: GetCheckoutPaymentsPaymentIdInstallments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de parcelamentos'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { $ref: '#/components/schemas/CheckoutInstallment' } }, type: object }
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Forma de pagamento não encontrada'
    post:
      tags:
        - 'Checkout - Parcelamento'
      summary: 'Criar regras de parcelamentos para um pagamento'
      description: 'Cria uma nova regra de parcelamento para um tipo de pagamento específico com base nos dados fornecidos'
      operationId: PostCheckoutPaymentsPaymentIdInstallments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                installments:
                  type: array
                  items: { $ref: '#/components/schemas/PaymentInstallmentRequest' }
              type: object
      responses:
        '201':
          description: 'Regras de parcelamento criadas com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Forma de pagamento não encontrada'
  '/{alias}/checkout/payments/{paymentId}/installments/simulate':
    get:
      tags:
        - 'Checkout - Parcelamento'
      summary: 'Simular parcelamento de um pagamento'
      description: 'Simula o parcelamento de um pagamento, considerando valor total, valor mínimo da parcela, número máximo de parcelas sem juros e taxas associadas'
      operationId: GetCheckoutPaymentsPaymentIdInstallmentsSimulate
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
        -
          name: amount
          in: query
          description: 'Valor total do pagamento'
          required: true
          schema:
            type: number
            format: float
        -
          name: min_installment_value
          in: query
          description: 'Valor mínimo da parcela'
          required: true
          schema:
            type: number
            format: float
        -
          name: max_installments_without_tax
          in: query
          description: 'Número máximo de parcelas sem juros'
          required: true
          schema:
            type: integer
        -
          name: taxes
          in: query
          description: 'Taxa aplicada nas parcelas'
          required: true
          schema:
            type: array
            items:
              properties:
                tax:
                  description: 'Taxa aplicada na parcela'
                  type: number
                  format: float
                installment:
                  description: 'Número da parcela'
                  type: integer
                percent_discount:
                  description: 'Desconto percentual aplicado na parcela'
                  type: number
                  format: float
              type: object
        -
          name: currency
          in: query
          description: 'Moeda do pagamento'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: 'Simulação de parcelamento realizada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/InstallmentSimulationResponse' }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Forma de pagamento não encontrada'
  '/{alias}/checkout/payment-link':
    get:
      tags:
        - 'Checkout - Links de Pagamento'
      summary: 'Listar Links de Pagamento'
      description: 'Listar todos os Links de Pagamento cadastrados'
      operationId: GetCheckoutPayment-link
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de links de pagameto'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/PaymentLink' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Checkout - Links de Pagamento'
      summary: 'Criar Link de Pagamento'
      description: 'Cria um novo link de pagamento'
      operationId: PostCheckoutPayment-link
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentLinkRequest'
      responses:
        '201':
          description: 'Link de pagamento criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentLink'
        '400':
          description: 'Dados inválidos'
        '422':
          description: 'Erros de validação'
  '/{alias}/checkout/payment-link/{id}':
    get:
      tags:
        - 'Checkout - Links de Pagamento'
      summary: 'Visualizar Link de Pagamento'
      description: 'Retorna os detalhes de um link de pagamento específico'
      operationId: GetCheckoutPayment-linkId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do link de pagamento'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Link de pagamento cadastrado com sucesso!'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentLink'
        '404':
          description: 'Link de pagamento não encontrado'
        '400':
          description: 'Body da requisição inválido.'
    put:
      tags:
        - 'Checkout - Links de Pagamento'
      summary: 'Atualizar Link de Pagamento'
      description: 'Atualiza um link de pagamento existente e dispara o evento payment-link-updated'
      operationId: PutCheckoutPayment-linkId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do link de pagamento'
          required: true
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentLinkRequest'
      responses:
        '200':
          description: 'Link de pagamento atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentLink'
        '400':
          description: 'Dados inválidos'
        '404':
          description: 'Link de pagamento não encontrado'
        '422':
          description: 'Erros de validação'
    delete:
      tags:
        - 'Checkout - Links de Pagamento'
      summary: 'Excluir Link de Pagamento'
      description: 'Remove um link de pagamento e suas relações'
      operationId: DeleteCheckoutPayment-linkId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do link de pagamento'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Link de pagamento removido com sucesso'
        '400':
          description: 'Dados inválidos'
        '404':
          description: 'Link de pagamento não encontrado'
  '/{alias}/checkout/payment-link/batch-delete':
    delete:
      tags:
        - 'Links de Pagamento'
      summary: 'Excluir todos os links de pagamento da loja em massa'
      description: 'Exclui todos os links de pagamento cadastrados'
      operationId: DeleteCheckoutPayment-linkBatch-delete
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Links de pagamento excluídos com sucesso'
  '/{alias}/checkout/payments':
    get:
      tags:
        - 'Checkout - Formas de pagamentos'
      summary: 'Listar formas de pagamento'
      description: 'Lista as formas de pagamentos criadas'
      operationId: GetCheckoutPayments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de formas de pagamento'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CheckoutPayment' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/checkout/payments/{paymentId}':
    get:
      tags:
        - 'Checkout - Formas de pagamentos'
      summary: 'Visualizar forma de pagamento'
      description: 'Visualiza as informações da forma de pagamento específica'
      operationId: GetCheckoutPaymentsPaymentId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: paymentId
          in: path
          description: 'ID da forma de pagamento'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da forma de pagamento'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { $ref: '#/components/schemas/CheckoutPayment' } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Forma de pagamento não encontrada'
  '/{alias}/checkout/sellers/bank-accounts':
    get:
      tags:
        - 'Checkout - Contas bancárias'
      summary: 'Listar contas bancárias'
      description: 'Lista todas as contas bancárias associadas aos vendedores'
      operationId: GetCheckoutSellersBank-accounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de contas bancárias'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/SellerBankAccount' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Nenhuma conta bancária encontrada'
    post:
      tags:
        - 'Checkout - Contas bancárias'
      summary: 'Criar conta bancária'
      description: 'Cria uma nova conta bancária associada a um vendedor'
      operationId: PostCheckoutSellersBank-accounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SellerBankAccountRequest'
      responses:
        '200':
          description: 'Conta bancária criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SellerBankAccount'
        '400':
          description: 'Requisição inválida'
  '/{alias}/checkout/sellers/bank-accounts/{id}':
    get:
      tags:
        - 'Checkout - Contas bancárias'
      summary: 'Visualizar conta bancária'
      description: 'Visualiza os detalhes de uma conta bancária específica'
      operationId: GetCheckoutSellersBank-accountsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da conta bancária'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da conta bancária'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SellerBankAccount'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Conta bancária não encontrada'
    put:
      tags:
        - 'Checkout - Contas bancárias'
      summary: 'Atualizar conta bancária'
      description: 'Atualiza as informações de uma conta bancária específica'
      operationId: PutCheckoutSellersBank-accountsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da conta bancária'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SellerBankAccountRequest'
      responses:
        '200':
          description: 'Conta bancária atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SellerBankAccount'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Conta bancária não encontrada'
    delete:
      tags:
        - 'Checkout - Contas bancárias'
      summary: 'Excluir conta bancária'
      description: 'Exclui uma conta bancária específica'
      operationId: DeleteCheckoutSellersBank-accountsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da conta bancária'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Conta bancária excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Conta bancária não encontrada'
  '/{alias}/checkout/sellers':
    get:
      tags:
        - 'Checkout - Vendedores'
      summary: 'Listar vendedores'
      description: 'Lista os vendedores associados à loja identificada pelo alias'
      operationId: GetCheckoutSellers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de vendedores'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Seller' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Checkout - Vendedores'
      summary: 'Criar vendedor'
      description: 'Cria um novo vendedor associado à loja especificada pelo alias'
      operationId: PostCheckoutSellers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SellerRequest'
      responses:
        '201':
          description: 'Vendedor criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Seller'
        '400':
          description: 'Requisição inválida'
  '/{alias}/checkout/sellers/{id}':
    get:
      tags:
        - 'Checkout - Vendedores'
      summary: 'Visualizar vendedor'
      description: 'Detalhes de um vendedor identificado pelo ID associado à loja especificada pelo alias'
      operationId: GetCheckoutSellersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do vendedor'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do vendedor'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Seller'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Vendedor não encontrado'
    put:
      tags:
        - 'Checkout - Vendedores'
      summary: 'Atualizar vendedor'
      description: 'Atualiza as informações de um vendedor específico'
      operationId: PutCheckoutSellersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do vendedor'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SellerRequest'
      responses:
        '200':
          description: 'Vendedor atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Seller'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Vendedor não encontrado'
    delete:
      tags:
        - 'Checkout - Vendedores'
      summary: 'Excluir vendedor'
      description: 'Excluir um vendedor específico'
      operationId: DeleteCheckoutSellersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do vendedor'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Vendedor excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Vendedor não encontrado'
  '/{alias}/checkout/sellers/batch-update':
    put:
      tags:
        - 'Checkout - Vendedores'
      summary: 'Atualizar vendedores em lote'
      description: 'Atualiza atributos específicos de múltiplos vendedores identificados pelos seus IDs'
      operationId: PutCheckoutSellersBatch-update
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - ids
                - attributes
              properties:
                ids:
                  description: 'Lista de IDs dos vendedores a serem atualizados'
                  type: array
                  items: { type: integer, example: 66 }
                attributes:
                  description: 'Atributos a serem atualizados para os vendedores selecionados'
                  required: [active]
                  properties: { active: { type: boolean, example: true } }
                  type: object
              type: object
      responses:
        '204':
          description: 'Vendedores atualizados com sucesso'
        '400':
          description: 'Requisição inválida'
  '/{alias}/checkout/statuses':
    get:
      tags:
        - 'Checkout - Status de pedidos'
      summary: 'Listar status de pedidos'
      description: 'Lista os status dos pedidos'
      operationId: GetCheckoutStatuses
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: query
          description: 'ID do pedido'
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de status'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CheckoutStatus' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/checkout/statuses/{id}/email-details':
    put:
      tags:
        - 'Checkout - Status de pedidos'
      summary: 'Atualizar detalhes do email de um status'
      description: 'Atualiza o assunto e mensagem do email de um status com base nos dados fornecidos'
      operationId: PutCheckoutStatusesIdEmail-details
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do status'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                subject:
                  type: string
                  example: 'Pedido realizado'
                message:
                  type: string
                  example: 'Seu pedido foi realizado. Obrigado.'
              type: object
      responses:
        '200':
          description: 'Assunto e mensagem do email atualizados com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/CheckoutStatus' }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Status não encontrado'
  '/{alias}/checkout/transactions':
    get:
      tags:
        - 'Checkout - Transações'
      summary: 'Listar transações de pedidos'
      description: 'Lista todas as transações de checkout de uma loja específica'
      operationId: GetCheckoutTransactions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de transações'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Transaction' }, { $ref: '#/components/schemas/TransactionAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transações não encontradas'
  '/{alias}/checkout/transactions/{id}':
    get:
      tags:
        - 'Checkout - Transações'
      summary: 'Visualizar transação de pedido'
      description: 'Obtém os detalhes de uma transação de checkout identificada pelo ID'
      operationId: GetCheckoutTransactionsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de transações'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Transaction' }, { $ref: '#/components/schemas/TransactionAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transação não encontrada'
  '/{alias}/checkout/transactions/{id}/logs':
    get:
      tags:
        - 'Checkout - Transações'
      summary: 'Listar logs de uma transação'
      description: 'Lista os logs associados a uma transação de checkout identificada pelo ID'
      operationId: GetCheckoutTransactionsIdLogs
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de logs da transação'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/TransactionLog' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transação não encontrada'
  '/{alias}/checkout/transactions/{id}/payment/confirm':
    put:
      tags:
        - 'Checkout - Transações'
      summary: 'Confirmar uma transação de boleto ou depósito'
      description: 'Confirma uma transação de boleto bancário ou depósito identificada pelo ID'
      operationId: PutCheckoutTransactionsIdPaymentConfirm
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de transações'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Transaction' }, { $ref: '#/components/schemas/TransactionAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transação não encontrada'
  '/{alias}/checkout/transactions/{id}/payment/cancel':
    put:
      tags:
        - 'Checkout - Transações'
      summary: 'Cancelar uma transação de boleto ou depósito'
      description: 'Cancela uma transação de boleto bancário ou depósito identificada pelo ID'
      operationId: PutCheckoutTransactionsIdPaymentCancel
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de transações'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Transaction' }, { $ref: '#/components/schemas/TransactionAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transação não encontrada'
  '/{alias}/checkout/transactions/{id}/payment/gateway/capture':
    put:
      tags:
        - 'Checkout - Transações'
      summary: 'Capturar uma transação de cartão de crédito'
      description: 'Captura uma transação de cartão de crédito identificada pelo ID'
      operationId: PutCheckoutTransactionsIdPaymentGatewayCapture
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Transação capturada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Transaction' }, { $ref: '#/components/schemas/TransactionAdditionalResponse' }] } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transação não encontrada'
  '/{alias}/checkout/transactions/{id}/payment/gateway/cancel':
    put:
      tags:
        - 'Checkout - Transações'
      summary: 'Cancelar uma transação de cartão de crédito'
      description: 'Cancela uma transação de cartão de crédito identificada pelo ID'
      operationId: PutCheckoutTransactionsIdPaymentGatewayCancel
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transação'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Transação cancelada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Transaction' }, { $ref: '#/components/schemas/TransactionAdditionalResponse' }] } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transação não encontrada'
  '/{alias}/config/blocked-ips':
    get:
      tags:
        - 'Configurações - IPs bloqueados'
      summary: 'Listar IPs bloqueados'
      description: 'Retorna a listagem dos IPs bloqueados'
      operationId: GetConfigBlocked-ips
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Listagem dos IPs bloqueados'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CustomerBlockedIP' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Configurações - IPs bloqueados'
      summary: 'Criar bloqueio de IP'
      description: 'Adiciona um novo IP à lista de bloqueio'
      operationId: PostConfigBlocked-ips
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - ip
              properties:
                ip:
                  description: 'Endereço IP a ser bloqueado'
                  type: string
              type: object
      responses:
        '200':
          description: 'Bloqueio do IP realizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerBlockedIP'
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/blocked-ips/{id}':
    get:
      tags:
        - 'Configurações - IPs bloqueados'
      summary: 'Visualizar bloqueio de IP'
      description: 'Visualiza os dados de um IP específico que está bloqueado'
      operationId: GetConfigBlocked-ipsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do IP bloqueado'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Dados do IP especificado que está bloqueado'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerBlockedIP'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'IP bloqueado não encontrado'
    put:
      tags:
        - 'Configurações - IPs bloqueados'
      summary: 'Atualizar bloqueio de IP'
      description: 'Atualiza o IP específico que está bloqueado'
      operationId: PutConfigBlocked-ipsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do IP bloqueado'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - ip
              properties:
                ip:
                  description: 'Endereço IP a ser bloqueado'
                  type: string
              type: object
      responses:
        '200':
          description: 'IP bloqueado atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerBlockedIP'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'IP bloqueado não encontrado'
    delete:
      tags:
        - 'Configurações - IPs bloqueados'
      summary: 'Excluir bloqueio de IP'
      description: 'Remove da lista de bloqueio um IP específico'
      operationId: DeleteConfigBlocked-ipsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do IP bloqueado'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'IP bloqueado removido com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'IP bloqueado não encontrado'
  '/{alias}/config/carts':
    get:
      tags:
        - 'Configurações - Carrinhos abandonados'
      summary: 'Listar configurações de carrinhos abandonados'
      description: 'Retorna a listagem das configurações dos carrinhos abandonados'
      operationId: GetConfigCarts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Listagem das configurações dos carrinhos abandonados'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/CartConfig' }, { $ref: '#/components/schemas/CartConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Configurações - Carrinhos abandonados'
      summary: 'Criar configuração de carrinho abandonado'
      description: 'Cria configurações para os carrinhos abandonados'
      operationId: PostConfigCarts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CartConfigRequest'
      responses:
        '200':
          description: 'Configurações dos carrinhos abandonados criadas com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/CartConfig' }, { $ref: '#/components/schemas/CartConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/carts/{id}':
    get:
      tags:
        - 'Configurações - Carrinhos abandonados'
      summary: 'Visualizar configuração de carrinho abandonado'
      description: 'Obtém os detalhes dos dados de configuração de um carrinho abandonado específico'
      operationId: GetConfigCartsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do carrinho abandonado'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Dados do carrinho abandonado'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/CartConfig' }, { $ref: '#/components/schemas/CartConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
    put:
      tags:
        - 'Configurações - Carrinhos abandonados'
      summary: 'Atualizar configuração de carrinho abandonado'
      description: 'Atualiza os dados de configuração de um carrinho abandonado específico'
      operationId: PutConfigCartsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do carrinho abandonado'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CartConfigRequest'
      responses:
        '200':
          description: 'Dados do carrinho abandonado específico atualizados com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/CartConfig' }, { $ref: '#/components/schemas/CartConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Carrinho abandonado não encontrado'
  '/{alias}/config/checkout':
    get:
      tags:
        - 'Configurações - Checkout'
      summary: 'Listar configuração do checkout'
      description: 'Retorna a listagem de configurações do checkout'
      operationId: GetConfigCheckout
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Listagem das configurações do checkout'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/CheckoutConfig' }, { $ref: '#/components/schemas/CheckoutConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/checkout/{id}':
    put:
      tags:
        - 'Configurações - Checkout'
      summary: 'Atualizar configuração do checkout'
      description: 'Atualiza as configurações do checkout'
      operationId: PutConfigCheckoutId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do checkout'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckoutConfigRequest'
      responses:
        '200':
          description: 'Configuração do checkout atualizada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/CheckoutConfig' }, { $ref: '#/components/schemas/CheckoutConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Configuração do checkout não encontrada'
  '/{alias}/config/emails':
    get:
      tags:
        - 'Configurações - E-mails'
      summary: 'Listar configurações de e-mails'
      description: 'Lista todas as configurações de e-mails'
      operationId: GetConfigEmails
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista das configurações de e-mail'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/EmailConfig' }, { $ref: '#/components/schemas/EmailConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Configurações - E-mails'
      summary: 'Criar configuração de email'
      description: 'Cria uma nova configuração de email com os valores especificados'
      operationId: PostConfigEmails
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailConfigRequest'
      responses:
        '200':
          description: 'Lista das configurações de e-mail'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/EmailConfig' }, { $ref: '#/components/schemas/EmailConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/emails/{id}':
    get:
      tags:
        - 'Configurações - E-mails'
      summary: 'Visualizar configuração de email'
      description: 'Obtém os detalhes de uma configuração de email específica'
      operationId: GetConfigEmailsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da configuração de email'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da configuração de email'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/EmailConfig' }, { $ref: '#/components/schemas/EmailConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Configuração de email não encontrada'
    put:
      tags:
        - 'Configurações - E-mails'
      summary: 'Atualizar configuração de email'
      description: 'Atualiza a configuração de email com os valores especificados'
      operationId: PutConfigEmailsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da configuração de email'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailConfigRequest'
      responses:
        '200':
          description: 'Configuração de email atualizada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/EmailConfig' }, { $ref: '#/components/schemas/EmailConfigAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/merchant-credentials':
    get:
      tags:
        - 'Configurações - Credenciais da loja'
      summary: 'Listar credenciais da loja'
      description: 'Retorna a listagem de credenciais da loja'
      operationId: GetConfigMerchant-credentials
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de credenciais'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/MerchantCredentials' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/merchant-data':
    get:
      tags:
        - 'Configurações - Dados da loja'
      summary: 'Listar dados da loja'
      description: 'Retorna a listagem dos dados das lojas'
      operationId: GetConfigMerchant-data
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Listagem de dados das lojas'
          content:
            application/json:
              schema:
                properties:
                  data: { allOf: [{ $ref: '#/components/schemas/MerchantDataConfig' }, { $ref: '#/components/schemas/MerchantDataConfigAdditionalResponse' }] }
                type: object
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/merchant-data/{id}':
    put:
      tags:
        - 'Configurações - Dados da loja'
      summary: 'Atualizar dados da loja'
      description: 'Atualiza os dados de uma loja específica'
      operationId: PutConfigMerchant-dataId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da loja'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MerchantDataConfigRequest'
      responses:
        '200':
          description: 'Dados da loja atualizados com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { allOf: [{ $ref: '#/components/schemas/MerchantDataConfig' }, { $ref: '#/components/schemas/MerchantDataConfigAdditionalResponse' }] }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Loja não encontrada'
        '422':
          description: 'Verifique os dados Obrigatórios'
  '/{alias}/config/overview/v1':
    get:
      tags:
        - 'Configurações - Overview'
      summary: 'Visualizar overview das configurações'
      description: 'Obtém uma visão geral das configurações essenciais para o funcionamento correto da loja'
      operationId: GetConfigOverviewV1
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Visão geral das configurações essenciais'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { properties: { title: { description: 'Título da configuração', type: string, example: 'Cadastre uma planilha de frete' }, message: { description: 'Mensagem sobre a configuração', type: string, example: 'Baixe nossa planilha modelo, atualize os valores e cadastre na plataforma. Mesmo que você tenha uma integração, aconselhamos você cadastrar uma planilha de frete como backup.' }, icon: { description: 'Ícone representativo da configuração', type: string, example: carrier }, url: { description: 'URL para mais detalhes ou configuração', type: string, format: uri, example: 'https://king.test/config/logistics' } }, type: object } }, type: object }
  '/{alias}/config/photos':
    get:
      tags:
        - 'Configurações - Fotos'
      summary: 'Listar configurações de fotos'
      description: 'Lista as configurações de fotos'
      operationId: GetConfigPhotos
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Listagem das configurações das fotos'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Configurações - Fotos'
      summary: 'Criar configuração de foto'
      description: 'Cria uma nova configuração de foto com os tamanhos especificados'
      operationId: PostConfigPhotos
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhotoConfigRequest'
      responses:
        '200':
          description: 'Configuração de foto criada com sucesso'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/photos/{id}':
    get:
      tags:
        - 'Configurações - Fotos'
      summary: 'Visualizar configuração de foto'
      description: 'Retorna os detalhes da configuração de uma foto específica'
      operationId: GetConfigPhotosId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da foto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da configuração da foto especificada'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Foto não encontrada'
    put:
      tags:
        - 'Configurações - Fotos'
      summary: 'Atualizar configuração de foto'
      description: 'Atualiza a configuração de foto com os tamanhos especificados'
      operationId: PutConfigPhotosId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da foto'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PhotoConfigRequest'
      responses:
        '200':
          description: 'Configuração de foto atualizada com sucesso'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Foto não encontrada'
  '/{alias}/config/services/{serviceAlias}/settings/{id}':
    put:
      tags:
        - 'Configurações - Integrações'
      summary: 'Atualizar configuração de um serviço'
      description: 'Atualiza as configurações para um serviço específico'
      operationId: PutConfigServicesServiceAliasSettingsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: serviceAlias
          in: path
          description: 'Alias do serviço'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da configuração'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ServiceConfigRequest'
      responses:
        '200':
          description: 'Configuração do serviço atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceConfig'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Serviço não encontrado'
    delete:
      tags:
        - 'Configurações - Integrações'
      summary: 'Excluir configuração de um serviço'
      description: 'Exclui as configurações para um serviço específico'
      operationId: DeleteConfigServicesServiceAliasSettingsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: serviceAlias
          in: path
          description: 'Alias do serviço'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da configuração'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Configuração do serviço excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Serviço ou configuração não encontrados'
  '/{alias}/config/services':
    get:
      tags:
        - 'Configurações - Integrações'
      summary: 'Listar todos os serviços disponíveis'
      description: 'Obtém a lista de todos os serviços disponíveis para integração'
      operationId: GetConfigServices
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: groupedByCategory
          in: query
          description: 'Agrupa os serviços de acordo com suas categorias'
          schema:
            type: boolean
      responses:
        '200':
          description: 'Lista de serviços disponíveis'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Service' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/config/services/{serviceAlias}':
    get:
      tags:
        - 'Configurações - Integrações'
      summary: 'Visualizar serviço'
      description: 'Obtém os detalhes de um serviço específico'
      operationId: GetConfigServicesServiceAlias
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: serviceAlias
          in: path
          description: 'Alias do serviço'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes do serviço'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Service' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Serviço não encontrado'
  '/{alias}/content/pages':
    get:
      tags:
        - 'Conteúdo - Páginas'
      summary: 'Listar páginas'
      description: 'Retorna uma lista de páginas'
      operationId: GetContentPages
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir informações adicionais, como conteúdo'
          required: false
          schema:
            type: string
            enum:
              - content
      responses:
        '200':
          description: 'Lista de páginas'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/Page' }, { $ref: '#/components/schemas/PageAdditionalResponse' }] } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Conteúdo - Páginas'
      summary: 'Criar página'
      description: 'Cria uma nova página com os dados especificados'
      operationId: PostContentPages
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Detalhes da página'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageRequest'
      responses:
        '200':
          description: 'Detalhes da página'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/Page' }, { $ref: '#/components/schemas/PageAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/content/pages/{id}':
    get:
      tags:
        - 'Conteúdo - Páginas'
      summary: 'Visualizar página'
      description: 'Obtém os dados de uma página específica'
      operationId: GetContentPagesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da página'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da página'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/Page' }, { $ref: '#/components/schemas/PageAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
    put:
      tags:
        - 'Conteúdo - Páginas'
      summary: 'Atualizar página'
      description: 'Atualiza os dados de uma página específica'
      operationId: PutContentPagesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da página'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes da página'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageRequest'
      responses:
        '200':
          description: 'Detalhes da página'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/Page' }, { $ref: '#/components/schemas/PageAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Página não encontrada'
    delete:
      tags:
        - 'Conteúdo - Páginas'
      summary: 'Excluir página'
      description: 'Exclui uma página específica'
      operationId: DeleteContentPagesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da página'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Página excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Página não encontrada'
  '/{alias}/content/redirects':
    get:
      tags:
        - 'Conteúdo - Redirecionamentos'
      summary: 'Listar redirecionamentos'
      description: 'Lista os redirecionamentos da loja'
      operationId: GetContentRedirects
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de redirecionamentos'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Redirect' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Conteúdo - Redirecionamentos'
      summary: 'Criar redirecionamento'
      description: 'Cria um novo redirecionamento com base nos dados especificados'
      operationId: PostContentRedirects
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Detalhes do redirecionamento'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Redirect'
      responses:
        '200':
          description: 'Redirecionamento criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Redirect'
        '400':
          description: 'Requisição inválida'
  '/{alias}/content/redirects/{id}':
    get:
      tags:
        - 'Conteúdo - Redirecionamentos'
      summary: 'Visualizar detalhes de um redirecionamento'
      description: 'Visualiza os detalhes de um determinado redirecionamento a partir do seu ID'
      operationId: GetContentRedirectsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do redirecionamento'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do redirecionamento'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Redirect'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Redirecionamento não encontrado'
    put:
      tags:
        - 'Conteúdo - Redirecionamentos'
      summary: 'Atualizar redirecionamento'
      description: 'Atualiza os detalhes de um redirecionamento com base nos dados especificados'
      operationId: PutContentRedirectsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do redirecionamento'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes do redirecionamento'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Redirect'
      responses:
        '200':
          description: 'Redirecionamento atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Redirect'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Redirecionamento não encontrado'
    delete:
      tags:
        - 'Conteúdo - Redirecionamentos'
      summary: 'Excluir redirecionamento'
      description: 'Exclui um redirecionamento específico'
      operationId: DeleteContentRedirectsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do redirecionamento'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Redirecionamento excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Redirecionamento não encontrado'
  '/{alias}/content/redirects/batch':
    post:
      tags:
        - 'Conteúdo - Redirecionamentos'
      summary: 'Criar redirecionamentos em batch'
      description: 'Cria múltiplos redirecionamentos de uma vez (máximo 50 itens)'
      operationId: PostContentRedirectsBatch
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Lista de redirecionamentos'
        required: true
        content:
          application/json:
            schema:
              required:
                - redirects
              properties:
                redirects:
                  type: array
                  items: { required: [url_from, url_to], properties: { url_from: { type: string, example: /old-path }, url_to: { type: string, example: /new-path } }, type: object }
                  maxItems: 50
              type: object
      responses:
        '200':
          description: 'Redirecionamentos criados com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { $ref: '#/components/schemas/Redirect' } }
                type: object
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Erro de validação'
  '/{alias}/customers/clusters':
    get:
      tags:
        - 'Clientes - Clusters'
      summary: 'Listar clusters'
      description: 'Lista todos os clusters de clientes'
      operationId: GetCustomersClusters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Clusters listados com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Cluster' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Clientes - Clusters'
      summary: 'Criar cluster de clientes'
      description: 'Cria um novo cluster de clientes'
      operationId: PostCustomersClusters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusterRequest'
      responses:
        '200':
          description: 'Cluster criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cluster'
        '400':
          description: 'Requisição inválida'
  '/{alias}/customers/clusters/{id}':
    get:
      tags:
        - 'Clientes - Clusters'
      summary: 'Visualizar clusters'
      description: 'Obtém os detalhes de um cluster específico'
      operationId: GetCustomersClustersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cluster'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes visualizados com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cluster'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cluster não encontrado'
    put:
      tags:
        - 'Clientes - Clusters'
      summary: 'Atualizar cluster de clientes'
      description: 'Atualiza um cluster específico'
      operationId: PutCustomersClustersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cluster'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusterRequest'
      responses:
        '200':
          description: 'Cluster atualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Cluster' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cluster não encontrado'
  '/{alias}/customers/clusters/{id}/customers':
    get:
      tags:
        - 'Clientes - Clusters'
      summary: 'Listar clientes associados a um cluster'
      description: 'Lista todos os clientes associados a um cluster específico'
      operationId: GetCustomersClustersIdCustomers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cluster'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Clientes associados listados com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Customer' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cluster não encontrado'
  '/{alias}/customers/clusters/{clusterId}/shipping-rules':
    get:
      tags:
        - 'Clientes - Regras de frete dos clusters'
      summary: 'Listar regras de frete'
      description: 'Lista todas as regras de frete de um cluster específico'
      operationId: GetCustomersClustersClusterIdShipping-rules
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: clusterId
          in: path
          description: 'ID do cluster'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de regras de frete retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ClusterShipping' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cluster não encontrado'
    post:
      tags:
        - 'Clientes - Regras de frete dos clusters'
      summary: 'Criar regra de frete'
      description: 'Cria uma nova regra de frete para um cluster específico'
      operationId: PostCustomersClustersClusterIdShipping-rules
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: clusterId
          in: path
          description: 'ID do cluster'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusterShippingRequest'
      responses:
        '200':
          description: 'Regra de frete criada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ClusterShipping' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cluster não encontrado'
  '/{alias}/customers/clusters/{clusterId}/shipping-rules/{id}':
    get:
      tags:
        - 'Clientes - Regras de frete dos clusters'
      summary: 'Visualizar regra de frete'
      description: 'Obtém os detalhes de uma regra de frete específica de um cluster'
      operationId: GetCustomersClustersClusterIdShipping-rulesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: clusterId
          in: path
          description: 'ID do cluster'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID da regra de frete'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da regra de frete retornados com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClusterShipping'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cluster ou regra de frete não encontrados'
    put:
      tags:
        - 'Clientes - Regras de frete dos clusters'
      summary: 'Atualizar regra de frete'
      description: 'Atualiza uma regra de frete específica de um cluster'
      operationId: PutCustomersClustersClusterIdShipping-rulesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: clusterId
          in: path
          description: 'ID do cluster'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID da regra de frete'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusterShippingRequest'
      responses:
        '200':
          description: 'Regra de frete atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClusterShipping'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cluster ou regra de frete não encontrados'
  '/{alias}/customers/{customerId}/addresses':
    get:
      tags:
        - 'Clientes - Endereços'
      summary: 'Listar endereços de um cliente'
      description: 'Retorna a lista de endereços de um cliente específico'
      operationId: GetCustomersCustomerIdAddresses
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: customerId
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Endereços listados com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CustomerAddress' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Clientes não encontrados'
    post:
      tags:
        - 'Clientes - Endereços'
      summary: 'Criar endereço do cliente'
      description: 'Cria um endereço para um cliente específico'
      operationId: PostCustomersCustomerIdAddresses
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: customerId
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerAddressRequest'
      responses:
        '200':
          description: 'Endereço criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerAddress'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Clientes não encontrados'
  '/{alias}/customers/{customerId}/addresses/{id}':
    get:
      tags:
        - 'Clientes - Endereços'
      summary: 'Visualizar endereço do cliente'
      description: 'Visualiza um endereço específico de um cliente'
      operationId: GetCustomersCustomerIdAddressesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: customerId
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do endereço'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Endereço visualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CustomerAddress' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Clientes não encontrados'
    put:
      tags:
        - 'Clientes - Endereços'
      summary: 'Atualizar endereço do cliente'
      description: 'Atualiza um endereço específico de um cliente'
      operationId: PutCustomersCustomerIdAddressesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: customerId
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do endereço'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerAddressRequest'
      responses:
        '200':
          description: 'Endereço atualizado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { $ref: '#/components/schemas/CustomerAddress' } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cliente ou endereços não encontrados'
    delete:
      tags:
        - 'Clientes - Endereços'
      summary: 'Excluir endereço do cliente'
      description: 'Exclui um endereço específico de um cliente'
      operationId: DeleteCustomersCustomerIdAddressesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: customerId
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do endereço'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Endereço excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Clientes não encontrados'
  '/{alias}/customers':
    get:
      tags:
        - 'Clientes - Cliente'
      summary: 'Listar clientes'
      description: 'Lista todos os clientes'
      operationId: GetCustomers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - stats
                - addresses
                - cluster
                - spreadsheet
                - search
                - deletion_request
              example: '?include=addresses,stats'
        -
          $ref: '#/components/parameters/CustomerCriteria'
      responses:
        '200':
          description: 'Lista de clientes retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Customer' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Clientes - Cliente'
      summary: 'Criar cliente'
      description: 'Cria um novo cliente'
      operationId: PostCustomers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerRequest'
      responses:
        '200':
          description: 'Cliente criado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { $ref: '#/components/schemas/Customer' } }
                type: object
        '400':
          description: 'Requisição inválida'
  '/{alias}/customers/{id}':
    get:
      tags:
        - 'Clientes - Cliente'
      summary: 'Visualizar cliente'
      description: 'Obtém as informações detalhadas de um cliente específico'
      operationId: GetCustomersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - stats
                - addresses
                - cluster
                - spreadsheet
                - search
                - deletion_request
              example: '?include=addresses,stats'
      responses:
        '200':
          description: 'Detalhes do cliente'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Customer' } } }, type: object }
        '404':
          description: 'Cliente não encontrado'
    put:
      tags:
        - 'Clientes - Cliente'
      summary: 'Atualizar cliente'
      description: 'Atualiza as informações de um cliente específico'
      operationId: PutCustomersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerRequest'
      responses:
        '200':
          description: 'Cliente atualizado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { $ref: '#/components/schemas/Customer' } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cliente não encontrado'
    delete:
      tags:
        - 'Clientes - Cliente'
      summary: 'Excluir cliente'
      description: 'Exclui um cliente específico'
      operationId: DeleteCustomersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Cliente excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Cliente não encontrado'
  '/{alias}/customers/{id}/tags':
    put:
      tags:
        - 'Clientes - Cliente'
      summary: 'Sincronizar as tags de um cliente'
      description: 'Substitui a lista de tags do cliente pela enviada. Envie uma lista vazia para remover todas. As tags são gravadas em minúsculo.'
      operationId: PutCustomersIdTags
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                tags:
                  description: 'Lista completa de tags do cliente'
                  type: array
                  items: { type: string, maxLength: 60 }
                  example: [vip, atacado]
              type: object
      responses:
        '204':
          description: 'Tags sincronizadas'
        '422':
          description: 'Payload inválido'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
    post:
      tags:
        - 'Clientes - Cliente'
      summary: 'Adicionar tags a um cliente'
      description: 'Acrescenta as tags enviadas sem remover as existentes. Idempotente: reenviar a mesma tag não duplica.'
      operationId: PostCustomersIdTags
      parameters:
        -
          name: alias
          in: path
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                tags:
                  type: array
                  items: { type: string, maxLength: 60 }
                  example: [vip]
              type: object
      responses:
        '204':
          description: 'Tags adicionadas'
        '422':
          description: 'Payload inválido'
  '/{alias}/customers/{id}/carts':
    get:
      tags:
        - 'Clientes - Cliente'
      summary: 'Listar carrinhos abandonados de um cliente'
      description: 'Obtém uma lista de carrinhos abandonados de um cliente específico'
      operationId: GetCustomersIdCarts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cliente'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de carrinhos abandonados'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Cart' } } }, type: object }
        '404':
          description: 'Cliente ou carrinhos não encontrados'
  '/{alias}/customers/filters':
    get:
      tags:
        - 'Clientes - Cliente'
      summary: 'Listar filtros de busca de clientes'
      description: 'Retorna uma lista dos filtros de busca'
      operationId: GetCustomersFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de filtros de busca'
          content:
            application/json:
              schema: {  }
        '404':
          description: 'Filtros não encontrados'
  '/{alias}/discounts':
    get:
      tags:
        - Descontos
      summary: 'Listar descontos da loja'
      description: 'Lista os descontos cadastrados na loja'
      operationId: GetDiscounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: q
          in: query
          description: 'Busca por nome do desconto'
          required: false
          schema:
            type: string
        -
          name: discount_type
          in: query
          description: 'Filtrar por tipo de desconto (aceita múltiplos valores)'
          required: false
          schema:
            type: array
            items:
              type: string
              enum:
                - buy_x_get_y
                - by_payment_method
        -
          name: status
          in: query
          description: 'Filtrar por status: 1 = ativos (end_at >= agora ou sem data), 0 = expirados'
          required: false
          schema:
            type: integer
            enum:
              - 0
              - 1
      responses:
        '200':
          description: 'Lista de descontos'
          content:
            application/json:
              schema:
                properties:
                  data: { description: 'Detalhes dos descontos', type: array, items: { allOf: [{ $ref: '#/components/schemas/DiscountView' }, { $ref: '#/components/schemas/SimplePaginatorWithMeta' }] } }
                type: object
        '400':
          description: 'Requisição Inválida'
    post:
      tags:
        - Descontos
      summary: 'Criar um desconto da loja'
      description: 'Cria um desconto na loja'
      operationId: PostDiscounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Dados para criação do desconto'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiscountRequest'
      responses:
        '200':
          description: 'Detalhes do desconto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscountView'
        '409':
          description: 'Conflito com desconto existente. Retorna discount_id, accumulate e discount_value do desconto conflitante.'
        '422':
          description: 'Verifique os campos obrigatórios: discount_method, discount_value, discount_type, entry_condition_type, entry_condition_value, accumulate, start_at, name. O campo restrictions é obrigatório apenas para discount_type=buy_x_get_y.'
  '/{alias}/discounts/{id}':
    get:
      tags:
        - Descontos
      summary: 'Visualizar um desconto da loja'
      description: 'Detalhes do desconto'
      operationId: GetDiscountsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Desconto'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do desconto'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/DiscountView' } } }, type: object }
                  - { $ref: '#/components/schemas/DiscountViewAdditionalResponse' }
        '400':
          description: 'Desconto não encontrado'
    put:
      tags:
        - Descontos
      summary: 'Atualizar um desconto da loja'
      description: 'Atualiza um desconto na loja'
      operationId: PutDiscountsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Dados para atualizar o desconto'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiscountRequest'
      responses:
        '200':
          description: 'Detalhes do desconto'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/DiscountView' } } }, type: object }
                  - { $ref: '#/components/schemas/DiscountViewAdditionalResponse' }
        '409':
          description: 'Conflito com desconto existente. Retorna discount_id, accumulate e discount_value do desconto conflitante.'
        '422':
          description: 'Verifique os campos obrigatórios: discount_method, discount_value, discount_type, entry_condition_type, entry_condition_value, accumulate, start_at, name. O campo restrictions é obrigatório apenas para discount_type=buy_x_get_y.'
    delete:
      tags:
        - Descontos
      summary: 'Excluir um desconto da loja'
      description: 'Exclui um desconto na loja'
      operationId: DeleteDiscountsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes do desconto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscountView'
        '400':
          description: 'Desconto não encontrado'
  '/{alias}/discounts/batch-delete':
    delete:
      tags:
        - Descontos
      summary: 'Excluir todos os descontos da loja em massa'
      description: 'Exclui todos os descontos cadastrados'
      operationId: DeleteDiscountsBatch-delete
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes do desconto'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DiscountView'
  '/{alias}/discounts/filters':
    get:
      tags:
        - Descontos
      summary: 'Listar filtros de busca de descontos'
      description: 'Retorna uma lista dos filtros de busca'
      operationId: GetDiscountsFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de filtros de busca'
          content:
            application/json:
              schema: {  }
        '404':
          description: 'Filtros não encontrados'
  '/{alias}/leads':
    get:
      tags:
        - Leads
      summary: 'Listar leads'
      description: 'Lista os leads de acordo com os filtros estabelecidos'
      operationId: GetLeads
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: name
          in: query
          description: 'Filtrar por nome'
          required: false
          schema:
            type: string
        -
          name: email
          in: query
          description: 'Filtrar por endereço de email'
          required: false
          schema:
            type: string
            format: email
        -
          name: birthday
          in: query
          description: 'Filtrar por data de nascimento'
          required: false
          schema:
            type: string
            format: date
        -
          name: city
          in: query
          description: 'Filtrar por cidade'
          required: false
          schema:
            type: string
        -
          name: state
          in: query
          description: 'Filtrar por estado'
          required: false
          schema:
            type: string
        -
          name: genre
          in: query
          description: 'Filtrar por gênero'
          required: false
          schema:
            type: string
        -
          name: params
          in: query
          description: 'Filtrar por parâmetros adicionais'
          required: false
          schema:
            type: object
            additionalProperties:
              type: string
      responses:
        '200':
          description: 'Lista de leads'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Lead' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Dados inválidos fornecidos'
    post:
      tags:
        - Leads
      summary: 'Criar um novo lead'
      description: 'Cria um novo lead com base nos dados fornecidos'
      operationId: PostLeads
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LeadRequest'
      responses:
        '201':
          description: 'Lead criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lead'
        '400':
          description: 'Dados inválidos fornecidos'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
  '/{alias}/leads/{id}':
    get:
      tags:
        - Leads
      summary: 'Visualizar lead'
      description: 'Retorna os detalhes de um lead específico'
      operationId: GetLeadsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do lead'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do lead'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lead'
        '404':
          description: 'Lead não encontrado'
    put:
      tags:
        - Leads
      summary: 'Atualizar lead'
      description: 'Atualiza os detalhes de um lead específico'
      operationId: PutLeadsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do lead'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LeadRequest'
      responses:
        '200':
          description: 'Lead atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lead'
        '400':
          description: 'Dados inválidos fornecidos'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
        '404':
          description: 'Lead não encontrado'
    delete:
      tags:
        - Leads
      summary: 'Excluir lead'
      description: 'Excluir um lead específico'
      operationId: DeleteLeadsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do lead'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Lead excluído com sucesso'
        '404':
          description: 'Lead não encontrado'
  '/{alias}/leads/filters':
    get:
      tags:
        - Leads
      summary: 'Listar filtros de busca dos leads'
      description: 'Retorna a lista de filtros de busca disponíveis para leads'
      operationId: GetLeadsFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de filtros de busca'
          content:
            application/json:
              schema: {  }
        '404':
          description: 'Filtros não encontrados'
  '/{alias}/logistics/boxes':
    get:
      tags:
        - 'Logística - Embalagens'
      summary: 'Listar embalagens'
      description: 'Lista todas as embalagens cadastradas'
      operationId: GetLogisticsBoxes
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de embalagens'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Box' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Logística - Embalagens'
      summary: 'Criar embalagem'
      description: 'Cria uma nova embalagem com base nos parâmetros fornecidos'
      operationId: PostLogisticsBoxes
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BoxRequest'
      responses:
        '200':
          description: 'Embalagem criada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Box' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/logistics/boxes/{id}':
    get:
      tags:
        - 'Logística - Embalagens'
      summary: 'Visualizar embalagem'
      description: 'Obtém os detalhes de uma embalagem específica'
      operationId: GetLogisticsBoxesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da embalagem'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da embalagem'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Embalagem não encontrada'
    put:
      tags:
        - 'Logística - Embalagens'
      summary: 'Atualizar embalagem'
      description: 'Atualiza uma embalagem específica com base nos parâmetros fornecidos'
      operationId: PutLogisticsBoxesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da embalagem'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BoxRequest'
      responses:
        '200':
          description: 'Embalagem atualizada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Box' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Embalagem não encontrada'
    delete:
      tags:
        - 'Logística - Embalagens'
      summary: 'Excluir embalagem'
      description: 'Exclui uma embalagem específica'
      operationId: DeleteLogisticsBoxesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da embalagem'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Embalagem excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Embalagem não encontrada'
  '/{alias}/logistics/carriers/{carrierId}/prices':
    get:
      tags:
        - 'Logística - Preços de frete'
      summary: 'Listar preços de uma transportadora'
      description: 'Lista todos os preços de frete das transportadoras cadastradas'
      operationId: GetLogisticsCarriersCarrierIdPrices
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: carrierId
          in: path
          description: 'ID da transportadora'
          required: true
          schema:
            type: integer
        -
          name: zipcode
          in: query
          description: 'CEP para filtro'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de preços de frete'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CarrierPrice' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transportadora não encontrada'
    post:
      tags:
        - 'Logística - Preços de frete'
      summary: 'Criar preço para uma transportadora'
      description: 'Crie um novo preço de frete de uma transportadora'
      operationId: PostLogisticsCarriersCarrierIdPrices
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: carrierId
          in: path
          description: 'ID da transportadora'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CarrierPriceRequest'
      responses:
        '200':
          description: 'Preço criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarrierPrice'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transportadora não encontrada'
  '/{alias}/logistics/carriers/{carrierId}/prices/{id}':
    get:
      tags:
        - 'Logística - Preços de frete'
      summary: 'Visualizar preço'
      description: 'Obtém o preço de frete de uma transportadora específica'
      operationId: GetLogisticsCarriersCarrierIdPricesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: carrierId
          in: path
          description: 'ID da transportadora'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do preço'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do preço'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transportadora ou preço não encontrados'
    put:
      tags:
        - 'Logística - Preços de frete'
      summary: 'Atualizar preço'
      description: 'Atualiza o preço de frete de uma transportadora específica'
      operationId: PutLogisticsCarriersCarrierIdPricesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: carrierId
          in: path
          description: 'ID da transportadora'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do preço'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CarrierPriceRequest'
      responses:
        '200':
          description: 'Preço atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarrierPrice'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transportadora ou preço não encontrados'
    delete:
      tags:
        - 'Logística - Preços de frete'
      summary: 'Excluir preço'
      description: 'Excluir o preço de frete de uma transportadora específica'
      operationId: DeleteLogisticsCarriersCarrierIdPricesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: carrierId
          in: path
          description: 'ID da transportadora'
          required: true
          schema:
            type: integer
        -
          name: id
          in: path
          description: 'ID do preço'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Preço excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transportadora ou preço não encontrados'
  '/{alias}/logistics/carriers':
    get:
      tags:
        - 'Logística - Transportadoras'
      summary: 'Listar transportadoras'
      description: 'Lista todas as transportadoras cadastradas'
      operationId: GetLogisticsCarriers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de transportadoras'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Carrier' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Logística - Transportadoras'
      summary: 'Criar transportadora'
      description: 'Cria uma nova transportadora com base nos parâmetros fornecidos'
      operationId: PostLogisticsCarriers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CarrierRequest'
      responses:
        '200':
          description: 'Transportadora criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Carrier'
        '400':
          description: 'Requisição inválida'
  '/{alias}/logistics/carriers/{id}':
    get:
      tags:
        - 'Logística - Transportadoras'
      summary: 'Visualizar transportadora'
      description: 'Obtém os detalhes de uma transportadora específica'
      operationId: GetLogisticsCarriersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transportadora'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da transportadora'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transportadora não encontrada'
    put:
      tags:
        - 'Logística - Transportadoras'
      summary: 'Atualizar transportadora'
      description: 'Atualiza as informações de uma transportadora específica com base nos parâmetros fornecidos'
      operationId: PutLogisticsCarriersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transportadora'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CarrierRequest'
      responses:
        '200':
          description: 'Transportadora atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Carrier'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transportadora não encontrada'
    delete:
      tags:
        - 'Logística - Transportadoras'
      summary: 'Excluir transportadora'
      description: 'Exclui uma transportadora específica'
      operationId: DeleteLogisticsCarriersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da transportadora'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Transportadora excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Transportadora não encontrada'
  '/{alias}/logistics/countries':
    get:
      tags:
        - 'Logística - Países'
      summary: 'Listar países'
      description: 'Listar os países disponíveis para entrega'
      operationId: GetLogisticsCountries
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de países'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { $ref: '#/components/schemas/Country' } }
                type: object
        '400':
          description: 'Requisição inválida'
  '/{alias}/public/shipping/quotation/cart':
    get:
      tags:
        - 'Logística - Frete Público'
      summary: 'Calcular frete de um carrinho'
      description: 'Calcula o custo de frete de forma pública utilizando o token do carrinho e o CEP de destino'
      operationId: GetPublicShippingQuotationCart
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: cart_token
          in: query
          description: 'Token do carrinho'
          required: true
          schema:
            type: string
            example: abc123def456
        -
          name: zipcode
          in: query
          description: 'CEP de destino'
          required: true
          schema:
            type: string
            example: '14940000'
      responses:
        '200':
          description: 'Cálculo do frete realizado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { id: { type: integer }, service_id: { type: integer, example: 1 }, service_name: { type: string, example: 'Correios PAC' }, service_display_name: { type: string, example: 'Correios PAC' }, service_type_id: { type: integer, example: 1 }, service_type_name: { type: string, example: Correios }, price: { type: number, format: float, example: 0 }, delivery_time: { type: integer, example: 18 }, quote_id: { type: integer, example: 3517956284 }, gateway: { type: string, example: intelipost }, same_day_delivery: { type: boolean, example: true }, same_day_delivery_until_at: { type: string }, zipcode: { type: string, example: '14940000' }, street: { type: string, example: null, nullable: true }, neighborhood: { type: string, example: null, nullable: true }, city: { type: string, example: Ibitinga }, uf: { type: string, example: SP }, source: { type: string, example: database }, city_id: { type: integer, example: 3 }, formated_delivery_time: { type: string, example: 'até 18 dias úteis' }, formated_price: { type: string, example: Grátis }, free_shipment: { type: boolean, example: true }, real_price: { type: number, format: float, example: 0 } }, type: object }
                type: object
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Parâmetros obrigatórios não fornecidos'
        '424':
          description: 'Serviço de frete temporariamente indisponível'
        '429':
          description: 'Limite de requisições excedido'
      security: []
  '/{alias}/logistics/apis':
    get:
      tags:
        - 'Logística - API de Frete'
      summary: 'Listar API de Frete'
      description: 'Lista todas as API de Frete cadastradas'
      operationId: GetLogisticsApis
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de API de Frete'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ShippingApi' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
    post:
      tags:
        - 'Logística - API de Frete'
      summary: 'Criar API de Frete'
      description: 'Cria uma nova integração com API de Frete'
      operationId: PostLogisticsApis
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Dados da API de Frete'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShippingApiRequest'
      responses:
        '201':
          description: 'API de Frete criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShippingApi'
  '/{alias}/logistics/apis/{id}':
    get:
      tags:
        - 'Logística - API de Frete'
      summary: 'Visualizar API de Frete'
      description: 'Retorna os dados de uma API de Frete específica'
      operationId: GetLogisticsApisId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da API de Frete'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Dados da API de Frete'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShippingApi'
        '404':
          description: 'API de Frete não encontrada'
    put:
      tags:
        - 'Logística - API de Frete'
      summary: 'Atualizar API de Frete'
      description: 'Atualiza os dados de uma API de Frete específica'
      operationId: PutLogisticsApisId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da API de Frete'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Dados da API de Frete'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShippingApiRequest'
      responses:
        '200':
          description: 'API de Frete atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShippingApi'
        '404':
          description: 'API de Frete não encontrada'
    delete:
      tags:
        - 'Logística - API de Frete'
      summary: 'Excluir API de Frete'
      description: 'Remove uma API de Frete específica'
      operationId: DeleteLogisticsApisId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da API de Frete'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'API de Frete excluída com sucesso'
        '404':
          description: 'API de Frete não encontrada'
  '/{alias}/logistics/shipping-costs':
    post:
      tags:
        - 'Logística - Simular frete'
      summary: 'Simular frete de um pedido'
      description: 'Recalcula ou simula o custo de frete de um pedido que já existe, utilizando as informações dos produtos contidos no pedido'
      operationId: PostLogisticsShipping-costs
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShippingCostRequest'
      responses:
        '200':
          description: 'Cálculo do frete realizado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { id: { type: integer }, service_id: { type: integer, example: 1 }, service_name: { type: string, example: 'Correios PAC' }, service_display_name: { type: string, example: 'Correios PAC' }, service_type_id: { type: integer, example: 1 }, service_type_name: { type: string, example: Correios }, price: { type: number, format: float, example: 0 }, delivery_time: { type: integer, example: 18 }, quote_id: { type: integer, example: 3517956284 }, gateway: { type: string, example: intelipost }, same_day_delivery: { type: boolean, example: true }, same_day_delivery_until_at: { type: string }, zipcode: { type: string, example: '14940000' }, street: { type: string, example: null, nullable: true }, neighborhood: { type: string, example: null, nullable: true }, city: { type: string, example: Ibitinga }, uf: { type: string, example: SP }, source: { type: string, example: database }, city_id: { type: integer, example: 3 }, formated_delivery_time: { type: string, example: 'até 18 dias úteis' }, formated_price: { type: string, example: Grátis }, free_shipment: { type: boolean, example: true }, real_price: { type: number, format: float, example: 0 } }, type: object }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'CEP não encontrado'
  '/{alias}/logistics/stock-reservations':
    get:
      tags:
        - 'Logística - Reservas de estoque'
      summary: 'Listar reserva de estoque'
      description: 'Lista todas as reservas de estoque'
      operationId: GetLogisticsStock-reservations
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: sku_id
          in: query
          description: 'Filtrar por ID do SKU'
          schema:
            type: integer
        -
          name: stock_id
          in: query
          description: 'Filtrar por ID do estoque'
          schema:
            type: integer
        -
          name: order_id
          in: query
          description: 'Filtrar por ID do pedido'
          schema:
            type: integer
        -
          name: q
          in: query
          description: 'Filtrar por nome de produto ou SKU'
          schema:
            type: string
      responses:
        '200':
          description: 'Lista das reservas de estoque'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/StockReservation' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
  '/{alias}/logistics/stock-reservations/{id}':
    get:
      tags:
        - 'Logística - Reservas de estoque'
      summary: 'Visualizar reserva de estoque'
      description: 'Obtém os dados de uma determinada reserva de estoque'
      operationId: GetLogisticsStock-reservationsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da reserva de estoque'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do estoque'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockReservation'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Reserva de estoque não encontrada'
  '/{alias}/logistics/stocks':
    get:
      tags:
        - 'Logística - Estoques'
      summary: 'Listar estoques'
      description: 'Lista todos os estoques'
      operationId: GetLogisticsStocks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Estoque excluído com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Stock' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Estoque não encontrado'
    post:
      tags:
        - 'Logística - Estoques'
      summary: 'Criar estoque'
      description: 'Cria um novo estoque'
      operationId: PostLogisticsStocks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockRequest'
      responses:
        '200':
          description: 'Estoque criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Stock'
        '400':
          description: 'Requisição inválida'
  '/{alias}/logistics/stocks/{id}':
    get:
      tags:
        - 'Logística - Estoques'
      summary: 'Visualizar estoque'
      description: 'Obtém os dados de um determinado estoque'
      operationId: GetLogisticsStocksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do estoque'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do estoque'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Stock'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Estoque não encontrado'
    put:
      tags:
        - 'Logística - Estoques'
      summary: 'Atualizar estoque'
      description: 'Atualiza os dados de um determinado estoque'
      operationId: PutLogisticsStocksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do estoque'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockRequest'
      responses:
        '200':
          description: 'Estoque atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Stock'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Estoque não encontrado'
    delete:
      tags:
        - 'Logística - Estoques'
      summary: 'Excluir estoque'
      description: 'Exclui um determinado estoque'
      operationId: DeleteLogisticsStocksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do estoque'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Estoque excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Estoque não encontrado'
  '/{alias}/logistics/warehouses':
    get:
      tags:
        - 'Logística - Armazéns'
      summary: 'Listar armazéns'
      description: 'Listar todos os armazéns cadastrados'
      operationId: GetLogisticsWarehouses
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de armazéns'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Warehouse' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Logística - Armazéns'
      summary: 'Criar armazéns'
      description: 'Cria um novo armazém com os dados especificados'
      operationId: PostLogisticsWarehouses
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WarehouseRequest'
      responses:
        '200':
          description: 'Lista de armazéns'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Warehouse'
        '400':
          description: 'Requisição inválida'
  '/{alias}/logistics/warehouses/{id}':
    get:
      tags:
        - 'Logística - Armazéns'
      summary: 'Visualizar armazém'
      description: 'Obtém as informações de um armazém específico'
      operationId: GetLogisticsWarehousesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do armazém'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do armazém'
          content:
            application/json:
              schema: {  }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Armazém não encontrado'
    put:
      tags:
        - 'Logística - Armazéns'
      summary: 'Atualizar armazém'
      description: 'Atualiza as informações de um armazém específico'
      operationId: PutLogisticsWarehousesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do armazém'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WarehouseRequest'
      responses:
        '200':
          description: 'Armazém atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Warehouse'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Armazém não encontrado'
    delete:
      tags:
        - 'Logística - Armazéns'
      summary: 'Excluir armazém'
      description: 'Exclui um armazém específico'
      operationId: DeleteLogisticsWarehousesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do armazém'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Armazém excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Armazém não encontrado'
  '/{alias}/logistics/zipcode/{zipcode}':
    get:
      tags:
        - 'Logística - CEP'
      summary: 'Consultar CEP'
      description: 'Consulta as informações de um CEP específico'
      operationId: GetLogisticsZipcodeZipcode
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: zipcode
          in: path
          description: 'CEP para consulta'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Informações do CEP'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { properties: { zipcode: { type: string, example: '01505010' }, street: { type: string, example: 'Rua Anita Ferraz' }, neighborhood: { type: string, example: Sé }, city: { type: string, example: 'São Paulo' }, uf: { type: string, example: SP }, source: { type: string, example: database }, city_id: { type: integer, example: 173 } }, type: object } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'CEP não encontrado'
  '/{alias}/marketing/banners':
    get:
      tags:
        - Marketing
      summary: 'Listar banners'
      description: 'Listar os banners do marketing'
      operationId: GetMarketingBanners
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de banners'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Banner' }, { $ref: '#/components/schemas/BannerAdditionalResponse' }, { $ref: '#/components/schemas/SimplePaginatorWithMeta' }] } } }, type: object }
        '404':
          description: 'Banners não encontrados'
    post:
      tags:
        - Marketing
      summary: 'Criar banner'
      description: 'Cria um novo banner'
      operationId: PostMarketingBanners
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Parâmetros para criar um banner'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BannerRequest'
      responses:
        '201':
          description: 'Banner criado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Banner' }
                  - { $ref: '#/components/schemas/BannerAdditionalResponse' }
        '400':
          description: 'Dados inválidos fornecidos'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
  '/{alias}/marketing/banners/{id}':
    get:
      tags:
        - Marketing
      summary: 'Visualizar banner'
      description: 'Retorna os dados de um banner específico'
      operationId: GetMarketingBannersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do banner'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do banner'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Banner' }
                  - { $ref: '#/components/schemas/BannerAdditionalResponse' }
        '404':
          description: 'Banner não encontrado'
    put:
      tags:
        - Marketing
      summary: 'Ordenar ou atualizar banner'
      description: 'Atualiza a ordem dos banners ou as informações de um banner específico'
      operationId: PutMarketingBannersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do banner'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/BannerSorting'
                -
                  $ref: '#/components/schemas/BannerRequest'
      responses:
        '200':
          description: 'Operação realizada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Banner' }
                  - { $ref: '#/components/schemas/BannerAdditionalResponse' }
        '400':
          description: 'Dados inválidos fornecidos'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
        '404':
          description: 'Banner não encontrado'
    delete:
      tags:
        - Marketing
      summary: 'Excluir banner'
      description: 'Excluir um banner específico'
      operationId: DeleteMarketingBannersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do banner'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Banner excluído com sucesso'
        '404':
          description: 'Banner não encontrada'
  '/{alias}/marketing/banners/{id}/categories':
    get:
      tags:
        - Marketing
      summary: 'Listar categorias que o banner pertence'
      description: 'Retorna uma lista com os dados das categorias que um banner específico pertence'
      operationId: GetMarketingBannersIdCategories
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do banner'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de categorias associadas ao banner'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CategoryBanner' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Banner não encontrado'
  '/{alias}/marketing/banners/{id}/promotions':
    get:
      tags:
        - Marketing
      summary: 'Listar promoções que o banner pertence'
      description: 'Retorna uma lista com os dados das promoções que um banner específico pertence'
      operationId: GetMarketingBannersIdPromotions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do banner'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de promoções associadas ao banner'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/PromotionBanner' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Banner não encontrado'
  '/{alias}/marketing/banners/{id}/collections':
    get:
      tags:
        - Marketing
      summary: 'Listar coleções que o banner pertence'
      description: 'Retorna uma lista com os dados das coleções que um banner específico pertence'
      operationId: GetMarketingBannersIdCollections
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do banner'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de coleções associadas ao banner'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/CollectionBanner' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Banner não encontrado'
  '/{alias}/marketplaces/categories/associate':
    put:
      tags:
        - 'Marketplaces - Categorias'
      summary: 'Associar categorias aos Marketplaces'
      description: 'Alguns Marketplaces trabalham com uma árvore de categorias já definidas. Devido a isso, é necessário realizar o mapeamento das categorias da loja com as do Marketplaces. Para fazer isso use esse endpoint'
      operationId: PutMarketplacesCategoriesAssociate
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssociateCategoryRequest'
      responses:
        '200':
          description: 'Lista de categorias dos marketplaces obtidas com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceCategory' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
  '/{alias}/marketplaces/categories/{marketplaceAlias}':
    get:
      tags:
        - 'Marketplaces - Categorias'
      summary: 'Listar categorias dos Marketplaces'
      description: 'Lista a árvore de categorias definidas pelo marketplace'
      operationId: GetMarketplacesCategoriesMarketplaceAlias
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: marketplaceAlias
          in: path
          description: 'Alias do marketplace'
          required: true
          schema:
            type: string
            enum:
              - mercadolivre
              - cnova
              - madeiramadeira
      responses:
        '200':
          description: 'Lista de categorias dos marketplaces obtidas com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceCategory' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
  '/{alias}/marketplaces/accounts':
    get:
      tags:
        - 'Marketplaces - Contas'
      summary: 'Listar contas de Marketplaces'
      description: 'Retorna uma lista de contas de marketplaces com um filtro opcional para contas ativas'
      operationId: GetMarketplacesAccounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: active
          in: query
          description: 'Filtrar por contas ativas'
          required: false
          schema:
            type: boolean
        -
          name: includes
          in: query
          description: 'Recursos adicionais para incluir na resposta'
          required: false
          schema:
            type: array
            items:
              type: string
              enum:
                - marketplace
                - stock
      responses:
        '200':
          description: 'Contas de marketplaces listadas com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceAccount' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Marketplaces - Contas'
      summary: 'Criar conta de Marketplace'
      description: 'Cria uma nova conta de marketplace'
      operationId: PostMarketplacesAccounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - active
                - marketplace_id
                - stock_id
                - auto_sync_catalog
                - name
                - price_attribute
                - price_percentage
              properties:
                active:
                  type: boolean
                marketplace_id:
                  type: integer
                  example: 1
                stock_id:
                  type: integer
                  example: 35
                auto_sync_catalog:
                  type: boolean
                  example: true
                name:
                  type: string
                  example: 'Conta Mercado Livre'
                price_attribute:
                  type: string
                  example: price_sale
                price_percentage:
                  type: integer
                  example: 0
                params:
                  required: [listing_type_id, allow_sku_without_stock]
                  properties: { listing_type_id: { type: integer, example: bronze }, allow_sku_without_stock: { type: boolean, example: true } }
                  type: object
              type: object
      responses:
        '200':
          description: 'Conta de marketplace criada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceAccount' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/marketplaces/accounts/{id}':
    put:
      tags:
        - 'Marketplaces - Contas'
      summary: 'Atualizar conta de Marketplace'
      description: 'Atualiza as informações de uma conta de marketplace existente'
      operationId: PutMarketplacesAccountsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da conta de marketplace'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MarketplaceAccountRequest'
      responses:
        '200':
          description: 'Conta de marketplace atualizada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceAccount' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Conta de marketplace não encontrada'
    delete:
      tags:
        - 'Marketplaces - Contas'
      summary: 'Excluir conta de Marketplace'
      description: 'Exclui uma conta de marketplace específica'
      operationId: DeleteMarketplacesAccountsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da conta de marketplace'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Conta de marketplace excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Conta de marketplace não encontrada'
  '/{alias}/marketplaces/errors':
    get:
      tags:
        - 'Marketplaces - Lista de erros'
      summary: 'Listar erros'
      description: 'Lista os erros do marketplace'
      operationId: GetMarketplacesErrors
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Conjunto de erros'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MarketplaceError'
  '/{alias}/marketplaces/errors/{id}':
    get:
      tags:
        - 'Marketplaces - Lista de erros'
      summary: 'Visualizar detalhes de um erro'
      description: 'Visualizar detalhes de um erro'
      operationId: GetMarketplacesErrorsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do erro'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes de um erro'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MarketplaceError'
    delete:
      tags:
        - 'Marketplaces - Lista de erros'
      summary: 'Excluir erro'
      description: 'Exclui um determinado erro'
      operationId: DeleteMarketplacesErrorsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do erro'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Sucesso
  '/{alias}/marketplaces/errors/{id}/read':
    put:
      tags:
        - 'Marketplaces - Lista de erros'
      summary: 'Marcar erro como lido'
      description: 'Marca um determinado erro como lido'
      operationId: PutMarketplacesErrorsIdRead
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do erro'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Sucesso
  '/{alias}/marketplaces/errors/filters':
    get:
      tags:
        - 'Marketplaces - Lista de erros'
      summary: 'Listar filtros de busca de erros'
      description: 'Retorna uma lista de filtros disponíveis para busca de erros.'
      operationId: GetMarketplacesErrorsFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Filtrar por erros lidos ou não lidos'
          schema:
            type: string
            enum:
              - read
              - unread
        -
          name: account_id
          in: query
          schema:
            type: array
            items:
              type: number
      responses:
        '200':
          description: 'Filtros personalizados'
          content:
            application/json:
              schema:
                properties:
                  data: { type: object }
                type: object
  '/{alias}/marketplaces/ids':
    get:
      tags:
        - 'Marketplaces - Anúncios'
      summary: 'Listar todos os anúncios'
      description: 'Lista todos os anúncios (ou produtos) cadastrados nos Marketplaces associados à loja'
      operationId: GetMarketplacesIds
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Anúncios listados com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceId' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/marketplaces/ids/{id}':
    put:
      tags:
        - 'Marketplaces - Anúncios'
      summary: 'Atualizar um anúncio'
      description: 'Atualiza um anúncio (ou produto) específico nos Marketplaces associados à loja'
      operationId: PutMarketplacesIdsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do anúncio a ser atualizado'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Anúncio atualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/MarketplaceId' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Anúncio não encontrado'
    delete:
      tags:
        - 'Marketplaces - Anúncios'
      summary: 'Excluir um anúncio'
      description: 'Exclui um anúncio (ou produto) específico dos Marketplaces associados à loja'
      operationId: DeleteMarketplacesIdsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do anúncio a ser excluído'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Anúncio excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Anúncio não encontrado'
  '/{alias}/marketplaces/ids/import':
    post:
      tags:
        - 'Marketplaces - Anúncios'
      summary: 'Importar um anúncio'
      description: 'Importa um anúncio de uma determinada conta'
      operationId: PostMarketplacesIdsImport
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: account_id
          in: query
          description: 'ID da conta'
          required: true
          schema:
            type: number
      responses:
        '200':
          description: 'Resultado do pedido de importação'
          content:
            application/json:
              schema:
                properties:
                  queue_id: { type: integer }
                  total: { type: number }
                type: object
  '/{alias}/marketplaces/ids/{id}/duplicate':
    post:
      tags:
        - 'Marketplaces - Anúncios'
      summary: 'Duplicar um anúncio'
      description: 'Duplica um anúncio, opcionalmente sobrescrevendo alguns campos'
      operationId: PostMarketplacesIdsIdDuplicate
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do anúncio a ser duplicado'
          required: true
          schema:
            type: number
      requestBody:
        description: 'Dados do novo anúncio'
        required: true
        content:
          application/json:
            schema:
              properties:
                title:
                  description: 'Título do anúncio'
                  type: string
                price:
                  description: 'Preço do anúncio'
                  type: number
                  format: float
                  minimum: 6
                params:
                  description: 'Parâmetros para duplicar o anúncio'
                  properties: { free_shipment: { description: 'Se o anúncio irá oferecer frete grátis', type: boolean }, increment_shipping_cost: { description: 'Se o valor do frete será adicionado ao preço do anúncio', type: boolean } }
                  type: object
              type: object
      responses:
        '200':
          description: 'Resultado da duplicação'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { id: { type: integer } }, type: object }
                type: object
  '/{alias}/marketplaces/ids/filters':
    get:
      tags:
        - 'Marketplaces - Anúncios'
      summary: 'Listar filtros de busca de anúncios'
      description: 'Retorna uma lista de filtros disponíveis para busca de anúncios'
      operationId: GetMarketplacesIdsFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: status
          in: query
          schema:
            type: string
            enum:
              - active
              - paused
              - closed
        -
          name: marketplace_id
          in: query
          schema:
            type: array
            items:
              type: number
        -
          name: marketplace_account
          in: query
          schema:
            type: array
            items:
              type: number
        -
          name: synced
          in: query
          schema:
            type: boolean
        -
          name: date
          in: query
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: 'Filtros personalizados'
          content:
            application/json:
              schema:
                properties:
                  data: { type: object }
                type: object
  '/{alias}/marketplaces':
    get:
      tags:
        - Marketplaces
      summary: 'Listar Marketplaces'
      description: 'Retorna a listagem de marketplaces'
      operationId: GetMarketplaces
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: includes
          in: query
          description: 'Inclui dados adicionais (ex: form)'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de marketplaces'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Marketplace' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
  '/{alias}/marketplaces/{marketplaceAlias}':
    get:
      tags:
        - Marketplaces
      summary: 'Visualizar Marketplace'
      description: 'Obtém detalhamentos de um marketplace específico'
      operationId: GetMarketplacesMarketplaceAlias
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: marketplaceAlias
          in: path
          description: 'Alias do marketplace'
          required: true
          schema:
            type: string
            enum:
              - mercadolivre
              - b2w
              - cnova
              - magalu
              - madeiramadeira
              - walmart
              - dafiti
              - kanui
              - tricae
              - carrefour
              - mobly
              - amazon
              - zoom
              - ricardoeletro
              - colombo
      responses:
        '200':
          description: 'Informações do marketplace obtidas com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Marketplace' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/whois/{domain}':
    get:
      tags:
        - 'Público - Loja'
      summary: 'Listar todas as Informações públicas de uma loja'
      description: 'Retorna as Informações públicas de uma loja'
      operationId: GetWhoisDomain
      parameters:
        -
          name: domain
          in: path
          description: 'Alias ou domínio da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Informações públicas da Loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MerchantPublic'
        '404':
          description: 'Loja não encontrada'
  '/{alias}/metrics/cashback/{widget}':
    get:
      tags:
        - 'Métricas - Cashback'
      summary: 'Gerar relatórios de cashback'
      description: 'Gera relatórios de cashback com base no widget informado e nos filtros aplicados.'
      operationId: GetMetricsCashbackWidget
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: widget
          in: path
          description: 'Nome do widget de cashback'
          required: true
          schema:
            type: string
            enum:
              - orders-with-cashback
              - cashback-generated
              - order-percentage
              - average-time-use
            example: orders-with-cashback
      responses:
        '200':
          description: 'Retorna os relatórios de cashbacks informados conforme os filtros'
          content:
            application/json:
              schema:
                properties:
                  start_at: { type: string, format: date-time }
                  end_at: { type: string, format: date-time }
                  compare_start_at: { type: string, format: date-time }
                  compare_end_at: { type: string, format: date-time }
                  data: { properties: { orders_with_cashback: { properties: { data: { type: array, items: { properties: { day: { type: integer, example: 24 }, month: { type: integer, example: 10 }, year: { type: integer, example: 2025 }, total_orders: { type: integer, example: 3 }, total_value: { type: number, format: float, example: 25740 } }, type: object } }, sum_orders: { type: integer, example: 5 }, sum_value: { type: number, format: float, example: 26423.98 }, compare: { properties: { data: { type: array, items: { properties: { day: { type: integer, example: 24 }, month: { type: integer, example: 9 }, year: { type: integer, example: 2025 }, total_orders: { type: integer, example: 1 }, total_value: { type: number, format: float, example: 20740 } }, type: object } }, sum_orders: { type: integer, example: 0 }, sum_value: { type: number, format: float, example: 0 }, percent: { properties: { sum_orders: { type: number, format: float, example: 0 }, sum_value: { type: number, format: float, example: 0 } }, type: object } }, type: object } }, type: object }, cashback_generated: { properties: { data: { properties: { total_cashback_generated: { type: number, format: float, example: 21139.18 }, total_cashback_used: { type: number, format: float, example: 455.98 } }, type: object }, compare: { properties: { data: { properties: { total_cashback_generated: { type: number, format: float, example: 0 }, total_cashback_used: { type: number, format: float, example: 0 } }, type: object }, percent: { properties: { total_cashback_generated: { type: number, format: float, example: 0 } }, type: object } }, type: object } }, type: object }, order_percentage: { properties: { data: { type: array, items: { properties: { day: { type: integer, example: 24 }, month: { type: integer, example: 10 }, year: { type: integer, example: 2025 }, total_orders: { type: integer, example: 3 }, orders_with_cashback: { type: integer, example: 3 }, percentage: { type: number, format: float, example: 100 } }, type: object } }, sum_orders: { type: integer, example: 5 }, sum_orders_with_cashback: { type: integer, example: 5 }, percent_with_cashback: { type: number, format: float, example: 100 } }, type: object }, average_time_to_use: { properties: { data: { properties: { average_days_to_use_cashback: { type: number, format: float, example: 3 } }, type: object } }, type: object } }, type: object }
                type: object
        '400':
          description: 'Dados fornecidos inválidos'
        '422':
          description: 'Verifique os campos obrigatórios e os formatos esperados'
  '/{alias}/html/orders/{id}/content-statement/{token}':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Gerar declaração de conteúdo de um pedido'
      description: 'Gera a declaração de conteúdo de um pedido específico'
      operationId: GetHtmlOrdersIdContent-statementToken
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: token
          in: path
          description: 'Token de autenticação'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Declaração de conteúdo gerada'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido não encontrado'
  '/{alias}/orders/{orderId}/addresses':
    get:
      tags:
        - 'Pedidos - Endereços'
      summary: 'Listar endereços de um pedido'
      description: 'Listar endereços de um pedido'
      operationId: GetOrdersOrderIdAddresses
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: string
      responses:
        '400':
          description: 'Caso esteja utilizando o filtro de busca ao invés de utilizar o endpoint /search/orders.'
        '200':
          description: 'Conjunto de pedidos disponíveis na loja'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/OrderAddress' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
  '/{alias}/orders/{orderId}/addresses/{addressId}':
    get:
      tags:
        - 'Pedidos - Endereços'
      summary: 'Visualizar endereço de um pedido'
      description: 'Listar um endereço de um pedido'
      operationId: GetOrdersOrderIdAddressesAddressId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: string
        -
          name: addressId
          in: path
          description: 'ID do endereço'
          required: true
          schema:
            type: string
      responses:
        '400':
          description: 'Caso esteja utilizando o filtro de busca ao invés de utilizar o endpoint /search/orders.'
        '200':
          description: 'Conjunto de pedidos disponíveis na loja'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/OrderAddress' } } }, type: object }
    put:
      tags:
        - 'Pedidos - Endereços'
      summary: 'Atualizar o endereço de entrega do pedido'
      description: 'Atualiza o endereço de entrega de um pedido específico'
      operationId: PutOrdersOrderIdAddressesAddressId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: addressId
          in: path
          description: 'ID do endereço'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes do endereço'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderAddressRequest'
      responses:
        '200':
          description: 'Endereço de entrega atualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/OrderAddress' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou endereço não encontrados'
  '/{alias}/orders/{orderId}/comments':
    get:
      tags:
        - 'Pedidos - Comentários'
      summary: 'Listar comentários'
      description: 'Retorna uma lista de comentários associados a um pedido específico'
      operationId: GetOrdersOrderIdComments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de comentários retornada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderComment' }, { $ref: '#/components/schemas/OrderCommentAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido não encontrado'
    post:
      tags:
        - 'Pedidos - Comentários'
      summary: 'Criar comentário de pedido'
      description: 'Cria um novo comentário associado a um pedido específico'
      operationId: PostOrdersOrderIdComments
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes do comentário'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderCommentRequest'
      responses:
        '200':
          description: 'Comentário criado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderComment' }, { $ref: '#/components/schemas/OrderCommentAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido não encontrado'
  '/{alias}/orders/{orderId}/comments/{commentId}':
    get:
      tags:
        - 'Pedidos - Comentários'
      summary: 'Visualizar detalhes de um comentário de pedido'
      description: 'Retorna os detalhes de um comentário específico associado a um pedido'
      operationId: GetOrdersOrderIdCommentsCommentId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: commentId
          in: path
          description: 'ID do comentário'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do comentário de um pedido'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderComment' }, { $ref: '#/components/schemas/OrderCommentAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou comentário não encontrados'
    put:
      tags:
        - 'Pedidos - Comentários'
      summary: 'Atualizar comentário de um pedido'
      description: 'Atualiza o conteúdo de um comentário específico associado a um pedido'
      operationId: PutOrdersOrderIdCommentsCommentId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: commentId
          in: path
          description: 'ID do comentário'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes do pedido'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderCommentRequest'
      responses:
        '200':
          description: 'Comentário atualizado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderComment' }, { $ref: '#/components/schemas/OrderCommentAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou comentário não encontrados'
    delete:
      tags:
        - 'Pedidos - Comentários'
      summary: 'Excluir um comentário de pedido'
      description: 'Excluir o conteúdo de um comentário específico associado a um pedido'
      operationId: DeleteOrdersOrderIdCommentsCommentId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: commentId
          in: path
          description: 'ID do comentário'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Comentário excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou comentário não encontrados'
  '/{alias}/orders/{orderId}/emails':
    get:
      tags:
        - 'Pedidos - Emails'
      summary: 'Listar e-mails'
      description: 'Lista os e-mails relacionados a um pedido específico'
      operationId: GetOrdersOrderIdEmails
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de e-mails'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderEmail' }, { $ref: '#/components/schemas/OrderEmailAdditionalResponse' }] } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido não encontrado'
  '/{alias}/orders/{orderId}/emails/{messageId}':
    get:
      tags:
        - 'Pedidos - Emails'
      summary: 'Visualizar e-mail'
      description: 'Recupera os detalhes de um e-mail específico de um pedido'
      operationId: GetOrdersOrderIdEmailsMessageId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: messageId
          in: path
          description: 'ID da mensagem'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do e-mail'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderEmail'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou e-mail não encontrados'
  '/{alias}/orders/{orderId}/invoices':
    get:
      tags:
        - 'Pedidos - Notas fiscais'
      summary: 'Listar notas fiscais'
      description: 'Retorna uma lista de notas fiscais associadas a um pedido específico'
      operationId: GetOrdersOrderIdInvoices
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de notas fiscais retornada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderInvoice' }, { $ref: '#/components/schemas/OrderInvoiceAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
    post:
      tags:
        - 'Pedidos - Notas fiscais'
      summary: 'Criar uma nota fiscal'
      description: 'Cria uma nova nota fiscal para um pedido específico'
      operationId: PostOrdersOrderIdInvoices
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes da nota fiscal'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderInvoiceRequest'
      responses:
        '200':
          description: 'Nota fiscal criada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderInvoice' }, { $ref: '#/components/schemas/OrderInvoiceAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido não encontrado'
  '/{alias}/orders/{orderId}/invoices/{invoiceId}':
    get:
      tags:
        - 'Pedidos - Notas fiscais'
      summary: 'Visualizar detalhes de uma nota fiscal'
      description: 'Visualizar detalhes de uma nota fiscal de um pedido'
      operationId: GetOrdersOrderIdInvoicesInvoiceId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: string
        -
          name: invoiceId
          in: path
          description: 'ID da nota fiscal'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes de uma nota fiscal de um pedido'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderInvoice' }, { $ref: '#/components/schemas/OrderInvoiceAdditionalResponse' }] } }
                type: object
    put:
      tags:
        - 'Pedidos - Notas fiscais'
      summary: 'Atualizar uma nota fiscal'
      description: 'Atualiza uma nota fiscal específica'
      operationId: PutOrdersOrderIdInvoicesInvoiceId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: invoiceId
          in: path
          description: 'ID da nota fiscal'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes da nota fiscal'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderInvoiceRequest'
      responses:
        '200':
          description: 'Nota fiscal atualizada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderInvoice' }, { $ref: '#/components/schemas/OrderInvoiceAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou nota fiscal não encontrados'
    delete:
      tags:
        - 'Pedidos - Notas fiscais'
      summary: 'Excluir uma nota fiscal'
      description: 'Exclui uma nota fiscal específica'
      operationId: DeleteOrdersOrderIdInvoicesInvoiceId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: invoiceId
          in: path
          description: 'ID da nota fiscal'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Nota fiscal excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou nota fiscal não encontrados'
  '/{alias}/orders/{orderId}/labels':
    get:
      tags:
        - 'Pedidos - Etiquetas'
      summary: 'Listar etiquetas de um pedido'
      description: 'Lista todas as etiquetas de um pedido específico'
      operationId: GetOrdersOrderIdLabels
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Etiquetas listadas com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderLabel' }, { $ref: '#/components/schemas/OrderLabelAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido não encontrado'
    post:
      tags:
        - 'Pedidos - Etiquetas'
      summary: 'Criar etiqueta'
      description: 'Cria uma nova etiqueta para um pedido específico'
      operationId: PostOrdersOrderIdLabels
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes da etiqueta'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderLabelRequest'
      responses:
        '200':
          description: 'Etiqueta criada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderLabel' }, { $ref: '#/components/schemas/OrderLabelAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido não encontrado'
  '/{alias}/orders/{orderId}/labels/{labelId}':
    get:
      tags:
        - 'Pedidos - Etiquetas'
      summary: 'Visualizar detalhes de uma etiqueta'
      description: 'Visualizar detalhes de uma etiqueta de um pedido'
      operationId: GetOrdersOrderIdLabelsLabelId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: string
        -
          name: labelId
          in: path
          description: 'ID da etiqueta'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes de uma etiqueta de um pedido'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderLabel' }, { $ref: '#/components/schemas/OrderLabelAdditionalResponse' }] } }
                type: object
    put:
      tags:
        - 'Pedidos - Etiquetas'
      summary: 'Atualizar etiqueta'
      description: 'Atualiza uma etiqueta existente para um pedido específico'
      operationId: PutOrdersOrderIdLabelsLabelId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: labelId
          in: path
          description: 'ID da etiqueta'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes da etiqueta'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderLabelRequest'
      responses:
        '200':
          description: 'Detalhes de uma etiqueta de um pedido'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderLabel' }, { $ref: '#/components/schemas/OrderLabelAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou etiqueta não encontrados'
    delete:
      tags:
        - 'Pedidos - Etiquetas'
      summary: 'Excluir etiqueta'
      description: 'Exclui uma etiqueta existente de um pedido específico'
      operationId: DeleteOrdersOrderIdLabelsLabelId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: labelId
          in: path
          description: 'ID da etiqueta'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Etiqueta excluída com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido ou etiqueta não encontrados'
  '/{alias}/orders/{orderId}/tracking':
    get:
      tags:
        - 'Pedidos - Rastreamento'
      summary: 'Exibir rastreamento'
      description: 'Exibe os detalhes de um determinado rastreamento da entrega de um pedido'
      operationId: GetOrdersOrderIdTracking
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Detalhes do rastreamento de um pedido'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/OrderTracking' }, { $ref: '#/components/schemas/OrderTrackingAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
    post:
      tags:
        - 'Pedidos - Rastreamento'
      summary: 'Criar status de rastreamento'
      description: 'Criar status de rastreamento de um pedido'
      operationId: PostOrdersOrderIdTracking
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: orderId
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Detalhes do rastreamento'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderTrackingRequest'
      responses:
        '200':
          description: 'Detalhes do rastreamento de um pedido'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/OrderTracking' }
                  - { $ref: '#/components/schemas/OrderTrackingAdditionalResponse' }
  '/{alias}/orders':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Listar pedidos'
      description: 'Lista os pedidos de uma loja em um determinado período, respeitando determinados filtros'
      operationId: GetOrders
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - items
                - customer
                - marketplace
                - status
                - statuses
                - shipping_address
                - promocode
                - transactions
                - comments
                - files
                - discounts
                - seller
                - labels
              example: '?include=customer,items'
        -
          $ref: '#/components/parameters/OrderCriteria'
      responses:
        '200':
          description: 'Conjunto de pedidos disponíveis na loja'
          content:
            application/json:
              schema:
                properties:
                  data: { description: 'Detalhes de um pedido', type: array, items: { allOf: [{ $ref: '#/components/schemas/Order' }, { $ref: '#/components/schemas/OrderAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Caso esteja utilizando o filtro de busca ao invés de utilizar o endpoint /search/orders'
    post:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Criar pedido'
      description: 'Cria um pedido na loja (é necessário ter um cliente pré-cadastrado)'
      operationId: PostOrders
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Detalhes do pedido'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderRequest'
      responses:
        '200':
          description: 'Pedido criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
  '/{alias}/orders/{id}':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Visualizar detalhes de um pedido'
      description: 'Visualiza os detalhes de um determinado pedido a partir do seu ID'
      operationId: GetOrdersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - items
                - customer
                - marketplace
                - status
                - statuses
                - shipping_address
                - promocode
                - transactions
                - comments
                - files
                - discounts
                - seller
                - labels
              example: '?include=customer,items'
      responses:
        '200':
          description: 'Detalhes do pedido'
          content:
            application/json:
              schema:
                properties:
                  data: { description: 'Detalhes de um pedido', type: array, items: { allOf: [{ $ref: '#/components/schemas/Order' }, { $ref: '#/components/schemas/OrderAdditionalResponse' }] } }
                type: object
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
    put:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Atualizar pedido'
      description: 'Atualiza os detalhes de um pedido específico'
      operationId: PutOrdersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes do pedido'
        required: true
        content:
          application/json:
            schema:
              properties:
                sync_by_erp:
                  description: 'Marca se o pedido foi importado pelo ERP'
                  type: boolean
                delivered:
                  description: 'Marca se o pedido foi entregue'
                  type: boolean
                shipment_service:
                  description: 'Altera o método de entrega'
                  type: string
                track_url:
                  description: 'URL de rastreamento'
                  type: string
                track_code:
                  description: 'Código de rastreamento'
                  type: string
                status_id:
                  description: 'Status do pedido'
                  type: integer
                status_details:
                  description: 'Alguma observação para anexar ao status'
                  type: string
              type: object
      responses:
        '200':
          description: 'Pedido atualizado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { description: 'Detalhes de um pedido', type: array, items: { allOf: [{ $ref: '#/components/schemas/Order' }, { $ref: '#/components/schemas/OrderAdditionalResponse' }] } }
                type: object
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Dados inválidos. Pode ocorrer quando campos obrigatórios estão ausentes, o formato é incorreto, ou quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
        '404':
          description: 'Pedido não encontrado'
  '/{alias}/orders/{id}/tags':
    put:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Sincronizar as tags de um pedido'
      description: 'Substitui a lista de tags do pedido pela enviada. Envie uma lista vazia para remover todas. As tags são gravadas em minúsculo.'
      operationId: PutOrdersIdTags
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                tags:
                  description: 'Lista completa de tags do pedido'
                  type: array
                  items: { type: string, maxLength: 60 }
                  example: [prioritario, frete-gratis]
              type: object
      responses:
        '204':
          description: 'Tags sincronizadas'
        '422':
          description: 'Payload inválido'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
    post:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Adicionar tags a um pedido'
      description: 'Acrescenta as tags enviadas sem remover as existentes. Idempotente: reenviar a mesma tag não duplica.'
      operationId: PostOrdersIdTags
      parameters:
        -
          name: alias
          in: path
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                tags:
                  type: array
                  items: { type: string, maxLength: 60 }
                  example: [vip]
              type: object
      responses:
        '204':
          description: 'Tags adicionadas'
        '422':
          description: 'Payload inválido'
  '/{alias}/orders/{id}/transactions':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Listar transações de um pedido'
      description: 'Retorna uma lista de transações associadas a um pedido específico'
      operationId: GetOrdersIdTransactions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de transações do pedido'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Transaction' }, { $ref: '#/components/schemas/TransactionAdditionalResponse' }] } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
  '/{alias}/orders/{id}/items':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Listar produtos de um pedido'
      description: 'Retorna a lista de produtos de um pedido específico'
      operationId: GetOrdersIdItems
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de produtos do pedido'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/OrderItem' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
  '/{alias}/orders/{id}/statuses':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Listar histórico de status de um pedido'
      description: 'Retorna o histórico de status de um pedido específico'
      operationId: GetOrdersIdStatuses
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Histórico de status do pedido'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { properties: { id: { description: 'ID do status', type: integer }, name: { description: 'Nome do status', type: string }, alias: { description: 'Alias do status', type: string }, description: { description: 'Descrição do status', type: string }, details: { description: 'Detalhes adicionais do status', type: string, nullable: true }, created_at: { $ref: '#/components/schemas/BaseTimestamp' }, updated_at: { $ref: '#/components/schemas/BaseTimestamp' } }, type: object } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
  '/{alias}/orders/{id}/boxes':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Listar embalagens de um pedido'
      description: 'Retorna uma lista de embalagens associadas a um pedido específico'
      operationId: GetOrdersIdBoxes
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de embalagens do pedido'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/OrderBoxes' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
  '/{alias}/orders/{id}/tracking':
    get:
      tags:
        - 'Pedidos - Rastreamento'
      summary: 'Rastrear pedido'
      description: 'Obtém o histórico de rastreamento de um pedido específico'
      operationId: GetOrdersIdTracking
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do pedido'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Histórico de rastreamento do pedido'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { properties: { id: { description: 'ID do evento de rastreamento', type: integer }, status: { description: 'Status do rastreamento', type: string, example: 'Objeto postado após o horário limite da agência' }, locale: { description: 'Localização do evento de rastreamento', type: string, example: 'Local: AGF PRUDENTE DE MORAES - IBITINGA/SP' }, date: { properties: { date: { description: 'Data do evento de rastreamento', type: string, format: date-time } }, type: object } }, type: object } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Pedido não encontrado'
  '/{alias}/orders/export':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Exportar pedidos'
      description: 'Exporta pedidos com base nos filtros fornecidos'
      operationId: GetOrdersExport
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: status_id
          in: query
          description: 'Filtrar por ID do status'
          schema:
            type: integer
        -
          name: q
          in: query
          description: 'Consulta de busca'
          schema:
            type: string
        -
          name: channel
          in: query
          description: 'Filtrar por canal'
          schema:
            type: string
        -
          name: affiliation_id
          in: query
          description: 'Filtrar por ID de afiliação'
          schema:
            type: integer
        -
          name: utm_campaign
          in: query
          description: 'Filtrar por campanha UTM'
          schema:
            type: string
        -
          name: utm_source
          in: query
          description: 'Filtrar por fonte UTM'
          schema:
            type: string
        -
          name: product_id
          in: query
          description: 'Filtrar por ID de produto'
          schema:
            type: integer
        -
          name: promocode_id
          in: query
          description: 'Filtrar por ID de código promocional'
          schema:
            type: integer
      responses:
        '200':
          description: 'O sistema enviará para o usuário um e-mail com o link para download da planilha com os registros'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { queue_id: { description: 'Identificador único da fila de exportação.', type: integer }, total: { description: 'Total de categorias a serem exportadas.', type: integer } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/orders/filters':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Listar filtros de busca de pedidos'
      description: 'Retorna uma lista de filtros disponíveis para busca de pedidos'
      operationId: GetOrdersFilters
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de filtros de busca'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderFilters'
        '400':
          description: 'Requisição inválida'
  '/{alias}/orders/export/{service}':
    get:
      tags:
        - 'Pedidos - Pedido'
      summary: 'Exportar pedidos para um determinado serviço'
      description: 'Exporta pedidos para um serviço específico'
      operationId: GetOrdersExportService
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: service
          in: path
          description: 'Nome do serviço para exportação'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Pedidos exportados com sucesso'
          content:
            application/json:
              schema:
                properties:
                  queue_id: { type: string }
                  total: { type: string }
                type: object
        '400':
          description: 'Requisição inválida'
  /ping:
    get:
      tags:
        - Sistema
      summary: 'Endpoint de Ping'
      description: 'Retorna se API está OK'
      operationId: GetPing
      responses:
        '200':
          description: 'Retorna se API está OK'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Everything is going to be 200 OK!' }
                  ip: { type: string, example: 10.10.10.10 }
                  hash: { type: string, example: 849495bd8d3949fd7f702c84d30546bda32f0493 }
                type: object
  '/{alias}/pricing/cashbacks/rules':
    get:
      tags:
        - 'Promoções - Cashbacks'
      summary: 'Visualizar Regra de Cashback'
      description: 'Retorna as regras do cashback da loja'
      operationId: GetPricingCashbacksRules
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Retorna os detalhes das regras de um cashback'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CashbackRule'
        '400':
          description: 'Dados inválidos fornecidos.'
        '422':
          description: 'Verifique os campos obrigatórios e os formatos esperados.'
    post:
      tags:
        - 'Promoções - Cashback'
      summary: 'Criar regra de cashback'
      description: 'Retorna a regra de cashback da loja'
      operationId: PostPricingCashbacksRules
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CashbackRuleRequest'
      responses:
        '200':
          description: 'Regra de cashback criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CashbackRule'
        '400':
          description: 'Dados inválidos fornecidos'
        '422':
          description: 'Verifique os campos obrigatórios e os formatos esperados.'
  '/{alias}/pricing/cashbacks':
    get:
      tags:
        - 'Promoções - Cashbacks'
      summary: 'Listar Cashbacks'
      description: 'Listar todos os Cashbacks cadastrados'
      operationId: GetPricingCashbacks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de Cashbacks'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Cashback' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Promoções - Cashbacks'
      summary: 'Atualizar cashback'
      description: 'Atualiza os detalhes de um cashback específico'
      operationId: PostPricingCashbacks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CashbackRequest'
      responses:
        '200':
          description: 'Cashback criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cashback'
        '404':
          description: 'Cashback não encontrado'
        '422':
          description: 'Verifique os campos obrigatórios e os formatos esperados.'
  '/{alias}/pricing/cashbacks/{id}':
    get:
      tags:
        - 'Promoções - Cashbacks'
      summary: 'Visualizar Cashback'
      description: 'Retorna os detalhes de um cashback específico'
      operationId: GetPricingCashbacksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cashback'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Retorna os detalhes do cashback'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cashback'
        '400':
          description: 'Dados inválidos fornecidos.'
        '404':
          description: 'Cashback não encontrado'
    put:
      tags:
        - 'Promoções - Cashbacks'
      summary: 'Atualizar cashback'
      description: 'Atualiza os detalhes de um cashback específico'
      operationId: PutPricingCashbacksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cashback'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CashbackRequest'
      responses:
        '200':
          description: 'Cashback atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cashback'
        '400':
          description: 'Dados inválidos fornecidos.'
        '404':
          description: 'Cashback não encontrado'
        '422':
          description: 'Verifique os campos obrigatórios e os formatos esperados.'
    delete:
      tags:
        - 'Promoções - Cashbacks'
      summary: 'Deletar um cashback'
      description: 'Deleta um cashback específico'
      operationId: DeletePricingCashbacksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cashback'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Cashback deletado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cashback'
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Cashback de produtos não encontrado'
  '/{alias}/pricing/combos':
    get:
      tags:
        - 'Promoções - Combos'
      summary: 'Listar combos de produtos'
      description: 'Obtém a lista de combos de produtos'
      operationId: GetPricingCombos
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: active
          in: query
          description: 'Filtrar combos ativos'
          required: false
          schema:
            type: boolean
        -
          name: discount_type
          in: query
          description: 'Tipo de desconto (p para percentual, v para valor)'
          required: false
          schema:
            type: string
            enum:
              - p
              - v
        -
          name: name
          in: query
          description: 'Nome do combo de produtos'
          required: false
          schema:
            type: string
        -
          name: start_at
          in: query
          description: 'Data de início'
          required: false
          schema:
            type: string
            format: date-time
        -
          name: end_at
          in: query
          description: 'Data de término'
          required: false
          schema:
            type: string
            format: date-time
        -
          name: discount_value
          in: query
          description: 'Valor do desconto'
          required: false
          schema:
            type: number
            format: float
        -
          name: products_ids
          in: query
          description: 'IDs dos produtos'
          required: false
          schema:
            type: array
            items:
              type: integer
      responses:
        '200':
          description: 'Lista de combos de produtos'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Combo' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Combos não encontrados'
    post:
      tags:
        - 'Promoções - Combos'
      summary: 'Criar combo de produtos'
      description: 'Cria um novo combo de produtos'
      operationId: PostPricingCombos
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ComboRequest'
      responses:
        '201':
          description: 'Combo de produtos criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Combo'
        '400':
          description: 'Requisição inválida'
  '/{alias}/pricing/combos/{id}':
    get:
      tags:
        - 'Promoções - Combos'
      summary: 'Visualizar combo de produtos'
      description: 'Obtém os detalhes de um combo de produtos específico'
      operationId: GetPricingCombosId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do combo de produtos'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do combo de produtos'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Combo'
        '404':
          description: 'Combo não encontrado'
    put:
      tags:
        - 'Promoções - Combos'
      summary: 'Atualizar combo de produtos'
      description: 'Atualiza os detalhes de um combo de produtos específico'
      operationId: PutPricingCombosId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do combo de produtos'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ComboRequest'
      responses:
        '200':
          description: 'Combo atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Combo'
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Combo de produtos não encontrado'
    delete:
      tags:
        - 'Promoções - Combos'
      summary: 'Excluir combo de produtos'
      description: 'Exclui um combo específico'
      operationId: DeletePricingCombosId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do combo de produtos'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Combo excluído com sucesso'
        '404':
          description: 'Combo não encontrado'
  '/{alias}/pricing/free-shipment':
    get:
      tags:
        - 'Promoções - Frete grátis'
      summary: 'Listar regras de frete grátis'
      description: 'Retorna uma lista de regras de frete grátis'
      operationId: GetPricingFree-shipment
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              properties:
                rules:
                  type: array
                  items: { properties: { uf: { type: string, example: SP }, min: { type: number, format: float, example: 199 }, shipment_service_id: { type: integer, example: 6 }, service_name: { type: string, example: pac } }, type: object }
              type: object
      responses:
        '200':
          description: 'Lista de regras de frete grátis'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/FreeShipment' } }, excluded_brands_ids: { type: array, items: { type: integer } }, excluded_categories_ids: { type: array, items: { type: integer } }, excluded_products_ids: { type: array, items: { type: integer, example: 31055 } }, excluded_products_ids_merged: { type: array, items: { type: integer, example: 31055 } } }, type: object }
                  - { $ref: '#/components/schemas/BaseTimestamp' }
        '404':
          description: 'Regra de frete não encontrada'
    post:
      tags:
        - 'Promoções - Frete grátis'
      summary: 'Criar ou atualizar regras de frete grátis'
      description: 'Cria ou atualiza regras de frete grátis'
      operationId: PostPricingFree-shipment
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FreeShipmentRequest'
      responses:
        '200':
          description: 'Regras de frete grátis criadas ou atualizadas com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FreeShipment'
        '400':
          description: 'Requisição inválida'
  '/{alias}/pricing/freebies':
    get:
      tags:
        - 'Marketing - Brindes'
      summary: 'Listar todos os Brindes de uma loja'
      description: 'Retorna a lista de Brindes cadastrado'
      operationId: GetPricingFreebies
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - resource
              example: '?include=resource'
        -
          $ref: '#/components/parameters/FreebieCriteria'
      responses:
        '200':
          description: 'Lista de Brindes retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Freebie' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Verifique a URL e tente novamente.'
    post:
      tags:
        - 'Marketing - Brindes'
      summary: 'Criar novo Brinde'
      description: 'Cadastra um novo Brinde na loja'
      operationId: PostPricingFreebies
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FreebieRequest'
      responses:
        '200':
          description: 'Brinde criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Freebie'
        '422':
          description: 'Dados inválidos. Verifique os campos obrigatórios: name, active, start_at, resource_type, rule e resource_id. Pode ocorrer também quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
  '/{alias}/pricing/freebies/{id}':
    get:
      tags:
        - 'Marketing - Brindes'
      summary: 'Visualizar os Brindes de uma loja'
      description: 'Retorna as informações de um Brinde cadastrado'
      operationId: GetPricingFreebiesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do brinde'
          required: true
          schema:
            type: integer
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - resource
              example: '?include=resource'
      responses:
        '200':
          description: 'Brinde encontrado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Freebie'
        '404':
          description: 'Brinde não encontrado'
    put:
      tags:
        - 'Marketing - Brindes'
      summary: 'Atualizar um Brinde'
      description: 'Atualiza informações do Brinde na loja'
      operationId: PutPricingFreebiesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do brinde'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FreebieRequest'
      responses:
        '200':
          description: 'Brinde atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Freebie'
        '422':
          description: 'Dados inválidos. Verifique os campos obrigatórios: name, active, start_at, resource_type, rule e resource_id. Pode ocorrer também quando o valor enviado resulta em uma string vazia após sanitização e normalização.'
    delete:
      tags:
        - 'Marketing - Brindes'
      summary: 'Excluir um Brinde'
      description: 'Exclui o Brinde na loja'
      operationId: DeletePricingFreebiesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do brinde'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Brinde excluído com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Freebie'
        '404':
          description: 'Brinde não encontrado'
  '/{alias}/pricing/freebies/batch-delete':
    delete:
      tags:
        - 'Marketing - Brindes'
      summary: 'Excluir todos os Brindes em lote'
      description: 'Exclui todos os Brindes na loja'
      operationId: DeletePricingFreebiesBatch-delete
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Todos os Brindes foram excluídos com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Freebie'
        '404':
          description: 'Verifique a URL e tente novamente'
  '/{alias}/pricing/order-bumps':
    get:
      tags:
        - 'Promoções - Order Bump'
      summary: 'Listar Order Bumps'
      description: 'Listar todos os Order Bumps cadastrados'
      operationId: GetPricingOrder-bumps
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - resource
              example: '?include=resource'
        -
          $ref: '#/components/parameters/OrderBumpCriteria'
      responses:
        '200':
          description: 'Lista de Order Bumps'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/OrderBump' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Promoções - Order Bump'
      summary: 'Criar Order Bump'
      description: 'Cria um novo Order Bump'
      operationId: PostPricingOrder-bumps
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderBumpRequest'
      responses:
        '200':
          description: 'Order Bump criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderBump'
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Verifique os campos obrigatórios e os formatos esperados.'
  '/{alias}/pricing/order-bumps/{id}':
    get:
      tags:
        - 'Promoções - Order Bump'
      summary: 'Visualizar Order Bump'
      description: 'Retorna os detalhes de um Order Bump específico'
      operationId: GetPricingOrder-bumpsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Order Bump'
          required: true
          schema:
            type: integer
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - resource
              example: '?include=resource'
      responses:
        '200':
          description: 'Retorna os detalhes do Order Bump'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderBump'
        '400':
          description: 'Dados inválidos fornecidos.'
        '404':
          description: 'Order Bump não encontrado'
    put:
      tags:
        - 'Promoções - Order Bump'
      summary: 'Atualizar Order Bump'
      description: 'Atualiza os detalhes de um Order Bump específico'
      operationId: PutPricingOrder-bumpsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Order Bump'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderBumpRequest'
      responses:
        '200':
          description: 'Order Bump atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderBump'
        '400':
          description: 'Dados inválidos fornecidos.'
        '404':
          description: 'Order Bump não encontrado'
        '422':
          description: 'Verifique os campos obrigatórios e os formatos esperados.'
    delete:
      tags:
        - 'Promoções - Order Bump'
      summary: 'Deletar Order Bump'
      description: 'Deleta um Order Bump específico'
      operationId: DeletePricingOrder-bumpsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Order Bump'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Order Bump deletado com sucesso'
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Order Bump não encontrado'
  '/{alias}/pricing/order-bumps/batch-delete':
    delete:
      tags:
        - 'Promoções - Order Bump'
      summary: 'Deletar todos os Order Bumps'
      description: 'Deleta todos os Order Bump em massa'
      operationId: DeletePricingOrder-bumpsBatch-delete
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '204':
          description: 'Todos os Order Bumps foram deletados com sucesso'
        '400':
          description: 'Dados inválidos fornecidos'
  '/{alias}/pricing/order-bumps/order':
    put:
      tags:
        - 'Promoções - Order Bump'
      summary: 'Atualizar ordenação de Order Bumps'
      description: 'Atualiza a ordem de exibição dos Order Bumps através de um array de IDs na posição desejada'
      operationId: PutPricingOrder-bumpsOrder
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                orders:
                  description: 'Array de IDs dos Order Bumps na ordem desejada. O índice do array representa a posição (order) e o valor é o ID do Order Bump'
                  type: array
                  items: { type: integer }
                  example: [12345, 67890, 11111]
              type: object
      responses:
        '200':
          description: 'Ordenação atualizada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { type: integer } }
                type: object
        '400':
          description: 'Dados inválidos fornecidos'
        '422':
          description: 'Validação falhou - verifique se todos os IDs existem e pertencem à loja'
  '/{alias}/pricing/progressive-discounts':
    get:
      tags:
        - 'Promoções - Desconto progressivo'
      summary: 'Listar descontos progressivos'
      description: 'Retorna uma lista de descontos progressivos'
      operationId: GetPricingProgressive-discounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: active
          in: query
          required: false
          schema:
            type: boolean
        -
          name: min_value
          in: query
          required: false
          schema:
            type: number
            format: float
        -
          name: max_value
          in: query
          required: false
          schema:
            type: number
            format: float
        -
          name: start_at
          in: query
          required: false
          schema:
            type: string
            format: date-time
        -
          name: end_at
          in: query
          required: false
          schema:
            type: string
            format: date-time
        -
          name: percent
          in: query
          required: false
          schema:
            type: number
            format: float
      responses:
        '200':
          description: 'Lista de descontos progressivos'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProgressiveDiscount' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Promoções - Desconto progressivo'
      summary: 'Criar desconto progressivo'
      description: 'Cria um novo desconto progressivo'
      operationId: PostPricingProgressive-discounts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProgressiveDiscountRequest'
      responses:
        '201':
          description: 'Desconto progressivo criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProgressiveDiscount'
        '400':
          description: 'Requisição inválida'
  '/{alias}/pricing/promocodes':
    get:
      tags:
        - 'Promoções - Cupons de desconto'
      summary: 'Listar cupons'
      description: 'Retorna uma lista de cupons de desconto de acordo com os filtros especificados'
      operationId: GetPricingPromocodes
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - customer
                - categories
                - collections
                - brand
                - products
                - payments
              example: '?include=customer,products'
        -
          $ref: '#/components/parameters/PromocodeCriteria'
      responses:
        '200':
          description: 'Lista de cupons retornada com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { allOf: [{ $ref: '#/components/schemas/Promocode' }, { $ref: '#/components/schemas/PromocodeAdditionalResponse' }] } } }, type: object }
        '404':
          description: 'Cupons não encontrados'
    post:
      tags:
        - 'Promoções - Cupons de desconto'
      summary: 'Criar cupom'
      description: 'Cria um novo cupom de desconto'
      operationId: PostPricingPromocodes
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Parâmetros para criar um cupom de desconto'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromocodeRequest'
      responses:
        '201':
          description: 'Cupom criado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Promocode'
        '400':
          description: 'Dados inválidos fornecidos'
  '/{alias}/pricing/promocodes/{id}':
    get:
      tags:
        - 'Promoções - Cupons de desconto'
      summary: 'Visualizar cupom'
      description: 'Obtém detalhes de um cupom de desconto específico'
      operationId: GetPricingPromocodesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cupom'
          required: true
          schema:
            type: integer
        -
          name: include
          in: query
          description: 'Incluir relacionamentos adicionais'
          schema:
            type: array
            items:
              type: string
              enum:
                - customer
                - categories
                - collections
                - brand
                - products
                - payments
              example: '?include=customer,products'
      responses:
        '200':
          description: 'Detalhes do cupom'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Promocode' }
                  - { $ref: '#/components/schemas/PromocodeAdditionalResponse' }
                  - { $ref: '#/components/schemas/Restrictions' }
        '404':
          description: 'Cupom não encontrado'
    put:
      tags:
        - 'Promoções - Cupons de desconto'
      summary: 'Atualizar cupom'
      description: 'Atualiza os detalhes de um cupom de desconto específico'
      operationId: PutPricingPromocodesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cupom'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromocodeRequest'
      responses:
        '200':
          description: 'Cupom atualizado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Promocode'
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Cupom não encontrado'
    delete:
      tags:
        - 'Promoções - Cupons de desconto'
      summary: 'Excluir cupom'
      description: 'Exclui um cupom de desconto específico'
      operationId: DeletePricingPromocodesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cupom'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Cupom excluído com sucesso'
        '404':
          description: 'Cupom não encontrado'
  '/{alias}/pricing/promocodes/{id}/customers':
    get:
      tags:
        - 'Promoções - Cupons de desconto'
      summary: 'Listar clientes que usaram o cupom'
      description: 'Retorna uma lista de clientes que usaram um cupom específico'
      operationId: GetPricingPromocodesIdCustomers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do cupom'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de clientes que usaram o cupom'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/PromocodeCustomer' }
        '404':
          description: 'Cupom não encontrado'
  '/{alias}/pricing/promotions':
    get:
      tags:
        - 'Promoções - Produtos'
      summary: 'Listar promoções'
      description: 'Lista todas as promoções'
      operationId: GetPricingPromotions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromotionRequest'
      responses:
        '200':
          description: 'Lista de promoções'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Promotion' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Promoções - Produtos'
      summary: 'Criar promoção'
      description: 'Cria uma nova promoção'
      operationId: PostPricingPromotions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromotionRequest'
      responses:
        '201':
          description: 'Promoção criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Promotion'
        '400':
          description: 'Requisição inválida'
  '/{alias}/pricing/promotions/{id}':
    get:
      tags:
        - 'Promoções - Produtos'
      summary: 'Visualizar promoção'
      description: 'Obtém os detalhes de uma promoção específica'
      operationId: GetPricingPromotionsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da promoção'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da promoção'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Promotion' }
                  - { $ref: '#/components/schemas/PromotionAdditionalResponse' }
        '404':
          description: 'Promoção não encontrada'
    put:
      tags:
        - 'Promoções - Produtos'
      summary: 'Atualizar promoção'
      description: 'Atualiza os detalhes de uma promoção específica'
      operationId: PutPricingPromotionsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da promoção'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Promotion'
      responses:
        '200':
          description: 'Detalhes da promoção'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Promotion' }
                  - { $ref: '#/components/schemas/PromotionAdditionalResponse' }
                  - { $ref: '#/components/schemas/Restrictions' }
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Promoção não encontrada'
    delete:
      tags:
        - 'Promoções - Produtos'
      summary: 'Excluir promoção'
      description: 'Exclui uma promoção específica'
      operationId: DeletePricingPromotionsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da promoção'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Promoção excluída com sucesso'
        '404':
          description: 'Promoção não encontrada'
  '/{alias}/pricing/promotions/{id}/products':
    get:
      tags:
        - 'Promoções - Produtos'
      summary: 'Listar produtos da promoção'
      description: 'Obtém a lista de produtos associados a uma promoção específica'
      operationId: GetPricingPromotionsIdProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da promoção'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Lista de produtos da promoção'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/ProductPromotions' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Promoção ou produtos não encontrados'
  '/{alias}/pricing/upsells':
    get:
      tags:
        - 'Promoções - Upsells'
      summary: 'Listar upsells'
      description: 'Lista os upsells disponíveis'
      operationId: GetPricingUpsells
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: q
          in: query
          description: 'Query para filtrar os upsells'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de upsells'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Upsell' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Promoções - Upsells'
      summary: 'Criar upsell'
      description: 'Cria um novo upsell'
      operationId: PostPricingUpsells
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsellRequest'
      responses:
        '200':
          description: 'Upsell criado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Upsell' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/pricing/upsells/{id}':
    get:
      tags:
        - 'Promoções - Upsells'
      summary: 'Visualizar um upsell'
      description: 'Visualiza um upsell específico'
      operationId: GetPricingUpsellsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do upsell'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do upsell'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Upsell' } } }, type: object }
        '404':
          description: 'Upsell não encontrada'
    put:
      tags:
        - 'Promoções - Upsells'
      summary: 'Atualizar um upsell'
      description: 'Atualizar um upsell'
      operationId: PutPricingUpsellsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do upsell'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsellRequest'
      responses:
        '200':
          description: 'Upsell atualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Upsell' } } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Upsell não encontrado'
    delete:
      tags:
        - 'Promoções - Upsells'
      summary: 'Deletar Upsell'
      description: 'Deleta um Upsell específico'
      operationId: DeletePricingUpsellsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Upsell'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Upsell deletado com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Upsell'
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Upsell não encontrado'
  '/{alias}/pricing/wallet/balance':
    get:
      tags:
        - 'Promoções - Carteira'
      summary: 'Visualizar saldo de cashback do cliente'
      description: 'Retorna o saldo do cashback do cliente. É necessário informar ao menos um dos parâmetros: customer_id, customer_email_hash ou customer_email.'
      operationId: GetPricingWalletBalance
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: customer_id
          in: query
          description: 'ID do cliente. Obrigatório quando customer_email_hash e customer_email não são informados.'
          required: false
          schema:
            type: integer
            example: 200001
        -
          name: customer_email_hash
          in: query
          description: 'Hash do e-mail do cliente. Obrigatório quando customer_id e customer_email não são informados.'
          required: false
          schema:
            type: string
            example: 5d41402abc4b2a76b9719d911017c592
        -
          name: customer_email
          in: query
          description: 'E-mail do cliente. Obrigatório quando customer_id e customer_email_hash não são informados.'
          required: false
          schema:
            type: string
            format: email
            example: cliente@example.com
      responses:
        '200':
          description: 'Saldo do cashback retornado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { properties: { balance: { description: 'Saldo atual do cliente', type: number, format: float, example: 20 } }, type: object }
                type: object
        '400':
          description: 'Requisição inválida'
        '422':
          description: 'Nenhum parâmetro de identificação do cliente foi informado'
  '/{alias}/pricing/wallet/statement/{customerID}':
    get:
      tags:
        - 'Promoções - Carteira'
      summary: 'Visualizar extrato de cashback'
      description: 'Retorna extrato com o histórico de um cashback de um cliente'
      operationId: GetPricingWalletStatementCustomerID
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: customerID
          in: path
          description: 'ID do cliente que possui cashbacks.'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Extrato do cashback retornado com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { $ref: '#/components/schemas/WalletTransaction' } }
                type: object
        '400':
          description: 'Requisição inválida'
  '/{alias}/pricing/wallet/transaction':
    post:
      tags:
        - 'Promoções - Carteira'
      summary: 'Criar transação na carteira de cashback'
      description: 'Cria uma transação de crédito ou débito na carteira de cashback do cliente. O sufixo '' (via API)'' é adicionado automaticamente à descrição. Rate limit: 5 requisições por minuto.'
      operationId: PostPricingWalletTransaction
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - customer_email
                - transaction_type
                - amount
                - expires_at
                - description
              properties:
                customer_email:
                  description: 'E-mail do cliente. Deve pertencer a um cliente cadastrado na loja.'
                  type: string
                  format: email
                  example: cliente@example.com
                transaction_type:
                  description: 'Tipo da transação: credit para adicionar saldo, debit para subtrair.'
                  type: string
                  enum: [credit, debit]
                  example: credit
                amount:
                  description: 'Valor da transação.'
                  type: number
                  format: float
                  minimum: 0
                  example: 15.5
                expires_at:
                  description: 'Data de expiração do crédito no formato Y-m-d. Deve ser igual ou posterior a hoje.'
                  type: string
                  format: date
                  example: '2026-12-31'
                description:
                  description: 'Descrição da transação (máximo 140 caracteres, pois o sufixo '' (via API)'' é adicionado automaticamente).'
                  type: string
                  maxLength: 150
                  example: 'Bonificação por indicação'
              type: object
      responses:
        '200':
          description: 'Transação criada com sucesso'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/WalletTransaction' }
                type: object
        '422':
          description: 'Erro de validação'
        '429':
          description: 'Rate limit excedido'
  '/{alias}/queues/{id}':
    get:
      tags:
        - Filas
      summary: 'Visualizar fila'
      description: 'Retorna os detalhes de uma fila específica'
      operationId: GetQueuesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da fila'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes da fila'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueueJobProgress'
        '404':
          description: 'Fila não encontrada'
    put:
      tags:
        - Filas
      summary: 'Atualizar fila'
      description: 'Atualiza os detalhes de uma fila específica'
      operationId: PutQueuesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da fila'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueueJobRequest'
      responses:
        '200':
          description: 'Fila atualizada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueueJobProgress'
        '400':
          description: 'Dados inválidos fornecidos'
        '404':
          description: 'Fila não encontrada'
  '/{alias}/queues':
    post:
      tags:
        - Filas
      summary: 'Criar fila'
      description: 'Cria uma nova fila'
      operationId: PostQueues
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueueJobRequest'
      responses:
        '201':
          description: 'Fila criada com sucesso'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueueJobProgress'
        '400':
          description: 'Dados inválidos fornecidos'
  '/{alias}/queues/{id}/logs':
    get:
      tags:
        - Filas
      summary: 'Listar logs de uma fila'
      description: 'Retorna os logs de uma fila específica'
      operationId: GetQueuesIdLogs
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID da fila'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Logs da fila'
          content:
            application/json:
              schema:
                properties:
                  data: { type: array, items: { $ref: '#/components/schemas/QueueJobLog' } }
                type: object
        '404':
          description: 'Fila não encontrada'
  '/{alias}/search/global':
    get:
      tags:
        - 'Busca - Global'
      summary: 'Listar Resultados mais recentes retornados pela busca'
      description: 'lista as entradas mais recentes retornados pela busca'
      operationId: GetSearchGlobal
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de entradas retornados pela busca'
          content:
            application/json:
              schema:
                properties:
                  data: { description: 'Estrutura global.', properties: { products: { $ref: '#/components/schemas/ProductLabel' }, customers: { description: 'Lista de clientes retornados pela busca.', type: object, allOf: [{ $ref: '#/components/schemas/Customer' }, { $ref: '#/components/schemas/CustomerAdditionalResponse' }] }, orders: { description: 'Lista de pedidos retornados pela busca.', type: object, allOf: [{ $ref: '#/components/schemas/Order' }, { $ref: '#/components/schemas/OrderAdditionalResponse' }] } }, type: object }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'URL inválida'
  '/{alias}/public/search/products/':
    get:
      tags:
        - 'Público - Busca'
      summary: 'Listar Produtos da loja'
      description: 'Retorna as informações públicas de produtos de uma loja'
      operationId: GetPublicSearchProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductSearchRequest'
      responses:
        '200':
          description: 'Informações públicas dos produtos da Loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductSearchMeta'
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/public/search/products/brands':
    get:
      tags:
        - 'Público - Busca'
      summary: 'Mostrar marcas dos produtos da loja'
      description: 'Retorna as informações públicas das marcas de produtos de uma loja'
      operationId: GetPublicSearchProductsBrands
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductSearchRequest'
      responses:
        '200':
          description: 'Informações públicas sobre marcas dos produtos da Loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandSearch'
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/public/search/products/prices':
    get:
      tags:
        - 'Público - Busca'
      summary: 'Mostrar range de preços de produtos da loja'
      description: 'Retorna as Informações públicas dos preços dos produtos de uma loja'
      operationId: GetPublicSearchProductsPrices
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductSearchRequest'
      responses:
        '200':
          description: 'Informações públicas dos preços dos produtos da Loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PriceSearchRange'
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/public/search/products/promotions':
    get:
      tags:
        - 'Público - Busca'
      summary: 'Listar Promoções da loja'
      description: 'Retorna as informações públicas das promocoes de uma loja'
      operationId: GetPublicSearchProductsPromotions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductSearchRequest'
      responses:
        '200':
          description: 'Informações públicas das Promoções da Loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PromotionSearch'
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/public/search/products/count':
    get:
      tags:
        - 'Público - Busca'
      summary: 'Exibir paginação de produtos da loja'
      description: 'Retorna as informações públicas da paginação de uma loja'
      operationId: GetPublicSearchProductsCount
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Informações públicas de paginação da Loja'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductSearchCount'
        '404':
          description: 'Loja não encontrada'
      security: []
  '/{alias}/search/orders':
    get:
      tags:
        - 'Busca - Pedidos'
      summary: 'Listar Pedidos retornados pela busca'
      description: 'lista pedidos retornados pela busca'
      operationId: GetSearchOrders
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          $ref: '#/components/parameters/OrderSearchCriteria'
      responses:
        '200':
          description: 'Lista de pedidos através da busca'
          content:
            application/json:
              schema:
                properties:
                  data: { type: object, allOf: [{ $ref: '#/components/schemas/Order' }, { $ref: '#/components/schemas/OrderAdditionalResponse' }] }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'URL inválida'
  '/{alias}/search/products':
    get:
      tags:
        - 'Busca - Produtos'
      summary: 'Listar Produtos retornados pela busca'
      description: 'lista produtos retornados pela busca'
      operationId: GetSearchProducts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de produtos através motor de busca'
          content:
            application/json:
              schema:
                properties:
                  data: { type: object, allOf: [{ $ref: '#/components/schemas/Product' }, { $ref: '#/components/schemas/ProductAdditionalResponse' }] }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'URL inválida'
  '/{alias}/search/customers':
    get:
      tags:
        - 'Busca - Clientes'
      summary: 'Listar Clientes retornados pela busca'
      description: 'lista clientes retornados pela busca'
      operationId: GetSearchCustomers
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de clientes através da busca'
          content:
            application/json:
              schema:
                properties:
                  data: { type: object, allOf: [{ $ref: '#/components/schemas/Customer' }, { $ref: '#/components/schemas/CustomerAdditionalResponse' }] }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'URL inválida'
  '/{alias}/search/leads':
    get:
      tags:
        - 'Busca - Leads'
      summary: 'Listar Leads retornados pela busca'
      description: 'lista leads retornados pela busca'
      operationId: GetSearchLeads
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de leads através da busca'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lead'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'URL inválida'
  '/{alias}/search/carts':
    get:
      tags:
        - 'Busca - Carrinhos'
      summary: 'Listar Carrinhos Abandonados retornados pela busca'
      description: 'lista carrinhos abandonados retornados pela busca'
      operationId: GetSearchCarts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de carrinhos através da busca'
          content:
            application/json:
              schema:
                properties:
                  data: { type: object, allOf: [{ $ref: '#/components/schemas/Cart' }, { $ref: '#/components/schemas/CartAdditionalResponse' }] }
                type: object
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'URL inválida'
  '/{alias}/store/scripts':
    get:
      tags:
        - 'Loja Virtual - Scripts'
      summary: 'Listar Scripts'
      description: 'Listar todos os scripts cadastrados'
      operationId: GetStoreScripts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de Scripts'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/Scripts' } } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Loja Virtual - Scripts'
      summary: 'Cadastrar um novo Script'
      description: 'Cadastrar um novo Script'
      operationId: PostStoreScripts
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScriptsRequest'
      responses:
        '200':
          description: 'Script cadastrado com sucesso!'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Scripts'
        '400':
          description: 'Body da requisição inválido.'
        '422':
          description: 'Verifique os campos obrigatórios: name, page e content.'
  '/{alias}/store/scripts/{id}':
    get:
      tags:
        - 'Loja Virtual - Scripts'
      summary: 'Visualizar um Script'
      description: 'Visualizar um Script'
      operationId: GetStoreScriptsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Script'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Visualizar um Script'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Scripts'
        '400':
          description: 'Requisição inválida'
    put:
      tags:
        - 'Loja Virtual - Scripts'
      summary: 'Atualizar um Script'
      description: 'Atualizar um Script'
      operationId: PutStoreScriptsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Script'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScriptsRequest'
      responses:
        '200':
          description: 'Script atualizado com sucesso!'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Scripts'
        '400':
          description: 'Body da Requisição inválido.'
        '404':
          description: 'Script não encontrado.'
        '422':
          description: 'Verifique os campos obrigatórios: name, page e content.'
    delete:
      tags:
        - 'Loja Virtual - Scripts'
      summary: 'Excluir um Script'
      description: 'Excluir um Script'
      operationId: DeleteStoreScriptsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do Script'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Script excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Script não encontrado'
  '/{alias}/users/groups':
    get:
      tags:
        - 'Usuários - Grupos'
      summary: 'Listar grupos de usuários'
      description: 'Lista os grupos de usuários da loja'
      operationId: GetUsersGroups
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista dos grupos de usuários cadastrados'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/UserGroup' }, { $ref: '#/components/schemas/UserGroupAdditionalResponse' }] } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Usuários - Grupos'
      summary: 'Criar grupo de usuários'
      description: 'Cria um novo grupo de usuários com permissões específicas'
      operationId: PostUsersGroups
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Detalhes do grupo de usuários'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserGroupRequest'
      responses:
        '200':
          description: 'Detalhes do grupo de usuários'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/UserGroup' }, { $ref: '#/components/schemas/UserGroupAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/users/groups/{id}':
    get:
      tags:
        - 'Usuários - Grupos'
      summary: 'Visualizar grupo de usuários'
      description: 'Obtém os dados de um grupo de usuários específico'
      operationId: GetUsersGroupsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo de usuário'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do grupo de usuários'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/UserGroup' }, { $ref: '#/components/schemas/UserGroupAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
    put:
      tags:
        - 'Usuários - Grupos'
      summary: 'Atualizar grupo de usuários'
      description: 'Atualiza os dados de um grupo de usuários específico'
      operationId: PutUsersGroupsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo de usuários'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'Detalhes do grupo de usuários'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserGroupRequest'
      responses:
        '200':
          description: 'Grupo de usuários atualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/UserGroup' }, { $ref: '#/components/schemas/UserGroupAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Grupo de usuários não encontrado'
    delete:
      tags:
        - 'Usuários - Grupos'
      summary: 'Excluir grupo de usuários'
      description: 'Exclui um grupo de usuários específico'
      operationId: DeleteUsersGroupsId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do grupo de usuários'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Grupo de usuários excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Grupo de usuários não encontrado'
  '/{alias}/users/invites':
    get:
      tags:
        - 'Usuários - Convites'
      summary: 'Listar convites de usuários'
      description: 'Obtém a lista de convites de usuários enviados para a loja'
      operationId: GetUsersInvites
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de convites de usuários'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/UserInvite' }, { $ref: '#/components/schemas/UserInviteAdditionalResponse' }] } }, type: object }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '400':
          description: 'Requisição inválida'
    post:
      tags:
        - 'Usuários - Convites'
      summary: 'Criar convite de usuário'
      description: 'Cria um novo convite para um usuário específico participar de uma loja'
      operationId: PostUsersInvites
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Detalhes do convite'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserInvite'
      responses:
        '200':
          description: 'Convite enviado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/UserInvite' }, { $ref: '#/components/schemas/UserInviteAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '409':
          description: 'Usuário já convidado ou já é membro'
  '/{alias}/users/invites/{id}':
    get:
      tags:
        - 'Usuários - Convites'
      summary: 'Visualizar convite de usuário'
      description: 'Obtém os detalhes de um convite de usuário específico'
      operationId: GetUsersInvitesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do convite'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do convite de usuário'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/UserInvite' }, { $ref: '#/components/schemas/UserInviteAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Convite de usuário não encontrado'
    delete:
      tags:
        - 'Usuários - Convites'
      summary: 'Excluir convite'
      description: 'Excluir um convite de um usuário específico para participar de uma loja'
      operationId: DeleteUsersInvitesId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do convite'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Convite excluído com sucesso'
        '400':
          description: 'Requisição inválida'
  '/{alias}/users/invites/{id}/resend':
    get:
      tags:
        - 'Usuários - Convites'
      summary: 'Reenviar um convite de usuário'
      description: 'Reenvia o convite de um usuário especificado para participar de uma loja'
      operationId: GetUsersInvitesIdResend
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do convite'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Convite reenviado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: object, allOf: [{ $ref: '#/components/schemas/UserInvite' }, { $ref: '#/components/schemas/UserInviteAdditionalResponse' }] } }, type: object }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Convite de usuário não encontrado'
  '/{alias}/users/permissions':
    get:
      tags:
        - 'Usuários - Permissões'
      summary: 'Listar permissões'
      description: 'Lista todas as permissões'
      operationId: GetUsersPermissions
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de todas as permissões'
          content:
            application/json:
              schema:
                allOf:
                  - { properties: { data: { type: array, items: { $ref: '#/components/schemas/UserPermission' } } }, type: object }
        '400':
          description: 'Requisição inválida'
  '/{alias}/users/permissions/label':
    get:
      tags:
        - 'Usuários - Permissões'
      summary: 'Consultar labels das permissões'
      description: 'Retorna os valores (labels) das permissões pelas chaves.'
      operationId: GetUsersPermissionsLabel
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Labels das permissões'
          content:
            application/json:
              schema:
                properties:
                  labels: { type: object, additionalProperties: { type: string } }
                type: object
  '/{alias}/users/{id}':
    get:
      tags:
        - Usuários
      summary: 'Visualizar detalhes de um usuário'
      description: 'Visualiza os detalhes de uma determinado usuário a partir do seu ID'
      operationId: GetUsersId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do usuário'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do usuário'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/User' }
                  - { properties: { created_at: { properties: { date: { description: 'Data e hora de criação no formato YYYY-MM-DD H:MM:SS (exemplo: 2000-08-17 16:14:24)', type: string, example: '2000-08-17 10:24:24' }, timezone_type: { description: 'Número de representação do timezone.', type: integer, example: '3' }, timezone: { description: 'Identificador do fuso horário.', type: string, example: America/Sao_Paulo } }, type: object } }, type: object }
                  - { properties: { updated_at: { properties: { date: { description: 'Data e hora de atualização no formato YYYY-MM-DD H:MM:SS (exemplo: 2000-08-17 16:14:24)', type: string, example: '2000-06-23 08:05:17' }, timezone_type: { description: 'Número de representação do timezone.', type: integer, example: '3' }, timezone: { description: 'Identificador do fuso horário.', type: string, example: America/Sao_Paulo } }, type: object } }, type: object }
        '404':
          $ref: '#/components/responses/ResourceNotFoundError'
  '/{alias}/webhooks':
    get:
      tags:
        - Webhooks
      summary: 'Listar webhooks'
      description: 'Retorna uma lista de webhooks'
      operationId: GetWebhooks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de webhooks'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Webhook' }
                  - { $ref: '#/components/schemas/WebhookAdditionalResponse' }
                  - { $ref: '#/components/schemas/SimplePaginatorWithMeta' }
        '404':
          description: 'Webhooks não encontrados'
    post:
      tags:
        - Webhooks
      summary: 'Criar um webhook'
      description: 'Criar um novo webhook'
      operationId: PostWebhooks
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookRequest'
      responses:
        '201':
          description: 'Webhook criado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Webhook' }
                  - { $ref: '#/components/schemas/WebhookAdditionalResponse' }
        '400':
          description: 'Requisição inválida'
  '/{alias}/webhooks/{id}':
    get:
      tags:
        - Webhooks
      summary: 'Visualizar webhook'
      description: 'Visualiza os detalhes de um webhook específico'
      operationId: GetWebhooksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do webhook'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Detalhes do webhook'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Webhook' }
                  - { $ref: '#/components/schemas/WebhookAdditionalResponse' }
        '404':
          description: 'Webhook não encontrado'
    put:
      tags:
        - Webhooks
      summary: 'Atualizar um webhook'
      description: 'Atualiza um webhook específico'
      operationId: PutWebhooksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do webhook'
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookRequest'
      responses:
        '200':
          description: 'Webhook atualizado com sucesso'
          content:
            application/json:
              schema:
                allOf:
                  - { $ref: '#/components/schemas/Webhook' }
                  - { $ref: '#/components/schemas/WebhookAdditionalResponse' }
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Webhook não encontrado'
    delete:
      tags:
        - Webhooks
      summary: 'Excluir um webhook'
      description: 'Exclui um webhook existente'
      operationId: DeleteWebhooksId
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
        -
          name: id
          in: path
          description: 'ID do webhook'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Webhook excluído com sucesso'
        '400':
          description: 'Requisição inválida'
        '404':
          description: 'Webhook não encontrado'
  '/{alias}/webhooks/events':
    get:
      tags:
        - Webhooks
      summary: 'Listar eventos de webhooks disponíveis'
      description: 'Lista todos os eventos de webhooks disponíveis'
      operationId: GetWebhooksEvents
      parameters:
        -
          name: alias
          in: path
          description: 'Alias da loja'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Lista de eventos de webhooks'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WebhookEvent'
        '404':
          description: 'Eventos de webhooks não encontrados'
components:
  schemas:
    ProductCriteria:
      title: 'Filtros de Produtos'
      description: 'Mapeia os filtros disponíveis para pesquisa de produtos.'
      properties:
        customization:
          description: 'Indica se o produto contém customizações.'
          type: boolean
          example: '?customization=true'
        custom_shipping:
          description: 'Indica se o produto utiliza frete customizado.'
          type: boolean
          example: '?custom_shipping=false'
        shopify_id:
          description: 'ID do produto no Shopify.'
          type: integer
          example: '?shopify_id=123456'
        variations_type:
          description: 'Indica se o produto possui variantes (ativa=1 ou inativa=0).'
          type: integer
          example: '?variations_type=1'
      type: object
      x-folder: catalogo/produtos
    ProductRecommendation:
      title: 'Produto recomendado'
      description: 'Representa um produto recomendado'
      properties:
        id:
          type: integer
        name:
          type: string
        slug:
          type: string
        url:
          type: string
          format: uri
        image_url:
          type: string
          format: uri
        price:
          type: number
          format: float
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    BatchDeleteProductSkusRequest:
      title: 'Exclusão em Lote de SKUs de um Produto'
      description: 'Representa os dados necessários para excluir SKUs em lote de um produto específico.'
      required:
        - product
      properties:
        delete_all:
          description: 'Indica se a exclusão deve ser aplicada a todos os SKUs do produto. Se definido como true, o campo `skus_id` não é necessário.'
          type: boolean
          example: true
        product:
          type: integer
          example: 102030
        skus_id:
          type: array
          items:
            type: integer
      type: object
    BatchUpdateProductSkusRequest:
      title: 'Atualização em Lote de SKUs de um Produto'
      description: 'Representa os dados que são possíveis atualizar em lote para os SKUs de um produto específico.'
      required:
        - product_id
      properties:
        update_all:
          description: 'Indica se a atualização deve ser aplicada a todos os SKUs do produto. Se definido como true, o campo `skus_id` não é necessário.'
          type: boolean
          example: true
        product_id:
          type: integer
        grid_options_filter:
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
            - 4
        price_cost:
          type: number
          format: float
        price_sale:
          type: number
          format: float
        price_discount:
          type: number
          format: float
        weight:
          type: number
          format: float
        height:
          type: number
          format: float
        width:
          type: number
          format: float
        length:
          type: number
          format: float
        blocked_sale:
          type: boolean
        skus_id:
          type: array
          items:
            type: integer
      type: object
    BrandRequest:
      title: 'Requisição de Marcas'
      description: 'Dados para criação ou atualização de uma marca'
      required:
        - name
        - active
        - featured
      properties:
        name:
          description: 'Nome da marca. Esse valor deve ser único. O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: Yampi
        active:
          description: 'Se a marca está ativo'
          type: boolean
        featured:
          type: boolean
          example: 'false'
        description:
          description: 'Descrição da marca. O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: 'Marca X de produtos'
        logo_url:
          description: 'URL do logo da marca'
          type: string
          format: uri
          example: 'https://foo.bar/logo.png'
      type: object
    BundlesRequest:
      title: BundlesRequest
      description: ''
      required:
        - name
        - image_url
        - items
      properties:
        name:
          type: string
        image_url:
          type: string
          format: uri
        active:
          type: boolean
        modifiable:
          type: boolean
        custom_shipping:
          type: boolean
        shipping_type:
          type: string
          enum:
            - fixed
            - free
        shipping_price:
          type: number
          format: float
        shipping_days:
          type: integer
        items:
          type: array
          items:
            properties:
              sku_id:
                type: integer
              price_type:
                type: string
                enum:
                  - sku
                  - discount
                  - custom
              price:
                type: number
                format: float
              discount:
                type: number
                format: float
              quantity:
                type: integer
            type: object
      type: object
    CategoryRequest:
      title: 'Requisição de categoria'
      description: 'Representa uma requisição para criar categorias'
      required:
        - active
        - name
      properties:
        active:
          type: boolean
          example: true
        name:
          type: string
          example: Categoria
        parent_id:
          type: integer
          nullable: true
        home:
          type: boolean
          nullable: true
        featured:
          type: boolean
          example: false
        price_factor:
          type: number
          format: float
          example: 1
        slug:
          type: string
          example: categoria
        seo_title:
          description: 'O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: 'Título SEO para categoria'
        seo_keywords:
          type: string
          example: 'palavras, chave, SEO'
        seo_description:
          description: 'O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: 'Descrição SEO'
        external_url:
          type: string
          format: url
          example: 'https://www.link.com'
        canonical_url:
          type: string
          format: url
          example: 'https://www.link.com'
        order:
          type: integer
          example: 1
        sort_by:
          type: string
          example: relevance
        banners_ids:
          type: array
          items:
            type: integer
        create_redirect:
          description: 'Se presente na requisição, cria um redirect junto com a atualização. A presença do nó é o que sinaliza a intenção — o conteúdo descreve o redirect.'
          required:
            - url_from
            - url_to
          properties:
            url_from:
              description: 'URL de origem do redirect (path relativo iniciando com /).'
              type: string
              example: /categoria-antiga
            url_to:
              description: 'URL de destino do redirect (path relativo iniciando com /). Deve ser diferente de url_from.'
              type: string
              example: /categoria-nova
          type: object
      type: object
    CollectionRequest:
      title: 'Criação de coleção de produtos'
      description: 'Representa os dados necessários para criar ou atualizar uma coleção de produtos'
      required:
        - active
        - name
        - home
        - start_at
        - end_at
      properties:
        active:
          type: boolean
          example: true
        show_banners:
          type: boolean
          example: true
        featured:
          type: boolean
          example: true
        name:
          type: string
          example: 'Collection Test'
        visible_products:
          type: integer
          example: 4
        home:
          type: boolean
          example: true
        slug:
          type: string
          example: collection-test
        description:
          type: string
          example: 'Test description'
        seo_title:
          type: string
          example: 'Page Title for SEO'
        seo_description:
          type: string
          example: 'Meta Tag Description'
        seo_keywords:
          type: string
          example: 'seo, keywords'
        start_at:
          description: 'Data e hora de início'
          type: string
          format: date-time
          example: '2025-06-01 00:00:00'
        end_at:
          description: 'Data e hora de término'
          type: string
          format: date-time
          example: '2025-08-10 00:00:00'
        stopwatch:
          type: string
          example: daily
        url:
          type: string
          format: uri
          example: 'https://www.domain.com/collection/l'
        products_ids:
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
            - 4
        banners_ids:
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
            - 4
        restrictions:
          properties:
            include:
              properties:
                brands_ids:
                  type: array
                  items: { type: integer }
                  example: [1, 2, 3, 4]
                categories_ids:
                  type: array
                  items: { type: integer }
                  example: [143]
              type: object
            exclude:
              properties:
                categories_ids:
                  type: array
                  items: { type: integer }
                  example: [141]
              type: object
          type: object
        create_redirect:
          description: 'Se presente na requisição, cria um redirect junto com a atualização. A presença do nó é o que sinaliza a intenção — o conteúdo descreve o redirect.'
          required:
            - url_from
            - url_to
          properties:
            url_from:
              description: 'URL de origem do redirect (path relativo iniciando com /).'
              type: string
              example: /colecao-antiga
            url_to:
              description: 'URL de destino do redirect (path relativo iniciando com /). Deve ser diferente de url_from.'
              type: string
              example: /colecao-nova
          type: object
      type: object
    CommentRequest:
      title: 'Criação de comentário de produto'
      description: 'Representa os dados necessários para criar ou atualizar um comentário de produto'
      required:
        - product_id
        - approved
        - name
        - email
        - message
      properties:
        product_id:
          type: integer
        comment_id:
          type: integer
          nullable: true
        approved:
          type: boolean
        name:
          type: string
        email:
          type: string
          format: email
        message:
          type: string
      type: object
    CustomizationRequest:
      title: 'Criação de customização de produto'
      description: 'Representa os dados necessários para criar ou atualizar um customização de produto'
      required:
        - name
        - price
        - type
        - required
        - max_chars
      properties:
        name:
          description: 'Nome da customização'
          type: string
        price:
          description: 'Preço da customização'
          type: number
          format: float
        description:
          description: 'Descrição da customização'
          type: string
        type:
          description: 'Tipo da customização'
          type: string
        required:
          description: 'Se a customização é obrigatória'
          type: boolean
        max_chars:
          description: 'Número máximo de caracteres'
          type: integer
        values:
          type: array
          items:
            description: 'Valor disponível para a customização'
            type: string
      type: object
    FeedRequest:
      title: 'Criação de feed'
      description: 'Representa os dados necessários para criar ou atualizar um feed'
      required:
        - service
        - name
        - url
      properties:
        service:
          type: string
          example: google
        name:
          type: string
          example: ecd73150-e747-11e7-9221-0361c8d4d388
        url:
          type: string
          format: url
          example: 'https://bubbstore.com/xml/ecd73150-e747-11e7-9221-0361c8d4d388.xml'
      type: object
    FilterOptionRequest:
      title: FilterOptionRequest
      required:
        - name
      properties:
        name:
          type: string
          example: Azul
        color:
          description: 'Hexadecimal da cor'
          type: string
          example: '#32706F9'
        image_url:
          type: string
          format: url
          example: 'https://example.com/image.jpg'
      type: object
    FilterRequest:
      title: 'Requisição de Filtro'
      description: 'Dados para criação ou atualização de um filtro de produtos'
      required:
        - name
      properties:
        name:
          description: 'Nome do filtro. Esse valor deve ser único.'
          type: string
          example: Tamanho
        values:
          description: 'Opções de filtro'
          type: array
          items:
            required:
              - name
            properties:
              name:
                description: 'Nome da opção'
                type: string
                example: P
              color:
                description: 'Hexadecimal da cor'
                type: string
                example: '#32706F9'
              image_url:
                type: string
                format: url
                example: 'https://example.com/image.jpg'
            type: object
      type: object
    FlagRequest:
      title: 'Requisição de selos'
      description: 'Dados para criação ou atualização de um valor de um selo'
      required:
        - name
        - active
        - is_visible
      properties:
        name:
          description: 'Nome do selo. Esse valor deve ser único.'
          type: string
          example: 'Dia dos Namorados'
        active:
          description: 'Define se o selo está ativo ou não.'
          type: boolean
          example: true
        is_visible:
          description: 'Define se o selo está visível ou não.'
          type: boolean
          example: true
        image_url:
          description: 'URL da imagem do selo.'
          type: string
          example: 'https://example.com/image.png'
        text_color:
          description: 'Cor do texto do selo no formato hexadecimal (ex: #FFFFFF).'
          type: string
          example: '#FFFFFF'
        background_color:
          description: 'Cor de fundo do selo no formato hexadecimal (ex: #000000).'
          type: string
          example: '#000000'
      type: object
    GridOptionRequest:
      title: 'Requisição de valores de variações'
      description: 'Dados para criação ou atualização de um valor de uma variação'
      required:
        - name
      properties:
        name:
          description: 'Nome do valor de variação. Esse valor deve ser único.'
          type: string
          example: Amarelo
      type: object
    GridRequest:
      title: 'Criação de variação de produto'
      description: 'Representa os dados necessários para criar ou atualizar uma variação de produto'
      required:
        - name
      properties:
        name:
          description: 'Nome da variação'
          type: string
          example: Cor
      type: object
    GroupRequest:
      title: 'Requisição de Grupos de Produtos'
      description: 'Dados para criação ou atualização de um grupo de produtos'
      required:
        - name
      properties:
        name:
          description: 'Nome do grupo. Esse nome deve ser único dentro da loja'
          type: string
          example: Promoções
        products_ids:
          description: 'IDs dos produtos no grupo'
          type: array
          items:
            type: integer
      type: object
    InstallmentsPublicRequest:
      properties:
        amount:
          type: number
          example: 0
      type: object
    LookRequest:
      title: 'Criação de look do catálogo'
      description: 'Representa os dados necessários para criar ou atualizar um look do catálogo'
      required:
        - active
        - name
        - products_ids
        - images
      properties:
        active:
          description: 'Se o look está ativo'
          type: boolean
        name:
          description: 'Nome do look'
          type: string
        slug:
          type: string
          example: nome-do-look
        description:
          description: 'Descrição do look'
          type: string
        products_ids:
          description: 'IDs dos produtos associados ao look'
          type: array
          items:
            type: integer
        images:
          description: 'Imagens do SKU'
          type: array
          items:
            properties:
              url:
                type: string
                format: uri
            type: object
      type: object
    ProductRequest:
      title: 'Requisição de produto'
      description: 'Representa os dados necessários para criar ou atualizar um produto'
      required:
        - simple
        - brand_id
        - active
        - name
      properties:
        simple:
          description: 'Produto possui ou não variações'
          type: boolean
          example: true
        brand_id:
          description: 'ID da marca'
          type: integer
        erp_id:
          description: 'ID de ERP'
          type: integer
        active:
          description: 'Indica se o produto está ativo'
          type: boolean
          example: true
        searchable:
          description: 'Indica se o produto é buscável'
          type: boolean
          example: true
        is_digital:
          description: 'Indica se o produto é digital'
          type: boolean
          example: true
        buy_similars:
          description: 'Sugerir carrossel de produtos similares na compra'
          type: boolean
          example: true
        priority:
          description: 'Nível de relevância (1 ->Padrão, 2 -> Média, 3 -> Alta)'
          type: integer
        rating:
          description: 'Nota de avaliação do produto definida manualmente (quando não calculada a partir das avaliações de clientes).'
          type: integer
          example: 4
        ncm:
          description: 'Código NCM'
          type: string
        name:
          description: 'Nome do produto. O valor é sanitizado e normalizado automaticamente.'
          type: string
        slug:
          description: 'Utilizado em URL e listagens'
          type: string
          example: nome-do-produto
        video:
          description: 'Vídeo do produto'
          type: string
        description:
          description: 'Descrição do produto. O valor é sanitizado e normalizado automaticamente.'
          type: string
        specifications:
          description: 'Especificações do produto. O valor é sanitizado e normalizado automaticamente.'
          type: string
        measures:
          description: 'Medidas do produto (ex: 10x20x30 cm). O valor é sanitizado e normalizado automaticamente.'
          type: string
        gift_value:
          description: 'Valor de presente associado ao produto'
          type: number
          format: float
        seo_title:
          description: 'Título do produto para SEO'
          type: string
        seo_description:
          description: 'Descrição do produto para SEO'
          type: string
        seo_keywords:
          description: 'Palavras-chave para SEO'
          type: string
        canonical_url:
          description: 'URL canônica do produto'
          type: string
        google_category:
          description: 'Categoria Google do produto'
          type: string
        search_terms:
          description: 'Termos extras de busca do produto'
          type: string
        categories_ids:
          description: 'IDs das categorias vinculadas'
          type: array
          items:
            type: integer
        flags_ids:
          description: 'IDs das flags vinculadas'
          type: array
          items:
            type: integer
        filters_values_ids:
          description: 'IDs dos valores de filtros vinculados'
          type: array
          items:
            type: integer
        variations_ids:
          description: 'IDs das variações do produto'
          type: array
          items:
            type: integer
        similars_ids:
          description: 'IDs de produtos similares'
          type: array
          items:
            type: integer
        collections_ids:
          description: 'IDs das coleções vinculadas'
          type: array
          items:
            type: integer
        skus:
          type: array
          items:
            properties:
              sku:
                description: 'Código identificador principal do produto'
                type: string
              erp_id:
                description: 'ID do SKU no sistema ERP'
                type: integer
              barcode:
                description: 'Código de barras do SKU'
                type: string
              price_cost:
                description: 'Preço de custo'
                type: number
                format: float
              price_sale:
                description: 'Preço de venda'
                type: number
                format: float
              price_discount:
                description: 'Preço com desconto'
                type: number
                format: float
              weight:
                description: 'Peso do SKU em kg'
                type: number
                format: float
              height:
                description: 'Altura do SKU em cm'
                type: number
                format: float
              width:
                description: 'Largura do SKU em cm'
                type: number
                format: float
              length:
                description: 'Comprimento do SKU em cm'
                type: number
                format: float
              quantity_managed:
                description: 'Controle de estoque habilitado'
                type: boolean
                example: true
              availability:
                description: 'Disponibilidade do SKU em estoque'
                type: integer
              availability_soldout:
                description: 'Disponibilidade após esgotar'
                type: integer
              blocked_sale:
                description: 'Bloqueia a venda deste SKU'
                type: boolean
                example: true
              images:
                description: 'Imagens do SKU'
                type: array
                items:
                  properties: { url: { description: 'URL da imagem do SKU.', type: string, format: uri } }
                  type: object
            type: object
        create_redirect:
          description: 'Se presente na requisição, cria um redirect junto com a atualização. A presença do nó é o que sinaliza a intenção — o conteúdo descreve o redirect.'
          required:
            - url_from
            - url_to
          properties:
            url_from:
              description: 'URL de origem do redirect (path relativo iniciando com /).'
              type: string
              example: /produto-antigo
            url_to:
              description: 'URL de destino do redirect (path relativo iniciando com /). Deve ser diferente de url_from.'
              type: string
              example: /produto-novo
          type: object
      type: object
    PublicReviewRequest:
      description: 'Lista de IDs a serem consultados.'
      required:
        - id
      properties:
        id:
          description: 'Lista de IDs.'
          type: array
          items:
            type: integer
            example: 123
      type: object
    ReviewRequest:
      title: 'Criação de review de produto'
      description: 'Representa os dados necessários para criar ou atualizar uma review de produto'
      required:
        - product_id
        - name
        - email
        - rating
        - message
      properties:
        product_id:
          description: 'ID do produto'
          type: integer
        name:
          description: 'Nome do autor da review'
          type: string
        email:
          description: 'E-mail do autor da review'
          type: string
        approved:
          description: 'Status de aprovação da review'
          type: boolean
        rating:
          description: 'Avaliação do produto'
          type: integer
        message:
          description: 'Mensagem da review'
          type: string
      type: object
    SkuPhotoOrderRequest:
      title: 'Ordenação de imagens SKU'
      description: 'Representa os dados necessários para alterar a ordem das imagens de um SKU'
      properties:
        orders:
          description: 'Objeto contendo a nova ordem das imagens'
          type: object
          example:
            - '101941'
            - '101940'
            - '101938'
            - '101934'
            - '101933'
            - '101932'
            - '1107'
          additionalProperties:
            description: 'ID da imagem e sua nova ordem'
            type: string
      type: object
    SkuPhotoRequest:
      title: 'Criação de imagens de um SKU'
      description: 'Representa os dados necessários para criar ou atualizar uma imagens de um SKU'
      required:
        - images
      properties:
        upload_option:
          description: 'Opção de upload da imagem'
          type: string
          enum:
            - resize
            - crop
            - fill_canvas
        images:
          description: 'Lista de imagens a serem adicionadas'
          type: array
          items:
            properties:
              url:
                description: 'URL pública da imagem'
                type: string
                format: uri
            type: object
      type: object
    SkuRequest:
      title: 'Criação de SKU'
      description: 'Representa os dados necessários para criar ou atualizar um SKU'
      required:
        - product_id
        - sku
        - price_cost
        - price_sale
        - weight
        - height
        - width
        - length
        - quantity_managed
        - availability
        - availability_soldout
        - blocked_sale
        - variations_values_ids
      properties:
        id:
          type: integer
        store_id:
          type: integer
          readOnly: true
          example: '1'
        product_id:
          type: integer
        sku:
          type: string
          maxLength: 40
        token:
          type: string
        erp_id:
          type: integer
        barcode:
          type: string
        allow_sell_without_customization:
          type: boolean
        price_cost:
          type: number
          format: float
        price_sale:
          type: number
          format: float
        price_discount:
          type: number
          format: float
        weight:
          type: number
          format: float
        height:
          type: number
          format: float
        width:
          type: number
          format: float
        length:
          type: number
          format: float
        quantity_managed:
          type: boolean
        availability:
          type: integer
        availability_soldout:
          type: integer
        blocked_sale:
          type: boolean
        order:
          type: integer
        variations_values_ids:
          type: array
          items:
            type: string
          example: '[''Amarelo'', ''Azul'', ''M'', ''P'']'
        customizations_ids:
          type: array
          items:
            type: integer
          example: '[1,2,3]'
        current_stock:
          description: 'Informações de estoque do SKU. Pode ser enviado como um único objeto ou um array de objetos.'
          type: array
          items:
            properties:
              stock_id:
                description: 'ID do estoque a ser atualizado'
                type: integer
              quantity:
                description: 'Quantidade em estoque'
                type: integer
              min_quantity:
                description: 'Quantidade mínima em estoque'
                type: integer
              availability:
                description: 'Prazo para postagem'
                type: integer
              availability_soldout:
                description: 'Define o comportamento quando o estoque zerar. -1: torna o produto indisponível. 0: continua vendendo sem prazo adicional. >0: define um novo prazo de entrega em dias.'
                type: integer
            type: object
        images:
          type: array
          items:
            properties:
              url:
                type: string
                format: uri
                example: 'https://www.site.com/image1.jpg'
            type: object
      type: object
    StockNotificationRequest:
      title: 'Criação de notificação de estoque de produto'
      description: 'Representa os dados necessários para criar ou atualizar um notificação de estoque de produto'
      required:
        - name
        - sku_id
        - email
      properties:
        sku_id:
          description: 'ID do SKU'
          type: integer
        name:
          description: 'Nome da pessoa que será notificada'
          type: string
        email:
          description: 'E-mail da pessoa que será notificada'
          type: string
      type: object
    CatalogStockRequest:
      title: 'Criação de estoque de produto'
      description: 'Representa os dados necessários para criar ou atualizar um estoque de produto'
      required:
        - stock_id
        - quantity
        - min_quantity
      properties:
        stock_id:
          description: 'ID do estoque'
          type: integer
        quantity:
          description: 'Quantidade do estoque'
          type: integer
        min_quantity:
          description: 'Quantidade mínima do estoque'
          type: integer
      type: object
    ProductTransformed:
      title: 'Produto do catálogo com propriedades extras'
      description: ''
      properties:
        data:
          type: array
          items:
            properties:
              id:
                type: integer
              merchant_id:
                type: integer
              active:
                type: boolean
              simple:
                type: boolean
              has_variations:
                type: boolean
              name:
                type: string
              slug:
                type: string
              rating:
                type: integer
              url:
                type: string
                format: uri
              dates:
                properties:
                  data: { properties: { created_at: { type: string, format: date-time, readOnly: true }, updated_at: { type: string, format: date-time, readOnly: true } }, type: object }
                type: object
              brand:
                properties:
                  data: { properties: { id: { type: integer }, active: { type: boolean }, featured: { type: boolean }, name: { type: string }, description: { type: string, nullable: true }, logo_url: { type: string, nullable: true } }, type: object }
                type: object
              extras:
                properties:
                  data: { properties: { video: { type: string }, search_terms: { type: string }, ncm: { type: string, nullable: true } }, type: object }
                type: object
              texts:
                properties:
                  data: { properties: { description: { type: string }, specifications: { type: string }, measures: { type: string, nullable: true } }, type: object }
                type: object
              seo:
                properties:
                  data: { properties: { seo_title: { type: string }, seo_description: { type: string }, seo_keywords: { type: string } }, type: object }
                type: object
              filters:
                properties:
                  data: { type: array, items: { properties: { name: { type: string }, value: { type: string }, value_id: { type: integer }, color: { type: string } }, type: object } }
                type: object
              flags:
                properties:
                  data: { type: array, items: { type: object } }
                type: object
              variations:
                properties:
                  data: { type: array, items: { properties: { id: { type: integer }, name: { type: string }, values: { type: array, items: { properties: { id: { type: integer }, value: { type: string }, color: { type: string } }, type: object } } }, type: object } }
                type: object
              categories:
                properties:
                  data: { type: array, items: { properties: { id: { type: integer }, name: { type: string } }, type: object } }
                type: object
              images:
                properties:
                  data: { type: array, items: { properties: { small: { properties: { width: { type: integer }, height: { type: integer }, url: { type: string, format: uri } }, type: object }, thumb: { properties: { width: { type: integer }, height: { type: integer }, url: { type: string, format: uri } }, type: object }, medium: { properties: { width: { type: integer }, height: { type: integer }, url: { type: string, format: uri } }, type: object }, large: { properties: { width: { type: integer }, height: { type: integer }, url: { type: string, format: uri } }, type: object } }, type: object } }
                type: object
            type: object
      type: object
    SkuByStock:
      title: 'SKU por estoque'
      description: 'Dados do SKU com informações de estoque e reservas'
      properties:
        product_id:
          description: 'ID do produto'
          type: integer
        sku:
          description: 'Código do SKU'
          type: string
        sku_id:
          description: 'ID do SKU'
          type: integer
        title:
          description: 'Nome do produto'
          type: string
        image:
          description: 'URL da imagem do SKU'
          type: string
          nullable: true
        variations:
          description: 'Variações do SKU'
          type: array
          items:
            type: object
        total_in_stock:
          description: 'Quantidade total em estoque'
          type: integer
        stock_status:
          description: 'Status do estoque'
          type: string
          enum:
            - in_stock
            - out_of_stock
            - low_stock
        min_quantity:
          description: 'Quantidade mínima do estoque'
          type: integer
        stock_id:
          description: 'ID do estoque'
          type: integer
        total_reservation:
          description: 'Total de reservas'
          type: integer
        reservations:
          description: 'Lista de reservas do SKU'
          type: array
          items:
            properties:
              status:
                description: 'Status do pedido'
                type: string
                nullable: true
              client_name:
                description: 'Nome do cliente'
                type: string
                nullable: true
              order_number:
                description: 'Número do pedido'
                type: string
                nullable: true
            type: object
      type: object
    SkuResponse:
      title: 'Resposta do SKU do catálogo'
      description: ''
      properties:
        variations:
          type: array
          items:
            properties:
              name:
                type: string
              value:
                type: string
              value_id:
                type: integer
            type: object
        total_in_stock:
          type: integer
        prices:
          properties:
            data:
              properties:
                currency:
                  type: string
                  example: R$
                price_cost:
                  type: number
                  example: '25'
                price_cost_formated:
                  type: string
                  example: 'R$ 25,00'
                price:
                  type: number
                  example: '25'
                price_formated:
                  type: string
                  example: 'R$ 25,00'
                price_sale:
                  type: number
                  example: '30'
                price_sale_formated:
                  type: string
                  example: 'R$ 30,00'
                price_discount:
                  type: integer
                  example: '25'
                price_discount_formated:
                  type: string
                  example: 'R$ 25,00'
                has_promotion:
                  type: boolean
              type: object
          type: object
      type: object
    CartCriteria:
      title: 'Filtros de Carrinhos Abandonados'
      description: 'Mapeia os filtros disponíveis para pesquisa de carrinhos abandonados.'
      properties:
        q:
          description: 'Termo de busca. A API buscará pelo nome, e-mail ou telefone do cliente.'
          type: string
          example: '?q=joao'
        status:
          description: 'Status do pagamento associado ao carrinho.'
          type: string
          enum:
            - payment_refused
            - no_transaction
          example: '?status=payment_refused'
        has_transactions:
          description: 'Indica se o carrinho possui transações associadas (true ou false).'
          type: boolean
          example: '?has_transactions=true'
        customersData:
          description: 'Filtra carrinhos que possuem dados de clientes associados (true ou false).'
          type: boolean
          example: '?customersData=true'
        date:
          description: 'Permite buscar carrinhos com base em um período de data.'
          type: string
          example: '?date=created_at:2025-01-01|2026-01-31'
      type: object
      x-folder: checkout/carrinhos-abandonados
    InstallmentSimulationResponse:
      title: 'Resposta de Simulação de Parcelamento'
      description: 'Resposta detalhada da simulação de parcelamento, incluindo o número máximo de parcelas, valor máximo da parcela, valor total, textos formatados e detalhes das parcelas'
      properties:
        max_installment:
          description: 'Número máximo de parcelas'
          type: integer
          example: 1
        max_installment_value:
          description: 'Valor máximo da parcela'
          type: number
          format: float
          example: 500
        amount:
          description: 'Valor total do pagamento'
          type: number
          format: float
          example: 500
        text:
          description: 'Texto formatado da parcela sem juros'
          type: string
          example: '1x de R$ 500,00 sem juros'
        text_with_tax:
          description: 'Texto formatado da parcela com juros'
          type: string
          example: '1x de R$ 500,00'
        text_discount_percent:
          description: 'Texto do desconto percentual'
          type: string
          example: null
          nullable: true
        text_discount:
          description: 'Texto do desconto'
          type: string
          example: null
          nullable: true
        installments:
          type: array
          items:
            title: 'Detalhe da Parcela'
            description: 'Detalhes de uma parcela específica, incluindo valores, taxas e textos formatados'
            properties:
              amount:
                description: 'Valor total da parcela'
                type: number
                format: float
                example: 500
              amount_formated:
                description: 'Valor total da parcela formatado'
                type: string
                example: 'R$ 500,00'
              base_value:
                description: 'Valor base da parcela'
                type: number
                format: float
                example: 500
              tax:
                description: 'Taxa aplicada na parcela'
                type: string
                example: '0'
              tax_value:
                description: 'Valor da taxa aplicada'
                type: number
                format: float
                example: 0
              discount_percent:
                description: 'Percentual de desconto aplicado na parcela'
                type: number
                format: float
                example: 0
              discount_value:
                description: 'Valor do desconto aplicado'
                type: number
                format: float
                example: 0
              discount_value_formated:
                description: 'Valor do desconto aplicado formatado'
                type: string
                example: 'R$ 0,00'
              installment:
                description: 'Número da parcela'
                type: string
                example: '1'
              installment_value:
                description: 'Valor da parcela'
                type: number
                format: float
                example: 500
              installment_value_formated:
                description: 'Valor da parcela formatado'
                type: string
                example: 'R$ 500,00'
              text:
                description: 'Texto da parcela sem juros'
                type: string
                example: '1x de R$ 500,00 sem juros'
              text_with_tax:
                description: 'Texto da parcela com juros'
                type: string
                example: '1x de R$ 500,00'
              text_discount_percent:
                description: 'Texto do desconto percentual'
                type: string
                example: null
                nullable: true
              text_discount:
                description: 'Texto do desconto'
                type: string
                example: null
                nullable: true
            type: object
      type: object
    PaymentInstallmentRequest:
      title: 'Requisição de Parcelamento'
      description: 'Objeto de requisição para definir as parcelas de um pagamento, incluindo o ID do pagamento, número de parcelas, taxa e desconto percentual'
      required:
        - payment_id
        - installment
        - tax
        - percent_discount
      properties:
        payment_id:
          type: integer
          example: 2
        installment:
          type: integer
          example: 1
        tax:
          type: number
          format: float
          example: 1.5
        percent_discount:
          type: number
          format: float
          example: 0
      type: object
    PaymentLinkRequest:
      title: 'Payment Link Request'
      description: 'Request para criação e atualização de links de pagamento'
      required:
        - name
        - active
        - skus
      properties:
        name:
          description: 'Nome do link de pagamento'
          type: string
          maxLength: 100
          minLength: 1
        active:
          description: 'Status do link de pagamento'
          type: boolean
        promocode_id:
          description: 'ID do código promocional'
          type: integer
          nullable: true
        customer_id:
          description: 'ID do cliente'
          type: integer
          nullable: true
        customer_address_id:
          description: 'ID do endereço do cliente'
          type: integer
          nullable: true
        skus:
          description: 'Lista de SKUs associados ao link de pagamento'
          type: array
          items:
            required:
              - id
              - quantity
            properties:
              id:
                description: 'ID do SKU'
                type: integer
              quantity:
                description: 'Quantidade do SKU'
                type: integer
            type: object
      type: object
    SellerBankAccountRequest:
      title: 'Criação de conta bancária'
      description: 'Representa os dados necessários para criar ou atualizar um conta bancária'
      required:
        - bank_code
        - external_gateway_id
        - agency
        - agency_digit
        - account
        - account_digit
        - document_number
        - legal_name
        - type
      properties:
        affiliation_id:
          type: integer
          example: 98
          nullable: true
        bank_code:
          type: string
          example: '1'
        external_gateway_id:
          type: integer
          example: 2
        agency:
          type: string
          example: '2222'
        agency_digit:
          type: string
          example: '3'
        account:
          type: string
          example: '1234'
        account_digit:
          type: string
          example: '2'
        document_number:
          type: string
          example: '123456789'
        legal_name:
          type: string
          example: teste
        type:
          type: string
          example: conta_poupanca
      type: object
    SellerRequest:
      title: 'Criação de vendedor'
      description: 'Representa os dados necessários para criar ou atualizar um vendedor'
      required:
        - transfer_enabled
        - name
        - email
        - document
        - document_type
        - transfer_interval
        - transfer_day
        - ref_code
        - percentage_products
        - percentage_shipping
        - liable
      properties:
        affiliation_id:
          type: integer
          nullable: true
        bank_account_id:
          type: integer
          nullable: true
        has_split:
          type: boolean
          nullable: true
        transfer_enabled:
          type: boolean
        active:
          type: boolean
          nullable: true
        name:
          type: string
        email:
          type: string
          format: email
        document:
          type: string
        document_type:
          type: string
          enum:
            - cpf
            - cnpj
        transfer_interval:
          type: string
          enum:
            - daily
            - weekly
            - monthly
        transfer_day:
          type: integer
          example: 0
        antecipatable_volume_percentage:
          type: integer
          example: 0
          nullable: true
        automatic_antecipation_enabled:
          type: boolean
          nullable: true
        ref_code:
          type: string
        external_gateway_id:
          type: integer
          nullable: true
        percentage_products:
          type: integer
          example: 5
        percentage_shipping:
          type: integer
          example: 5
        charge_processing_fee:
          type: boolean
          nullable: true
        liable:
          type: boolean
      type: object
    CartConfigRequest:
      title: 'Criação de configuração de carrinho abandonado'
      description: 'Representa os dados necessários para criar ou atualizar uma configuração de carrinho abandonado'
      required:
        - email_subject
        - email_frequency
        - email_hours_delay
        - promocode_in_first_email
      properties:
        email_subject:
          description: 'Assunto do e-mail para carrinho abandonado'
          type: string
        sms_subject:
          description: 'Assunto do SMS para carrinho abandonado'
          type: string
        email_frequency:
          description: 'Frequência de envio de e-mail'
          type: integer
        email_hours_delay:
          description: 'Horas de atraso para envio do e-mail'
          type: integer
        promocode_in_first_email:
          description: 'Enviar código promocional no primeiro e-mail'
          type: boolean
      type: object
    CheckoutConfigRequest:
      title: 'Atualização da configuração do checkout'
      description: 'Representa os dados necessários para atualizar a configuração do checkout'
      required:
        - sequential_sale_number
        - delivery_working_days
        - show_shipping_in_cart
        - show_products_links
        - show_promocode
        - max_daily_sales_by_ip
        - currency
      properties:
        sequential_sale_number:
          description: 'Número de venda sequencial'
          type: boolean
        delivery_working_days:
          description: 'Dias úteis para entrega'
          type: boolean
        show_shipping_in_cart:
          description: 'Mostrar frete no carrinho'
          type: boolean
        show_products_links:
          description: 'Mostrar links dos produtos'
          type: boolean
        show_promocode:
          description: 'Mostrar campo de código promocional'
          type: boolean
        unify_upsell:
          description: 'Unifica o Upsell no pedido original'
          type: boolean
        max_daily_sales_by_ip:
          description: 'Máximo de vendas diárias por IP'
          type: integer
        currency:
          description: 'Moeda utilizada'
          type: string
        person_type:
          description: 'Tipo de pessoa (física, jurídica, etc.)'
          type: string
        text_footer:
          description: 'Texto no rodapé do checkout'
          type: string
        text_shipping:
          description: 'Texto sobre envio'
          type: string
        text_billet:
          description: 'Texto sobre boleto'
          type: string
        text_card:
          description: 'Texto sobre cartão'
          type: string
        redirect_url_billet:
          description: 'URL de redirecionamento para boleto'
          type: string
        redirect_url_card:
          description: 'URL de redirecionamento para cartão'
          type: string
        redirect_url_deposit:
          description: 'URL de redirecionamento para depósito'
          type: string
      type: object
    EmailConfigRequest:
      title: 'Criação de configuração de e-mail'
      description: 'Representa os dados necessários para criar ou atualizar uma configuração de e-mail'
      required:
        - host
        - username
        - password
        - encryption
        - port
        - from
        - name
      properties:
        host:
          description: 'Servidor SMTP'
          type: string
        username:
          description: 'Nome de usuário do email'
          type: string
        password:
          description: 'Senha do email'
          type: string
        encryption:
          description: 'Tipo de criptografia (ssl/tls)'
          type: string
        port:
          description: 'Porta do servidor SMTP'
          type: integer
        from:
          description: 'E-mail do remetente'
          type: string
        name:
          description: 'Nome do remetente'
          type: string
      type: object
    MerchantDataConfigRequest:
      title: 'Atualização de dados da loja'
      description: 'Representa os dados necessários para atualizar os dados da loja'
      required:
        - maintenance
        - name
        - description
        - email_contact
        - email_sales
        - owner_name
        - zipcode
        - products_per_page
        - address_street
        - address_number
        - address_neighborhood
        - address_city
        - address_state
      properties:
        maintenance:
          description: 'Indicador de manutenção'
          type: boolean
        name:
          description: 'Nome da loja'
          type: string
        razao_social:
          description: 'Razão social da loja'
          type: string
        email_contact:
          description: 'E-mail de contato da loja'
          type: string
          example: merchant@domain.com
        email_sales:
          description: 'E-mail de vendas da loja'
          type: string
          example: merchant@domain.com
        description:
          description: 'Descrição da loja'
          type: string
          example: 'Merchant Description'
        owner_name:
          description: 'Nome do proprietário'
          type: string
          example: 'John Snow'
        phone:
          description: 'Telefone de contato'
          type: string
          example: '99 9999999'
        whatsapp:
          description: 'WhatsApp da loja'
          type: string
          example: '99 9999999'
        ie:
          description: 'Inscrição estadual'
          type: string
          example: '0000'
        cnpj:
          description: 'CNPJ da loja'
          type: string
          example: 00.000.0000/0001-32
        cpf:
          description: 'CPF do proprietário, se aplicável'
          type: string
        full_address:
          description: 'Endereço completo da loja'
          type: string
        address_street:
          type: string
        address_number:
          type: string
        address_complement:
          type: string
        address_neighborhood:
          type: string
        address_city:
          type: string
        address_state:
          type: string
        zipcode:
          description: 'CEP da loja'
          type: string
          example: '14940000'
        products_per_page:
          description: 'Número de produtos por página'
          type: integer
          example: '10'
        logo_url:
          description: 'URL do logo da loja'
          type: string
          example: 'https://url.to/logo.jpg'
        icon_url:
          description: 'URL do ícone da loja'
          type: string
          example: 'https://url.to/logo.jpg'
        facebook_url:
          description: 'URL do Facebook da loja'
          type: string
        instagram_url:
          description: 'URL do Instagram da loja'
          type: string
        youtube_url:
          description: 'URL do YouTube da loja'
          type: string
        pinterest_url:
          description: 'URL do Pinterest da loja'
          type: string
      type: object
    PhotoConfigRequest:
      title: 'Criação de configuração de fotos'
      description: 'Representa os dados necessários para criar ou atualizar uma configuração de fotos'
      required:
        - width_small
        - height_small
        - width_thumb
        - height_thumb
        - width_medium
        - height_medium
        - width_large
        - height_large
      properties:
        width_small:
          description: 'Largura da foto pequena'
          type: integer
        height_small:
          description: 'Altura da foto pequena'
          type: integer
        width_thumb:
          description: 'Largura da miniatura'
          type: integer
        height_thumb:
          description: 'Altura da miniatura'
          type: integer
        width_medium:
          description: 'Largura da foto média'
          type: integer
        height_medium:
          description: 'Altura da foto média'
          type: integer
        width_large:
          description: 'Largura da foto grande'
          type: integer
        height_large:
          description: 'Altura da foto grande'
          type: integer
      type: object
    ServiceConfigRequest:
      title: 'Criação de configuração de serviço'
      description: 'Representa os dados necessários para criar ou atualizar uma configuração de serviço'
      required:
        - active
        - service_alias
        - params
      properties:
        active:
          description: 'Ativar ou desativar a configuração'
          type: boolean
        service_alias:
          description: 'Alias do serviço'
          type: string
        params:
          properties:
            origin_zipcode:
              description: 'CEP de origem'
              type: string
            api_key:
              description: 'Chave da API'
              type: string
          type: object
      type: object
    PageRequest:
      title: 'Requisição de páginas informativas'
      description: 'Dados para criação ou atualização de uma página informativa.'
      required:
        - name
        - active
        - content
      properties:
        name:
          description: 'Nome do página informativa. Esse nome deve ser único dentro da loja'
          type: string
          example: 'Política de Privacidade'
        active:
          description: 'Define se a página está ativo ou não.'
          type: boolean
          example: true
        content:
          description: 'Conteúdo da página informativa'
          type: string
          minLength: 3
          example: true
        create_redirect:
          description: 'Se presente na requisição, cria um redirect junto com a atualização. A presença do nó é o que sinaliza a intenção — o conteúdo descreve o redirect.'
          required:
            - url_from
            - url_to
          properties:
            url_from:
              description: 'URL de origem do redirect (path relativo iniciando com /).'
              type: string
              example: /pagina-antiga
            url_to:
              description: 'URL de destino do redirect (path relativo iniciando com /). Deve ser diferente de url_from.'
              type: string
              example: /pagina-nova
          type: object
      type: object
    CustomerCriteria:
      title: 'Filtros por Compra, Campanha e Origem'
      description: 'Mapeia os filtros disponíveis para pesquisa baseada em campanhas, datas de compra/criação, origem e status.'
      properties:
        state_uf:
          description: 'Estado (UF) associado ao registro.'
          type: array
          items:
            type: string
            enum:
              - AC
              - AL
              - AP
              - AM
              - BA
              - CE
              - DF
              - ES
              - GO
              - MA
              - MT
              - MS
              - MG
              - PA
              - PB
              - PR
              - PE
              - PI
              - RJ
              - RN
              - RS
              - RO
              - RR
              - SC
              - SP
              - SE
              - TO
          example: '?state_uf[]=SP'
        active:
          description: 'Status do registro (ativa=1 ou inativa=0).'
          type: integer
          example: '?active=0'
        clusters_ids:
          description: 'IDs dos clusters associados aos clientes.'
          type: array
          items:
            type: integer
          example: '?clusters_ids[]=1&clusters_ids[]=2'
        buy_product_id:
          description: 'IDs dos produtos comprados pelos clientes.'
          type: array
          items:
            type: integer
          example: '?buy_product_id[]=10&buy_product_id[]=20'
        total_orders:
          description: 'Número total de pedidos feitos pelo cliente.'
          type: integer
          example: '?total_orders=3'
        bought_at:
          description: 'Filtro por data de compra.'
          type: string
          example: '?bought_at=bought_at:2025-05-01|2025-05-31'
      type: object
      x-folder: clientes
    ClusterRequest:
      title: 'Criação de cluster de clientes'
      description: 'Representa os dados necessários para criar ou atualizar um cluster de clientes'
      required:
        - name
        - person_type
        - min_order_value
        - base_price_percent
        - shipping_rules
      properties:
        name:
          description: 'Nome do cluster'
          type: string
        active:
          description: 'Status do cluster'
          type: boolean
        person_type:
          description: 'Tipo de pessoa'
          type: string
        attach_on_signup:
          description: 'Anexar ao cadastro'
          type: boolean
        min_order_value:
          description: 'Valor mínimo do pedido'
          type: string
        base_price_percent:
          description: 'Percentual do preço base'
          type: string
        payments_ids:
          description: 'IDs dos métodos de pagamento'
          type: array
          items:
            type: integer
        carriers_ids:
          description: 'IDs das transportadoras'
          type: array
          items:
            type: integer
        shipping_rules:
          type: array
          items:
            required:
              - country
              - zipcode_min
              - zipcode_max
              - min_order_value
              - shipment_discount_percent
            properties:
              country:
                description: País
                type: string
              zipcode_min:
                description: 'CEP mínimo'
                type: integer
              zipcode_max:
                description: 'CEP máximo'
                type: integer
              min_order_value:
                description: 'Valor mínimo do pedido'
                type: string
              shipment_discount_percent:
                description: 'Percentual de desconto no frete'
                type: string
            type: object
      type: object
    ClusterShippingRequest:
      title: 'Criação de regra de frete do cluster'
      description: 'Representa os dados necessários para criar ou atualizar uma regra de frete do cluster'
      required:
        - cluster_id
        - country
        - zipcode_min
        - zipcode_max
        - min_order_value
        - shipment_percent
      properties:
        cluster_id:
          description: 'ID do cluster'
          type: integer
        country:
          description: 'País da regra de frete'
          type: string
        zipcode_min:
          description: 'CEP inicial'
          type: integer
        zipcode_max:
          description: 'CEP final'
          type: integer
        min_order_value:
          description: 'Valor mínimo para compra'
          type: string
        shipment_percent:
          description: 'Valor base de desconto para entrega'
          type: number
      type: object
    CustomerAddressRequest:
      title: 'Criação de endereço do cliente'
      description: 'Representa os dados necessários para criar ou atualizar um endereço do cliente'
      required:
        - receiver
        - zip_code
        - street
        - number
        - neighborhood
        - city
        - uf
      properties:
        receiver:
          description: 'Nome do recebedor'
          type: string
        zip_code:
          description: CEP
          type: string
        street:
          description: 'Nome da rua'
          type: string
        number:
          description: 'Número do endereço'
          type: string
        neighborhood:
          description: Bairro
          type: string
        complement:
          description: Complemento
          type: string
        city:
          description: Cidade
          type: string
        uf:
          description: Estado
          type: string
      type: object
    CustomerRequest:
      title: 'Criação de cliente'
      description: 'Representa os dados necessários para criar ou atualizar um cliente'
      required:
        - active
        - type
        - email
        - cnpj
        - cpf
        - homephone
      properties:
        marketplace_id:
          description: 'ID do marketplace'
          type: integer
          nullable: true
        cluster_id:
          description: 'ID do cluster'
          type: integer
          nullable: true
        active:
          description: 'Status do cliente'
          type: boolean
        type:
          description: 'Tipo de cliente (f para físico, j para jurídico)'
          type: string
          enum:
            - f
            - j
        name:
          description: 'Nome do cliente'
          type: string
        razao_social:
          description: 'Razão social'
          type: string
          nullable: true
        cpf:
          description: 'CPF do cliente'
          type: string
        cnpj:
          description: 'CNPJ do cliente'
          type: string
          nullable: true
        email:
          description: 'E-mail do cliente'
          type: string
        homephone:
          description: 'Telefone residencial'
          type: string
        birthday:
          description: 'Esse campo somente se torna obrigatório caso haja configuração da regra no checkout. Data de aniversário do cliente.'
          type: string
          format: date-time
          example: '2000-06-01'
        ip:
          description: 'IP do cliente'
          type: string
        utm_source:
          description: 'Fonte UTM'
          type: string
        utm_campaign:
          description: 'Campanha UTM'
          type: string
        notes:
          description: 'Notas sobre o cliente'
          type: string
      type: object
    DiscountRequest:
      required:
        - discount_method
        - discount_value
        - discount_type
        - entry_condition_type
        - entry_condition_value
        - accumulate
        - start_at
        - name
      properties:
        name:
          description: 'Nome do desconto.'
          type: string
          maxLength: 100
          minLength: 3
          example: 'Promoção de Outubro'
        code:
          description: 'Código do desconto.'
          type: string
          maxLength: 30
          minLength: 3
          readOnly: true
          example: OCTOBERTAMPO25
          nullable: true
        automatic:
          description: 'Define se o desconto é automático.'
          type: boolean
          readOnly: true
          example: true
        store_id:
          description: 'ID da loja.'
          type: integer
          readOnly: true
          example: 1319250
        discount_method:
          description: 'Método de desconto.'
          type: string
          maxLength: 10
          enum:
            - percent
            - amount
          example: percent
        discount_value:
          description: 'Valor do desconto. Se percentual, o máximo é 100.'
          type: number
          format: float
          minimum: 0.01
          example: 20
        discount_type:
          description: 'Tipo do desconto.'
          type: string
          enum:
            - buy_x_get_y
            - by_payment_method
          example: buy_x_get_y
        entry_condition_type:
          description: 'Tipo de condição para aplicar o desconto.'
          type: string
          enum:
            - amount
            - quantity
          example: amount
        entry_condition_value:
          description: 'Valor mínimo (quantidade de produto ou valor do carrinho) necessário para ativar o desconto.'
          oneOf:
            -
              type: integer
              minimum: 1
              example: 1
            -
              type: number
              minimum: 0.01
              example: 10
        accumulate:
          description: 'Define se o desconto pode acumular com outras promoções.'
          type: boolean
          example: false
        start_at:
          description: 'Data e hora de início'
          type: string
          format: date-time
          example: '2025-06-01 00:00:00'
        end_at:
          description: 'Data e hora de término'
          type: string
          format: date-time
          example: '2025-08-10 00:00:00'
        restrictions:
          description: 'Restrições de aplicação do desconto.'
          required:
            - include
          properties:
            include:
              required:
                - brands_ids
                - products_ids
                - categories_ids
                - collections_ids
              properties:
                brands_ids:
                  description: 'IDs das marcas incluídas.'
                  type: array
                  items: { type: integer, example: 1 }
                  example: [1, 2, 3]
                products_ids:
                  description: 'IDs dos produtos incluídos.'
                  type: array
                  items: { type: integer, example: 5 }
                  example: [5, 6]
                categories_ids:
                  description: 'IDs das categorias incluídas.'
                  type: array
                  items: { type: integer, example: 10 }
                  example: [10, 11]
                collections_ids:
                  description: 'IDs das coleções incluídas.'
                  type: array
                  items: { type: integer, example: 20 }
                  example: [20, 21]
              type: object
          type: object
        specifications:
          description: 'Configurações específicas do tipo de desconto. Os campos obrigatórios variam conforme discount_type.'
          properties:
            payment_method_type:
              description: 'Método de pagamento vinculado ao desconto. Obrigatório quando discount_type=by_payment_method.'
              type: string
              enum:
                - pix
                - credit_card
                - billet
                - pix_in_installments
                - deposit
                - nupay
              example: pix
            set_cart_usage_limit:
              description: 'Define se há limite de uso por carrinho. Obrigatório quando discount_type=buy_x_get_y.'
              type: boolean
              example: true
            cart_usage_limit:
              description: 'Limite de vezes que o desconto pode ser aplicado no carrinho (0 = ilimitado). Obrigatório quando discount_type=buy_x_get_y.'
              type: integer
              minimum: 0
              example: 1
            get_products_quantity:
              description: 'Número de produtos que o cliente receberá. Obrigatório quando discount_type=buy_x_get_y.'
              type: integer
              minimum: 1
              example: 1
            restrictions:
              description: 'Restrições aplicadas ao tipo de promoção específica. Obrigatório quando discount_type=buy_x_get_y.'
              properties:
                include:
                  properties: { brands_ids: { type: array, items: { type: integer, example: 11 } }, products_ids: { type: array, items: { type: integer, example: 51 } }, categories_ids: { type: array, items: { type: integer, example: 4 } }, collections_ids: { type: array, items: { type: integer, example: 9 } } }
                  type: object
              type: object
          type: object
      type: object
    LeadRequest:
      title: 'Criação de Lead'
      description: 'Representa os dados necessários para criar ou atualizar um lead'
      required:
        - email
      properties:
        name:
          description: 'O nome do lead'
          type: string
          example: 'Nome do lead'
        email:
          description: 'O endereço de email do lead'
          type: string
          format: email
          example: lead@exemplo.com
        birthday:
          description: 'Data de nascimento do lead'
          type: string
          format: date
          example: yyyy-mm-dd
        city:
          description: 'Cidade do lead'
          type: string
          example: 'São Paulo'
        state:
          description: 'Estado do lead'
          type: string
          example: SP
        genre:
          description: 'Gênero do lead'
          type: string
          example: m
        params:
          description: 'Parâmetros adicionais'
          type: object
          example:
            foo: Bar
            param2: Param2Value
          additionalProperties:
            type: string
        utm_source:
          description: 'Origem da campanha UTM. O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: google
        utm_campaign:
          description: 'Nome da campanha UTM. O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: promo_verao
        utm_medium:
          description: 'Mídia da campanha UTM. O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: cpc
        utm_term:
          description: 'Termo da campanha UTM. O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: sapatos
        utm_content:
          description: 'Conteúdo da campanha UTM. O valor é sanitizado e normalizado automaticamente.'
          type: string
          example: banner_lateral
      type: object
    BoxRequest:
      title: 'Criação de embalagem'
      description: 'Representa os dados necessários para criar ou atualizar um embalagem'
      required:
        - name
        - outer_width
        - outer_length
        - outer_depth
        - empty_weight
        - inner_width
        - inner_length
        - inner_depth
        - max_weight
      properties:
        name:
          type: string
        outer_width:
          type: number
          format: float
        outer_length:
          type: number
          format: float
        outer_depth:
          type: number
          format: float
        empty_weight:
          type: number
          format: float
        inner_width:
          type: number
          format: float
        inner_length:
          type: number
          format: float
        inner_depth:
          type: number
          format: float
        max_weight:
          type: number
          format: float
      type: object
    CarrierPriceRequest:
      title: 'Criação de preço de transportadora'
      description: 'Representa os dados necessários para criar ou atualizar um preço de transportadora'
      required:
        - id
        - carrier_id
        - description
        - zipcode_min
        - zipcode_max
        - max_weight
        - min_weight
        - price
        - extra_weight_price
        - delivery_days
      properties:
        id:
          type: integer
        carrier_id:
          type: integer
        description:
          type: string
        zipcode_min:
          type: integer
        zipcode_max:
          type: integer
        min_weight:
          type: number
          format: float
        max_weight:
          type: number
          format: float
        price:
          type: number
          format: float
        extra_weight_price:
          type: number
          format: float
        delivery_days:
          type: integer
        increment_percent:
          type: number
          format: float
      type: object
    CarrierRequest:
      title: 'Criação de transportadora'
      description: 'Representa os dados necessários para criar ou atualizar uma transportadora'
      required:
        - active
        - name
        - only_backup_use
        - origin_zipcode
        - increment_percent
        - max_weight
        - active_cubic_weight
        - cubic_weight_factor
        - min_cubic_weight
        - weight_param
        - weight_condition
      properties:
        active:
          type: boolean
        name:
          type: string
        only_backup_use:
          type: boolean
        origin_zipcode:
          type: string
        increment_percent:
          type: number
          format: float
        max_weight:
          type: number
          format: float
        active_cubic_weight:
          type: boolean
        cubic_weight_factor:
          type: number
          format: float
        min_cubic_weight:
          type: number
          format: float
        weight_param:
          type: string
        weight_condition:
          type: string
      type: object
    PublicQuotationByCartRequest:
      title: 'Cotacao de Frete de um Carrinho'
      description: 'Representa os dados necessários para calcular uma cotação de frete de um carrinho de compras'
      required:
        - cart_token
        - zipcode
      properties:
        cart_token:
          type: string
        zipcode:
          type: string
      type: object
    ShippingApiRequest:
      required:
        - name
        - url
        - active
      properties:
        name:
          type: string
          example: 'Sua API de Fretes'
        url:
          type: string
          format: uri
          example: 'https://api.sua-api-de-fretes.com.br'
        active:
          type: boolean
          default: true
        headers:
          type: array
          items:
            properties:
              key:
                type: string
                example: Authorization
              value:
                type: string
                example: 'Bearer TOKEN'
            type: object
      type: object
    ShippingCostRequest:
      title: 'Requisição para cálculo de frete'
      description: 'Representa os dados necessários para realizar o cálculo de frete'
      required:
        - zipcode
        - total
        - skus_ids
        - quantities
        - order_id
      properties:
        order_id:
          type: integer
          example: 123
        zipcode:
          type: string
          example: '14940000'
        total:
          type: number
          format: float
          example: 430
        origin:
          type: string
          example: product_page
        utm_email:
          type: string
          example: john@snow.com
        skus_ids:
          type: array
          items:
            type: integer
          example:
            - 1233
            - 2123
            - 3423
            - 41233
            - 54423
        quantities:
          type: array
          items:
            type: integer
          example:
            - 1
            - 1
            - 1
            - 2
            - 2
      type: object
    StockRequest:
      title: 'Criação de estoque'
      description: 'Representa os dados necessários para criar ou atualizar um estoque'
      required:
        - name
        - delivery_days
        - warehouse_id
      properties:
        name:
          type: string
        delivery_days:
          type: integer
        warehouse_id:
          type: integer
      type: object
    WarehouseRequest:
      title: 'Criação de armazém'
      description: 'Representa os dados necessários para criar ou atualizar um armazém'
      required:
        - country_code
        - name
        - zipcode
        - street
        - number
        - neighborhood
        - city
        - state
      properties:
        country_code:
          type: string
        name:
          type: string
        zipcode:
          type: string
        street:
          type: string
        number:
          type: string
        complement:
          type: string
        neighborhood:
          type: string
        city:
          type: string
        state:
          type: string
      type: object
    BannerRequest:
      title: 'Criação de banner'
      description: 'Representa os dados necessários para criar ou atualizar um banner'
      properties:
        active:
          description: 'Indica se o banner está ativo'
          type: boolean
        home:
          description: 'Indica se o banner aparece na home'
          type: boolean
        name:
          description: 'Nome do banner. O valor é sanitizado e normalizado automaticamente.'
          type: string
        link:
          description: 'Link do banner'
          type: string
        image_url:
          description: 'URL da imagem do banner'
          type: string
        start_at:
          description: 'Data e hora de início'
          type: string
          format: date-time
          example: '2025-06-01 00:00:00'
        end_at:
          description: 'Data e hora de término'
          type: string
          format: date-time
          example: '2025-08-10 00:00:00'
        categories_ids:
          description: 'IDs das categorias'
          type: array
          items:
            type: integer
          example: '[1,2,3]'
        collections_ids:
          description: 'IDs das coleções'
          type: array
          items:
            type: integer
          example: '[1,2,3]'
        promotions_ids:
          description: 'IDs das promoções'
          type: array
          items:
            type: integer
          example: '[1,2,3]'
      type: object
    BannerSorting:
      title: 'Requisição de Ordenação de Banners'
      description: 'Representa o corpo de uma requisiçao para criar ordenação de banners'
      required:
        - sorting
      properties:
        sorting:
          description: 'Lista de grupos de ordenação'
          type: array
          items:
            required:
              - group
              - resource_id
              - orders
            properties:
              group:
                description: "\n *       collections,\n *       categories,\n *       promotions,\n *       home"
                type: string
                enum:
                  - collections
                  - categories
                  - promotions
                  - home
                example: categories
              resource_id:
                description: 'ID do recurso a ser ordenado'
                type: integer
                example: ''
              orders:
                description: 'Ordem dos IDs dos banners'
                type: array
                items:
                  type: integer
                example: '[1234, 123, 12334]'
            type: object
      type: object
    AssociateCategoryRequest:
      title: 'Associação de categorias ao Marketplace'
      description: 'Representa os dados necessários para associar uma categoria a um Marketplace'
      required:
        - marketplace_id
        - category_id
        - marketplace_category_value
      properties:
        marketplace_id:
          type: integer
        category_id:
          type: integer
        marketplace_category_id:
          type: integer
        marketplace_category_value:
          type: string
      type: object
    MarketplaceAccountRequest:
      title: 'Criação de conta de Marketplace'
      description: 'Representa os dados necessários para criar uma conta de Marketplace'
      required:
        - active
        - marketplace_id
        - stock_id
        - auto_sync_catalog
        - name
        - price_attribute
        - price_percentage
      properties:
        active:
          type: boolean
        marketplace_id:
          type: integer
          example: 1
        stock_id:
          type: integer
          example: 35
        auto_sync_catalog:
          type: boolean
          example: true
        name:
          type: string
          example: 'Conta Mercado Livre'
        price_attribute:
          type: string
          example: price_sale
        price_percentage:
          type: integer
          example: 0
        params:
          type: object
        listing_type_id:
          type: string
          example: bronze
        allow_sku_without_stock:
          type: boolean
          example: true
      type: object
    SyncAttributesRequest:
      title: 'Atualização atributos de um produto'
      description: 'Representa os dados necessários para atualizar os atributos de um produto'
      required:
        - marketplace_id
        - skus
      properties:
        marketplace_id:
          type: integer
          example: 1
        skus:
          type: array
          items:
            required:
              - name
              - value_id
              - value_name
              - required
              - catalog_required
              - variation_required
            properties:
              id:
                type: integer
                example: 1
              name:
                type: string
                example: Tamanho
              value_id:
                type: integer
                example: 123
              value_name:
                type: string
                example: GG
              required:
                type: boolean
                example: true
              catalog_required:
                type: boolean
                example: true
              variation_required:
                type: boolean
                example: true
            type: object
      type: object
    CashbackReportsRequest:
      title: CashbackReportsRequest
      description: 'Request para geração de relatórios de cashbacks'
      required:
        - filter
        - widget
      properties:
        filter:
          description: 'Filtro de período para o relatório'
          type: string
          enum:
            - today
            - yesterday
            - last_seven_days
            - month
            - last_month
            - year
            - custom
        group_by:
          description: 'Agrupamento dos resultados'
          type: string
          default: day
          enum:
            - day
            - month
            - year
        start_at:
          description: 'Data inicial (obrigatório quando filter=custom)'
          type: string
          format: date-time
          example: '2025-10-31 00:00:00'
        end_at:
          description: 'Data final (obrigatório quando filter=custom)'
          type: string
          format: date-time
          example: '2025-10-31 23:59:59'
        filter_compare:
          description: 'Habilita comparação com período anterior'
          type: boolean
          default: false
        compare_start_at:
          description: 'Data inicial do período de comparação, obrigatório quando filter_compare=true'
          type: string
          format: date-time
          example: '2025-10-30 00:00:00'
        compare_end_at:
          description: 'Data final do período de comparação, obrigatório quando filter_compare=true'
          type: string
          format: date-time
          example: '2025-10-30 23:59:59'
      type: object
    OrderCriteria:
      title: 'Filtros de Pedidos'
      description: 'Mapeia os filtros disponíveis para pesquisa de pedidos.'
      properties:
        affiliation_id:
          description: 'Afiliações ou gateways associados ao pedido (ex: Appmax, PagSeguro).'
          type: array
          items:
            type: integer
          example: '?affiliation_id[]=12'
        gateway_id:
          description: 'Gateway específico de pagamento utilizado no pedido.'
          type: array
          items:
            type: integer
          example: '?gateway_id[]=3'
        bling:
          description: 'Indica se o pedido foi enviado ao Bling.'
          type: string
          enum:
            - sent
            - not_sent
          example: '?bling=sent'
        tiny:
          description: 'Filtra pedidos enviados ou não ao Tiny.'
          type: array
          items:
            type: string
            enum:
              - sent
              - not_sent
          example: '?tiny=sent'
        sync_by_erp:
          description: 'Indica se o pedido foi sincronizado com algum ERP (ex: Bling, Tiny).'
          type: boolean
          example: '?sync_by_erp=true'
        promocode_id:
          description: 'Cupons de desconto aplicados ao pedido.'
          type: array
          items:
            type: integer
          example: '?promocode_id[]=9'
        product_id:
          description: 'IDs dos produtos incluídos no pedido.'
          type: array
          items:
            type: integer
          example: '?product_id[]=101'
        status_id:
          description: 'Status atual do pedido.'
          type: array
          items:
            type: integer
          example: '?status_id[]=2'
        payment_method:
          description: 'Meio de pagamento utilizado no pedido.'
          type: array
          items:
            type: string
            enum:
              - pix
              - billet
              - credit_card
              - deposit
          example: '?payment_method[]=pix'
        shipment_service:
          description: 'Forma de entrega utilizada (Correios, transportadora, retirada).'
          type: array
          items:
            type: string
          example: '?shipment_service[]=correios'
        channel:
          description: 'Canal de venda do pedido.'
          type: string
          enum:
            - store
            - payment_retry
          example: '?channel=store'
        date:
          description: 'Filtro de datas do pedido. Suporta created_at, updated_at, cancelled_at, captured_at e shipping_date.'
          type: string
          example: '?date=created_at:2024-06-01|2024-06-30'
        stock_id:
          description: 'ID do estoque de origem do pedido.'
          type: integer
          example: '?stock_id=5'
        number:
          description: 'Número exato do pedido.'
          type: integer
          example: '?number=123456'
        customer_document:
          description: 'Documento do cliente associado ao pedido (CPF ou CNPJ).'
          type: string
          example: '?customer_document=12345678900'
        customization:
          description: 'Filtra pedidos com ou sem personalizações.'
          type: array
          items:
            type: string
            enum:
              - with_customization
              - without_customization
          example: '?customization[]=with_customization'
        product_type:
          description: 'Filtra pedidos por tipo de produto (digital ou físico).'
          type: string
          enum:
            - is_digital
            - is_physical
          example: '?product_type=is_digital'
        q:
          description: 'Termo de busca genérico.'
          type: string
          example: '?q=joao'
      type: object
      x-folder: pedidos
    OrderBoxes:
      title: 'Resposta de Embalagens de um pedido'
      description: 'Representa a resposta de embalagens de um pedido'
      properties:
        total_boxes:
          type: integer
        boxes:
          type: array
          items:
            $ref: '#/components/schemas/Boxes'
        total:
          type: integer
          example: '10'
      type: object
    Boxes:
      title: 'Embalagens de um pedido'
      description: 'Representa embalagens de um pedido'
      properties:
        description:
          type: string
        weight:
          type: string
        width:
          type: string
        height:
          type: string
        length:
          type: string
        items_weight:
          type: string
        items:
          description: 'Lista de itens com dimensões e características para envio'
          type: array
          items:
            properties:
              description:
                description: 'Descrição do item'
                type: string
              width:
                description: 'Largura do item (cm)'
                type: number
                format: float
              length:
                description: 'Comprimento do item (cm)'
                type: number
                format: float
              depth:
                description: 'Altura ou profundidade do item (cm)'
                type: number
                format: float
              weight:
                description: 'Peso do item (kg)'
                type: number
                format: float
              keepFlat:
                description: 'Indica se o item deve ser mantido plano'
                type: boolean
              volume:
                description: 'Volume calculado do item'
                type: number
                format: float
            type: object
        total:
          type: integer
          example: '10'
      type: object
    OrderFilters:
      description: 'Estrutura de um filtro disponível na interface'
      properties:
        label:
          description: 'Rótulo do filtro exibido na interface'
          type: string
        param:
          description: 'Parâmetro utilizado para requisição do filtro'
          type: string
        radiobox:
          description: 'Indica se o filtro é do tipo radiobox'
          type: boolean
        datepicker:
          description: 'Indica se o filtro é do tipo datepicker'
          type: boolean
        dateFilters:
          description: 'Filtros por data (se aplicável)'
          type: array
          items:
            type: string
        dateParam:
          description: 'Parâmetro de data se houver'
          type: string
          nullable: true
        data:
          description: 'Lista de opções do filtro'
          type: array
          items:
            properties:
              id:
                description: 'ID da opção'
                type: string
              value:
                description: 'Valor descritivo da opção'
                type: string
            type: object
        pagination:
          description: 'Indica se o filtro possui paginação'
          type: boolean
        is_new:
          description: 'Indica se é um filtro recém-adicionado'
          type: boolean
        app_attributes:
          description: 'Atributos adicionais relacionados ao app'
          properties:
            is_app_special_label:
              description: 'Se é um rótulo especial do app'
              type: boolean
            has_app_fast_access:
              description: 'Se possui acesso rápido no app'
              type: boolean
          type: object
        total:
          type: integer
          example: '10'
      type: object
    OrderAddressRequest:
      title: 'Request de endereço de um pedido'
      description: 'Representa os dados para criar uma etiqueta de um pedido'
      required:
        - receiver
        - date
        - locale
        - delivered
        - notify_customer
      properties:
        receiver:
          description: 'Marca se o pedido foi entregue'
          type: boolean
          example: true
        reference:
          description: Referência
          type: string
          example: 'Ao lado da padaria'
        street:
          description: 'Nome da rua do endereço'
          type: string
          example: 'Alameda Campinas'
        number:
          description: 'Número do endereço'
          type: string
          example: '1500'
        neighborhood:
          description: 'Bairro do endereço'
          type: string
          example: 'Jardim Paulista'
        complement:
          description: 'Complemento do endereço'
          type: string
          example: 'APTO 104'
        city:
          description: 'Nome da cidade'
          type: string
          example: 'São Paulo'
        uf:
          description: 'UF do estado'
          type: string
          example: SP
        zip_code:
          description: zip_code
          type: string
          example: ''
      type: object
    OrderCommentRequest:
      title: 'Request de comentário de um pedido'
      description: 'Representa o comentário de um pedido'
      properties:
        comments:
          description: 'Conteúdo do comentário'
          type: string
          example: 'Este é um comentário de exemplo.'
      type: object
    OrderInvoiceRequest:
      title: 'Request de nota fiscal de um pedido'
      description: 'Representa os dados para criar uma nota fiscal de um pedido'
      required:
        - series
        - number
        - date
        - value
      properties:
        series:
          description: 'Número de série da nota'
          type: string
          example: '000'
        number:
          description: 'Número da nota'
          type: string
          example: '000'
        key:
          description: 'Chave da nota'
          type: string
          example: '000'
        date:
          description: 'Data da nota'
          type: string
          example: '2018-01-01'
        value:
          description: 'Valor da nota'
          type: number
          example: '99.99'
        products_value:
          description: 'Valor dos produtos da nota'
          type: number
          example: '79.99'
        url:
          description: 'URL da nota'
          type: string
          example: 'https://url.com'
        cfop:
          description: 'Código Fiscal de Operações e de Prestações'
          type: string
          example: cfop
        force_invoiced_status:
          description: 'Marca se o status do pedido será marcado como faturado'
          type: boolean
          example: 'true'
      type: object
    OrderLabelRequest:
      title: 'Request de etiqueta de um pedido'
      description: 'Representa os dados para criar uma etiqueta de um pedido'
      required:
        - file_url
      properties:
        code:
          description: 'Código da etiqueta'
          type: string
          example: '123123123132'
        tracking_code:
          description: 'Código de rastreamento da etiqueta'
          type: string
          example: P182371823713BR
        tracking_url:
          description: 'URL de rastreamento'
          type: string
          example: 'https://url.com/P182371823713BR'
        shipping_service:
          description: 'Nome do serviço de entrega'
          type: string
          example: pac
        file_url:
          description: 'URL do arquivo da etiqueta'
          type: string
          example: 'https://url.com/label.pdf'
      type: object
    OrderRequest:
      description: 'Requisição para criação de pedidos'
      required:
        - status
        - number
        - customer_id
        - value_total
        - value_products
        - value_discount
        - value_shipment
        - shipment_service
        - days_delivery
        - items
        - address
      properties:
        status:
          description: 'Alias do status (Veja `GET {alias}/checkout/statuses` para mais informações).'
          type: string
          enum:
            - waiting_payment
            - cancelled
            - on_carriage
            - delivered
            - shipment_exception
            - invoiced
            - paid
            - refused
            - authorized
            - created
            - handling_products
            - ready_for_shipping
            - ready_for_pickup
        marketplace_id:
          description: 'Obrigatório se o comprador vier de um marketplace específico.'
          type: integer
          nullable: true
        marketplace_account_id:
          description: 'Conta do marketplace (precisa pertencer à loja).'
          type: integer
          nullable: true
        authorized:
          description: 'Define se o pedido inicia autorizado; pode ser inferido pelo status da conta do marketplace.'
          type: boolean
          nullable: true
        number:
          description: 'Número único do pedido por loja. Obrigatório, exceto quando usar marketplace_sale_number.'
          type: integer
          format: int64
        marketplace_sale_number:
          description: 'Número único do pedido no marketplace (por loja/conta). Quando presente, substitui a necessidade de ''number''.'
          type: string
          nullable: true
        customer_id:
          description: 'ID do cliente pertencente à loja (e, se aplicável, ao mesmo marketplace).'
          type: integer
        value_total:
          description: 'Valor total do pedido, resultado da soma dos produtos e do frete menos os descontos aplicados.'
          type: number
          format: float
        value_products:
          description: 'Valor total dos produtos do pedido, sem frete nem descontos.'
          type: number
          format: float
          minimum: 0
        value_discount:
          description: 'Valor total de descontos aplicados ao pedido.'
          type: number
          format: float
          minimum: 0
        value_shipment:
          description: 'Valor do frete cobrado no pedido, em reais.'
          type: number
          format: float
          minimum: 0
        value_tax:
          description: 'Valor de juros do gateway de pagamento cobrado no pedido, quando aplicável.'
          type: number
          format: float
          minimum: 0
          nullable: true
        shipment_service:
          description: 'Alias Serviço de frete escolhido.'
          type: string
        days_delivery:
          description: 'Prazo estimado de entrega do pedido, em dias.'
          type: integer
          minimum: 0
        ip:
          description: 'IP do comprador, pode ser IPv4 ou IPv6.'
          nullable: true
          oneOf:
            -
              type: string
              format: ipv4
              example: 200.179.10.10
            -
              type: string
              format: ipv6
              example: '2001:db8:85a3:0000:0000:8a2e:0370:7334'
        items:
          description: 'Lista de produtos incluídos no pedido.'
          type: array
          items:
            required:
              - product_id
              - sku_id
              - sku
              - quantity
              - price
            properties:
              product_id:
                description: 'ID do Produto'
                type: integer
              sku_id:
                description: 'ID do SKU.'
                type: integer
              sku:
                description: 'Código do SKU.'
                type: string
              quantity:
                description: 'Quantidade do produto/SKU no pedido.'
                type: integer
                minimum: 1
              price:
                description: 'Preço unitário do produto/SKU no momento do pedido, em reais.'
                type: number
                format: float
                minimum: 0
              gift:
                description: 'Indica se o item deve ser embalado como presente, para entrega a alguém diferente do comprador.'
                type: boolean
                nullable: true
              gift_value:
                description: 'Valor cobrado pela embalagem de presente do item, aplicável quando `gift` for verdadeiro.'
                type: number
                format: float
                minimum: 0
                nullable: true
              has_recomm:
                description: 'Indica se tem recomendação associada.'
                type: boolean
                nullable: true
            type: object
            additionalProperties: false
          minItems: 1
        address:
          description: 'Endereço de entrega.'
          type: array
          items:
            required:
              - receiver
              - zipcode
              - street
              - number
              - neighborhood
              - city
              - uf
            properties:
              receiver:
                description: 'Nome de quem vai receber a entrega.'
                type: string
              zipcode:
                description: 'CEP do endereço de entrega.'
                type: string
                minLength: 7
              street:
                description: 'Nome da rua do endereço de entrega.'
                type: string
              number:
                description: 'Número do endereço de entrega.'
                type: string
              neighborhood:
                description: 'Bairro do endereço de entrega.'
                type: string
              city:
                description: 'Cidade do endereço de entrega.'
                type: string
              uf:
                description: 'UF do estado (2 letras).'
                type: string
            type: object
            additionalProperties: false
          maxItems: 1
          minItems: 1
        transactions:
          description: 'Transação do pedido.'
          type: array
          items:
            required:
              - customer_id
              - authorized_at
              - amount
              - installments
              - status
              - holder_name
              - holder_document
            properties:
              customer_id:
                description: 'Mesmo cliente e loja do pedido.'
                type: integer
              payment_id:
                description: 'ID da forma/meio de pagamento'
                type: integer
                nullable: true
              affiliation_id:
                description: 'ID da Afiliação.'
                type: integer
                nullable: true
              marketplace_id:
                description: 'ID do marketplace de origem da transação, quando aplicável.'
                type: integer
                nullable: true
              marketplace_account_id:
                description: 'ID da conta do marketplace vinculada à transação, quando aplicável.'
                type: integer
                nullable: true
              authorized:
                description: 'Indica se a transação foi autorizada pela adquirente/gateway.'
                type: boolean
                nullable: true
              authorized_at:
                description: 'Data e hora em que a transação foi autorizada.'
                type: string
                format: date-time
                example: '2025-07-31 23:59:59'
              captured:
                description: 'Indica se a transação foi capturada (pagamento efetivado).'
                type: boolean
                nullable: true
              captured_at:
                description: 'Momento em que o pagamento da transação foi capturado (efetivado), preenchido quando `captured` for verdadeiro.'
                type: string
                format: date-time
                example: '2025-07-31 23:59:59'
                nullable: true
              cancelled:
                description: 'Indica se a transação foi cancelada.'
                type: boolean
                nullable: true
              amount:
                description: 'Valor da transação, em reais.'
                type: number
                format: float
                minimum: 0
              installments:
                description: 'Número de parcelas da transação.'
                type: integer
                minimum: 1
              status:
                description: 'Alias do status (Veja `GET {alias}/checkout/statuses` para mais informações).'
                type: string
                enum:
                  - waiting_payment
                  - cancelled
                  - on_carriage
                  - delivered
                  - shipment_exception
                  - invoiced
                  - paid
                  - refused
                  - authorized
                  - created
                  - handling_products
                  - ready_for_shipping
                  - ready_for_pickup
              holder_name:
                description: 'Nome do titular do cartão ou do meio de pagamento usado na transação.'
                type: string
              holder_document:
                description: 'Documento (CPF/CNPJ) do titular do cartão ou do meio de pagamento usado na transação.'
                type: string
              billet_url:
                description: 'URL do boleto gerado para a transação, quando o meio de pagamento for boleto.'
                type: string
                format: uri
                nullable: true
              billet_date:
                description: 'Data de vencimento do boleto gerado para a transação.'
                type: string
                format: date
                nullable: true
            type: object
            additionalProperties: false
          nullable: true
        sent_to_antifraud:
          description: 'Indica se o pedido foi enviado para análise de antifraude, disponível apenas quando a loja tem um provedor de antifraude cadastrado.'
          type: boolean
          nullable: true
        capture_date:
          description: 'Data em que o pagamento do pedido foi capturado.'
          type: string
          format: date
          nullable: true
        authorized_at:
          description: 'Data e hora em que o pagamento do pedido foi autorizado.'
          type: string
          format: date-time
          example: '2025-07-31 23:59:59'
          nullable: true
        captured_at:
          description: 'Data e hora em que o pagamento do pedido foi capturado.'
          type: string
          format: date-time
          example: '2025-07-31 23:59:59'
          nullable: true
        cancelled_at:
          description: 'Data e hora em que o pedido foi cancelado.'
          type: string
          format: date-time
          example: '2025-07-31 23:59:59'
          nullable: true
        track_code:
          description: 'Código de rastreio do envio. O valor é sanitizado e normalizado automaticamente.'
          type: string
          nullable: true
        track_url:
          description: 'URL de rastreio do envio. O valor é sanitizado e normalizado automaticamente.'
          type: string
          nullable: true
        cart_token:
          description: 'Token do carrinho.'
          type: string
          format: uuid
          readOnly: true
      type: object
      additionalProperties: false
    OrderTrackingRequest:
      title: 'Request de rastreamento de um pedido'
      description: 'Representa o rastreamento de um pedido'
      required:
        - status
        - date
        - locale
        - delivered
        - notify_customer
      properties:
        status:
          description: 'Nome do status'
          type: string
          example: 'Em trânsito'
        date:
          description: 'Data do evento'
          type: string
          example: '2018-02-18 08:00:00'
        locale:
          description: 'Descrição do local do evento'
          type: string
          example: 'CD São Paulo'
        delivered:
          description: 'Marca se o status é considerado como Entregue ao destinatário'
          type: boolean
          example: 'false'
        notify_customer:
          description: 'Informa se o cliente será notificado sobre este novo status'
          type: boolean
          example: 'true'
      type: object
    FreebieCriteria:
      title: 'Filtros de Regras'
      description: 'Mapeia os filtros disponíveis para pesquisa de regras promocionais.'
      properties:
        expired:
          description: 'Indica se a regra está expirada (ativa=1 ou inativa=0).'
          type: integer
          example: '?expired=0'
        active:
          description: 'Status da regra (ativa=1 ou inativa=0).'
          type: integer
          example: '?active=0'
        rules:
          description: 'Tipo de regra aplicada.'
          type: array
          items:
            type: string
            enum:
              - always
              - products_quantity
              - products_amount
          example: '?rules[]=products_amount'
      type: object
      x-folder: promocoes/brindes
    OrderBumpCriteria:
      title: 'Filtros de Order Bumps'
      description: 'Mapeia os filtros disponíveis para pesquisa de Order Bumps.'
      properties:
        accepted_payment:
          description: 'Filtra Order Bumps pelo(s) meio(s) de pagamento aceito(s).'
          type: array
          items:
            type: string
            enum:
              - all
              - deposit
              - billet
              - credit_card
              - pix
              - pix_in_installments
          example: '?accepted_payment[]=pix'
        active:
          description: 'Define se o Order Bump está ativo ou inativo (ativa=1 ou inativa=0).'
          type: integer
          example: '?active=0'
      type: object
      x-folder: promocoes/orderbump
    PromocodeCriteria:
      title: 'Filtros de cupons'
      description: 'Mapeia os filtros disponíveis para pesquisa de cupons.'
      properties:
        status:
          description: 'Define se o cupom está ativo ou inativo.'
          type: boolean
          example: '?status=true'
        expired:
          description: 'Filtra cupons expirados (compara end_at com a data atual).'
          type: boolean
          example: '?expired=true'
        q:
          description: 'Busca por prefixo do código do cupom.'
          type: string
          example: '?q=FRETE10'
        rules:
          description: 'Regras booleanas (ex.: rules[]=accumulate&rules[]=newsletter).'
          type: array
          items:
            type: string
            enum:
              - accumulate
              - once_per_customer
              - newsletter
              - cart_default
              - abandoned_cart
          example: '?rules[]=accumulate,newsletter'
        code:
          description: 'Filtra por um ou mais códigos exatos. Aceita string ou array (code=A&code=B).'
          example: '?code=MEUCUPOM10'
          oneOf:
            -
              type: string
            -
              type: array
              items:
                type: string
      type: object
      x-folder: promocoes/cupons
    CashbackRequest:
      title: CashbackRequest
      required:
        - active
        - name
        - min_amount
        - max_amount
        - valid_for
        - percent_amount
        - has_expiration
      properties:
        active:
          type: boolean
          example: true
        name:
          type: string
          example: 'Nome do cashback. Esse valor deve ser único.'
        min_amount:
          type: integer
        max_amount:
          type: integer
        valid_for:
          type: integer
        percent_amount:
          type: integer
        has_expiration:
          type: boolean
          example: true
        starts_at:
          description: 'Data de início'
          type: string
          format: date-time
        expires_at:
          description: 'Data de término'
          type: string
          format: date-time
      type: object
    CashbackRuleRequest:
      title: CashbackRuleRequest
      required:
        - max_order_percent
        - expires_if_order_cancelled
        - allow_cashback_with_balance
      properties:
        max_order_percent:
          description: 'Defina aqui a porcentagem máxima do pedido que pode ser quitada com o cashback.'
          type: number
          format: integer
          example: 10
        expires_if_order_cancelled:
          description: 'Expira o cashback se o pedido for cancelado'
          type: boolean
          example: true
        allow_cashback_with_balance:
          description: 'Permite que pedidos com cashback acumulem saldo'
          type: boolean
          example: true
      type: object
    ComboRequest:
      title: 'Requisição de Combo'
      description: 'Dados para criação ou atualização de um combo de produtos'
      required:
        - active
        - name
        - products_ids
        - discount_type
        - discount_value
        - start_at
        - end_at
      properties:
        active:
          description: 'Status do combo'
          type: boolean
          example: true
        accumulate:
          description: 'Indica se o desconto acumula com outras promoções'
          type: boolean
          example: true
        name:
          description: 'Nome do combo'
          type: string
          minLength: 3
          example: 'Combo Verão 2025'
        products_ids:
          description: 'IDs dos produtos que compõem o combo'
          type: array
          items:
            type: integer
          example:
            - 123456
            - 789012
        discount_type:
          description: 'Tipo de desconto (p: percentual, v: valor fixo)'
          type: string
          enum:
            - p
            - v
          example: p
        discount_value:
          description: 'Valor do desconto'
          type: number
          format: float
          example: 10
        start_at:
          description: 'Data e hora de início'
          type: string
          format: date-time
          example: '2025-06-01 00:00:00'
        end_at:
          description: 'Data e hora de término'
          type: string
          format: date-time
          example: '2025-07-31 23:59:59'
      type: object
    FreeShipmentRequest:
      title: 'Requisição de frete grátis'
      description: ''
      required:
        - rules
      properties:
        rules:
          type: array
          items:
            required:
              - shipment_service_id
              - min
              - uf
            properties:
              shipment_service_id:
                type: integer
              service_name:
                type: string
              min:
                type: number
                format: float
              uf:
                type: string
            type: object
        exclude_brands_ids:
          type: array
          items:
            type: integer
        exclude_categories_ids:
          type: array
          items:
            type: integer
        exclude_products_ids:
          type: array
          items:
            type: integer
      type: object
    FreebieRequest:
      description: 'Request para criação/atualização de brindes.'
      required:
        - name
        - active
        - start_at
        - resource_type
        - rule
        - resource_id
      properties:
        name:
          description: 'Deve ser único por loja. O valor é sanitizado e normalizado automaticamente.'
          type: string
          maxLength: 190
          example: 'Brinde Natal'
        active:
          description: 'Mostra se a regra está ativa.'
          type: boolean
          example: true
        start_at:
          description: 'Data e hora de início'
          type: string
          format: date-time
          example: '2025-06-01 00:00:00'
        end_at:
          description: 'Data e hora de término'
          type: string
          format: date-time
          example: '2025-08-10 00:00:00'
        resource_type:
          description: 'Tipo do item no Brinde, Você pode escolher entre produto ou SKU.'
          type: string
          enum:
            - sku
            - product
          example: product
        resource_id:
          description: 'ID do item ofertado no Brinde.'
          type: integer
          example: 9791068
        rule:
          description: 'Regra que diz em qual condição o Comprador ganha um brinde. Se será sempre (always), baseado na quantidade de produtos no carrinho (products_quantity) ou no valor total dos prdutos (products_amount).'
          type: string
          enum:
            - always
            - products_amount
            - products_quantity
          example: products_amount
        min_quantity:
          description: 'Se escolher a regra para ofertar o brinde pela quantidade de produtos no carrinho, deverá definir a quantidade mínima aqui.'
          type: number
          format: integer
          minimum: 1
          example: 2
        min_amount:
          description: 'Se escolher a regra para ofertar o brinde pelo valor do carrinho, deverá definir a um valor mínimo aqui.'
          type: number
          format: float
          minimum: 0.01
          example: 100
      type: object
    OrderBumpRequest:
      description: 'Estrutura de dados para criação/atualização de Order Bump'
      required:
        - name
        - active
        - resource_type
        - resource_id
        - price_sale
        - params
        - accepted_payment
        - display_rule
        - displayed_quantity
      properties:
        name:
          type: string
          example: 'Oferta especial de camiseta'
        active:
          type: boolean
          example: true
        is_ia:
          description: 'Define se o Order Bump é gerado por IA'
          type: boolean
          example: false
        pre_select_variation:
          description: 'Se a variação deve ser pré-selecionada'
          type: boolean
          example: true
        resource_type:
          description: 'Tipo do item oferecido'
          type: string
          enum:
            - sku
            - product
          example: product
        resource_id:
          description: 'ID do produto ou SKU oferecido'
          type: integer
          example: 42533439
        price_sale:
          type: number
          format: float
          example: 50
        price_discount:
          type: number
          format: float
          example: 0
          nullable: true
        params:
          required:
            - button_text
          properties:
            button_text:
              type: string
              example: '+ Adicionar oferta'
            title:
              type: string
              example: null
              nullable: true
            message:
              type: string
              example: null
              nullable: true
          type: object
        accepted_payment:
          description: 'Método de pagamento aceito para exibir a oferta'
          type: string
          enum:
            - all
            - deposit
            - billet
            - credit_card
            - pix
            - pix_in_installments
            - wallet
          example: all
        display_rule:
          description: 'Regra de exibição da oferta'
          type: string
          enum:
            - always
            - products_amount
            - selected_products
          example: always
        amount_rule:
          type: string
          example: greater_than
          nullable: true
        amount_value:
          type: number
          format: float
          example: 100
          nullable: true
        display_product_ids:
          description: 'Lista de produtos exibidos no OrderBump'
          type: array
          items:
            type: integer
            example: 12345
          nullable: true
        displayed_quantity:
          description: 'Quantidade de produtos exibidos no OrderBump'
          type: integer
          maximum: 5
          minimum: 1
          example: 1
      type: object
    ProgressiveDiscountRequest:
      title: 'Requisição de Desconto Progressivo'
      description: 'Representa uma requisição de desconto progressivo'
      required:
        - min_value
        - max_value
        - percent
        - start_at
        - end_at
      properties:
        active:
          type: boolean
          example: true
        min_value:
          type: number
          format: float
          example: 0
        max_value:
          type: number
          format: float
          example: 100
        percent:
          type: number
          format: float
          example: 5
        start_at:
          description: 'Data e hora de início'
          type: string
          format: date-time
          example: '2025-06-01 00:00:00'
        end_at:
          description: 'Data e hora de término'
          type: string
          format: date-time
          example: '2025-08-10 00:00:00'
        restrictions:
          properties:
            include:
              properties:
                products_ids:
                  type: array
                  items: { type: integer }
                brands_ids:
                  type: array
                  items: { type: integer }
                collections_ids:
                  type: array
                  items: { type: integer }
                categories_ids:
                  type: array
                  items: { type: integer }
              type: object
          type: object
        exclude:
          properties:
            products_ids:
              type: array
              items:
                type: integer
            brands_ids:
              type: array
              items:
                type: integer
            collections_ids:
              type: array
              items:
                type: integer
            categories_ids:
              type: array
              items:
                type: integer
          type: object
      type: object
    PromocodeRequest:
      title: ''
      description: ''
      properties:
        active:
          description: 'Ativação do cupom'
          type: boolean
        for_the_price_of:
          description: 'Cupom para o preço de'
          type: boolean
        accumulate:
          description: 'Acumulação do cupom'
          type: boolean
        once_per_customer:
          description: 'Válido apenas uma vez por cliente'
          type: boolean
        abandoned_cart:
          description: 'Cupom para carrinho abandonado'
          type: boolean
        newsletter:
          description: 'Cupom para assinatura de newsletter'
          type: boolean
        free_shipment:
          description: 'Cupom para frete grátis'
          type: boolean
        ignore_promotion_products:
          description: 'Ignorar produtos promocionais'
          type: boolean
        discount_type:
          description: 'Tipo de desconto'
          type: string
          enum:
            - p
            - v
        value:
          description: 'Valor do desconto'
          type: number
          format: float
          example: 10
        code:
          description: 'Código do cupom'
          type: string
          example: 10OFF
        quantity:
          description: 'Quantidade disponível do cupom'
          type: integer
          example: 100000
        min_value:
          description: 'Valor mínimo para aplicação do cupom'
          type: number
          format: float
          example: 99.99
        start_at:
          description: 'Data e hora de início'
          type: string
          format: date-time
          example: '2025-06-01 00:00:00'
        end_at:
          description: 'Data e hora de término'
          type: string
          format: date-time
          example: '2025-08-10 00:00:00'
      type: object
    PromotionRequest:
      title: 'Requisição de Promoção'
      description: 'Dados para criação ou atualização de uma promoção'
      required:
        - active
        - name
        - value
        - all_products
        - utm_only
        - price_attribute
        - start_at
        - end_at
      properties:
        active:
          description: 'Status da promoção'
          type: boolean
          example: true
        all_products:
          description: 'Aplicar em todos os produtos'
          type: boolean
          example: true
        utm_only:
          description: 'Exclusivo para UTM'
          type: boolean
          example: true
        highlight_on_menu:
          description: 'Destacar no menu'
          type: boolean
          example: true
        accumulate:
          description: 'Permite acumular com outras promoções'
          type: boolean
          example: true
        price_attribute:
          description: 'Atributo de preço para aplicar desconto'
          type: string
          enum:
            - price_sale
            - price_discount
          example: price_discount
        name:
          description: 'Nome da promoção'
          type: string
          example: 'Black Friday 2025'
        value:
          description: 'Valor do desconto'
          type: number
          format: float
          example: 123
        utm_source:
          description: 'Origem UTM'
          type: string
          example: google
        utm_campaign:
          description: 'Campanha UTM'
          type: string
          example: black_friday
        start_at:
          description: 'Data e hora de início'
          type: string
          format: date-time
          example: '2025-11-25 00:00:00'
        end_at:
          description: 'Data e hora de término'
          type: string
          format: date-time
          example: '2025-11-30 23:59:59'
        collections_ids:
          description: 'IDs das coleções'
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
        brands_ids:
          description: 'IDs das marcas'
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
        categories_ids:
          description: 'IDs das categorias'
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
        banners_ids:
          description: 'IDs dos banners'
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
      type: object
    UpsellRequest:
      title: UpsellRequest
      required:
        - active
        - name
        - context
        - resource_type
        - suggested_product_id
      properties:
        active:
          type: boolean
          example: true
        name:
          type: string
          example: 'Combo Protetor + Película'
        description:
          type: string
          example: 'Aproveite e proteja seu smartphone com esse combo especial'
        email_subject:
          type: string
          example: 'Não perca essa oferta especial para seu produto!'
        sms:
          type: string
          example: 'Aproveite 20% OFF no combo protetor + película para seu smartphone! Clique aqui: {link}'
        type:
          type: string
          enum:
            - product
          example: product
        context:
          type: string
          enum:
            - before
            - after
            - delayed
            - manual
          example: before
        discount_type:
          type: string
          enum:
            - percentage
            - fixed
          example: percentage
        discount_amount:
          type: number
          format: float
          example: 20
        product_price:
          type: number
          format: float
          example: 40
        product_quantity:
          type: integer
          example: 2
        suggested_product_id:
          type: integer
          example: 34025022
        resource_type:
          type: string
          enum:
            - always
            - product
            - category
            - brand
          example: product
        trigger_resource_id:
          type: array
          items:
            type: integer
          example:
            - 42
            - 51
      type: object
    QueueJobRequest:
      title: 'Criação de fila'
      description: 'Dados necessários para criar uma fila'
      properties:
        token:
          type: string
          example: ecd73150-e747-11e7-9221-0361c8d4d388
        total_sent:
          type: integer
          example: 5
        total_processed:
          type: integer
          example: 5
        title:
          type: string
          example: 'Importing products'
        redirect_url:
          type: string
          example: 'https://site.com'
        finished_at:
          type: string
          format: date-time
          example: '2017-04-03 00:00:00'
      type: object
    CartSearchCriteria:
      title: 'Filtros de Carrinhos Abandonados'
      description: 'Mapeia os filtros disponíveis para pesquisa de carrinhos abandonados.'
      properties:
        utm_source:
          description: 'Lista carrinhos com base no utm_source.'
          type: array
          items:
            type: string
          example: '?utm_source[]=ActiveCampaign'
        utm_campaign:
          description: 'Lista carrinhos com base no utm_campaign.'
          type: array
          items:
            type: string
          example: '?utm_campaign[]=[ABO][BUTTUP] BM2 ABERTO LP SHOPIFY'
        abandoned_step:
          description: 'Etapa do checkout em que o carrinho foi abandonado.'
          type: string
          enum:
            - personal_info
            - shippment
            - payment
          example: '?abandoned_step=payment'
        recover_sent_mail:
          description: 'Quantidade de tentativas de recuperação já enviadas por e-mail.'
          type: array
          items:
            type: integer
            maximum: 4
            minimum: 0
          example: '?recover_sent_mail[]=2'
        customer_id:
          description: 'ID do cliente associado ao carrinho.'
          type: integer
          example: '?customer_id=123'
        payment_id:
          description: 'IDs dos pagamentos associados aos carrinhos.'
          type: array
          items:
            type: integer
          example: '?payment_id[]=456'
        product_id:
          description: 'IDs dos produtos presentes nos carrinhos.'
          type: array
          items:
            type: integer
          example: '?product_id[]=789'
        date:
          description: 'Filtro por intervalo de datas. Atualmente suporta created_at.'
          type: string
          example: '?date=created_at:2017-05-21|2017-05-30'
      type: object
      x-folder: checkout/carrinhos-abandonados
    CustomerSearchCriteria:
      title: 'Filtros por Compra, Campanha e Origem'
      description: 'Mapeia os filtros disponíveis para pesquisa baseada em campanhas, datas de compra/criação, origem e status.'
      properties:
        utm_campaign:
          description: 'Campanhas de marketing associadas.'
          type: array
          items:
            type: string
          example: '?utm_campaign[]=[ABO][BUTTUP] BM2 ABERTO LP SHOPIFY'
        utm_source:
          description: 'Origem da campanha (UTM Source).'
          type: array
          items:
            type: string
          example: '?utm_source[]=ActiveCampaign'
        q:
          description: 'Termo de busca. A API buscará pelo nome, e-mail, CPF/CNPJ ou telefone do cliente.'
          type: string
          example: '?q=joao'
        cpf:
          description: 'CPF do cliente.'
          type: string
          example: '?cpf=12345678909'
        email:
          description: 'E-mail do cliente.'
          type: string
          example: '?email=joao@example.com'
        date:
          description: 'Filtro por data de criação.'
          type: string
          example: '?date=created_at:2025-05-01|2025-05-31'
      type: object
      x-folder: clientes
    OrderSearchCriteria:
      title: 'Filtros de Pedidos'
      description: 'Mapeia os filtros disponíveis para pesquisa de pedidos.'
      properties:
        freebie_id:
          description: 'Brindes associados ao pedido.'
          type: array
          items:
            type: integer
          example: '?freebie_id[]=45'
        order_bump_id:
          description: 'Order Bumps adicionados ao pedido.'
          type: array
          items:
            type: integer
          example: '?order_bump_id[]=8'
        cashback:
          description: 'Filtra pedidos por status de cashback.'
          type: array
          items:
            type: string
            enum:
              - accumulated_cashback
              - used_cashback
          example: '?cashback[]=used_cashback'
        upsell_id:
          description: 'Upsells adquiridos após o checkout.'
          type: array
          items:
            type: integer
          example: '?upsell_id[]=22'
        woocommerce:
          description: 'Filtra pedidos sincronizados ou não com WooCommerce.'
          type: array
          items:
            type: string
            enum:
              - sent
              - not_sent
          example: '?woocommerce[]=not_sent'
        utm_source:
          description: 'Origem da campanha de marketing (UTM Source).'
          type: array
          items:
            type: string
          example: '?utm_source[]=google'
        shopify_id:
          description: 'Busca pedido pelo ID do pedido na Shopify.'
          type: integer
          example: '?shopify_id=987654321'
        utm_campaign:
          description: 'Nome da campanha de marketing (UTM Campaign).'
          type: array
          items:
            type: string
          example: '?utm_campaign[]=black_friday'
        customer_document:
          description: 'Documento do cliente associado ao pedido (CPF ou CNPJ).'
          type: string
          example: '?customer_document=12345678900'
      type: object
      x-folder: pedidos
    ProductSearchCriteria:
      title: 'Filtros de Produtos'
      description: 'Mapeia os filtros disponíveis para pesquisa de produtos.'
      properties:
        category_id:
          description: 'Categorias associadas ao produto.'
          type: array
          items:
            type: integer
          example: '?category_id[]=5477694'
        collection_id:
          description: 'Coleções associadas ao produto.'
          type: array
          items:
            type: integer
          example: '?collection_id[]=5477694'
        promotion_id:
          description: 'Promoções associadas ao produto.'
          type: array
          items:
            type: integer
          example: '?promotion_id[]=5477694'
        date:
          description: 'Filtro por data de criação do produto.'
          type: string
          example: '?date=created_at:2024-06-01|2024-06-30'
        sort_by:
          description: 'Critério de ordenação dos produtos.'
          type: string
          enum:
            - relevance
            - random
            - newest
            - name_asc
            - name_desc
            - rating
            - best_sellers
            - highest_price
            - lowest_price
          example: '?sort_by=best_sellers'
        slug:
          description: 'Slug da coleção, categoria ou promoção para o contexto da busca.'
          type: string
          example: '?slug=verao-2024'
        q:
          description: 'Termo de busca.'
          type: string
          example: '?q=camiseta'
        brand_id:
          description: 'Marcas associadas ao produto.'
          type: array
          items:
            type: integer
          example: '?brand_id[]=30906550'
      type: object
      x-folder: catalogo/produtos
    ProductSearchRequest:
      description: 'Parâmetros para listagem de produtos com base no contexto e filtros.'
      required:
        - context
      properties:
        context:
          description: 'Contexto da listagem: ''search'' para busca por palavra-chave, ''category'' para filtrar por categoria, ''collection'' para coleção, ''promotion'' para promoções.'
          type: string
          enum:
            - search
            - category
            - collection
            - promotion
          example: search
        q:
          description: 'Palavra-chave para busca. Obrigatório quando ''context'' = ''search''.'
          type: string
          example: smartphone
          nullable: true
        slug:
          description: 'Identificador slug de categoria, coleção ou promoção. Obrigatório quando ''context'' != ''search''.'
          type: string
          example: eletronicos
          nullable: true
        min:
          description: 'Preço mínimo para filtro.'
          type: number
          format: float
          minimum: 0
          example: 100
          nullable: true
        max:
          description: 'Preço máximo para filtro.'
          type: number
          format: float
          minimum: 0
          example: 500
          nullable: true
        brand_id:
          description: 'IDs das marcas dos produtos.'
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
          nullable: true
        category_id:
          description: 'IDs das categorias dos produtos.'
          type: array
          items:
            type: integer
          example:
            - 10
            - 12
          nullable: true
        filter_id:
          description: 'IDs dos filtros dos produtos.'
          type: array
          items:
            type: integer
          example:
            - 5
            - 6
          nullable: true
      type: object
    ScriptsRequest:
      title: ScriptsRequest
      description: ''
      properties:
        active:
          type: boolean
        name:
          type: string
        page:
          type: string
        content:
          type: string
      type: object
    UserGroupRequest:
      title: 'Requisição de Grupo de Usuários'
      description: 'Dados para criação ou atualização de um grupo de usuários'
      required:
        - name
      properties:
        name:
          description: 'Nome do grupo. Esse valor deve ser único.'
          type: string
          example: Desenvolvedores
        permissions_ids:
          description: 'IDs das permissões associadas ao grupo'
          type: array
          items:
            type: integer
            example: 1
      type: object
    WebhookRequest:
      title: 'Criar Webhook'
      description: 'Representa os dados necessários para criar ou atualizar um webhook'
      required:
        - url
        - events
        - name
      properties:
        url:
          description: 'URL para onde os eventos serão enviados'
          type: string
          format: uri
          example: 'https://suaurl.com/api/webhooks'
        events:
          description: 'Lista de eventos para os quais o webhook será acionado'
          type: array
          items:
            type: string
          example:
            - order.created
            - cart.reminder
        name:
          description: 'Nome do webhook'
          type: string
          example: 'Nome do webhook'
      type: object
    SearchResponse:
      title: 'Resposta de busca'
      description: 'Resposta de uma busca'
      properties:
        parent:
          type: object
        children:
          type: array
          items:
            type: object
        parent_id:
          type: integer
        name:
          type: string
        active:
          type: boolean
        sort_by:
          type: string
        id:
          type: integer
        is_parent:
          type: boolean
        canonical_url:
          type: string
        url:
          type: string
          format: uri
        slug:
          type: string
      type: object
    Bank:
      title: Banco
      description: ''
      properties:
        id:
          type: integer
        code:
          type: string
        alias:
          type: string
        name:
          type: string
      type: object
    Banner:
      title: Banner
      description: 'Representa um banner'
      properties:
        id:
          type: integer
        product_id:
          type: integer
        active:
          type: boolean
        type:
          type: string
        name:
          type: string
        slug:
          type: string
        link:
          type: string
        expired:
          type: boolean
        image_url:
          type: string
        mobile_image_url:
          type: string
        home:
          type: boolean
        stopwatch:
          type: string
      type: object
    BannerAdditionalResponse:
      title: ''
      description: ''
      properties:
        stopwatch_expires_in:
          $ref: '#/components/schemas/BaseTimestamp'
        start_at:
          $ref: '#/components/schemas/BaseTimestamp'
        end_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    BannerCategory:
      properties:
        id:
          type: integer
        product_id:
          type: integer
        type:
          type: string
        active:
          type: boolean
        home:
          type: boolean
        name:
          type: string
        slug:
          type: string
        ml_category:
          type: string
        image_url:
          type: string
          format: url
        mobile_image_url:
          type: string
          format: url
        link:
          type: string
          format: url
        expired:
          type: boolean
        stopwatch:
          type: string
        stopwatch_expires_in:
          $ref: '#/components/schemas/BaseTimestamp'
        start_at:
          $ref: '#/components/schemas/BaseTimestamp'
        end_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Box:
      title: 'Embalagem do pedido'
      description: 'Representa uma embalagem do pedido'
      properties:
        id:
          type: integer
        name:
          type: string
        outer_width:
          type: number
          format: float
        outer_length:
          type: number
          format: float
        outer_depth:
          type: number
          format: float
        empty_weight:
          type: number
          format: float
        inner_width:
          type: number
          format: float
        inner_length:
          type: number
          format: float
        inner_depth:
          type: number
          format: float
        max_weight:
          type: number
          format: float
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    Brand:
      title: Marca
      description: 'Representa uma marca do catálogo'
      properties:
        id:
          type: integer
          readOnly: true
        active:
          type: boolean
        featured:
          type: boolean
        name:
          type: string
          example: 'Nome da marca'
        description:
          type: string
          example: 'Descrição da marca'
        logo_url:
          type: string
          format: url
          example: 'https://foo.bar/logo.png'
      type: object
    Bundles:
      title: Bundles
      description: ''
      properties:
        id:
          type: integer
        active:
          type: boolean
        modifiable:
          type: boolean
        name:
          type: string
        purchase_url:
          type: string
          format: uri
        custom_shipping:
          type: boolean
        shipping_type:
          type: string
        shipping_price:
          type: number
          format: float
        shipping_days:
          type: integer
        image_url:
          type: string
          format: uri
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        items:
          properties:
            data:
              type: array
              items:
                properties:
                  id: { type: integer }
                  bundle_id: { type: integer }
                  sku_id: { type: integer }
                  price_type: { type: string }
                  price: { type: number, format: float }
                  discount: { type: number, format: float }
                  quantity: { type: integer }
                  created_at: { $ref: '#/components/schemas/BaseTimestamp' }
                  updated_at: { $ref: '#/components/schemas/BaseTimestamp' }
                type: object
          type: object
      type: object
    Carrier:
      title: Transportadora
      description: ''
      properties:
        id:
          type: integer
        type:
          type: string
        fixed_price:
          type: integer
        fixed_shipping_time:
          type: integer
        active:
          type: boolean
        name:
          type: string
        only_backup_use:
          type: boolean
        origin_zipcode:
          type: string
        increment_percent:
          type: number
          format: float
        max_weight:
          type: number
          format: float
        active_cubic_weight:
          type: boolean
        cubic_weight_factor:
          type: number
          format: float
        min_cubic_weight:
          type: number
          format: float
        weight_param:
          type: string
        weight_condition:
          type: string
        has_prices:
          type: integer
        total_prices:
          type: integer
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CarrierPrice:
      title: 'Preço de transportadora'
      description: ''
      properties:
        id:
          type: integer
        carrier_id:
          type: integer
        description:
          type: string
        zipcode_min:
          type: integer
        zipcode_max:
          type: integer
        min_weight:
          type: number
          format: float
        max_weight:
          type: number
          format: float
        price:
          type: number
          format: float
        extra_weight_price:
          type: number
          format: float
        delivery_days:
          type: integer
        increment_percent:
          type: number
          format: float
      type: object
    Cart:
      title: Carrinho
      description: 'Detalhes de um carrinho'
      properties:
        id:
          description: 'Identificador único do carrinho.'
          type: integer
        merchant_id:
          description: 'ID da loja dona do carrinho.'
          type: integer
          readOnly: true
          example: '1'
        customer_id:
          description: 'ID do cliente vinculado ao carrinho; nulo enquanto o visitante não se identifica.'
          type: integer
        token:
          description: 'Token único do carrinho, usado para recuperá-lo no checkout.'
          type: string
        shipment_service_id:
          description: 'ID do serviço de entrega selecionado no carrinho.'
          type: integer
        payment_alias:
          description: 'Alias do meio de pagamento selecionado no carrinho.'
          type: string
        has_recommendation:
          description: 'Indica se o carrinho teve origem no clique em um produto sugerido pelo e-mail de recomendação.'
          type: boolean
        is_upsell:
          description: 'Indica se o carrinho contém algum item adicionado por upsell.'
          type: boolean
        total_transactions:
          description: 'Quantidade de transações de pagamento já geradas para o carrinho.'
          type: integer
        simulate_url:
          description: 'URL para simular o carrinho'
          type: string
          format: uri
        unauth_simulate_url:
          description: 'URL para simular o carrinho sem autenticação'
          type: string
          format: uri
        totalizers:
          description: 'Totais calculados do carrinho.'
          properties:
            total_items:
              description: 'Quantidade total de itens no carrinho, somando a quantidade de cada item.'
              type: string
            subtotal:
              description: 'Soma dos valores dos itens do carrinho, sem frete e sem descontos, em reais.'
              type: number
              format: float
            discount:
              description: 'Soma de todos os descontos aplicados ao carrinho (desconto progressivo, por meio de pagamento e por combo), em reais.'
              type: number
              format: float
            shipment:
              description: 'Valor do frete cobrado no carrinho, já com o desconto de frete aplicado, em reais.'
              type: number
              format: float
            shipment_original_value:
              description: 'Valor do frete antes de qualquer desconto, em reais; nulo enquanto o frete não é calculado.'
              type: number
              format: float
              nullable: true
            shipment_discount_value:
              description: 'Valor descontado do frete pelo cupom aplicado, em reais; igual ao valor do frete quando o cupom concede frete grátis.'
              type: number
              format: float
            shipment_discount_percent:
              description: 'Percentual que o desconto representa sobre o valor original do frete.'
              type: string
            promocode_discount_value:
              description: 'Valor descontado pelo cupom aplicado ao carrinho, em reais.'
              type: number
              format: float
            combos_discount_value:
              description: 'Valor descontado pelos combos promocionais presentes no carrinho, em reais.'
              type: number
              format: float
            total:
              description: 'Valor total do carrinho: subtotal menos descontos, mais o frete, em reais.'
              type: number
              format: float
            subtotal_formated:
              description: 'Subtotal formatado na moeda da loja (ex.: `R$ 199,90`).'
              type: string
            discount_formated:
              description: 'Total de descontos formatado na moeda da loja (ex.: `R$ 19,99`).'
              type: string
            total_formated:
              description: 'Valor total formatado na moeda da loja (ex.: `R$ 199,90`).'
              type: string
            shipment_formated:
              description: 'Valor do frete formatado na moeda da loja (ex.: `R$ 19,90`).'
              type: string
          type: object
        tracking_data:
          description: 'Dados de contato usados para identificar o carrinho no rastreamento e nos e-mails de recuperação.'
          properties:
            name:
              description: 'Nome do cliente vinculado ao carrinho ou, se não houver cliente, o nome informado no rastreamento.'
              type: string
            email:
              description: 'E-mail do cliente vinculado ao carrinho ou, se não houver cliente, o e-mail informado no rastreamento.'
              type: string
              format: email
          type: object
        utm_source:
          description: 'Origem da campanha de marketing (parâmetro UTM `utm_source`) que originou o carrinho.'
          type: string
        utm_campaign:
          description: 'Nome da campanha de marketing (parâmetro UTM `utm_campaign`) que originou o carrinho.'
          type: string
        utm_medium:
          description: 'Meio/canal de marketing (parâmetro UTM `utm_medium`) que originou o carrinho.'
          type: string
        utm_term:
          description: 'Termo de busca (parâmetro UTM `utm_term`) que originou o carrinho.'
          type: string
        utm_content:
          description: 'Conteúdo do anúncio/link (parâmetro UTM `utm_content`) que originou o carrinho.'
          type: string
        last_transaction_status:
          description: 'Status da última transação de pagamento gerada para o carrinho.'
          type: string
      type: object
    CartAdditionalResponse:
      description: 'Dados retornados junto do carrinho quando solicitados por meio de includes.'
      properties:
        customer:
          description: 'Cliente vinculado ao carrinho.'
          properties:
            data:
              $ref: '#/components/schemas/Customer'
          type: object
        items:
          description: 'Itens presentes no carrinho.'
          properties:
            data:
              $ref: '#/components/schemas/CartItemsRelated'
          type: object
        transactions:
          description: 'Transações de pagamento geradas para o carrinho.'
          properties:
            data:
              type: object
              allOf:
                -
                  $ref: '#/components/schemas/Transaction'
                -
                  $ref: '#/components/schemas/TransactionAdditionalResponse'
          type: object
        payment:
          description: 'Informações sobre o meio de pagamento'
          properties:
            data:
              description: 'Detalhes do pagamento'
              properties:
                id:
                  description: 'ID do meio de pagamento'
                  type: integer
                alias:
                  description: 'Alias do meio de pagamento'
                  type: string
                name:
                  description: 'Nome do meio de pagamento'
                  type: string
                has_config:
                  description: 'Indica se há configuração disponível'
                  type: boolean
                active_config:
                  description: 'Indica se a configuração está ativa'
                  type: boolean
                is_credit_card:
                  description: 'Indica se é um cartão de crédito'
                  type: boolean
                is_deposit:
                  description: 'Indica se é um pagamento por depósito'
                  type: boolean
                is_billet:
                  description: 'Indica se é um boleto bancário'
                  type: boolean
                is_pix:
                  description: 'Indica se é um pagamento via Pix'
                  type: boolean
                is_pix_in_installments:
                  description: 'Indica se o Pix permite parcelamento'
                  type: boolean
                is_wallet:
                  description: 'Indica se é um pagamento via carteira digital'
                  type: boolean
                icon_url:
                  description: 'URL do ícone do meio de pagamento'
                  type: string
                  format: uri
              type: object
          type: object
        metadata:
          description: 'Metadados adicionais'
          properties:
            data:
              description: 'Lista de metadados'
              type: array
              items:
                properties:
                  key: { description: 'Chave do metadado', type: string, example: discount_highlight }
                  value: { description: 'Valor do metadado', type: string, example: pix }
                type: object
          type: object
        spreadsheet:
          properties:
            data:
              description: 'Detalhes do cliente e da compra'
              properties:
                customer_phone:
                  description: 'Telefone do cliente'
                  type: string
                  example: '12991008531'
                last_order_date:
                  description: 'Data do último pedido'
                  type: string
                  format: date
                  example: '2025-03-17'
                products:
                  description: 'Lista de produtos do pedido'
                  type: string
                  example: 'Produto de teste'
                products_skus:
                  description: 'Lista de SKUs dos produtos'
                  type: string
                  example: '121313132'
                categories:
                  description: 'Categorias dos produtos adquiridos'
                  type: string
                  example: 'Categoria teste com produtos,Categoria Herdeira'
                brands:
                  description: 'Marcas dos produtos adquiridos'
                  type: string
                  example: 'Victoria''s Secret'
                purchase_url:
                  description: 'URL de recuperação da compra'
                  type: string
                  format: uri
                  example: 'https://seguro.henriquerocha.com/cart?cart_token=6290b260-f531-11ef-9db0-f3f83349fc6d&utm_source=Planilha&utm_campaign=Carrinho Abandonado&forceCheckout=1&skipToCheckout=1&store_token=52c241f0b6247c028c49d8fe020184e240d35baf&forceLogout=1'
                abandoned_step:
                  description: 'Etapa em que o carrinho foi abandonado'
                  type: string
                  example: shippment
                count_recover_mail_sent:
                  description: 'Quantidade de e-mails de recuperação enviados'
                  type: string
                  example: 0/4
              type: object
          type: object
        search:
          description: 'Dados de busca sobre o carrinho abandonado'
          properties:
            data:
              description: 'Detalhes do status do carrinho'
              properties:
                has_shipment_service:
                  description: 'Indica se há serviço de entrega'
                  type: boolean
                  example: true
                has_address:
                  description: 'Indica se há endereço cadastrado'
                  type: boolean
                  example: true
                has_customer:
                  description: 'Indica se há um cliente associado'
                  type: boolean
                  example: true
                has_refused_payment:
                  description: 'Indica se houve pagamento recusado'
                  type: boolean
                  example: false
                abandoned_step:
                  description: 'Etapa onde o carrinho foi abandonado'
                  type: string
                  example: shippment
                count_recover_mail_sent:
                  description: 'Quantidade de e-mails de recuperação enviados'
                  type: integer
                  example: 0
                created_at:
                  description: 'Data de criação do carrinho'
                  type: string
                  format: date
                  example: '2025-03-17'
                updated_at:
                  description: 'Data da última atualização do carrinho'
                  type: string
                  format: date
                  example: '2025-03-17'
              type: object
          type: object
        emails:
          description: 'Histórico de e-mails enviados'
          properties:
            data:
              description: 'Lista de e-mails enviados para recuperação do carrinho'
              type: array
              items:
                properties:
                  id: { description: 'ID do e-mail', type: integer }
                  cart_id: { description: 'ID do carrinho associado', type: integer }
                  promocode_id: { description: 'ID do cupom de desconto, se aplicável', type: integer, nullable: true }
                  turn: { description: 'Número da tentativa de recuperação', type: integer }
                  email: { description: 'E-mail do destinatário', type: string, format: email }
                  subject: { description: 'Assunto do e-mail', type: string, nullable: true }
                  fire_date: { description: 'Data e hora programadas para envio do e-mail', type: string, format: date-time, example: '2025-03-17 11:53:41' }
                  sent_at: { description: 'Data e hora em que o e-mail foi enviado', type: string, format: date-time, example: null, nullable: true }
                  created_at: { description: 'Data e hora de criação do registro do e-mail', type: string, format: date-time, example: '2025-03-17 11:38:51' }
                  updated_at: { description: 'Data e hora da última atualização do registro', type: string, format: date-time, example: '2025-03-17 11:38:51' }
                type: object
          type: object
      type: object
    CartConfig:
      title: 'Configurações de carrinho abandonado'
      description: 'Configurações de recuperação de carrinho abandonado da loja.'
      properties:
        id:
          description: 'Identificador único da configuração.'
          type: integer
        active:
          description: 'Indica se a recuperação de carrinho abandonado está ativa na loja.'
          type: boolean
        email_subject:
          description: 'Assunto do e-mail de recuperação; a variável `{name}` é substituída pelo nome do cliente no envio.'
          type: string
          example: '{name}, os produtos que você escolheu estão te esperando :)'
        sms_subject:
          description: 'Texto do SMS de recuperação enviado ao cliente.'
          type: string
          example: null
        email_frequency:
          description: 'Quantidade de e-mails de recuperação previstos por carrinho abandonado.'
          type: integer
          example: 2
        email_hours_delay:
          description: 'Intervalo, em horas, entre o abandono do carrinho e o envio do primeiro e-mail de recuperação.'
          type: number
          format: float
          example: 0.5
        promocode_in_first_email:
          description: 'Indica se o cupom de desconto é enviado já no primeiro e-mail de recuperação.'
          type: boolean
        app_notification_config:
          description: 'Periodicidade das notificações de carrinho abandonado no aplicativo (`30_minutes`, `1_hour`, `3_hours` ou `once_a_day`); quando não configurada, vale `3_hours`.'
          type: string
          example: once_a_day
      type: object
    CartConfigAdditionalResponse:
      description: 'Datas de criação e atualização retornadas junto da configuração de carrinho abandonado.'
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CartItem:
      title: 'Item do Carrinho'
      description: 'Detalhes de um item no carrinho'
      properties:
        id:
          description: 'Identificador único do item do carrinho.'
          type: integer
        sku_id:
          description: 'ID do SKU adicionado ao carrinho.'
          type: integer
        cart_id:
          description: 'ID do carrinho ao qual o item pertence.'
          type: integer
        product_option_id:
          description: 'ID do SKU adicionado ao carrinho, equivalente a `sku_id`.'
          type: integer
        kit_id:
          description: 'ID do combo promocional que originou o item, quando ele foi adicionado como parte de um combo.'
          type: integer
        upsell_id:
          description: 'ID da oferta de upsell que originou o item, quando ele foi adicionado por upsell.'
          type: integer
        bundle_id:
          description: 'ID do bundle que originou o item, quando ele foi adicionado como parte de um bundle.'
          type: integer
        quantity:
          description: 'Quantidade do produto/SKU no carrinho.'
          type: integer
        gift:
          description: 'Indica se o item deve ser embalado como presente, para entrega a alguém diferente do comprador; quando verdadeiro, o valor do presente é somado ao preço do item.'
          type: boolean
        has_recomm:
          description: 'Indica se o item foi adicionado a partir do clique em um produto sugerido pelo e-mail de recomendação.'
          type: boolean
        custom_value:
          description: 'Valor personalizado do item, em reais.'
          type: number
          format: float
          nullable: true
        sku:
          description: 'Código SKU do item, usado para identificá-lo no estoque da loja.'
          type: string
      type: object
    CartItemsRelated:
      description: 'Item do carrinho acompanhado do SKU relacionado.'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Customer'
        -
          $ref: '#/components/schemas/BaseTimestamp'
        -
          properties:
            sku:
              description: 'SKU correspondente ao item, retornado por padrão.'
              properties:
                data:
                  $ref: '#/components/schemas/Sku'
              type: object
          type: object
    Cashback:
      title: Cashback
      description: 'Representa um cashback'
      properties:
        id:
          type: integer
        store_id:
          type: integer
        token:
          type: string
        active:
          type: boolean
        name:
          type: string
          example: 'Exemplo de cashback'
        min_amount:
          type: number
          format: float
        max_amount:
          type: number
          format: float
        valid_for:
          description: 'Dias de validade'
          type: integer
        percent_amount:
          description: 'Percentual de cashback'
          type: number
          format: float
        has_expiration:
          type: boolean
        starts_at:
          $ref: '#/components/schemas/BaseTimestamp'
        expires_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CashbackRule:
      title: CashbackRule
      description: 'Representa as regras de um cashback'
      properties:
        max_order_percent:
          type: integer
        expires_if_order_cancelled:
          type: boolean
        cumulative:
          type: boolean
        active:
          type: boolean
        allow_cashback_with_balance:
          type: string
          example: 'Exemplo de cashback'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Category:
      title: ''
      description: ''
      properties:
        id:
          type: integer
        merchant_id:
          type: integer
          readOnly: true
        parent_id:
          type: integer
        active:
          type: boolean
        featured:
          type: boolean
        price_factor:
          type: number
          format: float
        total_banners:
          type: integer
          example: 0
        sort_by:
          type: string
        name:
          type: string
        slug:
          type: string
        url:
          type: string
          format: url
        description:
          type: string
        external_url:
          type: string
        canonical_url:
          type: string
        order:
          type: integer
      type: object
    CategoryAdditionalResponse:
      title: ''
      description: ''
      properties:
        is_parent:
          description: 'Indica se a categoria é principal.'
          type: boolean
        url_path:
          description: 'Caminho relativo para a URL da categoria.'
          type: string
        slug_path:
          description: 'Slug completo da categoria, incluindo hierarquia.'
          type: string
        filters_values_ids:
          description: 'Lista de IDs de filtros associados à categoria.'
          type: array
          items:
            type: integer
        category_cover:
          description: 'URL da imagem de capa da categoria.'
          type: string
          format: url
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CategoryPublic:
      title: ''
      description: ''
      properties:
        id:
          type: integer
        parent_id:
          type: integer
        featured:
          type: boolean
        name:
          type: string
        slug:
          type: string
        url:
          type: string
          format: url
        order:
          type: integer
        is_parent:
          description: 'Indica se a categoria é principal.'
          type: boolean
        url_path:
          description: 'Caminho relativo para a URL da categoria.'
          type: string
        path:
          description: 'Árvore da categoria.'
          type: string
        category_cover:
          description: 'URL da imagem de capa da categoria.'
          type: string
          format: url
      type: object
    CategoriesWithRelations:
      title: Categorias
      description: 'Representa uma categoria do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Category'
        -
          $ref: '#/components/schemas/CategoryAdditionalResponse'
    CategoryBanner:
      title: Categoria
      description: 'Representa uma categoria do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CategoriesWithRelations'
    CheckoutAffiliation:
      title: Afiliação
      description: ''
      properties:
        id:
          type: integer
        active:
          type: boolean
        backup:
          type: boolean
        name:
          type: string
          example: 'Cielo Affiliation'
        statement_descriptor:
          type: string
        auto_capture:
          type: boolean
        has_payment_config:
          type: boolean
          example: false
        capture_hour_delay:
          type: integer
        force_minimum_tax:
          type: boolean
        status:
          type: string
        auth_type:
          type: string
        gateway:
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CheckoutGateway'
          type: object
      type: object
    CheckoutConfig:
      title: 'Configuração do checkout'
      description: 'Configurações do checkout da loja.'
      properties:
        id:
          description: 'Identificador único da configuração de checkout.'
          type: integer
        store_id:
          description: 'ID da loja dona da configuração de checkout.'
          type: integer
          readOnly: true
          example: '1'
        currency:
          description: 'Moeda utilizada no checkout (`R$`).'
          type: string
        show_shipping_in_cart:
          description: 'Indica se o valor do frete é exibido no carrinho.'
          type: boolean
        show_shipping_time:
          description: 'Indica se o prazo de entrega é exibido no checkout.'
          type: boolean
        show_installment_warning:
          description: 'Indica se o aviso sobre as condições de parcelamento é exibido no checkout.'
          type: boolean
        auto_shipping_selection:
          description: 'Indica se a opção de frete é selecionada automaticamente no checkout.'
          type: boolean
        sequential_sale_number:
          description: 'Indica se os pedidos recebem número de venda sequencial.'
          type: boolean
        delivery_working_days:
          description: 'Indica se o prazo de entrega é calculado em dias úteis.'
          type: boolean
        max_daily_sales_by_ip:
          description: 'Número máximo de vendas diárias permitidas por endereço IP.'
          type: integer
        max_items_per_order:
          description: 'Número máximo de itens permitidos por pedido.'
          type: integer
        show_products_links:
          description: 'Indica se o nome do produto no checkout é clicável, levando à página do produto na loja; sem efeito em lojas que utilizam apenas o checkout.'
          type: boolean
        show_birthday:
          description: 'Indica se o campo de data de nascimento é exibido no checkout.'
          type: boolean
        show_delivery_date:
          description: 'Indica se a data prevista de entrega é exibida no checkout.'
          type: boolean
        shipping_deadline_as_date:
          description: 'Indica se o prazo de entrega é exibido como data, em vez de quantidade de dias.'
          type: boolean
        show_original_price_when_free_shipping:
          description: 'Indica se o preço original do frete é exibido quando o frete é grátis.'
          type: boolean
        active_rebuy:
          description: 'Indica se a recompra com um clique está ativa no checkout.'
          type: boolean
        password_required:
          description: 'Indica se o cliente precisa definir uma senha para concluir a compra.'
          type: boolean
        accumulate_discounts:
          description: 'Indica se descontos de diferentes origens podem ser acumulados.'
          type: boolean
        select_largest_installment:
          description: 'Indica se o checkout seleciona automaticamente o maior número de parcelas disponível.'
          type: boolean
        always_requires_address:
          description: 'Indica se o endereço é sempre exigido, mesmo para produtos sem envio físico.'
          type: boolean
        use_product_brand:
          description: 'Indica se o nome e o logotipo da loja no checkout são substituídos pelos da marca do primeiro item do carrinho; se a marca não tiver logotipo próprio, o da loja é mantido.'
          type: boolean
        skip_cart:
          description: 'Indica se o checkout pula a etapa do carrinho.'
          type: boolean
        single_order_bump:
          description: 'Indica se apenas um order bump pode ser adicionado por pedido.'
          type: boolean
        unify_upsell:
          description: 'Indica se os pedidos de upsell são unificados no pedido original, em vez de gerarem pedidos separados; disponível a partir do plano Essential.'
          type: boolean
        person_type:
          description: 'Tipos de pessoa aceitos no checkout: `all` (todos), `personal` (física) ou `business` (jurídica).'
          type: string
        payment_auto_selected:
          description: 'Meio de pagamento pré-selecionado no checkout: `credit_card`, `billet`, `deposit`, `pix`, `pix_in_installments` ou `nupay`.'
          type: string
        brand_url:
          description: 'URL do logotipo da marca exibido no checkout.'
          type: string
        text_header:
          description: 'Texto exibido no cabeçalho do checkout.'
          type: string
        custom_css:
          description: 'CSS personalizado aplicado ao checkout.'
          type: string
        text_footer:
          description: 'Texto exibido no rodapé do checkout.'
          type: string
        text_shipping:
          description: 'Texto informativo sobre o envio exibido no checkout.'
          type: string
        text_billet:
          description: 'Texto informativo sobre o pagamento via boleto exibido no checkout.'
          type: string
        text_card:
          description: 'Texto informativo sobre o pagamento via cartão exibido no checkout.'
          type: string
        header_text_background:
          description: 'Cor de fundo do cabeçalho do checkout, em hexadecimal.'
          type: string
        button_color:
          description: 'Cor dos botões do checkout, em hexadecimal.'
          type: string
        phone:
          description: 'Telefone de contato exibido no checkout.'
          type: string
        redirect_url_billet:
          description: 'URL de redirecionamento após a compra paga com boleto.'
          type: string
        redirect_url_card:
          description: 'URL de redirecionamento após a compra paga com cartão.'
          type: string
        redirect_url_pix_in_installments:
          description: 'URL de redirecionamento após a compra paga com Pix parcelado.'
          type: string
        redirect_url_deposit:
          description: 'URL de redirecionamento após a compra paga com depósito.'
          type: string
        redirect_url_upsell:
          description: 'URL de redirecionamento após a etapa de upsell.'
          type: string
        stopwatch_minutes:
          description: 'Tempo, em minutos, do cronômetro de contagem regressiva exibido no checkout.'
          type: integer
        domain:
          description: 'Domínio próprio configurado para o checkout.'
          type: string
        custom_script:
          description: 'Script personalizado injetado nas páginas do checkout.'
          type: string
        custom_thankyou_script:
          description: 'Script personalizado injetado na página de agradecimento (pós-compra) do checkout.'
          type: string
        custom_metatags:
          description: 'Meta tags personalizadas incluídas nas páginas do checkout.'
          type: string
      type: object
    CheckoutConfigAdditionalResponse:
      description: 'Recursos adicionais da configuração de checkout.'
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CheckoutGateway:
      title: 'Gateway de pagamento'
      description: ''
      properties:
        alias:
          type: string
          example: billet
        name:
          type: string
          example: 'Boleto Bancário'
        icon_url:
          description: 'URL do ícone do gateway'
          type: string
          format: uri
        allow_backup:
          type: boolean
        allow_edit_pix_code_expiration_time:
          type: boolean
        installments_config:
          description: 'Configuração de parcelamento'
          properties:
            allow_custom_installments:
              description: 'Indica se parcelamentos personalizados são permitidos'
              type: boolean
            message:
              description: 'Mensagem explicativa sobre o parcelamento'
              type: string
              nullable: true
            help_link:
              description: 'Link de ajuda sobre o parcelamento'
              type: string
              format: uri
              nullable: true
          type: object
        auth_type:
          type: string
          example: 'Boleto Bancário'
        gateway_exists:
          type: boolean
        params:
          properties:
            data:
              type: array
              items:
                type: string
                example:
                  - env
                  - merchant_id
                  - key
          type: object
      type: object
    CheckoutInstallment:
      title: 'Parcela de Pagamento'
      description: 'Objeto de descreve os detalhes de uma parcela de pagamento'
      properties:
        id:
          type: integer
          example: 1
        payment_id:
          type: integer
          example: 2
        installment:
          type: integer
          example: 1
        tax:
          type: number
          format: float
          example: 1.5
        percent_discount:
          type: number
          format: float
          example: 0
        start_at:
          $ref: '#/components/schemas/BaseTimestamp'
        end_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CheckoutPayment:
      title: 'Forma de pagamento'
      description: ''
      properties:
        id:
          type: integer
        alias:
          type: string
        name:
          type: string
        has_config:
          type: boolean
        active_config:
          type: boolean
        is_credit_card:
          type: boolean
        is_deposit:
          type: boolean
        is_billet:
          type: boolean
        is_pix:
          type: boolean
        is_pix_in_installments:
          type: boolean
        is_wallet:
          type: boolean
        icon_url:
          description: 'URL do ícone da forma de pagamento'
          type: string
          format: uri
      type: object
    CheckoutPaymentConfig:
      title: 'Configuração de pagamento'
      description: 'Configuração de um meio de pagamento no checkout da loja.'
      required:
        - payment_id
        - affiliation_id
        - active
        - default_display
      properties:
        id:
          description: 'Identificador único da configuração de pagamento.'
          type: integer
        payment_id:
          description: 'ID do meio de pagamento configurado.'
          type: integer
        affiliation_id:
          description: 'ID da afiliação (adquirente/gateway) usada por este meio de pagamento.'
          type: integer
        active:
          description: 'Indica se o meio de pagamento está ativo no checkout.'
          type: boolean
        default_display:
          description: 'Indica se o meio de pagamento é exibido por padrão no checkout.'
          type: boolean
        spread:
          description: 'Indica se os juros do parcelamento são diluídos nos preços dos produtos, fazendo o parcelamento aparecer sem juros ao cliente.'
          type: boolean
        ignore_promotions:
          description: 'Indica se este meio de pagamento ignora as promoções ativas.'
          type: boolean
        accumulate_discount:
          description: 'Indica se o desconto deste meio de pagamento pode ser acumulado com outros descontos.'
          type: boolean
        percent_discount:
          description: 'Percentual de desconto aplicado ao usar este meio de pagamento.'
          type: number
          format: float
        min_installment_value:
          description: 'Valor mínimo de cada parcela, em reais, permitido no parcelamento deste meio de pagamento.'
          type: number
          format: float
        max_installments_without_tax:
          description: 'Número máximo de parcelas sem juros neste meio de pagamento.'
          type: integer
        billet_expire_days:
          description: 'Quantidade de dias até o vencimento do boleto.'
          type: integer
        days_to_cancel_unpaid_billets:
          description: 'Quantidade de dias até o cancelamento automático de boletos não pagos.'
          type: integer
        hours_to_cancel_unpaid_pix:
          description: 'Quantidade de horas até o cancelamento automático de pagamentos Pix não pagos.'
          type: integer
        hours_to_expire_pix_code:
          description: 'Quantidade de horas até a expiração do código Pix gerado.'
          type: number
        billet_instructions:
          description: 'Instruções exibidas no boleto gerado.'
          type: string
        installments:
          description: 'Condições de parcelamento configuradas para este meio de pagamento.'
          properties:
            data:
              description: 'Lista das condições de parcelamento configuradas.'
              type: array
              items:
                $ref: '#/components/schemas/CheckoutInstallment'
          type: object
        affiliation:
          description: 'Afiliação (adquirente/gateway) vinculada a este meio de pagamento.'
          properties:
            data:
              $ref: '#/components/schemas/CheckoutAffiliation'
          type: object
        payment:
          description: 'Meio de pagamento vinculado a esta configuração.'
          properties:
            data:
              $ref: '#/components/schemas/CheckoutPayment'
          type: object
        created_at:
          description: 'Data e hora de criação da configuração de pagamento.'
          type: string
          format: date-time
          readOnly: true
        updated_at:
          description: 'Data e hora da última atualização da configuração de pagamento.'
          type: string
          format: date-time
          readOnly: true
      type: object
    CheckoutStatus:
      title: 'Status do pedido'
      description: 'Representa os estados possíveis de um pedido'
      properties:
        id:
          type: integer
        order:
          type: integer
        alias:
          type: string
        name:
          type: string
          example: 'Pedido realizado'
        description:
          type: string
          example: 'O pedido foi realizado'
      type: object
    Cluster:
      title: 'Cluster de clientes'
      description: 'Clusters são grupos de clientes com condições comerciais flexíveis, como preço de produto, frete e forma de entrega'
      properties:
        id:
          description: 'Identificador único do cluster.'
          type: integer
        name:
          description: 'Nome do cluster.'
          type: string
        active:
          description: 'Indica se o cluster está ativo.'
          type: boolean
        attach_on_signup:
          description: 'Indica se novos clientes são vinculados automaticamente a este cluster ao se cadastrarem.'
          type: boolean
        person_type:
          description: 'Tipo de pessoa a que o cluster se aplica: `f` para pessoa física, `j` para pessoa jurídica.'
          type: string
        min_order_value:
          description: 'Valor mínimo de pedido para que as condições comerciais do cluster sejam aplicadas, em reais.'
          type: number
          format: float
        base_price_percent:
          description: 'Percentual aplicado sobre o preço base dos produtos para os clientes deste cluster.'
          type: integer
        payments_ids:
          description: 'IDs dos métodos de pagamento'
          type: array
          items:
            type: integer
        carriers_ids:
          description: 'IDs das transportadoras'
          type: array
          items:
            type: integer
        restrictions:
          description: 'Restrições de produtos às quais as condições do cluster se aplicam.'
          properties:
            include:
              description: 'Produtos, marcas, coleções e categorias incluídos nas condições do cluster.'
              properties:
                products_ids:
                  description: 'IDs dos produtos incluídos.'
                  type: array
                  items: { type: integer }
                brands_ids:
                  description: 'IDs das marcas incluídas.'
                  type: array
                  items: { type: integer }
                collections_ids:
                  description: 'IDs das coleções incluídas.'
                  type: array
                  items: { type: integer }
                categories_ids:
                  description: 'IDs das categorias incluídas.'
                  type: array
                  items: { type: integer }
              type: object
          type: object
        exclude:
          description: 'Produtos, marcas, coleções e categorias excluídos das condições do cluster.'
          properties:
            products_ids:
              description: 'IDs dos produtos excluídos.'
              type: array
              items:
                type: integer
            brands_ids:
              description: 'IDs das marcas excluídas.'
              type: array
              items:
                type: integer
            collections_ids:
              description: 'IDs das coleções excluídas.'
              type: array
              items:
                type: integer
            categories_ids:
              description: 'IDs das categorias excluídas.'
              type: array
              items:
                type: integer
          type: object
        include_ids:
          description: 'Lista de IDs para inclusão'
          type: array
          items:
            type: integer
          example: '[987, 654, 456, 321, 123]'
        exclude_ids:
          description: 'Lista de IDs para exclusão'
          type: array
          items:
            type: integer
          example: '[123, 321]'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    ClusterShipping:
      title: 'Regra de frete de um cluster'
      description: 'Regra de frete de um cluster: define o desconto de frete por faixa de CEP e valor mínimo de pedido para os clientes do cluster.'
      properties:
        id:
          description: 'Identificador único da regra de frete.'
          type: integer
        cluster_id:
          description: 'ID do cluster ao qual a regra de frete pertence.'
          type: integer
        name:
          description: 'Nome da regra de frete.'
          type: string
        country:
          description: 'País ao qual a regra de frete se aplica.'
          type: string
        zipcode_min:
          description: 'CEP inicial da faixa atendida pela regra de frete.'
          type: integer
        zipcode_max:
          description: 'CEP final da faixa atendida pela regra de frete.'
          type: integer
        min_order_value:
          description: 'Valor mínimo de pedido para que a regra de frete seja aplicada, em reais.'
          type: number
          format: float
        shipment_discount_percent:
          description: 'Percentual de desconto aplicado sobre o frete quando a regra é atendida.'
          type: number
          format: float
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Collection:
      title: 'Coleção de produtos'
      description: 'Representa uma coleção a qual um produto pertence'
      properties:
        id:
          type: integer
        parent_id:
          type: integer
        active:
          type: boolean
        show_banners:
          type: boolean
        featured:
          type: boolean
        is_promotional:
          type: boolean
        name:
          type: string
        visible_products:
          type: integer
        home:
          type: boolean
        expired:
          type: boolean
        slug:
          type: string
        description:
          type: string
        seo_title:
          type: string
        seo_keywords:
          type: string
        seo_description:
          type: string
        path:
          description: 'Caminho relativo para o recurso.'
          type: string
        expire_in:
          description: 'Tempo restante até a expiração, descrito em formato textual (ex.: ''dentro de 998 anos'').'
          type: string
        total_products:
          description: 'Número total de produtos relacionados ao recurso.'
          type: integer
      type: object
    CollectionAdditionalResponse:
      title: ''
      description: ''
      properties:
        restriced:
          type: boolean
        url:
          type: string
          format: uri
        stopwatch:
          type: string
        stopwatch_expires_in:
          type: string
        start_at:
          $ref: '#/components/schemas/BaseTimestamp'
        end_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CollectionPublic:
      description: 'Representa uma coleção do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Collection'
        -
          $ref: '#/components/schemas/CollectionAdditionalResponse'
        -
          properties:
            products:
              type: array
              items:
                $ref: '#/components/schemas/ProductPublic'
            banners:
              type: array
              items:
                $ref: '#/components/schemas/BannersPublic'
          type: object
    CollectionsWithRelations:
      title: Categorias
      description: 'Representa uma categoria do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Collection'
        -
          $ref: '#/components/schemas/CollectionAdditionalResponse'
    CollectionBanner:
      title: Promoção
      description: 'Representa uma promoção do banner'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionsWithRelations'
    Combo:
      title: 'Combo de produtos'
      description: ''
      properties:
        id:
          type: integer
        active:
          type: boolean
        accumulate:
          type: boolean
        name:
          type: string
          example: 'Combo test'
        description:
          type: string
        products_ids:
          description: 'IDs dos produtos que possuem essa customização'
          type: array
          items:
            type: integer
        discount_type:
          description: 'Tipo de desconto (p para percentual, v para valor)'
          type: string
          enum:
            - p
            - v
        discount_value:
          type: number
          format: float
          example: 10
        expired:
          type: boolean
        total_products:
          type: integer
        start_at:
          properties:
            date:
              type: string
              format: date-time
            timezone_type:
              type: integer
            timezone:
              type: string
          type: object
        end_at:
          properties:
            date:
              type: string
              format: date-time
            timezone_type:
              type: integer
            timezone:
              type: string
          type: object
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    Country:
      title: País
      description: ''
      properties:
        code:
          type: string
        name:
          type: string
      type: object
    Customer:
      title: Customer
      description: 'Representa um cliente'
      properties:
        id:
          description: 'Identificador único do cliente.'
          type: integer
        merchant_id:
          description: 'ID da loja à qual o cliente pertence.'
          type: integer
        marketplace_id:
          description: 'ID do marketplace de origem do cliente, quando o cadastro vem de um marketplace.'
          type: integer
        active:
          description: 'Indica se o cliente está ativo.'
          type: boolean
        type:
          description: 'Tipo de pessoa do cliente: `f` para pessoa física, `j` para pessoa jurídica.'
          type: string
        cluster_id:
          description: 'ID do cluster (grupo de clientes) ao qual o cliente está vinculado, quando houver.'
          type: integer
        name:
          description: 'Nome do cliente.'
          type: string
        first_name:
          description: 'Primeiro nome do cliente, derivado de `name`.'
          type: string
        last_name:
          description: 'Sobrenome do cliente, derivado de `name`.'
          type: string
        generic_name:
          description: 'Nome de exibição do cliente: o `name` para pessoa física e a `razao_social` para pessoa jurídica.'
          type: string
        cpf:
          description: 'CPF do cliente, para pessoa física.'
          type: string
        spreadsheet:
          description: 'Dados do cliente desnormalizados para exportação em planilha, retornados sob demanda via `include`.'
          properties:
            data:
              description: 'Conjunto de dados do cliente usados na exportação em planilha.'
              properties:
                brands:
                  description: 'Marcas dos produtos comprados pelo cliente no último pedido, separadas por vírgula.'
                  type: string
                city:
                  description: 'Cidade do endereço do cliente.'
                  type: string
                purchased_brands:
                  description: 'Marcas dos produtos comprados pelo cliente no último pedido, separadas por vírgula.'
                  type: string
                last_order_date:
                  description: 'Data do último pedido do cliente.'
                  properties: { date: { description: 'Data e hora do último pedido do cliente.', type: string, format: date-time }, timezone: { description: 'Fuso horário da data do último pedido.', type: string }, timezone_type: { description: 'Tipo de representação do fuso horário (padrão interno de data do PHP).', type: integer } }
                  type: object
                last_order_value:
                  description: 'Valor total do último pedido do cliente, em reais.'
                  type: string
                purchased_categories:
                  description: 'Categorias dos produtos comprados pelo cliente no último pedido, separadas por vírgula.'
                  type: string
                number:
                  description: 'Número do endereço do cliente.'
                  type: string
                uf:
                  description: 'Unidade federativa (estado) do endereço do cliente.'
                  type: string
                phone:
                  description: 'Telefone do cliente, com DDD e formatado.'
                  type: string
                  example: '(16) 98187-5668'
                street:
                  description: 'Nome da rua do endereço do cliente.'
                  type: string
                phone_number:
                  description: 'Número do telefone do cliente, sem o DDD.'
                  type: string
                  example: '981875668'
                categories:
                  description: 'Categorias dos produtos comprados pelo cliente no último pedido, separadas por vírgula.'
                  type: string
                neighborhood:
                  description: 'Bairro do endereço do cliente.'
                  type: string
                complement:
                  description: 'Complemento do endereço do cliente.'
                  type: string
                phone_code:
                  description: 'DDD do telefone do cliente.'
                  type: string
                  example: '16'
              type: object
          type: object
        phone:
          description: 'Dados de telefone do cliente.'
          properties:
            area_code:
              description: 'Código de área (DDD) do telefone.'
              type: string
            full_number:
              description: 'Número completo do telefone, com DDD e sem formatação.'
              type: string
            number:
              description: 'Número do telefone, sem o DDD.'
              type: string
            formated_number:
              description: 'Número do telefone formatado para exibição.'
              type: string
            whatsapp_link:
              description: 'Link para iniciar uma conversa no WhatsApp com o cliente.'
              type: string
              format: uri
          type: object
        razao_social:
          description: 'Razão social do cliente, para pessoa jurídica.'
          type: string
        cnpj:
          description: 'CNPJ do cliente, para pessoa jurídica.'
          type: string
        state_registration:
          description: 'Inscrição estadual do cliente, para pessoa jurídica.'
          type: string
        email:
          description: 'E-mail do cliente.'
          type: string
          format: email
        password:
          description: 'Senha de acesso do cliente. Enviada apenas na criação ou atualização, nunca retornada.'
          type: string
          writeOnly: true
        birthday:
          description: 'Data de nascimento do cliente.'
          type: string
          format: date
        newsletter:
          description: 'Indica se o cliente aceitou receber a newsletter da loja.'
          type: boolean
        whatsapp:
          description: 'Indica se o cliente aceitou receber mensagens no WhatsApp.'
          type: boolean
        social_driver:
          description: 'Provedor de login social usado no cadastro do cliente (ex.: Google, Facebook), quando aplicável.'
          type: string
        social_id:
          description: 'Identificador do cliente no provedor de login social, quando o cadastro veio de login social.'
          type: integer
        ip:
          description: 'Endereço IP do cliente no momento do cadastro.'
          type: string
          readOnly: true
        token:
          description: 'Token único do cliente, usado para autenticá-lo em ações como login automático.'
          type: string
        utm_source:
          description: 'Origem da campanha de marketing (parâmetro UTM `utm_source`) que originou o cadastro do cliente.'
          type: string
        utm_campaign:
          description: 'Nome da campanha de marketing (parâmetro UTM `utm_campaign`) que originou o cadastro do cliente.'
          type: string
        notes:
          description: 'Observações internas sobre o cliente.'
          type: string
        login_url:
          description: 'URL de login automático do cliente na loja, gerada a partir do seu `token`.'
          type: string
          format: uri
        anonymized:
          description: 'Indica se os dados do cliente foram anonimizados por solicitação de exclusão (LGPD).'
          type: boolean
      type: object
    CustomerAdditionalResponse:
      title: ''
      description: 'Recursos adicionais do cliente, retornados sob demanda via parâmetro `include`.'
      properties:
        deletion_request:
          description: 'Solicitação de exclusão de dados do cliente (LGPD), quando houver.'
          properties:
            data:
              description: 'Dados da solicitação de exclusão de dados do cliente.'
              properties:
                pending_confirmation:
                  description: 'Indica se a solicitação de exclusão ainda aguarda confirmação do cliente.'
                  type: boolean
                scheduled_date:
                  description: 'Data agendada para a exclusão definitiva dos dados do cliente.'
                  type: string
                  format: date
              type: object
          type: object
        addresses:
          description: 'Endereços cadastrados pelo cliente.'
          properties:
            data:
              description: 'Lista de endereços do cliente.'
              type: array
              items:
                properties:
                  receiver: { description: 'Nome de quem recebe a entrega no endereço.', type: string }
                  city: { description: 'Cidade do endereço.', type: string }
                  full_address: { description: 'Endereço completo formatado.', type: string }
                  zip_code: { description: 'CEP do endereço.', type: string }
                  number: { description: 'Número do endereço.', type: string }
                  uf: { description: 'Unidade federativa (estado) do endereço.', type: string }
                  street: { description: 'Nome da rua do endereço.', type: string }
                  id: { description: 'Identificador único do endereço.', type: integer }
                  neighborhood: { description: 'Bairro do endereço.', type: string }
                  customer_id: { description: 'ID do cliente dono do endereço.', type: integer }
                  complement: { description: 'Complemento do endereço.', type: string }
                  created_at: { $ref: '#/components/schemas/BaseTimestamp' }
                  updated_at: { $ref: '#/components/schemas/BaseTimestamp' }
                type: object
          type: object
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CustomerAddress:
      title: 'Endereço do cliente'
      description: 'Representa o endereço do cliente'
      properties:
        id:
          description: 'Identificador único do endereço.'
          type: integer
        customer_id:
          description: 'ID do cliente dono do endereço.'
          type: integer
        receiver:
          description: 'Nome de quem recebe a entrega no endereço.'
          type: string
        zip_code:
          description: 'CEP do endereço.'
          type: string
        street:
          description: 'Nome da rua do endereço.'
          type: string
        number:
          description: 'Número do endereço.'
          type: string
        complement:
          description: 'Complemento do endereço.'
          type: string
        neighborhood:
          description: 'Bairro do endereço.'
          type: string
        city:
          description: 'Cidade do endereço.'
          type: string
        uf:
          description: 'Unidade federativa (estado) do endereço.'
          type: string
        full_address:
          description: 'Endereço completo formatado.'
          type: string
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    CustomerBlockedIP:
      title: 'IP bloqueado'
      description: ''
      properties:
        id:
          type: integer
        ip:
          type: string
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    Customization:
      title: 'Customização de um SKU'
      description: ''
      properties:
        id:
          description: 'ID do produto customizado'
          type: integer
        name:
          type: string
          example: 'Primeira Letra'
        price:
          description: 'Preço do produto customizado'
          type: number
        description:
          type: string
          example: Descrição
        type:
          type: string
          example: select
        required:
          description: 'Indica se é obrigatório ou não'
          type: boolean
          example: true
        allowed_values:
          description: 'Valores permitidos para o campo'
          type: string
        max_chars:
          description: 'Há uma limitação de caracteres na customização. Exemplo: o número da camisa deve ter apenas 2 caracteres.'
          type: integer
          example: 1
        products_ids:
          description: 'IDs dos produtos que possuem essa customização'
          type: array
          items:
            type: integer
        values:
          type: array
          items:
            type: string
          example: '[''A'', ''B'', ''C'', ''D'']'
      type: object
    CustomizationAdditionalResponse:
      properties:
        total_products:
          type: integer
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    DiscountView:
      description: 'Representa os atributos de um Desconto'
      properties:
        id:
          type: integer
          example: 1520
        store_id:
          type: integer
          example: 1319250
        discount_type_id:
          type: integer
          example: 1520
        name:
          type: string
          example: Lucas
        entry_condition_type:
          type: string
          example: amount
        entry_condition_value:
          type: number
          example: 10
        discount_method:
          type: string
          example: percent
        discount_value:
          type: number
          example: 100
        discount_type:
          type: string
          example: buy_x_get_y
        accumulate:
          type: boolean
          example: false
        start_at:
          $ref: '#/components/schemas/BaseTimestamp'
        end_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    DiscountViewAdditionalResponse:
      description: 'Exibe detalhes das regras do desconto'
      properties:
        restrictions:
          description: 'Restrições gerais para aplicação do desconto.'
          properties:
            include:
              properties:
                products_ids:
                  type: array
                  items: { type: integer }
                brands_ids:
                  type: array
                  items: { type: integer }
                collections_ids:
                  type: array
                  items: { type: integer }
                categories_ids:
                  type: array
                  items: { type: integer }
              type: object
            include_ids:
              description: 'IDs incluídos na regra de aplicação do desconto.'
              type: array
              items:
                type: integer
          type: object
        specifications:
          description: 'Configurações para aplicação do desconto.'
          properties:
            data:
              properties:
                cart_usage_limit:
                  description: 'Limite de uso do carrinho.'
                  type: integer
                  example: 0
                get_products_quantity:
                  description: 'Quantidade de produtos a serem obtidos.'
                  type: integer
                  example: 1
                set_cart_usage_limit:
                  description: 'Define se há limite de uso por carrinho.'
                  type: boolean
                  example: false
              type: object
            restrictions:
              properties:
                include:
                  properties: { products_ids: { type: array, items: { type: integer } }, brands_ids: { type: array, items: { type: integer } }, collections_ids: { type: array, items: { type: integer } }, categories_ids: { type: array, items: { type: integer } } }
                  type: object
                include_ids:
                  description: 'IDs incluídos na regra de aplicação do desconto.'
                  type: array
                  items: { type: integer }
              type: object
          type: object
      type: object
    EmailConfig:
      title: 'Configurações de e-mails'
      description: ''
      properties:
        id:
          type: integer
        active:
          type: boolean
        show_order_number:
          type: boolean
        order_number:
          type: string
        from:
          type: string
        name:
          type: string
        product_review_days:
          type: integer
        resume_values:
          type: string
      type: object
    EmailConfigAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Feed:
      title: Feed
      description: 'Representa um feed do catálogo'
      properties:
        id:
          type: integer
        collection_id:
          type: integer
        service:
          type: string
          example: google
        name:
          type: string
          example: ecd73150-e747-11e7-9221-0361c8d4d388
        url:
          type: string
          format: uri
          example: 'https://bubbstore.com/xml/file-name.xml'
      type: object
    FeedAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Filter:
      title: 'Filtro de busca de produtos'
      description: ''
      properties:
        id:
          type: integer
          readOnly: true
        name:
          description: 'Nome do filtro'
          type: string
          example: Tamanho
        searchable:
          description: 'Indica se o filtro é pesquisável'
          type: boolean
          readOnly: true
        navigation:
          description: 'Indica se o filtro é utilizado na navegação'
          type: boolean
          readOnly: true
      type: object
    FilterAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    FilterOption:
      title: 'Valor de um filtro de busca de produtos'
      description: ''
      properties:
        id:
          description: 'ID do valor'
          type: integer
          readOnly: true
          example: 1
        name:
          description: 'Nome do valor'
          type: string
          example: P
        color:
          description: 'Cor associada ao valor'
          type: string
          format: hex
          example: '#FFFFFF'
        image_url:
          type: string
          example: 'https://image-url.com/image.jpg'
      type: object
    FilterOptionAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Flag:
      title: 'Selo de um produto'
      description: ''
      properties:
        id:
          type: integer
          readOnly: true
        active:
          type: boolean
        is_visible:
          type: boolean
        name:
          type: string
          example: 'Coleção 2017'
        slug:
          type: string
          example: colecao-2017
        total_products:
          type: integer
          readOnly: true
        text_color:
          type: string
          example: '#ffffff'
        background_color:
          type: string
          example: '#000000'
        image_url:
          type: string
          format: url
          example: 'https://image.com/selo.gif'
      type: object
    FlagAdditionalResponse:
      title: ''
      description: ''
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    FreeShipment:
      title: 'Dados de frete grátis'
      description: ''
      properties:
        id:
          type: integer
        shipment_service_id:
          type: integer
        uf:
          type: string
          example: SP
        min:
          type: number
          format: float
          example: 199
        service_name:
          type: string
          example: sedex
      type: object
    Freebie:
      description: 'Atributos do brinde'
      properties:
        id:
          description: 'ID do brinde'
          type: integer
          example: 3976
        active:
          description: 'Indica se o brinde está ativo'
          type: boolean
          example: true
        store_id:
          description: 'ID da loja associada'
          type: integer
          example: 176851
        name:
          description: 'Nome do brinde'
          type: string
          example: 'Teste docs'
        start_at:
          description: 'Data de início da oferta do brinde'
          type: string
          format: date
          example: '2025-09-16'
        expires_at:
          description: 'Data de expiração do brinde (se configurado)'
          type: string
          format: date
          example: '2025-09-16'
          nullable: true
        resource_id:
          description: 'ID do produto ou SKU vinculado ao brinde'
          type: integer
          example: 9791068
        resource_type:
          description: 'Pode ser produto ou SKU'
          type: string
          example: product
        rule:
          description: 'Regra aplicada ao brinde'
          type: string
          example: always
        min_quantity:
          description: 'Quantidade mínima de produtos no carrinho para receber o brinde'
          type: integer
          example: 0
        min_amount:
          description: 'Valor mínimo no carrinho para receber o brinde'
          type: number
          format: float
          example: 0
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
      additionalProperties: false
    Grid:
      title: 'Variação de um produto'
      description: ''
      properties:
        id:
          type: integer
          readOnly: true
          example: 13
        name:
          type: string
          example: Cor
      type: object
    GridAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    GridOption:
      title: 'Valores de uma variação de produto'
      description: ''
      properties:
        id:
          type: integer
          readOnly: true
          example: 490
        name:
          description: 'Nome do valor da variação'
          type: string
          example: Amarelo
        identification:
          description: 'Identificação do valor da variação'
          type: string
        color:
          description: 'Cor do valor da variação'
          type: string
          example: '#fff705'
          nullable: true
        image_url:
          description: 'URL da imagem do valor da variação'
          type: string
          format: url
          example: 'https://image-url.com/image.jpg'
      type: object
    GridOptionAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Group:
      title: 'Grupo de Produtos'
      description: 'Representa um grupo associado a um produto'
      properties:
        id:
          type: integer
        name:
          type: string
      type: object
    GroupAdditionalResponse:
      properties:
        total_products:
          type: integer
        products_ids:
          type: array
          items:
            type: integer
          example: '[123, 321]'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Lead:
      title: Lead
      description: 'Representa um lead da lista de leads'
      properties:
        id:
          type: integer
        merchant_id:
          type: integer
          readOnly: true
          example: '1'
        name:
          type: string
          example: 'Nome do Lead'
        email:
          type: string
          example: lead@email.com
        birthday:
          type: string
          format: date
          example: yyyy-mm-dd
        city:
          type: string
          example: 'São Paulo'
        state:
          type: string
          example: SP
        genre:
          type: string
          example: m
        utm_source:
          type: string
          example: ''
        utm_campaign:
          type: string
          example: ''
        utm_medium:
          type: string
          example: ''
        utm_term:
          type: string
          example: ''
        utm_content:
          type: string
          example: ''
        params:
          type: string
          example:
            foo: Bar
            param2: Param2Value
          additionalProperties:
            type: string
        is_customer:
          type: boolean
          example: 'true'
        customer_id:
          type: integer
          example: '123'
        customer_since:
          type: string
          format: date
          example: yyyy-mm-dd
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Look:
      title: 'Look do catálogo'
      description: 'Representa um look relacionado ao catálogo de produtos'
      properties:
        id:
          type: integer
        active:
          description: 'Se o look está ativo'
          type: boolean
        name:
          description: 'Nome do look'
          type: string
          example: 'Nome do Look'
        slug:
          type: string
          example: nome-do-look
        description:
          description: 'Descrição do look'
          type: string
          example: 'Descrição do look'
        total_products:
          description: 'Total de produtos no look'
          type: integer
        url:
          description: 'URL do look'
          type: string
          format: uri
      type: object
    LookAdditionalResponse:
      properties:
        products_ids:
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
            - 4
            - 5
        total_price:
          description: 'Preço total do pedido'
          type: number
          format: float
        total_price_formated:
          description: 'Preço total formatado para exibição'
          type: string
        installments:
          description: 'Informações sobre parcelamento'
          properties:
            max_installment:
              description: 'Número máximo de parcelas permitidas'
              type: integer
            max_installment_value:
              description: 'Valor máximo de cada parcela'
              type: number
              format: float
            amount:
              description: 'Valor da parcela'
              type: number
              format: float
            text:
              description: 'Texto explicativo do parcelamento sem juros'
              type: string
            text_with_tax:
              description: 'Texto explicativo do parcelamento com juros'
              type: string
            text_discount_percent:
              description: 'Percentual de desconto aplicado ao parcelamento, se houver'
              type: string
              nullable: true
            text_discount:
              description: 'Valor do desconto aplicado ao parcelamento, se houver'
              type: string
              nullable: true
          type: object
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Marketplace:
      title: Marketplace
      description: ''
      properties:
        id:
          type: integer
        visible:
          type: boolean
        searchable:
          type: boolean
        name:
          type: string
        alias:
          type: string
        auth_type:
          type: string
      type: object
    MarketplaceAccount:
      title: ''
      description: ''
      properties:
        id:
          type: integer
        store_id:
          type: integer
          readOnly: true
          example: '1'
        marketplace_id:
          type: integer
        stock_id:
          type: integer
        active:
          type: boolean
        auto_sync_catalog:
          type: boolean
        name:
          type: string
        marketplace_user_id:
          type: integer
        price_attribute:
          type: string
        price_percentage:
          type: number
          format: float
        default_status_id:
          type: integer
        params:
          properties:
            listing_type_id:
              type: string
              example: bronze
            allow_sku_without_stock:
              type: boolean
              example: true
          type: object
        auth_params:
          properties:
            access_token:
              type: string
              example: access_token
            expires_in:
              type: integer
              example: 1546103272
            refresh_token:
              type: string
              example: refresh_token
          type: object
        marketplace:
          properties:
            data:
              properties:
                id:
                  type: integer
                  example: 1
                alias:
                  type: string
                  example: mercadolivre
                name:
                  type: string
                  example: Mercadolivre
                auth_type:
                  type: string
                  example: oauth2
                needs_category_association:
                  type: boolean
                  example: true
                icon_url:
                  type: string
                  example: 'https://sualoja.com/marketplaces/mercadolivre.svg'
              type: object
          type: object
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        deleted_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    MarketplaceAttribute:
      title: 'Atributos do produto'
      description: ''
      properties:
        id:
          type: integer
        marketplace_id:
          type: integer
        product_id:
          type: integer
        option_id:
          type: integer
        required:
          type: boolean
        catalog_required:
          type: boolean
        variation_required:
          type: boolean
        external_id:
          type: integer
        name:
          type: string
        value_id:
          type: integer
        value_name:
          type: string
        type:
          type: string
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    MarketplaceCategory:
      title: 'Categorias de Marketplace'
      description: ''
      properties:
        id:
          type: integer
        store_id:
          type: integer
          readOnly: true
          example: '1'
        marketplace_id:
          type: integer
        category_id:
          type: integer
        marketplace_category_id:
          type: integer
        marketplace_category_value:
          type: string
      type: object
    MarketplaceError:
      title: ''
      description: ''
      properties:
        id:
          type: integer
        store_id:
          type: integer
          readOnly: true
          example: '1'
        account_id:
          type: integer
        product_id:
          type: integer
        message:
          type: string
        payload:
          type: string
        response:
          type: string
        read_at:
          type: string
          format: date-time
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    MarketplaceId:
      title: 'Anúncio no Marketplace'
      description: ''
      properties:
        id:
          type: integer
        store_id:
          type: integer
          readOnly: true
          example: '1'
        marketplace_id:
          type: integer
        account_id:
          type: integer
        status:
          type: string
        external_id:
          type: integer
        resource_id:
          type: integer
        resource_type:
          type: string
        resource_suggestion_id:
          type: integer
        title:
          type: string
        price:
          type: number
          format: float
        url:
          type: string
          format: uri
        params:
          type: string
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        deleted_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    Merchant:
      title: Merchant
      description: 'Informações de uma loja associado ao usuário.'
      properties:
        id:
          description: 'Identificador único da loja.'
          type: integer
        preset_id:
          description: 'ID do preset de tema aplicado à loja, quando houver.'
          type: integer
          nullable: true
        active:
          description: 'Indica se a loja está ativa.'
          type: boolean
        internal_active:
          description: 'Indica se a loja está ativa internamente na Yampi, independentemente do status visível ao lojista.'
          type: boolean
        is_marketplace:
          description: 'Indica se a loja opera como marketplace, com múltiplos vendedores.'
          type: boolean
        is_partner:
          description: 'Indica se a loja pertence a um parceiro Yampi.'
          type: boolean
        use_only_checkout:
          description: 'Indica se a loja utiliza apenas o checkout Yampi, sem a vitrine da loja.'
          type: boolean
        profile:
          description: 'Perfil da loja na Yampi, que indica se ela opera com vitrine completa ou apenas com o checkout.'
          type: string
        alias:
          description: 'Identificador textual único da loja, usado nas URLs da API e da loja.'
          type: string
        has_domain:
          description: 'Indica se a loja possui um domínio próprio configurado.'
          type: boolean
        domain:
          description: 'Domínio próprio configurado para a loja, quando houver.'
          type: string
          nullable: true
        base_url:
          description: 'URL base da loja.'
          type: string
          format: uri
        name:
          description: 'Nome da loja.'
          type: string
        icon_url:
          description: 'URL do ícone (favicon) da loja.'
          type: string
          format: uri
          nullable: true
        logo_url:
          description: 'URL do logotipo da loja.'
          type: string
          format: uri
          nullable: true
        has_subscription:
          description: 'Indica se a loja possui uma assinatura de plano ativa.'
          type: boolean
        has_charges:
          description: 'Indica se a loja possui cobranças de faturamento.'
          type: boolean
        has_marketplace_accounts:
          description: 'Indica se a loja possui contas de marketplace vinculadas.'
          type: boolean
        has_shopify:
          description: 'Indica se a loja possui integração com a Shopify.'
          type: boolean
        has_affiliations:
          description: 'Indica se a loja possui afiliações de pagamento (adquirentes/gateways) configuradas.'
          type: boolean
        coupon_created:
          description: 'Indica se a loja já criou ao menos um cupom de desconto.'
          type: boolean
        order_bump_created:
          description: 'Indica se a loja já criou ao menos um order bump.'
          type: boolean
        upsell_created:
          description: 'Indica se a loja já criou ao menos um upsell.'
          type: boolean
        pixel_created:
          description: 'Indica se a loja já criou ao menos um pixel de rastreamento.'
          type: boolean
        owner_id:
          description: 'ID do usuário proprietário da loja.'
          type: integer
        owner_email:
          description: 'E-mail do usuário proprietário da loja.'
          type: string
          format: email
        owner_created_at:
          description: 'Data e hora de criação da conta do usuário proprietário da loja.'
          type: string
          format: date-time
        domains_list:
          description: 'Lista de domínios associados à loja.'
          type: array
          items:
            type: string
        tags:
          description: 'Lista de tags associadas à loja.'
          type: array
          items:
            type: string
        has_services:
          description: 'Indica quais integrações de serviços externos estão ativas na loja.'
          properties:
            shopifyapp:
              description: 'Indica se a integração com o aplicativo da Shopify está ativa.'
              type: boolean
            bling:
              description: 'Indica se a integração com o Bling está ativa.'
              type: boolean
            woocommerce:
              description: 'Indica se a integração com o WooCommerce está ativa.'
              type: boolean
            mago:
              description: 'Indica se a integração com o Mago está ativa.'
              type: boolean
            tiny:
              description: 'Indica se a integração com o Tiny está ativa.'
              type: boolean
          type: object
        shopify_integration:
          description: 'Identificador da integração da loja com a Shopify, quando houver.'
          type: string
          nullable: true
        has_credit_card:
          description: 'Indica se a loja possui pagamento por cartão de crédito habilitado.'
          type: boolean
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        subscription:
          description: 'Dados da assinatura de plano da loja.'
          properties:
            plan:
              description: 'Nome do plano assinado pela loja.'
              type: string
            status:
              description: 'Status atual da assinatura da loja.'
              type: string
          type: object
      type: object
    MerchantCredentials:
      title: 'Credenciais da loja'
      description: 'Credenciais de acesso e identificação da loja.'
      properties:
        id:
          description: 'Identificador único da loja.'
          type: integer
        active:
          description: 'Indica se a loja está ativa.'
          type: boolean
        is_subdomain:
          description: 'Indica se a loja usa um subdomínio da Yampi, em vez de domínio próprio.'
          type: boolean
        alias:
          description: 'Identificador textual único da loja, usado nas URLs da API e da loja.'
          type: string
        domain:
          description: 'Domínio configurado para a loja.'
          type: string
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    MerchantPublic:
      description: 'Dados públicos da loja, expostos para a vitrine e o checkout.'
      properties:
        id:
          description: 'Identificador único da loja.'
          type: integer
          example: 123456
        alias:
          description: 'Identificador textual único da loja, usado nas URLs da API e da loja.'
          type: string
          example: sualoja
        domain:
          description: 'Domínio da loja.'
          type: string
          example: sualoja.com
        base_url:
          description: 'URL base da loja.'
          type: string
          format: uri
          example: 'https://www.sualoja.com'
        logo_url:
          description: 'URL do logotipo da loja.'
          type: string
          format: uri
          example: 'https://images.yampi.me/assets/stores/sualoja/uploads/logo/62c5e006baf74.png'
        has_mp:
          description: 'Indica se a loja possui o Mercado Pago ativo como gateway de pagamento.'
          type: boolean
          example: true
        suspended:
          description: 'Indica se a loja está suspensa.'
          type: boolean
          example: false
        theme:
          description: 'Tema aplicado à loja.'
          properties:
            id:
              description: 'ID do tema aplicado à loja.'
              type: integer
              example: 1
            alias:
              description: 'Identificador textual do tema aplicado à loja.'
              type: string
              example: rocket
            installation_id:
              description: 'ID da instalação do tema na loja.'
              type: integer
              example: 125845
          type: object
        theme_id:
          description: 'ID do tema aplicado à loja.'
          type: integer
          example: 1
        api:
          description: 'Endpoints públicos da API para a loja.'
          properties:
            search:
              description: 'URL do endpoint público de busca de produtos da loja.'
              type: string
              format: uri
              example: 'https://api.dooki.com.br/v2/sualoja/public/search'
          type: object
        checkout:
          description: 'Configurações e URLs do checkout da loja.'
          properties:
            base_domain:
              description: 'Domínio base do checkout da loja.'
              type: string
              format: uri
              example: 'https://sualoja.pay.yampi.com.br'
            skip_cart:
              description: 'Indica se o checkout pula a etapa do carrinho.'
              type: boolean
              example: true
            items:
              description: 'URL para adicionar itens ao checkout.'
              type: string
              format: uri
            items_json:
              description: 'URL para adicionar itens ao checkout via payload JSON.'
              type: string
              format: uri
            redirect_to:
              description: 'URL de redirecionamento após o checkout.'
              type: string
              format: uri
            orders:
              description: 'URL de consulta dos pedidos do checkout.'
              type: string
              format: uri
            store_token:
              description: 'Token público da loja usado no checkout.'
              type: string
            default_card:
              description: 'Bandeira de cartão de crédito exibida por padrão no checkout (ex.: `visa`).'
              type: string
            shopper_url:
              description: 'URL da área do cliente (Shopper) da loja.'
              type: string
              format: uri
          type: object
        manifest:
          description: 'Dados do manifesto PWA (Progressive Web App) da loja.'
          properties:
            name:
              description: 'Nome da loja exibido no manifesto PWA.'
              type: string
            short_name:
              description: 'Nome curto da loja exibido no manifesto PWA.'
              type: string
            start_url:
              description: 'URL inicial do PWA da loja.'
              type: string
              format: uri
            description:
              description: 'Descrição da loja exibida no manifesto PWA.'
              type: string
            lang:
              description: 'Idioma padrão da loja no manifesto PWA.'
              type: string
          type: object
        meta:
          description: 'Metadados de SEO da página da loja.'
          properties:
            title:
              description: 'Título de SEO da página da loja.'
              type: string
            description:
              description: 'Descrição de SEO (meta description) da página da loja.'
              type: string
            icons:
              description: 'Ícones da loja usados nos metadados.'
              properties:
                default:
                  description: 'URL do ícone padrão da loja.'
                  type: string
                  format: uri
              type: object
          type: object
        company:
          description: 'Dados cadastrais da empresa dona da loja.'
          properties:
            person_type:
              description: 'Tipo de pessoa da empresa: física ou jurídica.'
              type: string
            cnpj:
              description: 'CNPJ da empresa, quando pessoa jurídica.'
              type: string
            razao_social:
              description: 'Razão social da empresa, quando pessoa jurídica.'
              type: string
              nullable: true
            name:
              description: 'Nome da empresa dona da loja.'
              type: string
            cpf:
              description: 'CPF do proprietário, quando pessoa física.'
              type: string
            phone:
              description: 'Telefone de contato da loja.'
              properties:
                code:
                  description: 'Código de área (DDD) do telefone de contato da loja.'
                  type: string
                formated_number:
                  description: 'Número de telefone de contato da loja formatado para exibição.'
                  type: string
                number:
                  description: 'Número de telefone de contato da loja, apenas dígitos.'
                  type: string
              type: object
            whatsapp:
              description: 'WhatsApp de contato da loja.'
              properties:
                formated_number:
                  description: 'Número de WhatsApp da loja formatado para exibição.'
                  type: string
                number:
                  description: 'Número de WhatsApp da loja, apenas dígitos.'
                  type: string
                url:
                  description: 'URL de link direto para conversa no WhatsApp da loja.'
                  type: string
                  format: uri
              type: object
            email:
              description: 'E-mail de contato da loja.'
              type: string
              format: email
            address:
              description: 'Endereço da empresa dona da loja.'
              properties:
                street:
                  description: 'Nome da rua do endereço da loja.'
                  type: string
                number:
                  description: 'Número do endereço da loja.'
                  type: string
                complement:
                  description: 'Complemento do endereço da loja, quando houver.'
                  type: string
                  nullable: true
                neighborhood:
                  description: 'Bairro do endereço da loja.'
                  type: string
                city:
                  description: 'Cidade do endereço da loja.'
                  type: string
                state:
                  description: 'Unidade federativa (estado) do endereço da loja.'
                  type: string
                zipcode:
                  description: 'CEP do endereço da loja.'
                  type: string
                full_address:
                  description: 'Endereço completo da loja formatado em uma única linha.'
                  type: string
              type: object
            social:
              description: 'Links das redes sociais da loja.'
              properties:
                facebook_url:
                  description: 'URL da página da loja no Facebook, quando configurada.'
                  type: string
                  nullable: true
                instagram_url:
                  description: 'URL do perfil da loja no Instagram, quando configurado.'
                  type: string
                  nullable: true
                youtube_url:
                  description: 'URL do canal da loja no YouTube, quando configurado.'
                  type: string
                  nullable: true
                pinterest_url:
                  description: 'URL do perfil da loja no Pinterest, quando configurado.'
                  type: string
                  nullable: true
                tiktok_url:
                  description: 'URL do perfil da loja no TikTok, quando configurado.'
                  type: string
                  nullable: true
                twitter_url:
                  description: 'URL do perfil da loja no X (antigo Twitter), quando configurado.'
                  type: string
                  nullable: true
              type: object
          type: object
        payments:
          description: 'Meios de pagamento disponíveis na loja.'
          type: array
          items:
            properties:
              active:
                description: 'Indica se o meio de pagamento está ativo na loja.'
                type: boolean
              alias:
                description: 'Identificador textual do meio de pagamento.'
                type: string
              name:
                description: 'Nome do meio de pagamento exibido ao cliente.'
                type: string
              icon_url:
                description: 'URL do ícone do meio de pagamento.'
                type: string
                format: uri
              percent_discount:
                description: 'Percentual de desconto aplicado ao usar o meio de pagamento.'
                type: string
            type: object
        scripts:
          description: 'Scripts personalizados injetados na loja.'
          properties:
            all:
              description: 'Lista de scripts personalizados aplicados à loja.'
              type: array
              items:
                type: string
          type: object
        categories:
          description: 'Categorias de produtos da loja.'
          type: array
          items:
            properties:
              id:
                description: 'ID da categoria.'
                type: integer
              featured:
                description: 'Indica se a categoria está em destaque.'
                type: boolean
              parent_id:
                description: 'ID da categoria pai, quando a categoria for uma subcategoria.'
                type: integer
                nullable: true
              is_parent:
                description: 'Indica se a categoria possui subcategorias.'
                type: boolean
              name:
                description: 'Nome da categoria.'
                type: string
              slug:
                description: 'Identificador textual da categoria usado na URL.'
                type: string
              url:
                description: 'URL completa da página da categoria.'
                type: string
                nullable: true
              url_path:
                description: 'Caminho relativo da URL da página da categoria.'
                type: string
              path:
                description: 'Caminho hierárquico da categoria na árvore de categorias.'
                type: string
              category_cover:
                description: 'URL da imagem de capa da categoria, quando configurada.'
                type: string
                nullable: true
              order:
                description: 'Ordem de exibição da categoria.'
                type: integer
              children:
                description: 'Subcategorias da categoria.'
                properties:
                  data: { description: 'Lista de subcategorias da categoria.', type: array, items: { type: object } }
                type: object
            type: object
        promotion:
          description: 'Promoções ativas da loja.'
          type: array
          items:
            properties:
              id:
                description: 'ID da promoção.'
                type: integer
              name:
                description: 'Nome da promoção.'
                type: string
              slug:
                description: 'Identificador textual da promoção usado na URL.'
                type: string
              url:
                description: 'URL da página da promoção.'
                type: string
            type: object
        services:
          description: 'Configurações de serviços externos integrados à loja.'
          properties:
            google:
              description: 'Configurações dos serviços do Google integrados à loja.'
              properties:
                analytics:
                  description: 'ID de acompanhamento do Google Analytics (Universal Analytics) configurado na loja.'
                  type: string
                  nullable: true
                analytics_v4:
                  description: 'ID de acompanhamento do Google Analytics 4 configurado na loja.'
                  type: string
                  nullable: true
                criteo:
                  description: 'Identificador da integração com o Criteo configurada na loja.'
                  type: string
                  nullable: true
                tag_manager:
                  description: 'Configurações do Google Tag Manager da loja.'
                  properties: { header: { description: 'Código do Google Tag Manager injetado no cabeçalho da loja.', type: string }, gtm_code: { description: 'ID do contêiner do Google Tag Manager configurado na loja.', type: string } }
                  type: object
                ads_pixels:
                  description: 'Lista de IDs de pixels do Google Ads configurados na loja.'
                  type: array
                  items: { type: string }
              type: object
            chat:
              description: 'Identificador do serviço de chat integrado à loja, quando configurado.'
              type: string
              nullable: true
          type: object
        pages:
          description: 'Páginas de conteúdo personalizadas da loja.'
          type: array
          items:
            properties:
              name:
                description: 'Nome da página.'
                type: string
              slug:
                description: 'Identificador textual da página usado na URL.'
                type: string
              path:
                description: 'Caminho relativo da URL da página.'
                type: string
            type: object
        cookies_policy:
          description: 'Dados da política de cookies exibida na loja.'
          type: array
          items:
            type: string
        meta_tags:
          description: 'Meta tags personalizadas incluídas nas páginas da loja.'
          type: array
          items:
            type: string
        cashbacks:
          description: 'Regras de cashback configuradas na loja.'
          type: array
          items:
            type: string
      type: object
    MerchantDataConfig:
      title: 'Dados da loja'
      description: 'Dados cadastrais e de configuração da loja.'
      properties:
        id:
          description: 'Identificador único do registro de dados da loja.'
          type: integer
        maintenance:
          description: 'Indica se a loja está em modo de manutenção, ficando indisponível para os clientes.'
          type: boolean
        type:
          description: 'Tipo de pessoa da loja: `f` (física) ou `j` (jurídica).'
          type: string
        name:
          description: 'Nome da loja.'
          type: string
        razao_social:
          description: 'Razão social da loja, quando pessoa jurídica.'
          type: string
        email_contact:
          description: 'E-mail de contato da loja.'
          type: string
        email_sales:
          description: 'E-mail para recebimento das notificações de vendas da loja.'
          type: string
        description:
          description: 'Descrição da loja.'
          type: string
        owner_name:
          description: 'Nome do proprietário da loja.'
          type: string
        phone:
          description: 'Telefone de contato da loja.'
          type: string
        whatsapp:
          description: 'Número de WhatsApp da loja.'
          type: string
        ie:
          description: 'Inscrição estadual da loja.'
          type: string
        cnpj:
          description: 'CNPJ da loja, quando pessoa jurídica.'
          type: string
        cpf:
          description: 'CPF do proprietário da loja, quando pessoa física.'
          type: string
        billing_name:
          description: 'Nome ou razão social usado nos dados de faturamento da loja.'
          type: string
        billing_document:
          description: 'CPF ou CNPJ usado nos dados de faturamento da loja.'
          type: string
        billing_document_type:
          description: 'Tipo do documento de faturamento: `f` (CPF) ou `j` (CNPJ).'
          type: string
        billing_address_street:
          description: 'Nome da rua do endereço de faturamento da loja.'
          type: string
        billing_address_number:
          description: 'Número do endereço de faturamento da loja.'
          type: string
        billing_address_complement:
          description: 'Complemento do endereço de faturamento da loja, quando houver.'
          type: string
        billing_address_neighborhood:
          description: 'Bairro do endereço de faturamento da loja.'
          type: string
        billing_address_city:
          description: 'Cidade do endereço de faturamento da loja.'
          type: string
        billing_address_state:
          description: 'Unidade federativa (estado) do endereço de faturamento da loja.'
          type: string
        billing_address_zipcode:
          description: 'CEP do endereço de faturamento da loja.'
          type: string
        billing_phone:
          description: 'Telefone dos dados de faturamento da loja.'
          type: string
        billing_email:
          description: 'E-mail dos dados de faturamento da loja.'
          type: string
        full_address:
          description: 'Endereço completo da loja formatado em uma única linha.'
          type: string
        address_street:
          description: 'Nome da rua do endereço da loja.'
          type: string
        address_number:
          description: 'Número do endereço da loja.'
          type: string
        address_complement:
          description: 'Complemento do endereço da loja, quando houver.'
          type: string
        address_neighborhood:
          description: 'Bairro do endereço da loja.'
          type: string
        address_city:
          description: 'Cidade do endereço da loja.'
          type: string
        address_state:
          description: 'Unidade federativa (estado) do endereço da loja.'
          type: string
        zipcode:
          description: 'CEP do endereço da loja.'
          type: string
        products_per_page:
          description: 'Quantidade de produtos exibidos por página nas listagens da loja.'
          type: integer
        logo_url:
          description: 'URL do logotipo da loja.'
          type: string
        icon_url:
          description: 'URL do ícone (favicon) da loja.'
          type: string
        facebook_url:
          description: 'URL da página da loja no Facebook.'
          type: string
        instagram_url:
          description: 'URL do perfil da loja no Instagram.'
          type: string
        youtube_url:
          description: 'URL do canal da loja no YouTube.'
          type: string
        pinterest_url:
          description: 'URL do perfil da loja no Pinterest.'
          type: string
      type: object
    MerchantDataConfigAdditionalResponse:
      description: 'Recursos adicionais dos dados da loja.'
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Order:
      title: Pedido
      description: 'Representa um pedido'
      properties:
        delivered:
          description: 'Indica se o pedido já foi entregue ao cliente.'
          type: boolean
        track_url:
          description: 'URL de rastreamento da entrega gerada pela transportadora.'
          type: string
        track_code:
          description: 'Código de rastreamento da entrega gerado pela transportadora.'
          type: string
        authorized:
          description: 'Indica se o pagamento do pedido foi autorizado pela adquirente/gateway.'
          type: boolean
        customer_id:
          description: 'ID do cliente'
          type: integer
        promocode_id:
          description: 'ID do cupom de desconto aplicado ao pedido, quando houver.'
          type: integer
        marketplace_id:
          description: 'ID do marketplace de origem do pedido, quando a venda vem de um marketplace.'
          type: integer
        marketplace_account_id:
          description: 'ID da conta do marketplace vinculada ao pedido.'
          type: integer
        has_recomm:
          description: 'Indica se o pedido teve origem no clique em um produto sugerido pelo e-mail de recomendação.'
          type: boolean
        number:
          description: 'Número do pedido'
          type: number
        marketplace_partner_id:
          description: 'ID do parceiro/afiliado do marketplace associado ao pedido, quando aplicável.'
          type: integer
        marketplace_sale_number:
          description: 'Número único da venda no marketplace de origem (usado quando não há `number` local do pedido).'
          type: number
        value_total:
          description: 'Valor total do pedido'
          type: number
          format: float
        value_products:
          description: 'Valor dos produtos'
          type: number
          format: float
        value_discount:
          description: 'Valor do desconto'
          type: number
          format: float
        value_shipment:
          description: 'Valor do frete'
          type: number
          format: float
        value_tax:
          description: 'Valor do imposto'
          type: number
          format: float
        shipment_service:
          description: 'Método de entrega'
          type: string
        shipment_quote_id:
          description: 'ID da cotação de frete utilizada no pedido.'
          type: integer
        days_delivery:
          description: 'Dias para entrega'
          type: integer
        utm_source:
          description: 'Origem da campanha de marketing (parâmetro UTM `utm_source`) que originou o pedido.'
          type: string
        utm_campaign:
          description: 'Nome da campanha de marketing (parâmetro UTM `utm_campaign`) que originou o pedido.'
          type: string
        utm_term:
          description: 'Termo de busca (parâmetro UTM `utm_term`) que originou o pedido.'
          type: string
        utm_content:
          description: 'Conteúdo do anúncio/link (parâmetro UTM `utm_content`) que originou o pedido.'
          type: string
        utm_medium:
          description: 'Meio/canal de marketing (parâmetro UTM `utm_medium`) que originou o pedido.'
          type: string
        ip:
          description: 'Endereço IP do comprador no momento da criação do pedido.'
          type: string
          format: ip
          readOnly: true
        items:
          description: 'Itens do pedido'
          type: array
          items:
            $ref: '#/components/schemas/OrderItem'
        address:
          description: 'Endereço de entrega'
          type: array
          items:
            $ref: '#/components/schemas/OrderAddress'
        transactions:
          description: 'Transações de pagamento associadas ao pedido.'
          properties:
            data:
              description: 'Lista das transações de pagamento do pedido.'
              type: object
              allOf:
                -
                  $ref: '#/components/schemas/Transaction'
                -
                  $ref: '#/components/schemas/TransactionAdditionalResponse'
          type: object
      type: object
    OrderAdditionalResponse:
      title: ''
      description: 'Recursos adicionais do pedido, retornados sob demanda via parâmetro `include`.'
      properties:
        date_delivery:
          $ref: '#/components/schemas/BaseTimestamp'
        whatsapp:
          description: 'Mensagens configuradas para WhatsApp relacionadas ao pedido'
          properties:
            data:
              description: 'Dados dos links de mensagens pré-configuradas do WhatsApp para o pedido.'
              properties:
                billet:
                  description: 'Mensagem de boleto via WhatsApp'
                  properties: { link: { description: 'Link do WhatsApp com mensagem pré-configurada', type: string, format: uri }, message: { description: 'Conteúdo da mensagem do boleto', type: string } }
                  type: object
                order_shipped:
                  description: 'Mensagem de pedido enviado'
                  type: string
                  nullable: true
                abandoned_cart:
                  description: 'Mensagem de carrinho abandonado'
                  type: string
                  nullable: true
                pix:
                  description: 'Mensagem de Pix'
                  type: string
                  nullable: true
                payment_link:
                  description: 'Mensagem de link de pagamento'
                  type: string
                  nullable: true
              type: object
          type: object
        pickup_address:
          description: 'Endereço de retirada do pedido, quando aplicável.'
          properties:
            data:
              $ref: '#/components/schemas/Pickup'
          type: object
        metadata:
          description: 'Metadados adicionais'
          properties:
            data:
              description: 'Lista de metadados'
              type: array
              items:
                properties:
                  key: { description: 'Chave do metadado', type: string, example: discount_highlight }
                  value: { description: 'Valor do metadado', type: string, example: pix }
                type: object
          type: object
        status:
          description: 'Status atual do pedido'
          properties:
            data:
              description: 'Dados do status atual do pedido.'
              properties:
                id:
                  description: 'ID do status'
                  type: integer
                name:
                  description: 'Nome do status'
                  type: string
                alias:
                  description: 'Alias identificador do status'
                  type: string
                description:
                  description: 'Descrição detalhada do status'
                  type: string
              type: object
          type: object
        pix:
          description: 'Dados do pagamento via Pix associado ao pedido.'
          properties:
            data:
              description: 'Informações da cobrança Pix gerada para o pedido.'
              properties:
                pix_qr_code:
                  description: 'Código QR do Pix'
                  type: string
                pix_expiration_date:
                  description: 'Data e hora de expiração do Pix'
                  type: string
                  format: date-time
              type: object
          type: object
        promocode:
          description: 'Cupom de desconto aplicado ao pedido.'
          properties:
            data:
              $ref: '#/components/schemas/OrderPromocode'
          type: object
        statuses:
          description: 'Histórico de status do pedido'
          properties:
            data:
              description: 'Histórico de status pelos quais o pedido passou.'
              type: array
              items:
                properties:
                  id: { description: 'ID do status', type: integer }
                  name: { description: 'Nome do status', type: string }
                  alias: { description: 'Alias do status', type: string }
                  description: { description: 'Descrição do status', type: string }
                  details: { description: 'Detalhes adicionais do status', type: string, nullable: true }
                  created_at: { $ref: '#/components/schemas/BaseTimestamp' }
                  updated_at: { $ref: '#/components/schemas/BaseTimestamp' }
                type: object
          type: object
        payments:
          description: 'Lista de meios de pagamento disponíveis ou utilizados'
          type: array
          items:
            properties:
              icon_url:
                description: 'URL do ícone do meio de pagamento'
                type: string
                format: uri
              name:
                description: 'Nome do meio de pagamento'
                type: string
              alias:
                description: 'Alias identificador do meio de pagamento'
                type: string
            type: object
        services:
          description: 'Serviços vinculados ao pedido'
          properties:
            data:
              description: 'Lista de serviços externos vinculados ao pedido (ex.: integrações de logística).'
              type: array
              items:
                type: object
          type: object
        customer:
          description: 'Cliente que realizou o pedido.'
          properties:
            data:
              $ref: '#/components/schemas/Customer'
          type: object
      type: object
    OrderPromocode:
      description: 'Representa os clientes que usaram um cupom'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Promocode'
        -
          $ref: '#/components/schemas/PromocodeAdditionalResponse'
    OrderItems:
      description: 'Itens do pedido, com dados do SKU vinculado.'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/OrderItem'
        -
          properties:
            sku:
              description: 'Dados do SKU do item do pedido.'
              properties:
                data:
                  $ref: '#/components/schemas/Sku'
              type: object
          type: object
    OrderAddress:
      title: 'Endereço do pedido'
      properties:
        id:
          type: integer
          readOnly: true
        order_id:
          type: integer
          readOnly: true
        address_name:
          type: string
        street:
          description: Rua
          type: string
        number:
          description: Número
          type: integer
        complement:
          description: Complemento
          type: string
        reference:
          description: Referencia
          type: string
        neighborhood:
          description: Bairro
          type: string
        receiver:
          description: 'Nome do recebedor'
          type: string
        zipcode:
          description: CEP
          type: integer
        zip_code:
          description: CEP
          type: integer
        full_address:
          type: string
        city:
          description: Cidade
          type: string
        uf:
          description: Estado
          type: string
        country:
          description: País
          type: string
      type: object
    OrderBump:
      description: 'Informações de um OrderBump individual'
      properties:
        id:
          type: integer
          example: 255787
        active:
          type: boolean
          example: true
        is_ia:
          type: boolean
          example: false
        pre_select_variation:
          type: boolean
          example: true
        name:
          type: string
          example: 'Oferta Especial'
        displayed_quantity:
          type: integer
          example: 1
        resource_id:
          type: integer
          example: 42533439
        resource_type:
          type: string
          example: product
        price_sale:
          type: string
          example: '50.00'
        price_discount:
          type: string
          example: '0.00'
        params:
          properties:
            button_text:
              type: string
              example: '+ Adicionar oferta'
            title:
              type: string
              example: null
              nullable: true
            message:
              type: string
              example: null
              nullable: true
          type: object
        accepted_payment:
          type: string
          example: all
        display_rule:
          type: string
          example: always
        amount_rule:
          type: string
          example: greater_than
        amount_value:
          type: string
          example: '0.00'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        display_product_ids:
          type: array
          items:
            type: integer
          example: []
      type: object
    OrderComment:
      title: 'Comentários de um pedido'
      properties:
        id:
          description: 'ID do comentário'
          type: integer
          readOnly: true
        user_id:
          description: 'ID do usuário'
          type: integer
        comments:
          description: 'Conteúdo do comentário'
          type: string
        edited:
          description: 'Indica se o comentário foi editado'
          type: boolean
      type: object
    OrderCommentAdditionalResponse:
      properties:
        user:
          description: 'Informações do usuário'
          properties:
            data:
              description: 'Dados básicos do usuário'
              properties:
                id:
                  description: 'ID do usuário'
                  type: integer
                name:
                  description: 'Nome do usuário'
                  type: string
                avatar_url:
                  description: 'URL do avatar do usuário'
                  type: string
                  format: uri
              type: object
          type: object
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    OrderEmail:
      title: 'E-mails de um pedido'
      description: 'Representa os e-mails enviados durante o ciclo de vida de um pedido'
      properties:
        id:
          description: 'ID do e-mail'
          type: integer
        subject:
          description: 'Assunto do e-mail'
          type: string
        from:
          description: 'Remetente do e-mail'
          type: string
        to:
          description: 'Destinatário(s) do e-mail'
          type: string
        cc:
          description: 'CC do e-mail, se aplicável'
          type: string
        bcc:
          description: 'BCC do e-mail, se aplicável'
          type: string
        file_url:
          description: 'URL do arquivo do e-mail'
          type: string
      type: object
    OrderEmailAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    OrderInvoice:
      title: 'Nota fiscal de um pedido'
      properties:
        id:
          description: 'ID da nota fiscal'
          type: integer
          readOnly: true
        merchant_id:
          description: 'ID da loja'
          type: integer
          readOnly: true
        order_id:
          description: 'ID da loja'
          type: integer
          readOnly: true
        series:
          description: 'Série da nota fiscal'
          type: string
        number:
          description: 'Número da nota fiscal'
          type: string
        key:
          description: 'Chave da nota fiscal'
          type: string
        date:
          description: 'Data da emissão da nota fiscal'
          type: string
          format: date-time
        value:
          description: 'Valor total da nota fiscal'
          type: number
          format: float
        products_value:
          description: 'Valor dos produtos na nota fiscal'
          type: number
          format: float
        cfop:
          description: 'CFOP da nota fiscal'
          type: string
        url:
          description: 'URL da nota fiscal'
          type: string
          format: uri
      type: object
    OrderInvoiceAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    OrderItem:
      description: 'Item do pedido'
      properties:
        id:
          description: 'ID do item no pedido'
          type: integer
        product_id:
          description: 'ID do produto'
          type: integer
        sku_id:
          description: 'ID do SKU'
          type: integer
        item_sku:
          description: 'Código do SKU'
          type: string
        quantity:
          description: 'Quantidade adquirida'
          type: integer
        price:
          description: 'Preço do item'
          type: number
          format: float
        price_cost:
          description: 'Custo do item'
          type: number
          format: float
        shipment_cost:
          description: 'Custo de envio do item'
          type: number
          format: float
        gift:
          description: 'Indica se é um item presente'
          type: boolean
        gift_value:
          description: 'Valor do item presente'
          type: number
          format: float
        has_recomm:
          description: 'Indica se possui recomendação'
          type: integer
        is_digital:
          description: 'Indica se é um item digital'
          type: boolean
        freebie_id:
          description: 'ID de item brinde (se aplicável)'
          type: integer
          nullable: true
        bundle_id:
          description: 'ID do bundle (se aplicável)'
          type: integer
          nullable: true
        bundle_name:
          description: 'Nome do bundle (se aplicável)'
          type: string
          nullable: true
      type: object
    OrderLabel:
      title: 'Etiquetas de um pedido'
      properties:
        id:
          description: 'ID da etiqueta'
          type: integer
          example: '1'
        shipping_service:
          description: 'Serviço de envio'
          type: string
          example: pac
        service_type:
          type: string
          example: ''
        code:
          description: 'Código da etiqueta'
          type: string
          example: '123123123132'
        tracking_code:
          description: 'Código de rastreamento'
          type: string
          example: P182371823713BR
        tracking_url:
          description: 'URL de rastreamento'
          type: string
          example: 'https://url.com/P182371823713BR'
        file_url:
          description: 'URL do arquivo da etiqueta'
          type: string
          example: 'https://url.com/label.pdf'
        created_at:
          type: string
          format: date-time
          readOnly: true
          example: '2018-02-18 08:00:00'
        updated_at:
          type: string
          format: date-time
          readOnly: true
          example: '2018-02-19 09:15:00'
      type: object
    OrderLabelAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    OrderTracking:
      title: 'Rastreamento de um pedido'
      properties:
        id:
          type: integer
        delivered:
          type: boolean
        date:
          type: string
          format: date-time
        status:
          type: string
        locale:
          type: string
      type: object
    OrderTrackingAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Page:
      title: Páginas
      description: 'Páginas de conteúdo da loja'
      properties:
        id:
          type: integer
        active:
          type: boolean
        name:
          type: string
          example: 'Página de teste'
        slug:
          type: string
          example: pagina-de-teste
        url:
          type: string
          format: uri
        seo_keywords:
          type: string
          example: 'keywords, for, seo'
        seo_description:
          type: string
          example: 'Descrição da tag meta'
        seo_title:
          type: string
      type: object
    PageAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    PaymentLink:
      title: 'Link de Pagamento'
      description: 'Representa uma integração com os links de pagamento'
      properties:
        id:
          type: integer
        link_url:
          type: string
          format: url
        name:
          type: string
          example: 'Seu Link de Pagamento'
        whatsapp:
          properties:
            message:
              type: string
              example: 'Olá, aqui está o seu link de pagamento: {link}'
            link:
              type: string
              format: url
          type: object
      type: object
    PhotoConfig:
      title: 'Configurações de foto'
      description: ''
      properties:
        id:
          type: integer
        auto_crop:
          type: boolean
        width_small:
          type: integer
        height_small:
          type: integer
        width_thumb:
          type: integer
        height_thumb:
          type: integer
        width_medium:
          type: integer
        height_medium:
          type: integer
        width_large:
          type: integer
        height_large:
          type: integer
      type: object
    Pickup:
      title: 'Endereço de retirada'
      properties:
        id:
          description: 'ID do endereço de retirada'
          type: integer
        order_id:
          description: 'ID do pedido relacionado'
          type: integer
        country:
          description: País
          type: string
        uf:
          description: 'Estado (sigla)'
          type: string
        city:
          description: Cidade
          type: string
        neighborhood:
          description: Bairro
          type: string
        street:
          description: 'Nome da rua'
          type: string
        number:
          description: 'Número do endereço'
          type: string
        zipcode:
          description: CEP
          type: string
        full_address:
          description: 'Endereço completo'
          type: string
        complement:
          description: Complemento
          type: string
          nullable: true
        pickup_time_type:
          description: 'Tipo de horário de retirada'
          type: string
        pickup_time:
          description: 'Horário de retirada'
          type: integer
        only_weekdays:
          description: 'Indica se a retirada é apenas em dias úteis (1 = sim, 0 = não)'
          type: integer
        local_description:
          description: 'Descrição do local de retirada'
          type: string
      type: object
    Product:
      title: Produto
      description: 'Representa um produto do catálogo'
      properties:
        id:
          description: 'Identificador único do produto.'
          type: integer
          example: 12345678
        merchant_id:
          description: 'ID da loja'
          type: integer
          readOnly: true
          example: 1
        affiliation_id:
          description: 'ID de afiliação do produto'
          type: integer
        erp_id:
          description: 'ID do produto no ERP'
          type: integer
        seller_id:
          description: 'ID do vendedor'
          type: integer
        active:
          description: 'Indica se o produto está ativo'
          type: boolean
          example: true
        searchable:
          description: 'Indica se o produto é buscável'
          type: boolean
          example: true
        is_digital:
          description: 'Indica se o produto é digital'
          type: boolean
          example: true
        rating:
          description: 'Nota média de avaliação do produto.'
          type: integer
          example: 4
        priority:
          description: 'Nível de relevância (1 -> Padrão, 2 -> Média, 3 -> Alta)'
          type: integer
        ncm:
          description: 'Código NCM do produto'
          type: string
        name:
          description: 'Nome do produto'
          type: string
        slug:
          description: 'Slug (URL amigável) do produto'
          type: string
          example: nome-do-produto
        warranty:
          description: 'Garantia em meses'
          type: integer
        custom_shipping:
          description: 'Indica se o Frete é customizado'
          type: boolean
          example: true
        shipping_price:
          description: 'Valor do frete customizado em reais'
          type: number
          format: float
          example: 39.9
        gift_value:
          description: 'Valor de presente (se aplicável)'
          type: number
          format: float
        simple:
          description: 'Indica se o produto é simples'
          type: boolean
          example: true
      type: object
    ProductAdditionalResponse:
      properties:
        days_availability_formated:
          description: 'Tempo de disponibilidade em dias'
          type: string
        variations:
          description: 'Lista de variações do produto'
          type: array
          items:
            type: string
        combinations:
          description: 'Lista dos identificadores de combinação de variações de cada SKU do produto.'
          type: array
          items:
            type: string
        total_in_stock:
          description: 'Quantidade total disponível em estoque'
          type: integer
        relevance:
          description: 'Nível de prioridade do produto na busca (1 = padrão, 2 = média, 3 = alta), definido pelo campo `priority` na requisição.'
          type: integer
        has_variations:
          description: 'Indica se o produto possui variações'
          type: boolean
          example: true
        sku:
          description: 'Código identificador principal do produto'
          type: string
          example: SKU-TEST-API
        url:
          description: 'URL pública do produto'
          type: string
          format: url
        redirect_url_card:
          description: 'URL de redirecionamento após compra no cartão'
          type: string
          format: url
          nullable: true
        redirect_url_billet:
          description: 'URL de redirecionamento após compra no boleto'
          type: string
          format: url
          nullable: true
        total_orders:
          description: 'Número total de pedidos realizados do produto'
          type: integer
        image_reference_sku_id:
          description: 'ID do SKU de referência de onde as imagens deste SKU são herdadas, quando configurado.'
          type: integer
        purchase_url:
          description: 'URL direta para a compra do produto'
          type: string
        preview_url:
          description: 'URL de pré-visualização do produto'
          type: string
          format: url
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    ProductSearchMeta:
      description: 'Resposta da listagem pública de produtos.'
      properties:
        meta:
          description: 'Metadados adicionais sobre a listagem (normalmente vazio).'
          type: array
          items:
            type: object
        data:
          description: 'Lista de produtos retornados.'
          type: array
          items:
            $ref: '#/components/schemas/ProductSearch'
      type: object
    ProductLabel:
      description: 'Título e ID de um produto para exibição em listagens simples.'
      properties:
        id:
          description: 'ID do produto.'
          type: integer
        name:
          description: 'Nome do produto.'
          type: string
      type: object
    ProductSearch:
      description: 'Informações públicas de um produto.'
      properties:
        id:
          description: 'ID do produto.'
          type: integer
          example: 30405927
        sku_id:
          description: 'ID do SKU representativo do produto no resultado de busca.'
          type: integer
          example: 205264039
        gift_value:
          description: 'Valor cobrado pela embalagem de presente do produto, quando aplicável.'
          type: number
          format: float
          example: 0
        simple:
          description: 'Indica se o produto é simples, sem variações.'
          type: boolean
          example: true
        has_variations:
          description: 'Indica se o produto possui variações (ex.: cor, tamanho).'
          type: boolean
          example: false
        is_digital:
          description: 'Indica se o produto é digital (sem envio físico).'
          type: boolean
          example: false
        warranty:
          description: 'Prazo de garantia do produto, em meses.'
          type: integer
          example: 0
        custom_shipping:
          description: 'Indica se o produto usa frete customizado, em vez do frete padrão da loja.'
          type: boolean
          example: false
        shipping_price:
          description: 'Valor de frete fixo configurado para o produto, quando `custom_shipping` for verdadeiro.'
          type: number
          format: float
          example: 0
        name:
          description: 'Nome do produto.'
          type: string
          example: 'Camisa JAO'
        slug:
          description: 'Slug do produto, usado na URL da página do produto.'
          type: string
          example: camisa-jao
        sku:
          description: 'Código do SKU principal do produto.'
          type: string
          example: TPHNCWXYW
        blocked_sale:
          description: 'Indica se o produto está bloqueado para novos pedidos.'
          type: boolean
          example: false
        rating:
          description: 'Nota média de avaliação do produto.'
          type: number
          format: float
          example: 0
        total_approved_reviews:
          description: 'Quantidade de avaliações aprovadas do produto.'
          type: integer
          example: 0
        url:
          description: 'URL completa da página do produto na loja.'
          type: string
          format: uri
          example: 'https://www.yampiwoocommerce.com/camisa-jao/p'
        url_path:
          description: 'Caminho relativo da URL da página do produto.'
          type: string
          example: /camisa-jao/p
        use_different_images:
          description: 'Indica se o produto usa imagens diferentes para cada variação (ex.: uma imagem por cor).'
          type: boolean
          example: null
          nullable: true
        brand:
          $ref: '#/components/schemas/BrandSearch'
        images:
          $ref: '#/components/schemas/ImageSearch'
        prices:
          $ref: '#/components/schemas/PricesSearch'
        flags:
          $ref: '#/components/schemas/FlagsSearch'
      type: object
    BrandSearch:
      properties:
        id:
          description: 'ID da marca do produto.'
          type: integer
          example: 14542735
        name:
          description: 'Nome da marca do produto.'
          type: string
          example: aefaefaefaef
        logo_url:
          description: 'URL do logotipo da marca.'
          type: string
          format: uri
          example: null
          nullable: true
      type: object
    ImageSearch:
      properties:
        url:
          description: 'URL da imagem do produto.'
          type: string
          format: uri
          example: 'https://images.yampi.me/assets/stores/minhalojateste/uploads/images/camisa-jao-6618280300ca4-large.jpg'
      type: object
    PricesSearch:
      properties:
        currency:
          description: 'Moeda utilizada para exibição dos valores de preço, sempre representada como ''R$''.'
          type: string
          example: R$
        price_cost:
          description: 'Preço de custo do produto/SKU, usado internamente para cálculo de margem.'
          type: number
          format: float
          example: 0
        price_cost_formated:
          description: 'Preço de custo formatado para exibição.'
          type: string
          example: 'R$ 0,00'
        price:
          description: 'Preço de tabela do produto/SKU, sem descontos aplicados.'
          type: number
          format: float
          example: 0
        price_formated:
          description: 'Preço de tabela formatado para exibição.'
          type: string
          example: 'R$ 0,00'
        base_amount:
          description: 'Parte inteira, em reais, do valor total (ex.: ''100'' em R$ 100,50).'
          type: string
          example: '0'
        fraction_amount:
          description: 'Parte decimal, em centavos, do valor total (ex.: ''50'' em R$ 100,50).'
          type: string
          example: '00'
        price_sale:
          description: 'Preço de venda do produto/SKU após aplicar promoções ativas.'
          type: number
          format: float
          example: 0
        price_sale_formated:
          description: 'Preço de venda formatado para exibição.'
          type: string
          example: 'R$ 0,00'
        price_discount:
          description: 'Valor do desconto aplicado ao preço de venda do produto/SKU.'
          type: number
          format: float
          example: 0
        price_discount_formated:
          description: 'Valor do desconto formatado para exibição.'
          type: string
          example: 'R$ 0,00'
        has_promotion:
          description: 'Indica se o produto/SKU possui alguma promoção ativa.'
          type: boolean
          example: false
        percent_discount:
          description: 'Percentual de desconto aplicado ao preço de venda.'
          type: number
          format: float
          example: 0
        billet:
          $ref: '#/components/schemas/PaymentMethodBilletSearch'
        pix:
          $ref: '#/components/schemas/PaymentMethodPixSearch'
        installments:
          $ref: '#/components/schemas/InstallmentsSearch'
      type: object
    PaymentMethodBilletSearch:
      properties:
        price:
          description: 'Preço do produto/SKU quando pago via boleto.'
          type: number
          example: 0
        price_formated:
          description: 'Preço via boleto formatado para exibição.'
          type: string
          example: 'R$ 0,00'
        base_amount:
          description: 'Parte inteira, em reais, do valor total via boleto (ex.: ''100'' em R$ 100,50).'
          type: string
          example: '0'
        fraction_amount:
          description: 'Parte decimal, em centavos, do valor total via boleto (ex.: ''50'' em R$ 100,50).'
          type: string
          example: '00'
        discount_value:
          description: 'Valor do desconto aplicado ao preço via boleto.'
          type: number
          example: 0
        discount_percent:
          description: 'Percentual de desconto aplicado ao preço via boleto.'
          type: string
          example: '0.00'
        discount_text:
          description: 'Texto pronto de exibição do desconto do boleto (ex.: ''10% off no boleto'').'
          type: string
          example: 'R$ 0,00 à vista com 0.00% de desconto'
      type: object
    PaymentMethodPixSearch:
      properties:
        price:
          description: 'Preço do produto/SKU quando pago via Pix.'
          type: number
          example: 0
        price_formatted:
          description: 'Preço via Pix formatado para exibição.'
          type: string
          example: 'R$ 0,00'
        base_amount:
          description: 'Parte inteira, em reais, do valor total via Pix (ex.: ''100'' em R$ 100,50).'
          type: string
          example: '0'
        fraction_amount:
          description: 'Parte decimal, em centavos, do valor total via Pix (ex.: ''50'' em R$ 100,50).'
          type: string
          example: '00'
        discount_value:
          description: 'Valor do desconto aplicado ao preço via Pix.'
          type: number
          example: 0
        discount_percent:
          description: 'Percentual de desconto aplicado ao preço via Pix.'
          type: string
          example: '0.00'
        discount_text:
          description: 'Texto pronto de exibição do desconto do Pix (ex.: ''10% off no Pix'').'
          type: string
          example: 'R$ 0,00 à vista com 0.00% de desconto'
      type: object
    InstallmentsSearch:
      properties:
        max_installment:
          description: 'Número máximo de parcelas disponíveis para o produto/SKU.'
          type: integer
          example: 6
        max_installment_value:
          description: 'Valor de cada parcela no número máximo de parcelas.'
          type: number
          example: 0
        amount:
          description: 'Valor total do produto/SKU considerado como base para o cálculo do parcelamento.'
          type: number
          example: 0
        text:
          description: 'Texto pronto de exibição das condições de parcelamento (ex.: ''3x de R$ 33,30'').'
          type: string
          example: '6x de R$ 0,00 com juros'
        text_with_tax:
          description: 'Texto pronto de exibição das condições de parcelamento incluindo juros.'
          type: string
          example: '6x de R$ 0,00'
        text_discount_percent:
          description: 'Texto pronto de exibição do percentual de desconto no parcelamento, quando houver.'
          type: string
          example: null
          nullable: true
        text_discount:
          description: 'Texto pronto de exibição do valor de desconto no parcelamento, quando houver.'
          type: string
          example: null
          nullable: true
      type: object
    FlagsSearch:
      properties:
        data:
          description: 'Lista de flags associadas ao produto.'
          type: array
          items:
            type: object
      type: object
    PriceSearchRange:
      description: 'Faixa de preço mínima e máxima disponível.'
      properties:
        data:
          properties:
            min:
              description: 'Menor preço entre os produtos encontrados na busca, usado para montar filtro de faixa de preço.'
              type: number
              example: 0
            max:
              description: 'Maior preço entre os produtos encontrados na busca, usado para montar filtro de faixa de preço.'
              type: number
              example: 600
          type: object
      type: object
    PromotionSearch:
      description: 'Informações de uma promoção.'
      properties:
        id:
          description: 'ID da promoção vinculada ao produto.'
          type: integer
          example: 214
        name:
          description: 'Nome da promoção.'
          type: string
          example: 'Promoção Meu Livro'
        slug:
          description: 'Slug da promoção, usado na URL.'
          type: string
          example: promocao-meu-livro
        url:
          description: 'URL da página da promoção.'
          type: string
          example: /promocoes/promocao-meu-livro
      type: object
    ProductSearchCount:
      description: 'Metadados de paginação.'
      properties:
        data:
          properties:
            total:
              description: 'Quantidade total de produtos encontrados na busca.'
              type: integer
              example: 0
            per_page:
              description: 'Quantidade de produtos por página no resultado da busca.'
              type: integer
              example: 10
            total_pages:
              description: 'Quantidade total de páginas do resultado da busca.'
              type: integer
              example: 0
          type: object
      type: object
    ProductPublic:
      description: 'Resposta com produto único dentro de `data`.'
      properties:
        data:
          properties:
            id:
              description: 'ID do produto.'
              type: integer
              example: 17790530
            sku_id:
              description: 'ID do SKU representativo do produto no resultado.'
              type: integer
              example: 262573372
            gift_value:
              description: 'Valor cobrado pela embalagem de presente do produto, quando aplicável.'
              type: number
              format: float
              example: 0
            simple:
              description: 'Indica se o produto é simples, sem variações.'
              type: boolean
              example: false
            has_variations:
              description: 'Indica se o produto possui variações (ex.: cor, tamanho).'
              type: boolean
              example: true
            is_digital:
              description: 'Indica se o produto é digital (sem envio físico).'
              type: boolean
              example: false
            warranty:
              description: 'Prazo de garantia do produto, em meses.'
              type: integer
              example: 0
            custom_shipping:
              description: 'Indica se o produto usa frete customizado, em vez do frete padrão da loja.'
              type: boolean
              example: false
            shipping_price:
              description: 'Valor de frete fixo configurado para o produto, quando `custom_shipping` for verdadeiro.'
              type: number
              format: float
              example: 0
            name:
              description: 'Nome do produto.'
              type: string
              example: 'GTA V Premium 10Uni.'
            slug:
              description: 'Slug do produto, usado na URL da página do produto.'
              type: string
              example: gta-v-premium-10uni
            sku:
              description: 'Lista de SKUs separados por vírgula.'
              type: string
              example: 'GQVQLNP34,69SQH26GU,QWNVUZHMQ,EPSHDEZPT,K89BHGYNV,SKU-TEST-API,LLKUD2KAM,E7K48R248'
            blocked_sale:
              description: 'Indica se o produto está bloqueado para novos pedidos.'
              type: boolean
              example: false
            rating:
              description: 'Nota média de avaliação do produto, formatada para exibição.'
              type: string
              example: '4.7'
            total_approved_reviews:
              description: 'Quantidade de avaliações aprovadas do produto.'
              type: integer
              example: 3
            url:
              description: 'URL completa da página do produto na loja.'
              type: string
              format: uri
              example: 'https://www.mytems.com/gta-v-premium-10uni/p'
            url_path:
              description: 'Caminho relativo da URL da página do produto.'
              type: string
              example: /gta-v-premium-10uni/p
            use_different_images:
              description: 'Indica se o produto usa imagens diferentes para cada variação (ex.: uma imagem por cor).'
              type: integer
              example: 1
            brand:
              description: 'Marca do produto.'
              properties:
                data:
                  properties: { id: { description: 'ID da marca do produto.', type: integer, example: 733502 }, name: { description: 'Nome da marca do produto.', type: string, example: 'Rockstar Games' }, logo_url: { description: 'URL do logotipo da marca.', type: string, example: null, nullable: true } }
                  type: object
              type: object
            images:
              description: 'Imagens do produto.'
              properties:
                data:
                  type: array
                  items: { properties: { url: { description: 'URL da imagem do produto.', type: string, format: uri, example: 'https://images.yampi.me/assets/stores/mytems/uploads/images/gta-v-premium-10uni-ps5-dvd-67939caf6a3ac-large.jpg' } }, type: object }
              type: object
            prices:
              description: 'Preços e condições de pagamento do produto.'
              properties:
                data:
                  properties: { currency: { description: 'Moeda utilizada para exibição dos valores de preço, sempre representada como ''R$''.', type: string, example: R$ }, price_cost: { description: 'Preço de custo do produto, usado internamente para cálculo de margem.', type: number, format: float, example: 0 }, price_cost_formated: { description: 'Preço de custo formatado para exibição.', type: string, example: 'R$ 0,00' }, price: { description: 'Preço de tabela do produto, sem descontos aplicados.', type: number, format: float, example: 1 }, price_formated: { description: 'Preço de tabela formatado para exibição.', type: string, example: 'R$ 1,00' }, base_amount: { description: 'Parte inteira, em reais, do valor total (ex.: ''100'' em R$ 100,50).', type: string, example: '1' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total (ex.: ''50'' em R$ 100,50).', type: string, example: '00' }, price_sale: { description: 'Preço de venda do produto após aplicar promoções ativas.', type: number, format: float, example: 1.11 }, price_sale_formated: { description: 'Preço de venda formatado para exibição.', type: string, example: 'R$ 1,11' }, price_discount: { description: 'Valor do desconto aplicado ao preço de venda do produto.', type: number, format: float, example: 0 }, price_discount_formated: { description: 'Valor do desconto formatado para exibição.', type: string, example: 'R$ 0,00' }, has_promotion: { description: 'Indica se o produto possui alguma promoção ativa.', type: boolean, example: true }, percent_discount: { description: 'Percentual de desconto aplicado ao preço de venda.', type: number, format: float, example: 9.91 }, billet: { description: 'Condições de pagamento via boleto.', properties: { price: { description: 'Preço do produto quando pago via boleto.', type: number, format: float, example: 1 }, price_formated: { description: 'Preço via boleto formatado para exibição.', type: string, example: 'R$ 1,00' }, base_amount: { description: 'Parte inteira, em reais, do valor total via boleto (ex.: ''100'' em R$ 100,50).', type: string, example: '1' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total via boleto (ex.: ''50'' em R$ 100,50).', type: string, example: '00' }, discount_value: { description: 'Valor do desconto aplicado ao preço via boleto.', type: number, format: float, example: 0 }, discount_percent: { description: 'Percentual de desconto aplicado ao preço via boleto.', type: string, example: '0.00' }, discount_text: { description: 'Texto pronto de exibição do desconto do boleto (ex.: ''10% off no boleto'').', type: string, example: 'R$ 1,00 à vista com 0.00% de desconto' } }, type: object }, pix: { description: 'Condições de pagamento via Pix.', properties: { price: { description: 'Preço do produto quando pago via Pix.', type: number, format: float, example: 0.9 }, price_formatted: { description: 'Preço via Pix formatado para exibição.', type: string, example: 'R$ 0,90' }, base_amount: { description: 'Parte inteira, em reais, do valor total via Pix (ex.: ''100'' em R$ 100,50).', type: string, example: '0' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total via Pix (ex.: ''50'' em R$ 100,50).', type: string, example: '90' }, discount_value: { description: 'Valor do desconto aplicado ao preço via Pix.', type: number, format: float, example: 0.1 }, discount_percent: { description: 'Percentual de desconto aplicado ao preço via Pix.', type: string, example: '10.00' }, discount_text: { description: 'Texto pronto de exibição do desconto do Pix (ex.: ''10% off no Pix'').', type: string, example: 'R$ 0,90 à vista com 10.00% de desconto' } }, type: object }, installments: { description: 'Condições de parcelamento do produto.', properties: { data: { properties: { max_installment: { description: 'Número máximo de parcelas disponíveis para o produto.', type: integer, example: 1 }, max_installment_value: { description: 'Valor de cada parcela no número máximo de parcelas.', type: number, format: float, example: 1.11 }, amount: { description: 'Valor total do produto considerado como base para o cálculo do parcelamento.', type: number, format: float, example: 1.11 }, text: { description: 'Texto pronto de exibição das condições de parcelamento (ex.: ''3x de R$ 33,30'').', type: string, example: '1x de R$ 1,11 sem juros' }, text_with_tax: { description: 'Texto pronto de exibição das condições de parcelamento incluindo juros.', type: string, example: '1x de R$ 1,11' }, text_discount_percent: { description: 'Texto pronto de exibição do percentual de desconto no parcelamento, quando houver.', type: string, example: null, nullable: true }, text_discount: { description: 'Texto pronto de exibição do valor de desconto no parcelamento, quando houver.', type: string, example: null, nullable: true } }, type: object } }, type: object } }
                  type: object
              type: object
            flags:
              description: 'Selos vinculados ao produto.'
              properties:
                data:
                  type: array
                  items: { properties: { id: { description: 'ID do selo.', type: integer, example: 24875 }, name: { description: 'Nome do selo.', type: string, example: 'Pronta Entrega' }, slug: { description: 'Slug do selo.', type: string, example: pronta-entrega }, text_color: { description: 'Cor do texto do selo, em hexadecimal.', type: string, example: '#333333' }, background_color: { description: 'Cor de fundo do selo, em hexadecimal.', type: string, example: '#D0D0D0' }, image_url: { description: 'URL do ícone do selo, quando configurado.', type: string, example: null, nullable: true } }, type: object }
              type: object
            variations:
              description: 'Variações do produto (ex.: cor, tamanho).'
              properties:
                data:
                  type: array
                  items: { properties: { id: { description: 'ID da variação.', type: integer, example: 1033792 }, name: { description: 'Nome da variação (ex.: Cor).', type: string, example: MIDIA }, values: { description: 'Valores disponíveis para a variação.', properties: { data: { type: array, items: { properties: { id: { description: 'ID do valor selecionado da variação.', type: integer, example: 15963676 }, value: { description: 'Valor selecionado da variação (ex.: Azul).', type: string, example: Blu-Ray }, blocked_sale: { description: 'Indica se o valor de variação está bloqueado para novos pedidos.', type: integer, example: 1 }, color: { description: 'Cor associada ao valor da variação, quando aplicável.', type: string, example: null, nullable: true }, image_url: { description: 'Imagem associada ao valor da variação, quando aplicável.', type: string, example: null, nullable: true } }, type: object } } }, type: object } }, type: object }
              type: object
            skus:
              description: 'SKUs do produto.'
              properties:
                data:
                  type: array
                  items: { properties: { id: { description: 'ID do SKU.', type: integer, example: 262573372 }, product_id: { description: 'ID do produto ao qual o SKU pertence.', type: integer, example: 17790530 }, sku: { description: 'Código do SKU.', type: string, example: 69SQH26GU }, blocked_sale: { description: 'Indica se o SKU está bloqueado para novos pedidos.', type: boolean, example: false }, title: { description: 'Título de exibição do SKU (ex.: combinação de variações).', type: string, example: 'GTA V Premium 10Uni. PS5 DVD' }, availability: { description: 'Quantidade disponível em estoque para o SKU.', type: integer, example: 0 }, variations: { description: 'Variações que compõem este SKU.', type: array, items: { properties: { name: { description: 'Nome da variação (ex.: Cor).', type: string, example: PLATAFORMA }, id: { description: 'ID da variação.', type: integer, example: 1005560 }, value: { description: 'Valor selecionado da variação (ex.: Azul).', type: string, example: PS5 }, value_id: { description: 'ID do valor selecionado da variação.', type: integer, example: 15543722 } }, type: object } }, days_availability_formated: { description: 'Prazo de disponibilidade do SKU formatado para exibição.', type: string, example: Imediata }, price_sale: { description: 'Preço de venda do SKU após aplicar promoções ativas.', type: number, format: float, example: 1.11 }, price_discount: { description: 'Valor do desconto aplicado ao preço de venda do SKU.', type: number, format: float, example: 0 }, combinations: { description: 'Identificador da combinação de variações do SKU, formado pela concatenação dos IDs das opções de variação selecionadas.', type: string, example: 15543722-15963677 }, order: { description: 'Ordem de exibição do SKU entre as variações do produto.', type: integer, example: 0 }, total_in_stock: { description: 'Quantidade total em estoque do SKU.', type: integer, example: 0 }, allow_sell_without_customization: { description: 'Indica se o SKU pode ser vendido sem preencher as customizações, quando o produto tiver customizações cadastradas.', type: boolean, example: false }, image_reference_sku_id: { description: 'ID do SKU de referência de onde as imagens deste SKU são herdadas, quando configurado.', type: integer, example: null, nullable: true }, purchase_url: { description: 'URL direta de compra do SKU.', type: string, format: uri, example: 'https://mytems.pay.yampi.com.br/r/IG65R4X4LD' }, prices: { description: 'Preços e condições de pagamento do SKU.', properties: { data: { properties: { currency: { description: 'Moeda utilizada para exibição dos valores de preço, sempre representada como ''R$''.', type: string, example: R$ }, price_cost: { description: 'Preço de custo do SKU, usado internamente para cálculo de margem.', type: number, format: float, example: 0 }, price_cost_formated: { description: 'Preço de custo formatado para exibição.', type: string, example: 'R$ 0,00' }, price: { description: 'Preço de tabela do SKU, sem descontos aplicados.', type: number, format: float, example: 1 }, price_formated: { description: 'Preço de tabela formatado para exibição.', type: string, example: 'R$ 1,00' }, base_amount: { description: 'Parte inteira, em reais, do valor total (ex.: ''100'' em R$ 100,50).', type: string, example: '1' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total (ex.: ''50'' em R$ 100,50).', type: string, example: '00' }, price_sale: { description: 'Preço de venda do SKU após aplicar promoções ativas.', type: number, format: float, example: 1.11 }, price_sale_formated: { description: 'Preço de venda formatado para exibição.', type: string, example: 'R$ 1,11' }, price_discount: { description: 'Valor do desconto aplicado ao preço de venda do SKU.', type: number, format: float, example: 0 }, price_discount_formated: { description: 'Valor do desconto formatado para exibição.', type: string, example: 'R$ 0,00' }, has_promotion: { description: 'Indica se o SKU possui alguma promoção ativa.', type: boolean, example: true }, percent_discount: { description: 'Percentual de desconto aplicado ao preço de venda.', type: number, format: float, example: 9.91 }, billet: { description: 'Condições de pagamento via boleto.', properties: { price: { description: 'Preço do SKU quando pago via boleto.', type: number, format: float, example: 1 }, price_formated: { description: 'Preço via boleto formatado para exibição.', type: string, example: 'R$ 1,00' }, base_amount: { description: 'Parte inteira, em reais, do valor total via boleto (ex.: ''100'' em R$ 100,50).', type: string, example: '1' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total via boleto (ex.: ''50'' em R$ 100,50).', type: string, example: '00' }, discount_value: { description: 'Valor do desconto aplicado ao preço via boleto.', type: number, format: float, example: 0 }, discount_percent: { description: 'Percentual de desconto aplicado ao preço via boleto.', type: string, example: '0.00' }, discount_text: { description: 'Texto pronto de exibição do desconto do boleto (ex.: ''10% off no boleto'').', type: string, example: 'R$ 1,00 à vista com 0.00% de desconto' } }, type: object }, pix: { description: 'Condições de pagamento via Pix.', properties: { price: { description: 'Preço do SKU quando pago via Pix.', type: number, format: float, example: 0.9 }, price_formatted: { description: 'Preço via Pix formatado para exibição.', type: string, example: 'R$ 0,90' }, base_amount: { description: 'Parte inteira, em reais, do valor total via Pix (ex.: ''100'' em R$ 100,50).', type: string, example: '0' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total via Pix (ex.: ''50'' em R$ 100,50).', type: string, example: '90' }, discount_value: { description: 'Valor do desconto aplicado ao preço via Pix.', type: number, format: float, example: 0.1 }, discount_percent: { description: 'Percentual de desconto aplicado ao preço via Pix.', type: string, example: '10.00' }, discount_text: { description: 'Texto pronto de exibição do desconto do Pix (ex.: ''10% off no Pix'').', type: string, example: 'R$ 0,90 à vista com 10.00% de desconto' } }, type: object } }, type: object } }, type: object }, images: { description: 'Imagens do SKU.', properties: { data: { type: array, items: { properties: { url: { description: 'URL da imagem do SKU.', type: string, format: uri, example: 'https://images.yampi.me/assets/stores/mytems/uploads/images/gta-v-premium-10uni-ps5-dvd-6793a15012988-large.jpg' } }, type: object } } }, type: object }, customizations: { description: 'Customizações disponíveis para o SKU.', properties: { data: { type: array, items: { properties: { id: { description: 'ID da customização.', type: integer, example: 5363 }, name: { description: 'Nome da customização.', type: string, example: nome }, price: { description: 'Valor adicional cobrado pela customização, quando aplicável.', type: number, format: float, example: 0 }, description: { description: 'Texto de ajuda exibido para a customização.', type: string, example: null, nullable: true }, type: { description: 'Tipo de campo da customização (ex.: texto, seleção).', type: string, example: input }, required: { description: 'Indica se o preenchimento da customização é obrigatório.', type: boolean, example: false }, max_chars: { description: 'Número máximo de caracteres permitido para a customização.', type: integer, example: 8 }, allowed_values: { description: 'Lista de valores permitidos para a customização, quando aplicável.', type: string, example: all }, values: { description: 'Lista de valores permitidos para a customização, quando aplicável.', type: array, items: { type: string } }, created_at: { description: 'Data de criação da customização, no formato interno do PHP `DateTime`.', properties: { date: { type: string, example: '2022-09-21 10:45:22.000000' }, timezone_type: { type: integer, example: 3 }, timezone: { type: string, example: America/Sao_Paulo } }, type: object }, updated_at: { description: 'Data da última atualização da customização, no formato interno do PHP `DateTime`.', properties: { date: { type: string, example: '2023-04-14 12:41:34.000000' }, timezone_type: { type: integer, example: 3 }, timezone: { type: string, example: America/Sao_Paulo } }, type: object }, total_products: { description: 'Quantidade de produtos vinculados a esta customização.', type: integer, example: 3 }, products_ids: { description: 'IDs dos produtos vinculados a esta customização.', type: array, items: { type: integer }, example: [9828573, 18340521, 17790530] } }, type: object } } }, type: object } }, type: object }
              type: object
            extras:
              description: 'Dados complementares do produto.'
              properties:
                data:
                  properties: { video: { description: 'URL do vídeo do produto.', type: string, example: '' }, total_in_stock: { description: 'Quantidade total em estoque do produto.', type: integer, example: 0 }, for_gift: { description: 'Indica se é para presente', type: boolean, example: false } }
                  type: object
              type: object
            texts:
              description: 'Textos descritivos do produto.'
              properties:
                data:
                  properties: { description: { description: 'Descrição completa do produto.', type: string }, specifications: { description: 'Especificações técnicas do produto.', type: string }, measures: { description: 'Medidas e dimensões do produto.', type: string, example: '' } }
                  type: object
              type: object
            seo:
              description: 'Dados de SEO da página do produto.'
              properties:
                data:
                  properties: { seo_title: { description: 'Título usado para SEO (tag `<title>`) da página do produto.', type: string, example: '' }, seo_description: { description: 'Descrição usada para SEO (meta description) da página do produto.', type: string, example: '' }, seo_keywords: { description: 'Palavras-chave usadas para SEO da página do produto.', type: string, example: '' }, canonical_url: { description: 'URL canônica da página do produto, usada para SEO.', type: string, example: '' } }
                  type: object
              type: object
            categories:
              description: 'Categorias vinculadas ao produto.'
              properties:
                data:
                  type: array
                  items: { properties: { id: { description: 'ID da categoria.', type: integer, example: 1534214 }, name: { description: 'Nome da categoria.', type: string, example: JOGOS }, parent_id: { description: 'ID da categoria pai, quando a categoria for uma subcategoria.', type: integer, example: null, nullable: true }, slug: { description: 'Slug da categoria, usado na URL.', type: string, example: jogos }, url_path: { description: 'Caminho relativo da URL da categoria.', type: string, example: /jogos } }, type: object }
              type: object
            breadcrumbs:
              description: 'Trilha de navegação (breadcrumbs) do produto.'
              properties:
                data:
                  type: array
                  items: { properties: { id: { description: 'ID da categoria na trilha de navegação.', type: integer, example: 1534214 }, name: { description: 'Nome da categoria na trilha de navegação.', type: string, example: JOGOS }, url_path: { description: 'Caminho relativo da URL da categoria na trilha de navegação.', type: string, example: '/jogos?sort_by=best_sellers' } }, type: object }
              type: object
          type: object
      type: object
    ProductPublicGroup:
      properties:
        data:
          type: array
          items:
            properties:
              id:
                description: 'ID do produto.'
                type: integer
                example: 17790530
              sku_id:
                description: 'ID do SKU representativo do produto no resultado.'
                type: integer
                example: 262573372
              gift_value:
                description: 'Valor cobrado pela embalagem de presente do produto, quando aplicável.'
                type: number
                format: float
                example: 0
              simple:
                description: 'Indica se o produto é simples, sem variações.'
                type: boolean
                example: false
              has_variations:
                description: 'Indica se o produto possui variações (ex.: cor, tamanho).'
                type: boolean
                example: true
              is_digital:
                description: 'Indica se o produto é digital (sem envio físico).'
                type: boolean
                example: false
              warranty:
                description: 'Prazo de garantia do produto, em meses.'
                type: integer
                example: 0
              custom_shipping:
                description: 'Indica se o produto usa frete customizado, em vez do frete padrão da loja.'
                type: boolean
                example: false
              shipping_price:
                description: 'Valor de frete fixo configurado para o produto, quando `custom_shipping` for verdadeiro.'
                type: number
                format: float
                example: 0
              name:
                description: 'Nome do produto.'
                type: string
                example: 'GTA V Premium 10Uni.'
              slug:
                description: 'Slug do produto, usado na URL da página do produto.'
                type: string
                example: gta-v-premium-10uni
              sku:
                description: 'Um ou mais SKUs separados por vírgula.'
                type: string
                example: 'GQVQLNP34,69SQH26GU,QWNVUZHMQ,EPSHDEZPT,K89BHGYNV,SKU-TEST-API,LLKUD2KAM,E7K48R248'
              blocked_sale:
                description: 'Indica se o produto está bloqueado para novos pedidos.'
                type: boolean
                example: false
              rating:
                description: 'Nota média de avaliação do produto, formatada para exibição.'
                type: string
                example: '4.7'
              total_approved_reviews:
                description: 'Quantidade de avaliações aprovadas do produto.'
                type: integer
                example: 3
              url:
                description: 'URL completa da página do produto na loja.'
                type: string
                format: uri
                example: 'https://www.mytems.com/gta-v-premium-10uni/p'
              url_path:
                description: 'Caminho relativo da URL da página do produto.'
                type: string
                example: /gta-v-premium-10uni/p
              use_different_images:
                description: 'Indica se o produto usa imagens diferentes para cada variação (ex.: uma imagem por cor).'
                type: integer
                example: 1
              brand:
                description: 'Marca do produto.'
                properties:
                  data: { properties: { id: { description: 'ID da marca do produto.', type: integer, example: 733502 }, name: { description: 'Nome da marca do produto.', type: string, example: 'Rockstar Games' }, logo_url: { description: 'URL do logotipo da marca.', type: string, example: null, nullable: true } }, type: object }
                type: object
              images:
                description: 'Imagens do produto.'
                properties:
                  data: { type: array, items: { properties: { url: { description: 'URL da imagem do produto.', type: string, format: uri, example: 'https://images.yampi.me/assets/stores/mytems/uploads/images/gta-v-premium-10uni-ps5-dvd-67939caf6a3ac-large.jpg' } }, type: object } }
                type: object
              prices:
                description: 'Preços e condições de pagamento do produto.'
                properties:
                  data: { properties: { currency: { description: 'Moeda utilizada para exibição dos valores de preço, sempre representada como ''R$''.', type: string, example: R$ }, price_cost: { description: 'Preço de custo do produto, usado internamente para cálculo de margem.', type: number, format: float, example: 0 }, price_cost_formated: { description: 'Preço de custo formatado para exibição.', type: string, example: 'R$ 0,00' }, price: { description: 'Preço de tabela do produto, sem descontos aplicados.', type: number, format: float, example: 1 }, price_formated: { description: 'Preço de tabela formatado para exibição.', type: string, example: 'R$ 1,00' }, base_amount: { description: 'Parte inteira, em reais, do valor total (ex.: ''100'' em R$ 100,50).', type: string, example: '1' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total (ex.: ''50'' em R$ 100,50).', type: string, example: '00' }, price_sale: { description: 'Preço de venda do produto após aplicar promoções ativas.', type: number, format: float, example: 1.11 }, price_sale_formated: { description: 'Preço de venda formatado para exibição.', type: string, example: 'R$ 1,11' }, price_discount: { description: 'Valor do desconto aplicado ao preço de venda do produto.', type: number, format: float, example: 0 }, price_discount_formated: { description: 'Valor do desconto formatado para exibição.', type: string, example: 'R$ 0,00' }, has_promotion: { description: 'Indica se o produto possui alguma promoção ativa.', type: boolean, example: true }, percent_discount: { description: 'Percentual de desconto aplicado ao preço de venda.', type: number, format: float, example: 9.91 }, billet: { description: 'Condições de pagamento via boleto.', properties: { price: { description: 'Preço do produto quando pago via boleto.', type: number, format: float, example: 1 }, price_formated: { description: 'Preço via boleto formatado para exibição.', type: string, example: 'R$ 1,00' }, base_amount: { description: 'Parte inteira, em reais, do valor total via boleto (ex.: ''100'' em R$ 100,50).', type: string, example: '1' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total via boleto (ex.: ''50'' em R$ 100,50).', type: string, example: '00' }, discount_value: { description: 'Valor do desconto aplicado ao preço via boleto.', type: number, format: float, example: 0 }, discount_percent: { description: 'Percentual de desconto aplicado ao preço via boleto.', type: string, example: '0.00' }, discount_text: { description: 'Texto pronto de exibição do desconto do boleto (ex.: ''10% off no boleto'').', type: string, example: 'R$ 1,00 à vista com 0.00% de desconto' } }, type: object }, pix: { description: 'Condições de pagamento via Pix.', properties: { price: { description: 'Preço do produto quando pago via Pix.', type: number, format: float, example: 0.9 }, price_formatted: { description: 'Preço via Pix formatado para exibição.', type: string, example: 'R$ 0,90' }, base_amount: { description: 'Parte inteira, em reais, do valor total via Pix (ex.: ''100'' em R$ 100,50).', type: string, example: '0' }, fraction_amount: { description: 'Parte decimal, em centavos, do valor total via Pix (ex.: ''50'' em R$ 100,50).', type: string, example: '90' }, discount_value: { description: 'Valor do desconto aplicado ao preço via Pix.', type: number, format: float, example: 0.1 }, discount_percent: { description: 'Percentual de desconto aplicado ao preço via Pix.', type: string, example: '10.00' }, discount_text: { description: 'Texto pronto de exibição do desconto do Pix (ex.: ''10% off no Pix'').', type: string, example: 'R$ 0,90 à vista com 10.00% de desconto' } }, type: object }, installments: { description: 'Condições de parcelamento do produto.', properties: { data: { properties: { max_installment: { description: 'Número máximo de parcelas disponíveis para o produto.', type: integer, example: 1 }, max_installment_value: { description: 'Valor de cada parcela no número máximo de parcelas.', type: number, format: float, example: 1.11 }, amount: { description: 'Valor total do produto considerado como base para o cálculo do parcelamento.', type: number, format: float, example: 1.11 }, text: { description: 'Texto pronto de exibição das condições de parcelamento (ex.: ''3x de R$ 33,30'').', type: string, example: '1x de R$ 1,11 sem juros' }, text_with_tax: { description: 'Texto pronto de exibição das condições de parcelamento incluindo juros.', type: string, example: '1x de R$ 1,11' }, text_discount_percent: { description: 'Texto pronto de exibição do percentual de desconto no parcelamento, quando houver.', type: string, example: null, nullable: true }, text_discount: { description: 'Texto pronto de exibição do valor de desconto no parcelamento, quando houver.', type: string, example: null, nullable: true } }, type: object } }, type: object } }, type: object }
                type: object
              flags:
                description: 'Selos vinculados ao produto.'
                properties:
                  data: { type: array, items: { properties: { id: { description: 'ID do selo.', type: integer, example: 24875 }, name: { description: 'Nome do selo.', type: string, example: 'Pronta Entrega' }, slug: { description: 'Slug do selo.', type: string, example: pronta-entrega }, text_color: { description: 'Cor do texto do selo, em hexadecimal.', type: string, example: '#333333' }, background_color: { description: 'Cor de fundo do selo, em hexadecimal.', type: string, example: '#D0D0D0' }, image_url: { description: 'URL do ícone do selo, quando configurado.', type: string, example: null, nullable: true } }, type: object } }
                type: object
            type: object
      type: object
    ProductPublicFlag:
      properties:
        data:
          type: array
          items:
            properties:
              id:
                description: 'ID do selo.'
                type: integer
                example: 24875
              name:
                description: 'Nome do selo.'
                type: string
                example: 'Pronta Entrega'
              slug:
                description: 'Slug do selo.'
                type: string
                example: pronta-entrega
              text_color:
                description: 'Cor do texto do selo, em hexadecimal.'
                type: string
                example: '#333333'
              background_color:
                description: 'Cor de fundo do selo, em hexadecimal.'
                type: string
                example: '#D0D0D0'
              image_url:
                description: 'URL do ícone do selo, quando configurado.'
                type: string
                example: null
                nullable: true
            type: object
      type: object
    CommentPublic:
      description: 'Avaliação de produto com possível resposta.'
      required:
        - name
        - message
        - created_at
      properties:
        name:
          description: 'Nome de quem fez a avaliação.'
          type: string
          example: Lucas
        message:
          description: 'Texto da avaliação.'
          type: string
          example: 'É de comer?'
        created_at:
          required:
            - date
            - timezone_type
            - timezone
          properties:
            date:
              type: string
              example: '2025-08-18 10:24:29.000000'
            timezone_type:
              type: integer
              example: 3
            timezone:
              type: string
              example: America/Sao_Paulo
          type: object
        answer:
          description: 'Resposta à dúvida.'
          required:
            - name
            - message
            - created_at
          properties:
            name:
              description: 'Nome de quem respondeu à avaliação.'
              type: string
              example: Lucas
            message:
              description: 'Texto da resposta à avaliação.'
              type: string
              example: 'Sim,é!'
            created_at:
              required:
                - date
                - timezone_type
                - timezone
              properties:
                date:
                  type: string
                  example: '2025-08-18 10:29:45.000000'
                timezone_type:
                  type: integer
                  example: 3
                timezone:
                  type: string
                  example: America/Sao_Paulo
              type: object
          type: object
          nullable: true
      type: object
    PixelsPublic:
      description: 'Integrações de pixels configuradas.'
      properties:
        data:
          properties:
            google:
              description: 'Informações do Pixel'
              type: array
              items:
                required:
                  - id
                  - service
                  - pixel_id
                  - conversion_label
                properties:
                  id: { description: 'ID do pixel de rastreamento configurado.', type: integer, example: 724930 }
                  service: { description: 'Nome do serviço de pixel de rastreamento (ex.: Google Ads, Facebook).', type: string, example: google }
                  pixel_id: { description: 'Identificador do pixel na plataforma do serviço de rastreamento.', type: string, example: '6546546546' }
                  facebook_type: { description: 'Tipo de integração do Facebook Pixel: `default` (pixel padrão) ou `api_token` (Conversions API, exige `facebook_api_token`).', type: string, example: api_token }
                  conversion_label: { description: 'Rótulo de conversão configurado no Google Ads.', type: string, example: '4654654654' }
                type: object
          type: object
      type: object
    InstallmentsPublic:
      properties:
        max_installment:
          description: 'Número máximo de parcelas disponíveis para o produto/SKU.'
          type: integer
          example: 6
        max_installment_value:
          description: 'Valor de cada parcela no número máximo de parcelas.'
          type: number
          example: 0
        amount:
          description: 'Valor total do produto/SKU considerado como base para o cálculo do parcelamento.'
          type: number
          example: 0
        text:
          description: 'Texto pronto de exibição das condições de parcelamento (ex.: ''3x de R$ 33,30'').'
          type: string
          example: '6x de R$ 0,00 com juros'
        text_with_tax:
          description: 'Texto pronto de exibição das condições de parcelamento incluindo juros.'
          type: string
          example: '6x de R$ 0,00'
        text_discount_percent:
          description: 'Texto pronto de exibição do percentual de desconto no parcelamento, quando houver.'
          type: string
          example: null
          nullable: true
        text_discount:
          description: 'Texto pronto de exibição do valor de desconto no parcelamento, quando houver.'
          type: string
          example: null
          nullable: true
      type: object
    ComboPublic:
      properties:
        id:
          description: 'ID do combo promocional.'
          type: integer
          example: 13994
        discount_type:
          description: 'Tipo do desconto: p = percentual, v = valor (quando aplicável).'
          type: string
          example: p
        discount_value:
          description: 'Valor de desconto aplicado ao produto quando comprado no combo.'
          type: number
          format: float
          example: 5
        description:
          description: 'Descrição do combo promocional.'
          type: string
          example: Descrição
          nullable: true
        products:
          properties:
            data:
              description: 'Produtos incluídos no combo.'
              type: array
              items:
                $ref: '#/components/schemas/ProductPublic'
          type: object
      type: object
    FilterPublic:
      description: 'Resposta com lista de itens e informações do filtro associado.'
      required:
        - data
      properties:
        data:
          type: array
          items:
            required:
              - id
              - name
            properties:
              name:
                description: 'Nome do valor do filtro (ex.: nome da cor, marca ou faixa de preço).'
                type: string
                example: Henrique
              id:
                description: 'ID do valor do filtro.'
                type: integer
                example: 120882
              filter:
                description: 'Informações do filtro ao qual o item pertence.'
                properties:
                  data: { required: [id, store_id, navigation, searchable, name, created_at, updated_at], properties: { id: { description: 'ID do filtro.', type: integer, example: 38055 }, store_id: { description: 'ID da loja dona do filtro.', type: integer, example: 176851 }, navigation: { description: '0/1 indicando se aparece na navegação.', type: integer, example: 0 }, searchable: { description: '0/1 indicando se é pesquisável.', type: integer, example: 1 }, name: { description: 'Nome do filtro.', type: string, example: Bruno }, created_at: { description: 'Data de criação do filtro.', type: string, format: date-time, example: '2025-02-18 17:43:34' }, updated_at: { description: 'Data da última atualização do filtro.', type: string, format: date-time, example: '2025-02-18 17:43:34' }, deleted_at: { description: 'Data de exclusão lógica do filtro, quando removido.', type: string, format: date-time, example: null, nullable: true } }, type: object }
                type: object
              color:
                description: 'Cor associada ao valor do filtro, quando aplicável (ex.: filtro de cor).'
                type: string
                example: null
                nullable: true
              image_url:
                description: 'Imagem associada ao valor do filtro, quando aplicável.'
                type: string
                format: uri
                example: null
                nullable: true
            type: object
      type: object
    BannersPublic:
      description: 'Lista de banners públicos.'
      required:
        - data
      properties:
        data:
          type: array
          items:
            required:
              - id
              - type
              - active
              - home
              - name
              - slug
              - expired
              - start_at
              - end_at
              - first_banner
              - dimensions
              - product
            properties:
              id:
                description: 'ID do banner.'
                type: integer
                example: 119474
              product_id:
                description: 'ID do produto vinculado ao banner, quando o banner apontar para um produto específico.'
                type: integer
                example: null
                nullable: true
              type:
                description: 'Tipo do banner: `image` (banner de imagem) ou `product` (banner vinculado a um produto, exigindo `product_id`).'
                type: string
                example: image
              active:
                description: 'Indica se o banner está ativo.'
                type: boolean
                example: true
              home:
                description: 'Indica se o banner é exibido na página inicial.'
                type: boolean
                example: true
              name:
                description: 'Nome do banner.'
                type: string
                example: Top-banner
              slug:
                description: 'Slug do banner.'
                type: string
                example: top-banner
              image_url:
                description: 'URL da imagem do banner para exibição em desktop.'
                type: string
                format: uri
                example: //images.yampi.me/assets/stores/mytems/uploads/banners/62c6fbff0fddc.jpg
                nullable: true
              mobile_image_url:
                description: 'URL da imagem do banner para exibição em dispositivos móveis.'
                type: string
                format: uri
                example: null
                nullable: true
              link:
                description: 'URL de destino ao clicar no banner.'
                type: string
                format: uri
                example: null
                nullable: true
              expired:
                description: 'Indica se o período de exibição do banner já expirou.'
                type: boolean
                example: false
              stopwatch:
                description: 'Texto de contagem regressiva exibido no banner, quando configurado.'
                type: string
                example: null
                nullable: true
              stopwatch_expires_in:
                description: 'Tempo restante, em segundos, para o fim da contagem regressiva do banner.'
                type: integer
                example: null
                nullable: true
              start_at:
                description: 'Data e hora de início de exibição do banner.'
                required:
                  - date
                  - timezone_type
                  - timezone
                properties:
                  date: { type: string, example: '2025-01-21 10:35:41.000000' }
                  timezone_type: { type: integer, example: 3 }
                  timezone: { type: string, example: America/Sao_Paulo }
                type: object
              end_at:
                description: 'Data e hora de fim de exibição do banner.'
                required:
                  - date
                  - timezone_type
                  - timezone
                properties:
                  date: { type: string, example: '3024-01-21 10:35:41.000000' }
                  timezone_type: { type: integer, example: 3 }
                  timezone: { type: string, example: America/Sao_Paulo }
                type: object
              first_banner:
                description: 'Dados resumidos do primeiro banner ativo do grupo.'
                required:
                  - id
                properties:
                  id: { type: integer, example: 119474 }
                  link: { type: string, format: uri, example: null, nullable: true }
                  image: { type: string, format: uri, example: //images.yampi.me/assets/stores/mytems/uploads/banners/62c6fbff0fddc.jpg, nullable: true }
                  mobile_image: { type: string, format: uri, example: null, nullable: true }
                  stopwatch: { type: string, example: null, nullable: true }
                type: object
              dimensions:
                required:
                  - desktop
                  - mobile
                properties:
                  desktop: { required: [width, height], properties: { width: { description: 'Largura recomendada para a imagem do banner em desktop.', type: string, example: '1186.00' }, height: { description: 'Altura recomendada para a imagem do banner em desktop.', type: string, example: '441.00' } }, type: object }
                  mobile: { required: [width, height], properties: { width: { description: 'Largura recomendada para a imagem do banner em mobile.', type: string, example: '0.00' }, height: { description: 'Altura recomendada para a imagem do banner em mobile.', type: string, example: '0.00' } }, type: object }
                type: object
              product:
                required:
                  - data
                properties:
                  data: { description: 'Produtos vinculados ao banner.', type: array, items: { $ref: '#/components/schemas/ProductBannerPublic' } }
                type: object
            type: object
      type: object
    ProductBannerPublic:
      description: 'Produto resumido vinculado a um banner.'
      properties:
        data:
          properties:
            id:
              description: 'ID do produto.'
              type: integer
              example: 17790530
            name:
              description: 'Nome do produto.'
              type: string
              example: 'GTA V Premium 10Uni.'
            slug:
              description: 'Slug do produto, usado na URL da página do produto.'
              type: string
              example: gta-v-premium-10uni
            blocked_sale:
              description: 'Indica se o produto está bloqueado para novos pedidos.'
              type: boolean
              example: false
            rating:
              description: 'Nota média de avaliação do produto, formatada para exibição.'
              type: string
              example: '4.7'
            url:
              description: 'URL completa da página do produto na loja.'
              type: string
              format: uri
              example: 'https://www.mytems.com/gta-v-premium-10uni/p'
            url_path:
              description: 'Caminho relativo da URL da página do produto.'
              type: string
              example: /gta-v-premium-10uni/p
            brand:
              description: 'Marca do produto.'
              properties:
                data:
                  properties: { id: { description: 'ID da marca do produto.', type: integer, example: 733502 }, name: { description: 'Nome da marca do produto.', type: string, example: 'Rockstar Games' }, logo_url: { description: 'URL do logotipo da marca.', type: string, example: null, nullable: true } }
                  type: object
              type: object
            images:
              description: 'Imagens do produto.'
              properties:
                data:
                  type: array
                  items: { properties: { url: { description: 'URL da imagem do produto.', type: string, format: uri, example: 'https://images.yampi.me/assets/stores/mytems/uploads/images/gta-v-premium-10uni-ps5-dvd-67939caf6a3ac-large.jpg' } }, type: object }
              type: object
            prices:
              description: 'Preços e condições de pagamento do produto.'
              properties:
                data:
                  properties: { currency: { description: 'Moeda utilizada para exibição dos valores de preço, sempre representada como ''R$''.', type: string, example: R$ }, price: { description: 'Preço de tabela do produto, sem descontos aplicados.', type: number, format: float, example: 1 }, price_formated: { description: 'Preço de tabela formatado para exibição.', type: string, example: 'R$ 1,00' }, price_sale: { description: 'Preço de venda do produto após aplicar promoções ativas.', type: number, format: float, example: 1.11 }, price_sale_formated: { description: 'Preço de venda formatado para exibição.', type: string, example: 'R$ 1,11' }, has_promotion: { description: 'Indica se o produto possui alguma promoção ativa.', type: boolean, example: true }, percent_discount: { description: 'Percentual de desconto aplicado ao preço de venda.', type: number, format: float, example: 9.91 } }
                  type: object
              type: object
          type: object
      type: object
    ProductWithRelations:
      title: Produto
      description: 'Representa um produto do catálogo'
      properties:
        id:
          description: 'Identificador único do produto.'
          type: integer
        merchant_id:
          description: 'ID da loja dona do produto.'
          type: integer
        seller_id:
          description: 'ID do vendedor (marketplace/multi-seller) responsável pelo produto, quando aplicável.'
          type: integer
          nullable: true
        affiliation_id:
          description: 'ID da afiliação de pagamento (adquirente/gateway) vinculada ao produto.'
          type: integer
          nullable: true
        erp_id:
          description: 'ID do produto no ERP integrado à loja, quando houver integração.'
          type: integer
        relevance:
          description: 'Nível de prioridade do produto na busca (1 = padrão, 2 = média, 3 = alta), definido pelo campo `priority` na requisição.'
          type: integer
          nullable: true
        active:
          description: 'Indica se o produto está ativo e disponível para venda.'
          type: boolean
        gift_value:
          description: 'Valor cobrado pela embalagem de presente do produto, quando aplicável.'
          type: string
        searchable:
          description: 'Indica se o produto pode ser encontrado na busca da loja.'
          type: boolean
        simple:
          description: 'Indica se o produto é simples, sem variações.'
          type: boolean
        ncm:
          description: 'Código NCM (Nomenclatura Comum do Mercosul) do produto, usado para classificação fiscal em notas fiscais.'
          type: string
        has_variations:
          description: 'Indica se o produto possui variações (ex.: cor, tamanho).'
          type: boolean
        is_digital:
          description: 'Indica se o produto é digital (sem envio físico).'
          type: boolean
        warranty:
          description: 'Prazo de garantia do produto, em meses.'
          type: integer
          nullable: true
        custom_shipping:
          description: 'Indica se o produto usa frete customizado, em vez do frete padrão da loja.'
          type: boolean
        shipping_price:
          description: 'Valor de frete fixo configurado para o produto, quando `custom_shipping` for verdadeiro.'
          type: string
        name:
          description: 'Nome do produto.'
          type: string
        slug:
          description: 'Slug do produto, usado na URL da página do produto.'
          type: string
        sku:
          description: 'Código do SKU principal do produto.'
          type: string
        rating:
          description: 'Nota média de avaliação do produto.'
          type: integer
        priority:
          description: 'Prioridade de exibição do produto usada na ordenação manual de listagens.'
          type: integer
        url:
          description: 'URL completa da página do produto na loja.'
          type: string
          format: url
        redirect_url_card:
          description: 'URL de redirecionamento configurada para compra do produto via cartão.'
          type: string
          nullable: true
        redirect_url_billet:
          description: 'URL de redirecionamento configurada para compra do produto via boleto.'
          type: string
          nullable: true
        preview_url:
          description: 'URL para pré-visualizar o produto antes da publicação.'
          type: string
          format: url
      type: object
    ProductCategory:
      title: Produto
      description: 'Representa um produto do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProductWithRelations'
    ProductGroup:
      title: Produto
      description: 'Representa um produto do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProductWithRelations'
    ProductFlag:
      title: Produto
      description: 'Representa um produto que possui o selo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProductWithRelations'
    ProductCollection:
      title: Produto
      description: 'Representa um produto do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProductWithRelations'
    ProductPromotions:
      title: Produto
      description: 'Representa um produto do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProductWithRelations'
    ProductComment:
      title: 'Comentário de um produto'
      description: 'Representa um comentário associado a um produto'
      properties:
        id:
          type: integer
        product_id:
          type: integer
        comment_id:
          type: integer
        approved:
          type: boolean
        name:
          type: string
        email:
          type: string
          format: email
        message:
          type: string
      type: object
    ProductCommentAnswer:
      title: 'Comentário de um produto'
      description: 'Representa um comentário associado a um produto'
      properties:
        id:
          type: integer
        product_id:
          type: integer
        comment_id:
          type: integer
        approved:
          type: boolean
        name:
          type: string
        email:
          type: string
          format: email
        message:
          type: string
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Restrictions:
      title: Restrições
      description: 'Representa as restrições de inclusão e exclusão para itens específicos'
      properties:
        include:
          description: 'Itens a serem incluídos'
          properties:
            products_ids:
              type: array
              items:
                type: integer
              example: '[987, 654, 456, 321, 123]'
            brands_ids:
              type: array
              items:
                type: integer
              example: '[]'
            collections_ids:
              type: array
              items:
                type: integer
              example: '[]'
            categories_ids:
              type: array
              items:
                type: integer
              example: '[]'
          type: object
        exclude:
          description: 'Itens a serem excluídos'
          properties:
            products_ids:
              type: array
              items:
                type: integer
              example: '[123, 321]'
            brands_ids:
              type: array
              items:
                type: integer
              example: '[]'
            collections_ids:
              type: array
              items:
                type: integer
              example: '[]'
            categories_ids:
              type: array
              items:
                type: integer
              example: '[]'
          type: object
        include_ids:
          description: 'Lista de IDs para inclusão'
          type: array
          items:
            type: integer
          example: '[987, 654, 456, 321, 123]'
        exclude_ids:
          description: 'Lista de IDs para exclusão'
          type: array
          items:
            type: integer
          example: '[123, 321]'
      type: object
    ProductReview:
      title: 'Review de produto'
      description: ''
      properties:
        id:
          type: integer
        product_id:
          description: 'ID do produto'
          type: integer
        product_name:
          type: string
        approved:
          type: boolean
        rating:
          type: integer
        name:
          type: string
        email:
          type: string
          format: email
        message:
          type: string
        total:
          type: integer
      type: object
    PublicProductReview:
      description: 'Lista de avaliações de produtos.'
      properties:
        rating:
          type: integer
          example: 5
        name:
          type: string
          example: Teste
        message:
          type: string
          example: 'Teste 123'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    PublicRating:
      description: 'Resumo das avaliações de um produto.'
      properties:
        grouped_rating:
          description: 'Quantidade de avaliações agrupadas por nota.'
          properties:
            '5':
              type: integer
              example: 0
            '4':
              type: integer
              example: 0
            '3':
              type: integer
              example: 0
            '2':
              type: integer
              example: 0
            '1':
              type: integer
              example: 0
          type: object
        average_rating:
          description: 'Nota média das avaliações.'
          type: number
          format: float
          example: null
          nullable: true
        total:
          description: 'Total de avaliações.'
          type: integer
          example: 0
      type: object
    ProductStock:
      title: 'Estoque de produto'
      description: ''
      properties:
        id:
          type: integer
          readOnly: true
        stock_id:
          description: 'ID do estoque'
          type: integer
        quantity:
          description: 'Quantidade do estoque'
          type: integer
        min_quantity:
          description: 'Quantidade mínima do estoque'
          type: integer
      type: object
    ProductStockAdditionalResponse:
      title: ''
      description: ''
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        stock:
          properties:
            '': {  }
          type: object
      type: object
    ProductStockResponse:
      properties:
        id:
          type: integer
        sku:
          type: string
        availability:
          type: integer
        availability_soldout:
          type: integer
        name:
          type: string
        grids:
          type: array
          items:
            properties:
              name:
                type: string
              id:
                type: integer
              value:
                type: string
              value_id:
                type: integer
            type: object
        photo:
          type: string
          format: url
        quantity_managed:
          type: boolean
        total_in_stock:
          type: integer
        total_delivery_time:
          type: integer
        blocked_sale:
          type: boolean
        stocks:
          type: array
          items:
            properties:
              stock:
                properties:
                  id: { type: integer }
                  name: { type: string }
                  warehouse_name: { type: string }
                  warehouse_id: { type: integer }
                  delivery_days: { type: integer }
                  priority: { type: boolean }
                type: object
              sku_stock_id:
                type: integer
              quantity:
                type: integer
              min_quantity:
                type: integer
              total_reserved:
                type: integer
              orders_reservations:
                type: array
                items:
                  type: object
            type: object
      type: object
    ProgressiveDiscount:
      title: 'Desconto Progressivo'
      description: 'Representa um desconto progressivo'
      properties:
        id:
          type: integer
        active:
          type: boolean
        min_value:
          type: number
          format: float
        max_value:
          type: number
          format: float
          example: 100
        percent:
          type: number
          format: float
          example: 5
        min_quantity:
          type: integer
        accumulate:
          type: boolean
        expired:
          type: boolean
      type: object
    Promocode:
      title: 'Código Promocional'
      description: 'Representa um código promocional'
      properties:
        id:
          type: integer
        code:
          type: string
          example: TEST
        description:
          type: string
          example: ''
        customer_id:
          type: integer
        active:
          type: boolean
        expired:
          type: boolean
        discount_type:
          type: string
          enum:
            - p
            - v
        for_the_price_of:
          type: boolean
        cart_default:
          type: boolean
        type_increment_value:
          type: string
          example: ''
        value:
          type: number
          format: float
          example: 10
        price_products:
          type: number
          format: float
        percent_products:
          type: number
          format: float
        quantity:
          type: integer
          example: '100000'
        total_customers_used:
          type: integer
          example: '22'
        product_quantity:
          type: integer
        product_max_quantity:
          type: integer
        used:
          type: integer
          example: 22
        items_count:
          type: integer
        min_value:
          type: number
          format: float
          example: 99.99
        use_percent:
          type: number
          format: float
          example: 0.02
        shipment_percent:
          type: number
          format: float
        accumulate:
          type: boolean
        once_per_customer:
          type: boolean
        abandoned_cart:
          type: boolean
        newsletter:
          type: boolean
        payments_ids:
          example: '[1, 2, 3, 4]'
        free_shipment:
          type: boolean
        ignore_promotion_products:
          type: boolean
      type: object
    PromocodeAdditionalResponse:
      properties:
        start_at:
          $ref: '#/components/schemas/BaseTimestamp'
        end_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    PromocodeCustomer:
      description: 'Representa os clientes que usaram um cupom'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Customer'
        -
          $ref: '#/components/schemas/CustomerAdditionalResponse'
    Promotion:
      title: ''
      description: ''
      properties:
        id:
          type: integer
        active:
          type: boolean
        all_products:
          type: boolean
        utm_only:
          type: boolean
        highlight_on_menu:
          type: boolean
        accumulate:
          type: boolean
        price_attribute:
          type: string
        name:
          type: string
          example: 'Promoção relâmpago'
        expired:
          type: boolean
          readOnly: true
        url:
          type: string
          format: uri
          example: 'https://www.domain.com/promocoes/test'
        slug:
          type: string
        value:
          type: number
          format: float
        utm_source:
          type: string
          example: google
        utm_campaign:
          type: string
          example: adwords
      type: object
    PromotionAdditionalResponse:
      properties:
        start_at:
          $ref: '#/components/schemas/BaseTimestamp'
        end_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    PromotionsWithRelations:
      title: Categorias
      description: 'Representa uma categoria do catálogo'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Promotion'
        -
          $ref: '#/components/schemas/PromotionAdditionalResponse'
    PromotionBanner:
      title: Promoção
      description: 'Representa uma promoção do banner'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/PromotionsWithRelations'
    QueueJobLog:
      title: 'Log da fila'
      description: 'Detalhes de um log de uma fila'
      properties:
        id:
          type: integer
        queue_id:
          type: integer
        user_id:
          type: integer
        success:
          type: boolean
          example: true
        error:
          type: boolean
          example: true
        type:
          type: string
        line:
          type: string
          example: '1'
        message:
          type: array
          items:
            type: string
            example: 'SKU criado'
        url:
          type: string
          format: uri
        values:
          type: string
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    QueueJobProgress:
      title: ''
      description: 'Resposta contendo os dados da fila'
      properties:
        id:
          type: integer
        store_id:
          type: integer
          readOnly: true
          example: '1'
        user_id:
          type: integer
        token:
          type: string
          readOnly: true
          example: ecd73150-e747-11e7-9221-0361c8d4d388
        total_sent:
          type: integer
          readOnly: true
          example: 5
        total_processed:
          type: integer
          readOnly: true
          example: 5
        title:
          type: string
          example: 'Importando produtos'
        redirect_url:
          type: string
          example: 'https://site.com'
        finished_at:
          type: string
          format: date-time
          example: '2017-04-03 00:00:00'
        created_at:
          type: string
          format: date-time
          example: '2017-04-03 00:00:00'
        updated_at:
          type: string
          format: date-time
          example: '2017-04-03 00:00:00'
      type: object
    Redirect:
      title: Redirecionamentos
      description: 'Redirecionamentos 301 da loja'
      properties:
        id:
          type: integer
        url_from:
          type: string
          example: /old-page
        url_to:
          type: string
          example: /new-page
      type: object
    RedirectAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Seller:
      title: Vendedor
      description: ''
      required:
        - transfer_enabled
        - name
        - email
        - document
        - document_type
        - transfer_interval
        - transfer_day
        - ref_code
        - percentage_products
        - percentage_shipping
        - liable
      properties:
        id:
          type: integer
        affiliation_id:
          type: integer
        bank_account_id:
          type: integer
        store_alias:
          type: string
        has_split:
          type: boolean
        transfer_enabled:
          type: boolean
        active:
          type: boolean
        name:
          type: string
          example: teste
        email:
          type: string
          example: teste@email.com
        document:
          type: string
          example: '12345678912'
        document_type:
          type: string
          example: cpf
        transfer_interval:
          type: string
          example: daily
        transfer_day:
          type: string
          example: 0
        anticipatable_volume_percentage:
          type: integer
          example: 0
        automatic_anticipation_enabled:
          type: boolean
        ref_code:
          type: string
          example: '1'
        external_gateway_id:
          type: string
          example: null
        percentage_products:
          type: integer
          example: 5
        percentage_shipping:
          type: integer
          example: 5
        charge_processing_fee:
          type: boolean
        liable:
          type: boolean
      type: object
    SellerBankAccount:
      title: 'Conta bancária'
      description: ''
      required:
        - bank_code
        - external_gateway_id
        - agency
        - agency_digit
        - account
        - account_digit
        - document_number
        - legal_name
        - type
      properties:
        id:
          type: integer
        affiliation_id:
          type: integer
        bank_code:
          type: string
          example: '1'
        external_gateway_id:
          type: integer
        agency:
          type: string
          example: '2222'
        agency_digit:
          type: string
          example: '3'
        account:
          type: string
          example: '1234'
        account_digit:
          type: string
          example: '2'
        document_number:
          type: string
          example: '11111111111'
        legal_name:
          type: string
          example: teste
        type:
          type: string
          example: conta_poupanca
      type: object
    Service:
      title: 'Serviço de integração'
      description: 'Informações sobre um serviço'
      properties:
        alias:
          description: 'Alias da aplicação'
          type: string
        name:
          description: 'Nome da aplicação'
          type: string
        description:
          description: 'Descrição da aplicação'
          type: string
        extra_description:
          description: 'Descrição adicional'
          type: string
          nullable: true
        website_url:
          description: 'URL do site da aplicação'
          type: string
          format: uri
        auth_type:
          description: 'Tipo de autenticação da aplicação'
          type: string
        authorize_url:
          description: 'URL de autorização (se aplicável)'
          type: string
          format: uri
          nullable: true
        category:
          description: 'Categoria da aplicação'
          type: string
        category_description:
          description: 'Descrição da categoria'
          type: string
        public_category:
          description: 'Categoria pública da aplicação'
          type: string
        public_category_description:
          description: 'Descrição da categoria pública'
          type: string
        external:
          description: 'Indica se é uma aplicação externa'
          type: boolean
        icon_url:
          description: 'URL do ícone da aplicação'
          type: string
          format: uri
        has_config:
          description: 'Indica se possui configurações'
          type: boolean
        active_config:
          description: 'Indica se as configurações estão ativas'
          type: boolean
        auto_send:
          description: 'Indica se o envio de dados é automático'
          type: boolean
        articles:
          description: 'Lista de artigos relacionados'
          type: array
          items:
            type: string
        is_new:
          description: 'Indica se é uma aplicação nova'
          type: boolean
        tags:
          description: 'Tags da aplicação (se houver)'
          type: string
          nullable: true
      type: object
    ServiceConfig:
      title: 'Configuração de um serviço'
      description: ''
      properties:
        id:
          type: integer
        service_alias:
          type: string
        store_id:
          type: integer
          readOnly: true
          example: '1'
        active:
          type: boolean
        auto_send:
          type: boolean
        params:
          properties:
            origin_zipcode:
              type: string
              example: '14940000'
            api_key:
              type: string
              example: api_key
          type: object
        auth_params:
          type: string
        hash:
          type: string
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    ShippingApi:
      title: 'API de Frete'
      description: 'Representa uma integração com API de frete'
      properties:
        id:
          type: integer
        active:
          type: boolean
        healthy:
          description: 'Status de saúde da integração'
          type: boolean
        name:
          type: string
          example: 'Sua API de Fretes'
        url:
          type: string
          format: uri
          example: 'https://api.sua-api-de-fretes.com.br'
        hmac_key:
          type: string
          format: password
          writeOnly: true
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        headers:
          type: array
          items:
            $ref: '#/components/schemas/ShippingApiHeader'
      type: object
    ShippingApiHeader:
      title: 'Header da API de Frete'
      description: 'Representa um header HTTP para a API de frete'
      properties:
        key:
          description: 'Nome do header HTTP'
          type: string
          example: Authorization
        value:
          description: 'Valor do header HTTP'
          type: string
          example: 'Bearer TOKEN123'
      type: object
    Sku:
      title: 'SKU do catálogo'
      description: ''
      properties:
        id:
          description: 'ID do SKU'
          type: integer
        product_id:
          description: 'ID do produto ao qual o SKU pertence'
          type: integer
        seller_id:
          description: 'ID do vendedor'
          type: integer
        sku:
          description: 'Código do SKU'
          type: string
          example: SKU-TEST-API
        token:
          description: 'Token único do SKU'
          type: string
        erp_id:
          description: 'ID do SKU no ERP'
          type: string
          example: 01-753-Rose
        blocked_sale:
          description: 'Vendas bloqueadas'
          type: boolean
          example: false
        barcode:
          description: 'Código de barras do SKU'
          type: string
          example: barcode-test
        title:
          description: 'Título completo do SKU'
          type: string
          example: 'Produto X - Variação 030303 Amarelo'
        allow_sell_without_customization:
          description: 'Permite vender sem personalização obrigatória'
          type: boolean
          example: true
        price_cost:
          description: 'Preço de custo do SKU'
          type: number
          format: float
        price_sale:
          description: 'Preço de venda do SKU'
          type: number
          format: float
        price_discount:
          description: 'Preço com desconto aplicado'
          type: number
          format: float
        combinations:
          description: 'Combinações de variações associadas ao SKU'
          type: array
          items:
            type: string
        weight:
          description: 'Peso do SKU em kg'
          type: number
          format: float
        height:
          description: 'Altura do SKU em cm'
          type: number
          format: float
        width:
          description: 'Largura do SKU em cm'
          type: number
          format: float
        length:
          description: 'Comprimento do SKU em cm'
          type: number
          format: float
        quantity_managed:
          description: 'Indica se o controle de estoque está habilitado'
          type: boolean
          example: true
        availability:
          description: 'Quantidade disponível em estoque'
          type: integer
        availability_soldout:
          description: 'Quantidade disponível mesmo após esgotado'
          type: integer
        order:
          description: 'Ordem de exibição do SKU para a página de produtos'
          type: integer
      type: object
    SkuAdditionalResponse:
      title: ''
      description: ''
      properties:
        variations:
          description: 'Lista de variações do produto'
          type: array
          items:
            properties:
              name:
                description: 'Nome da variação'
                type: string
              id:
                description: 'ID da variação'
                type: integer
              value:
                description: 'Valor da variação'
                type: string
              value_id:
                description: 'ID do valor da variação'
                type: integer
            type: object
        days_availability_formated:
          description: 'Disponibilidade formatada em dias'
          type: string
        total_in_stock:
          description: 'Quantidade total em estoque'
          type: integer
        stock_status:
          description: 'Status do estoque'
          type: string
          enum:
            - in_stock
            - out_of_stock
            - low_stock
        total_orders:
          description: 'Número total de pedidos realizados'
          type: integer
        image_reference_sku_id:
          description: 'ID do SKU de referência da imagem'
          type: integer
        purchase_url:
          description: 'URL para a compra do produto'
          type: string
          format: url
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        customizations:
          description: 'Personalizações do produto'
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/Customization'
          type: object
      type: object
    SkuPhoto:
      title: 'Imagem de um SKU'
      description: ''
      properties:
        id:
          type: integer
        processed:
          type: boolean
        name:
          type: string
        extension:
          type: string
        order:
          type: integer
        filter_image_url:
          type: string
        small:
          $ref: '#/components/schemas/ImageFormat'
        thumb:
          $ref: '#/components/schemas/ImageFormat'
        medium:
          $ref: '#/components/schemas/ImageFormat'
        large:
          $ref: '#/components/schemas/ImageFormat'
      type: object
    ImageFormat:
      properties:
        width:
          type: integer
          example: 500
        height:
          type: integer
          example: 500
        url:
          type: string
          format: uri
          example: 'https://example.com/image-medium.jpeg'
      type: object
    Stock:
      title: Estoque
      description: ''
      properties:
        id:
          type: integer
        warehouse_id:
          type: integer
        priority:
          type: boolean
        auto_refill:
          type: boolean
        name:
          type: string
        delivery_days:
          type: integer
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        warehouse:
          properties:
            data:
              $ref: '#/components/schemas/Warehouse'
          type: object
      type: object
    StockNotification:
      title: 'Notificação de estoque'
      description: ''
      properties:
        id:
          type: integer
        sku_id:
          description: 'ID do SKU'
          type: integer
        name:
          description: 'Nome da pessoa que será notificada'
          type: string
        email:
          description: 'E-mail da pessoa que será notificada'
          type: string
          format: email
        notified_at:
          type: string
          format: date-time
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    StockReservation:
      title: 'Reserva de estoque'
      description: ''
      properties:
        id:
          type: integer
        order_id:
          type: integer
        sku_id:
          type: integer
        stock_id:
          type: integer
        sku:
          type: string
        sku_name:
          type: string
        order_status:
          type: string
        order_status_name:
          type: string
        order_number:
          type: string
        customer_name:
          type: string
        quantity:
          type: integer
        previous_quantity:
          type: integer
        authorized_at:
          type: string
          format: date-time
        cancelled_at:
          type: string
          format: date-time
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        stock:
          properties:
            data:
              type: object
          type: object
      type: object
    Scripts:
      title: Scripts
      description: ''
      properties:
        id:
          type: integer
        active:
          type: boolean
        name:
          type: string
        page:
          type: string
        content:
          type: string
      type: object
    Transaction:
      title: 'Transações financeiras de um pedido'
      description: 'Tentativa de pagamento processada pela adquirente/gateway para um carrinho ou pedido.'
      properties:
        id:
          description: 'Identificador único da transação.'
          type: integer
        customer_id:
          description: 'ID do cliente que fez o pagamento.'
          type: integer
        payment_id:
          description: 'ID do meio de pagamento usado na transação.'
          type: integer
        affiliation_id:
          description: 'ID da afiliação de pagamento (adquirente/gateway) que processou a transação.'
          type: integer
        marketplace_id:
          description: 'ID do marketplace de origem da transação, quando aplicável.'
          type: integer
        marketplace_account_id:
          description: 'ID da conta do marketplace usada na transação, quando aplicável.'
          type: integer
        authorized:
          description: 'Indica se a transação foi autorizada pela adquirente/gateway.'
          type: boolean
        captured:
          description: 'Indica se a transação foi capturada (pagamento efetivado).'
          type: boolean
        cancelled:
          description: 'Indica se a transação foi cancelada.'
          type: boolean
        can_be_captured:
          description: 'Indica se a transação pode ser capturada: exige transação autorizada, não cancelada, ainda não paga e meio de pagamento diferente de carteira digital e de Pix parcelado.'
          type: boolean
        can_be_cancelled:
          description: 'Indica se a transação pode ser cancelada: exige transação não cancelada e meio de pagamento diferente de carteira digital e de Pix parcelado.'
          type: boolean
        gateway_transaction_id:
          description: 'ID da transação no gateway de pagamento.'
          type: integer
        gateway_order_id:
          description: 'ID do pedido correspondente no gateway de pagamento.'
          type: integer
        gateway_authorization_code:
          description: 'Código de autorização devolvido pela adquirente/gateway.'
          type: string
        gateway_billet_id:
          description: 'ID do boleto no gateway de pagamento, quando o meio de pagamento for boleto.'
          type: integer
        amount:
          description: 'Valor total da transação, em reais.'
          type: number
          format: float
        buyer_amount:
          description: 'Valor total cobrado do comprador, em reais, incluindo os juros do parcelamento.'
          type: number
          format: float
        installment_value:
          description: 'Valor de cada parcela da transação, em reais; zero quando não há parcelamento.'
          type: number
          format: float
        buyer_installment_value:
          description: 'Valor de cada parcela cobrada do comprador, em reais; zero quando não há parcelamento.'
          type: number
          format: float
        installments:
          description: 'Número de parcelas da transação.'
          type: integer
        installment_formated:
          description: 'Parcelamento formatado no padrão `3x de R$ 300,00`, com o número de parcelas e o valor total da transação.'
          type: string
        buyer_installment_formated:
          description: 'Parcelamento formatado no padrão `3x de R$ 300,00`, com o número de parcelas e o valor total cobrado do comprador.'
          type: string
        status:
          description: 'Status da transação (`waiting_payment`, `authorized`, `paid`, `refused`, `cancelled` ou `handling_products`).'
          type: string
        error_message:
          description: 'Mensagem de erro devolvida pela adquirente/gateway quando a transação não é aprovada.'
          type: string
        bank_name:
          description: 'Nome do banco usado no pagamento; preenchido apenas em pagamentos por depósito.'
          type: string
        bank_alias:
          description: 'Alias do banco usado no pagamento, derivado do nome; preenchido apenas em pagamentos por depósito.'
          type: string
        truncated_card:
          description: 'Número parcial do cartão usado no pagamento, sem os dígitos sensíveis.'
          type: string
        holder_name:
          description: 'Nome do titular do cartão ou do meio de pagamento usado na transação.'
          type: string
        holder_document:
          description: 'Documento (CPF/CNPJ) do titular do cartão ou do meio de pagamento usado na transação.'
          type: string
        billet_url:
          description: 'URL do boleto gerado para a transação, quando o meio de pagamento for boleto.'
          type: string
        billet_barcode:
          description: 'Código de barras do boleto gerado para a transação.'
          type: string
        billet_date:
          description: 'Data de vencimento do boleto gerado para a transação.'
          type: string
        billet_our_number:
          description: 'Nosso número do boleto, identificador atribuído pelo banco emissor.'
          type: string
        billet_document_number:
          description: 'Número do documento do boleto, usado pelo banco emissor para identificar a cobrança.'
          type: string
        billet_whatsapp_link:
          description: 'Link do WhatsApp com a mensagem de cobrança do boleto pronta para envio ao cliente.'
          type: string
        antifraud_sale_id:
          description: 'ID da análise da transação no serviço de antifraude.'
          type: integer
        antifraud_status:
          description: 'Status devolvido pelo serviço de antifraude para a transação.'
          type: string
        antifraud_score:
          description: 'Pontuação de risco atribuída pelo serviço de antifraude à transação.'
          type: string
        sent_to_antifraud:
          description: 'Indica se a transação foi enviada para análise de antifraude.'
          type: string
        total_logs:
          description: 'Quantidade de registros de log da transação.'
          type: integer
        error_code:
          description: 'Código do erro devolvido pela adquirente/gateway quando a transação não é aprovada.'
          type: integer
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        capture_date:
          $ref: '#/components/schemas/BaseTimestamp'
        authorized_at:
          $ref: '#/components/schemas/BaseTimestamp'
        captured_at:
          $ref: '#/components/schemas/BaseTimestamp'
        cancelled_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    TransactionAdditionalResponse:
      title: 'Dados adicionais da transação'
      description: 'Dados retornados junto da transação por meio de includes; `payment` e `metadata` vêm por padrão.'
      properties:
        payment:
          description: 'Informações sobre o meio de pagamento'
          properties:
            data:
              description: 'Detalhes do pagamento'
              properties:
                id:
                  description: 'ID do meio de pagamento'
                  type: integer
                alias:
                  description: 'Alias do meio de pagamento'
                  type: string
                name:
                  description: 'Nome do meio de pagamento'
                  type: string
                has_config:
                  description: 'Indica se há configuração disponível'
                  type: boolean
                active_config:
                  description: 'Indica se a configuração está ativa'
                  type: boolean
                is_credit_card:
                  description: 'Indica se é um cartão de crédito'
                  type: boolean
                is_deposit:
                  description: 'Indica se é um pagamento por depósito'
                  type: boolean
                is_billet:
                  description: 'Indica se é um boleto bancário'
                  type: boolean
                is_pix:
                  description: 'Indica se é um pagamento via Pix'
                  type: boolean
                is_pix_in_installments:
                  description: 'Indica se o Pix permite parcelamento'
                  type: boolean
                is_wallet:
                  description: 'Indica se é um pagamento via carteira digital'
                  type: boolean
                icon_url:
                  description: 'URL do ícone do meio de pagamento'
                  type: string
                  format: uri
              type: object
          type: object
        metadata:
          description: 'Lista de metadados'
          type: array
          items:
            properties:
              key:
                description: 'Chave do metadado'
                type: string
                example: discount_highlight
              value:
                description: 'Valor do metadado'
                type: string
                example: pix
            type: object
      type: object
    TransactionLog:
      title: 'Log de transação'
      description: 'Registro de uma ação executada sobre uma transação e do seu resultado.'
      properties:
        id:
          description: 'Identificador único do log.'
          type: integer
        action:
          description: 'Ação executada sobre a transação (`capture` para captura e `cancel` para cancelamento).'
          type: string
        error_code:
          description: 'Código do erro devolvido pelo gateway quando a ação não foi concluída; nulo quando a ação foi bem-sucedida.'
          type: string
        message:
          description: 'Resultado da ação em texto, com o gateway usado e, quando houver, o erro retornado.'
          type: string
        created_at:
          description: 'Data e hora em que o log foi registrado.'
          type: string
          format: date-time
          readOnly: true
        updated_at:
          description: 'Data e hora da última atualização do log.'
          type: string
          format: date-time
          readOnly: true
      type: object
    Upsell:
      title: 'Upsell de produtos'
      description: ''
      properties:
        id:
          type: integer
        suggested_product_id:
          type: integer
        active:
          type: boolean
        context:
          type: string
        product_price:
          type: number
          format: float
        product_quantity:
          type: integer
        name:
          type: string
        description:
          type: string
        email_subject:
          type: string
        sms:
          type: string
        views:
          type: integer
      type: object
    User:
      title: Usuário
      description: 'Informações de um usuário.'
      properties:
        id:
          type: integer
        active:
          type: boolean
        name:
          type: string
        social_name:
          type: string
          nullable: true
        email:
          type: string
          format: email
        temporary_email:
          type: string
          format: email
          nullable: true
        is_owner:
          type: boolean
        agree:
          type: boolean
        merchant_owner:
          type: boolean
        super_user:
          type: boolean
        last_login_at:
          type: string
          format: date-time
        avatar_url:
          type: string
          format: uri
        allow_notifications:
          type: boolean
        type:
          type: string
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at_timestamp:
          type: integer
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
        confirmed_at:
          type: string
          format: date-time
        mfa_enabled:
          type: boolean
        cpf:
          type: string
        birthday:
          type: string
          format: date
        phone:
          type: string
        address_street:
          type: string
          nullable: true
        address_number:
          type: string
          nullable: true
        address_neighborhood:
          type: string
          nullable: true
        address_complement:
          type: string
          nullable: true
        address_city:
          type: string
          nullable: true
        address_state:
          type: string
          nullable: true
        address_zipcode:
          type: string
          nullable: true
        merchants:
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/Merchant'
          type: object
        group:
          properties:
            data:
              type: array
              items: {  }
          type: object
        notification_types:
          properties:
            data:
              type: array
              items: {  }
          type: object
        lead_data:
          properties:
            data:
              type: array
              items: {  }
          type: object
      type: object
    UserGroup:
      title: 'Grupo de usuários'
      description: 'Agrupamento de usuários para gerenciar permissões em massa'
      properties:
        id:
          type: integer
        name:
          description: 'Nome do grupo de usuários'
          type: string
          example: Administradores
        default:
          type: boolean
      type: object
    UserGroupAdditionalResponse:
      properties:
        permissions:
          properties:
            data:
              $ref: '#/components/schemas/UserPermission'
          type: object
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    UserInvite:
      title: ''
      description: ''
      properties:
        id:
          type: integer
        group_id:
          description: 'ID do grupo ao qual o usuário será adicionado'
          type: integer
        accepted:
          type: boolean
          readOnly: true
        expired:
          type: boolean
          readOnly: true
        email:
          description: 'E-mail do usuário do convite'
          type: string
        accepted_at:
          type: string
          format: date-time
          readOnly: true
      type: object
    UserInviteAdditionalResponse:
      properties:
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    UserPermission:
      title: ''
      description: ''
      properties:
        id:
          type: integer
        name:
          type: string
        code:
          type: integer
        translated_name:
          type: string
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    WalletTransaction:
      description: 'Representa uma transacao de cashback na carteira do cliente.'
      properties:
        id:
          type: integer
          example: 10001
        transaction_type:
          description: 'Tipo da movimentacao da carteira.'
          type: string
          enum:
            - credit
            - debit
          example: credit
        amount:
          type: number
          format: float
          example: 9.9
        used_amount:
          type: number
          format: float
          example: 0
        accumulated_amount:
          type: number
          format: float
          example: 9.9
        status:
          description: 'Status da transacao.'
          type: string
          example: approved
        cancelled_at:
          type: string
          format: date-time
          example: null
          nullable: true
        description:
          type: string
          example: null
          nullable: true
        expires_at:
          type: string
          format: date
          example: '2026-01-31'
          nullable: true
        expired:
          description: '1 quando expirado, 0 quando disponivel.'
          type: integer
          example: 1
        customer:
          required:
            - id
            - name
            - email
            - phone
          properties:
            id:
              type: integer
              example: 200001
            name:
              type: string
              example: 'Cliente Exemplo'
            email:
              type: string
              format: email
              example: cliente@example.com
            phone:
              type: string
              example: '5500000000000'
          type: object
        order:
          required:
            - id
            - number
          properties:
            id:
              type: integer
              example: 300001
            number:
              type: integer
              format: int64
              example: 123456789012
          type: object
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Warehouse:
      title: Armazém
      description: ''
      properties:
        id:
          type: integer
        country_code:
          type: string
        name:
          type: string
        zipcode:
          type: string
        street:
          type: string
        number:
          type: string
        complement:
          type: string
        neighborhood:
          type: string
        city:
          type: string
        state:
          type: string
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    Webhook:
      title: Webhook
      description: 'Representa um webhook'
      properties:
        id:
          type: integer
        active:
          type: boolean
        name:
          description: 'Nome do webhook'
          type: string
          example: 'Webhook de integração com CRM'
        url:
          description: 'URL para onde os eventos serão enviados'
          type: string
          format: uri
          example: 'https://suaurl.com/api/webhooks'
        secret_key:
          type: string
      type: object
    WebhookAdditionalResponse:
      properties:
        events:
          properties:
            data:
              type: array
              items:
                properties:
                  name: { type: string }
                  description: { type: string }
                type: object
          type: object
        products:
          properties:
            data:
              type: array
              items:
                type: object
                allOf:
                  - { $ref: '#/components/schemas/ProductWithRelations' }
          type: object
        disabled_at:
          $ref: '#/components/schemas/BaseTimestamp'
        created_at:
          $ref: '#/components/schemas/BaseTimestamp'
        updated_at:
          $ref: '#/components/schemas/BaseTimestamp'
      type: object
    WebhookEvent:
      title: 'Evento do webhook'
      description: 'Representa um evento do webhook'
      properties:
        name:
          description: "\n *     order.created: Pedido criado\n *     order.paid: Pedido aprovado\n *     order.status.updated: O status de um pedido foi atualizado\n *     order.invoice.created: Nota fiscal de um pedido foi criada\n *     order.invoice.updated: Nota fiscal de um pedido foi atualizada\n *     transaction.payment.refused: O pagamento de uma transação foi negado\n *     cart.reminder: Notificação de carrinho abandonado\n *     customer.created: Cliente criado\n *     customer.address.created: Endereço do cliente criado\n *     product.created: Produto criado\n *     product.updated: Produto atualizado\n *     product.deleted: Produto excluído\n *     product.inventory.updated: Estoque de produto atualizado\n *     "
          type: string
          enum:
            - order.created
            - order.paid
            - order.status.updated
            - order.invoice.created
            - order.invoice.updated
            - transaction.payment.refused
            - cart.reminder
            - customer.created
            - customer.address.created
            - product.created
            - product.updated
            - product.deleted
            - product.inventory.updated
        description:
          description: 'Descrição do evento do webhook'
          type: string
          example: 'Pedido criado'
      type: object
    SimplePaginatorWithMeta:
      title: SimplePaginatorWithMeta
      description: 'Representa uma paginação com meta'
      properties:
        meta:
          properties:
            pagination:
              properties:
                total:
                  type: integer
                  example: '10'
                count:
                  type: integer
                  example: '30'
                per_page:
                  type: integer
                  example: '10'
                current_page:
                  type: integer
                  example: '1'
                total_pages:
                  type: integer
                  example: '3'
                links:
                  properties: { previous: { type: string, example: '' }, next: { type: string, example: '' } }
                  type: object
              type: object
          type: object
      type: object
    BaseTimestamp:
      properties:
        date:
          description: 'Data e hora no formato YYYY-MM-DD H:MM:SS.'
          type: string
          example: '2000-08-17 10:24:24'
        timezone_type:
          description: 'Número de representação do timezone.'
          type: integer
          example: 3
        timezone:
          description: 'Fuso horário associado.'
          type: string
          example: America/Sao_Paulo
      type: object
    SearchTrait:
      title: 'Filtros de Produtos'
      properties:
        active:
          description: 'Status do produto (ativa=1 ou inativa=0).'
          type: integer
          example: 1
        brand_id:
          description: 'IDs das marcas associadas aos produtos.'
          type: array
          items:
            type: integer
          example:
            - 3
            - 5
        category_id:
          description: 'IDs das categorias associadas aos produtos.'
          type: array
          items:
            type: integer
          example:
            - 8
            - 12
        flag_id:
          description: 'IDs dos selos associados aos produtos.'
          type: array
          items:
            type: integer
          example:
            - 2
            - 4
        collection_id:
          description: 'IDs das coleções associadas aos produtos.'
          type: array
          items:
            type: integer
          example:
            - 1
            - 3
        not_collection_id:
          description: 'IDs das coleções a serem excluídas da busca.'
          type: array
          items:
            type: integer
          example:
            - 1
            - 3
        priority:
          description: 'Filtra produtos pela prioridade definida.'
          type: array
          items:
            type: integer
            enum:
              - 1
              - 2
              - 3
          example:
            - 1
        q:
          description: 'Termo de busca para pesquisa personalizada.'
          type: string
          example: nome-do-produto
        quality:
          description: 'Filtro de qualidade e completude do cadastro do produto.'
          type: array
          items:
            type: string
            enum:
              - with_description
              - without_description
              - with_seo_title
              - without_seo_title
              - with_seo_description
              - without_seo_description
              - with_seo_keywords
              - without_seo_keywords
              - with_images
              - without_images
              - with_skus
              - without_skus
              - with_barcode
              - without_barcode
              - with_dimensions
              - without_dimensions
              - with_weight
              - without_weight
              - with_filters
              - without_filters
              - with_price
              - without_price
              - with_erp_code
              - without_erp_code
              - with_categories
              - without_categories
              - with_no_stock
              - with_one_stock
          example:
            - with_images
        orderBy:
          description: 'Ordenação especial.'
          type: string
          enum:
            - total_in_stock
          example: total_in_stock
      type: object
  responses:
    '404':
      description: 'Customização não encontrada'
    ResourceNotFoundError:
      description: 'Quando o recurso especificado não existe'
      content:
        application/json:
          schema:
            properties:
              message:
                type: string
                example: 'Resource not found.'
              status_code:
                type: number
                example: 404
            type: object
  parameters:
    ProductCriteria:
      name: filters
      in: query
      style: form
      explode: false
      schema:
        allOf:
          -
            $ref: '#/components/schemas/ProductCriteria'
          -
            $ref: '#/components/schemas/SearchTrait'
    CartCriteria:
      name: filters
      in: query
      description: 'Filtros de carrinhos abandonados'
      style: form
      explode: false
      schema:
        $ref: '#/components/schemas/CartCriteria'
    CustomerCriteria:
      name: filters
      in: query
      description: 'Filtros por campanha, origem, datas e status'
      style: form
      explode: false
      schema:
        $ref: '#/components/schemas/CustomerCriteria'
    OrderCriteria:
      name: filters
      in: query
      description: 'Filtros de pedidos'
      style: form
      explode: false
      schema:
        $ref: '#/components/schemas/OrderCriteria'
    FreebieCriteria:
      name: filters
      in: query
      description: 'Filtros de regras promocionais'
      style: form
      explode: false
      schema:
        $ref: '#/components/schemas/FreebieCriteria'
    OrderBumpCriteria:
      name: filters
      in: query
      description: 'Filtros de OrderBump'
      style: form
      explode: false
      schema:
        $ref: '#/components/schemas/OrderBumpCriteria'
    PromocodeCriteria:
      name: filters
      in: query
      description: 'Filtros de Cupons'
      style: form
      explode: false
      schema:
        $ref: '#/components/schemas/PromocodeCriteria'
    OrderSearchCriteria:
      name: filters
      in: query
      description: 'Filtros de pedidos'
      style: form
      explode: false
      schema:
        $ref: '#/components/schemas/OrderSearchCriteria'
    ProductSearchBrandId:
      name: 'brand_id[]'
      in: query
      description: 'IDs das marcas associadas aos produtos.'
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          type: integer
      example:
        - 3
        - 5
    ProductSearchCategoryId:
      name: 'category_id[]'
      in: query
      description: 'IDs das categorias associadas aos produtos.'
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          type: integer
      example:
        - 8
        - 12
    ProductSearchFlagId:
      name: 'flag_id[]'
      in: query
      description: 'IDs dos selos associados aos produtos.'
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          type: integer
      example:
        - 2
        - 4
    ProductSearchCollectionId:
      name: 'collection_id[]'
      in: query
      description: 'IDs das coleções associadas aos produtos.'
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          type: integer
      example:
        - 1
        - 3
    ProductSearchNotCollectionId:
      name: 'not_collection_id[]'
      in: query
      description: 'IDs das coleções a serem excluídas da busca.'
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          type: integer
      example:
        - 1
        - 3
    ProductSearchPriority:
      name: 'priority[]'
      in: query
      description: 'Filtra produtos pela prioridade definida.'
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          type: integer
          enum:
            - 1
            - 2
            - 3
      example:
        - 1
    ProductSearchQ:
      name: q
      in: query
      description: 'Termo de busca para pesquisa personalizada.'
      required: false
      schema:
        type: string
      example: nome-do-produto
    ProductSearchQuality:
      name: 'quality[]'
      in: query
      description: 'Filtro de qualidade e completude do cadastro do produto.'
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          type: string
          enum:
            - with_description
            - without_description
            - with_seo_title
            - without_seo_title
            - with_seo_description
            - without_seo_description
            - with_seo_keywords
            - without_seo_keywords
            - with_images
            - without_images
            - with_skus
            - without_skus
            - with_barcode
            - without_barcode
            - with_dimensions
            - without_dimensions
            - with_weight
            - without_weight
            - with_filters
            - without_filters
            - with_price
            - without_price
            - with_erp_code
            - without_erp_code
            - with_categories
            - without_categories
            - with_no_stock
            - with_one_stock
      example:
        - with_images
    ProductSearchActive:
      name: active
      in: query
      description: 'Filtra por status ativo.'
      required: false
      schema:
        type: boolean
      example: true
    ProductSearchOrderBy:
      name: orderBy
      in: query
      description: 'Ordenação especial.'
      required: false
      schema:
        type: string
        enum:
          - total_in_stock
      example: total_in_stock
  securitySchemes:
    ApiToken:
      type: apiKey
      name: User-Token
      in: header
    ApiSecretKey:
      type: apiKey
      name: User-Secret-Key
      in: header
security:
  -
    ApiToken: []
    ApiSecretKey: []
tags:
  -
    name: 'Catálogo - Atualização em massa'
    x-folder: catalogo/atualizacao-em-massa
  -
    name: 'Catálogo - Avaliações de produtos'
    x-folder: catalogo/produtos/avaliacoes-de-produtos
  -
    name: 'Catálogo - Categorias'
    x-folder: catalogo/categorias
  -
    name: 'Catálogo - Coleções'
    x-folder: catalogo/colecoes
  -
    name: 'Catálogo - Comentários de produtos'
    x-folder: catalogo/produtos/comentarios-de-produtos
  -
    name: 'Catálogo - Customizações'
    x-folder: catalogo/customizacoes
  -
    name: 'Catálogo - Estoques de SKU'
    x-folder: catalogo/skus/estoques-de-sku
  -
    name: 'Catálogo - Feeds'
    x-folder: catalogo/feeds
  -
    name: 'Catálogo - Filtros'
    x-folder: catalogo/filtros
  -
    name: 'Catálogo - Grupos'
    x-folder: catalogo/grupos
  -
    name: 'Catálogo - Imagens'
    x-folder: catalogo/imagens
  -
    name: 'Catálogo - Looks'
    x-folder: catalogo/looks
  -
    name: 'Catálogo - Kits'
    x-folder: catalogo/kits
  -
    name: 'Catálogo - Marcas'
    x-folder: catalogo/marcas
  -
    name: 'Catálogo - Notificações de estoque'
    x-folder: catalogo/notificacoes-de-estoque
  -
    name: 'Catálogo - Produtos'
    x-folder: catalogo/produtos
  -
    name: 'Catálogo - Produtos relacionados'
    x-folder: catalogo/produtos/produtos-relacionados
  -
    name: 'Catálogo - Selos'
    x-folder: catalogo/selos
  -
    name: 'Catálogo - Sincronizar estoques'
    x-folder: catalogo/skus/sincronizar-estoques
  -
    name: 'Catálogo - SKUs'
    x-folder: catalogo/skus
  -
    name: 'Catálogo - Valores de filtros'
    x-folder: catalogo/filtros/valores-de-filtros
  -
    name: 'Catálogo - Valores de variações'
    x-folder: catalogo/variacoes/valores-de-variacoes
  -
    name: 'Catálogo - Variações'
    x-folder: catalogo/variacoes
  -
    name: 'Público - Catálogo'
    x-folder: /publico/catalogo
  -
    name: 'Público - Busca'
    x-folder: /publico/busca
  -
    name: 'Público - Loja'
    x-folder: /publico/loja
  -
    name: 'Checkout - Bancos'
    x-folder: checkout/bancos
  -
    name: 'Checkout - Links de Pagamento'
    x-folder: checkout/links-de-pagamento
  -
    name: 'Checkout - Carrinhos abandonados'
    x-folder: checkout/carrinhos-abandonados
  -
    name: 'Checkout - Configurações de pagamentos'
    x-folder: checkout/configuracoes-de-pagamentos
  -
    name: 'Checkout - Formas de pagamentos'
    x-folder: checkout/formas-de-pagamentos
  -
    name: 'Checkout - Gateways de pagamento'
    x-folder: checkout/gateways-de-pagamento
  -
    name: 'Checkout - Parcelamento'
    x-folder: checkout/parcelamento
  -
    name: 'Checkout - Status de pedidos'
    x-folder: checkout/status-de-pedidos
  -
    name: 'Checkout - Transações'
    x-folder: checkout/transacoes
  -
    name: 'Clientes - Cliente'
    x-folder: clientes/cliente
  -
    name: 'Clientes - Clusters'
    description: 'Clusters são grupos de clientes com condições comerciais flexíveis, como preço de produto, frete e forma de entrega'
    x-folder: clientes/clusters
  -
    name: 'Clientes - Endereços'
    x-folder: clientes/enderecos
  -
    name: 'Clientes - Regras de frete dos clusters'
    x-folder: clientes/clusters/regras-de-frete-dos-clusters
  -
    name: 'Configurações - Carrinhos abandonados'
    x-folder: configuracoes/carrinhos-abandonados
  -
    name: 'Configurações - Checkout'
    x-folder: configuracoes/checkout
  -
    name: 'Configurações - Credenciais da loja'
    x-folder: configuracoes/credenciais-da-loja
  -
    name: 'Configurações - Dados da loja'
    x-folder: configuracoes/dados-da-loja
  -
    name: 'Configurações - Fotos'
    x-folder: configuracoes/fotos
  -
    name: 'Configurações - Integrações'
    x-folder: configuracoes/integracoes
  -
    name: 'Configurações - IPs bloqueados'
    x-folder: configuracoes/ips-bloqueados
  -
    name: 'Configurações - Overview'
    x-folder: configuracoes/overview
  -
    name: 'Conteúdo - Páginas'
    x-folder: conteudo/paginas
  -
    name: 'Conteúdo - Redirecionamentos'
    x-folder: conteudo/redirecionamentos
  -
    name: Descontos
    x-folder: descontos
  -
    name: Leads
    x-folder: leads
  -
    name: 'Logística - Armazéns'
    x-folder: logistica/armazens
  -
    name: 'Logística - Simular frete'
    x-folder: logistica/simular-frete
  -
    name: 'Logística - CEP'
    x-folder: logistica/cep
  -
    name: 'Logística - Embalagens'
    x-folder: logistica/embalagens
  -
    name: 'Logística - Estoques'
    description: 'O lojista pode ter um cadastro de múltiplos estoques onde ele pode associar posteriormente os SKUS com suas respectivas quantidades. Um exemplo prático é permitir que ele consiga trabalhar com estoques de fornecedores externos com diferentes prazos de entrega.'
    x-folder: logistica/estoques
  -
    name: 'Logística - Países'
    x-folder: logistica/paises
  -
    name: 'Logística - Preços de frete'
    x-folder: logistica/precos-de-frete
  -
    name: 'Logística - Reservas de estoque'
    x-folder: logistica/reservas-de-estoque
  -
    name: 'Logística - Transportadoras'
    x-folder: logistica/transportadoras
  -
    name: 'Logística - API de Frete'
    x-folder: logistica/api-de-frete
  -
    name: Marketing
    x-folder: marketing
  -
    name: 'Marketing - Brindes'
    x-folder: marketing/brindes
  -
    name: 'Pedidos - Comentários'
    description: 'Endpoints de comentários de pedidos'
    x-folder: pedidos/comentarios
  -
    name: 'Pedidos - Emails'
    description: 'Endpoints de e-mails de pedidos'
    x-folder: pedidos/emails
  -
    name: 'Pedidos - Endereços'
    description: 'Endpoints de endereços de pedidos'
    x-folder: pedidos/enderecos
  -
    name: 'Pedidos - Etiquetas'
    description: 'Endpoints de etiquetas de pedidos'
    x-folder: pedidos/etiquetas
  -
    name: 'Pedidos - Notas fiscais'
    description: 'Endpoints de notas fiscais de pedidos'
    x-folder: pedidos/notas-fiscais
  -
    name: 'Pedidos - Rastreamento'
    description: 'Endpoints de emails de pedidos'
    x-folder: pedidos/rastreamento
  -
    name: 'Pedidos - Pedido'
    description: 'Endpoints de pedidos'
    x-folder: pedidos/pedido
  -
    name: 'Promoções - Combos'
    x-folder: promocoes/combos
  -
    name: 'Promoções - Desconto progressivo'
    x-folder: promocoes/desconto-progressivo
  -
    name: 'Promoções - Frete grátis'
    x-folder: promocoes/frete-gratis
  -
    name: 'Promoções - Order Bump'
    x-folder: promocoes/orderbump
  -
    name: 'Promoções - Upsells'
    x-folder: promocoes/upsells
  -
    name: 'Promoções - Carteira'
    x-folder: promocoes/carteira
  -
    name: Sistema
    description: 'Endpoints informativos do sistema'
    x-folder: sistema
  -
    name: 'Busca - Global'
    x-folder: busca/global
  -
    name: 'Busca - Pedidos'
    x-folder: busca/pedidos
  -
    name: 'Busca - Produtos'
    x-folder: busca/produtos
  -
    name: 'Busca - Clientes'
    x-folder: busca/clientes
  -
    name: 'Busca - Leads'
    x-folder: busca/leads
  -
    name: 'Busca - Carrinhos'
    x-folder: busca/carrinhos
  -
    name: Usuários
    x-folder: usuarios
  -
    name: 'Usuários - Convites'
    x-folder: usuarios/convites
  -
    name: 'Usuários - Grupos'
    x-folder: usuarios/grupos
  -
    name: 'Usuários - Permissões'
    x-folder: usuarios/permissoes
  -
    name: Webhooks
    x-folder: webhooks
  -
    name: 'Loja Virtual - Scripts'
    x-folder: loja-virtual/scripts
  -
    name: 'Modulo - Recurso'
    description: 'Modulo - Recurso'
  -
    name: 'Marketplaces - Atributos'
    description: 'Marketplaces - Atributos'
  -
    name: 'Marketplaces - Anúncios'
    description: 'Marketplaces - Anúncios'
  -
    name: 'Links de Pagamento'
    description: 'Links de Pagamento'
  -
    name: 'Checkout - Contas bancárias'
    description: 'Checkout - Contas bancárias'
  -
    name: 'Checkout - Vendedores'
    description: 'Checkout - Vendedores'
  -
    name: 'Configurações - E-mails'
    description: 'Configurações - E-mails'
  -
    name: 'Logística - Frete Público'
    description: 'Logística - Frete Público'
  -
    name: 'Marketplaces - Categorias'
    description: 'Marketplaces - Categorias'
  -
    name: 'Marketplaces - Contas'
    description: 'Marketplaces - Contas'
  -
    name: 'Marketplaces - Lista de erros'
    description: 'Marketplaces - Lista de erros'
  -
    name: Marketplaces
    description: Marketplaces
  -
    name: 'Métricas - Cashback'
    description: 'Métricas - Cashback'
  -
    name: 'Promoções - Cashbacks'
    description: 'Promoções - Cashbacks'
  -
    name: 'Promoções - Cashback'
    description: 'Promoções - Cashback'
  -
    name: 'Promoções - Cupons de desconto'
    description: 'Promoções - Cupons de desconto'
  -
    name: 'Promoções - Produtos'
    description: 'Promoções - Produtos'
  -
    name: Filas
    description: Filas
