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

# Listar produtos

> Lista produtos da loja com paginação e filtros. Sem `status`, omite produtos `INACTIVE`. A lista não inclui variantes — use a consulta por id.



## OpenAPI

````yaml /openapi.json get /api/v1/products
openapi: 3.0.3
info:
  title: Corvex API
  version: 1.0.0
  description: >-
    API pública da Corvex para gerenciar catálogo, pedidos, checkout marketing,
    webhooks, clientes e leads. Autenticação exclusiva por API Key
    (`Authorization: Bearer cvx_live_...`).
servers:
  - url: https://apiv3.usecorvex.com.br
    description: Produção
  - url: http://localhost:3333
    description: Desenvolvimento local
security:
  - bearerAuth: []
tags:
  - name: Checkout externo
    description: >-
      Criar link de pagamento a partir de um carrinho no seu site. Autenticação
      com `x-api-key` do painel (não é a API v1 `cvx_live_...`).
  - name: Produtos
    description: >-
      Catálogo da loja. Variantes aparecem só na consulta por id, em modo
      leitura.
  - name: Coleções
    description: Categorias da loja. Use para agrupar produtos na vitrine.
  - name: Kits
    description: Pacotes de produtos vendidos juntos.
  - name: Pedidos
    description: Pedidos da loja. Criar pedido continua no checkout, não nesta API.
  - name: Rastreio
    description: Envios e códigos de rastreio.
  - name: Carrinhos abandonados
    description: Checkouts iniciados e não concluídos.
  - name: Clientes
    description: Compradores agrupados por documento.
  - name: Leads
    description: Contatos capturados na loja virtual.
  - name: Order bumps
    description: Ofertas extras no checkout.
  - name: Brindes
    description: Brindes liberados por regras de carrinho.
  - name: Upsell one-click
    description: Oferta pós-compra com um clique.
  - name: Cupons
    description: 'Cupons de desconto. Não há exclusão: altere o status.'
  - name: Faixas de desconto
    description: Desconto progressivo por valor ou quantidade.
  - name: Desconto por pagamento
    description: Percentual por PIX, cartão ou boleto. Um desconto por método.
  - name: Webhooks
    description: >-
      URLs chamadas quando eventos da loja acontecem. O secret nunca é
      devolvido.
  - name: Automações
    description: >-
      Fluxos, templates de mensagem e metatags. Automações novas nascem
      desativadas (`active: false`).
paths:
  /api/v1/products:
    get:
      tags:
        - Produtos
      summary: Listar produtos
      description: >-
        Lista produtos da loja com paginação e filtros. Sem `status`, omite
        produtos `INACTIVE`. A lista não inclui variantes — use a consulta por
        id.
      operationId: listProducts
      parameters:
        - $ref: '#/components/parameters/StoreId'
        - name: page
          in: query
          schema:
            type: integer
            minimum: 1
            default: 1
          description: Página (a partir de 1).
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
          description: Itens por página. Máximo 100.
        - name: status
          in: query
          schema:
            type: string
            enum:
              - DRAFT
              - ACTIVE
              - PUBLISHED
              - INACTIVE
              - all
          description: Filtro de status. Use `all` para incluir inativos.
        - name: name
          in: query
          schema:
            type: string
            minLength: 1
            maxLength: 100
          description: Nome contém o texto (sem diferenciar maiúsculas).
        - name: sku
          in: query
          schema:
            type: string
            minLength: 1
            maxLength: 100
          description: SKU do produto ou de uma variante.
        - name: minPrice
          in: query
          schema:
            type: number
            minimum: 0
          description: Preço mínimo.
        - name: maxPrice
          in: query
          schema:
            type: number
            minimum: 0
          description: Preço máximo.
        - name: updatedSince
          in: query
          schema:
            type: string
            format: date-time
          description: Só produtos atualizados a partir deste instante (ISO 8601 com fuso).
      responses:
        '200':
          description: Lista paginada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductListResponse'
              example:
                success: true
                data:
                  products:
                    - id: 22222222-2222-4222-8222-222222222222
                      storeId: 11111111-1111-4111-8111-111111111111
                      name: Camiseta Preta
                      slug: camiseta-preta
                      type: PHYSICAL
                      status: PUBLISHED
                      price: 99.9
                      discountedPrice: 79.9
                      costPrice: 40
                      currency: BRL
                      media:
                        images:
                          - https://cdn.example.com/camiseta-preta.png
                        videos: []
                        documents: []
                      stock: 10
                      sku: CAM-PRETA
                      barcode: null
                      description: Camiseta de algodão.
                      shortDescription: null
                      logistics:
                        height: 2
                        width: 20
                        length: 30
                        weight: 0.2
                      featured: false
                      createdAt: '2026-09-01T12:00:00.000Z'
                      updatedAt: '2026-09-10T15:30:00.000Z'
                  pagination:
                    page: 1
                    limit: 20
                    total: 1
                    totalPages: 1
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-codeSamples:
        - lang: bash
          label: cURL
          source: >-
            curl
            "https://apiv3.usecorvex.com.br/api/v1/products?page=1&limit=20&status=PUBLISHED"
            \
              -H "Authorization: Bearer cvx_live_YOUR_API_KEY" \
              -H "X-Store-Id: 11111111-1111-4111-8111-111111111111"
        - lang: javascript
          label: Node.js
          source: |-
            const res = await fetch(
              'https://apiv3.usecorvex.com.br/api/v1/products?page=1&limit=20',
              { headers: {
                Authorization: 'Bearer cvx_live_YOUR_API_KEY',
                'X-Store-Id': '11111111-1111-4111-8111-111111111111',
              } }
            );
            const body = await res.json();
components:
  parameters:
    StoreId:
      name: X-Store-Id
      in: header
      required: true
      schema:
        type: string
        format: uuid
      description: UUID da loja. A chave precisa ter esta loja autorizada.
      example: 11111111-1111-4111-8111-111111111111
  schemas:
    ProductListResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
        data:
          type: object
          properties:
            products:
              type: array
              items:
                $ref: '#/components/schemas/Product'
            pagination:
              $ref: '#/components/schemas/Pagination'
    Product:
      type: object
      properties:
        id:
          type: string
          format: uuid
        storeId:
          type: string
          format: uuid
        name:
          type: string
        slug:
          type: string
        type:
          $ref: '#/components/schemas/ProductType'
        status:
          $ref: '#/components/schemas/ProductStatus'
        price:
          type: number
        discountedPrice:
          type: number
          nullable: true
          description: >-
            Preço promocional. Sempre menor que `price`. Use `null` se não
            houver desconto.
        costPrice:
          type: number
          nullable: true
        currency:
          type: string
          example: BRL
        media:
          $ref: '#/components/schemas/Media'
        stock:
          type: integer
        sku:
          type: string
          nullable: true
        barcode:
          type: string
          nullable: true
        description:
          type: string
        shortDescription:
          type: string
          nullable: true
        logistics:
          allOf:
            - $ref: '#/components/schemas/Logistics'
          nullable: true
        featured:
          type: boolean
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        variants:
          type: array
          items:
            $ref: '#/components/schemas/VariantSummary'
          description: Presente só na consulta por id.
    Pagination:
      type: object
      properties:
        page:
          type: integer
        limit:
          type: integer
        total:
          type: integer
        totalPages:
          type: integer
    ErrorBody:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            message:
              type: string
            code:
              type: string
            details: {}
        meta:
          type: object
          properties:
            timestamp:
              type: string
              format: date-time
            status:
              type: integer
    ProductType:
      type: string
      enum:
        - PHYSICAL
        - DIGITAL
    ProductStatus:
      type: string
      enum:
        - DRAFT
        - ACTIVE
        - PUBLISHED
        - INACTIVE
    Media:
      type: object
      required:
        - images
      description: Mídia do produto. A primeira URL de `images` vira a imagem principal.
      properties:
        images:
          type: array
          minItems: 1
          items:
            type: string
            format: uri
          description: URLs das imagens. A primeira é a capa.
        videos:
          type: array
          items:
            type: string
            format: uri
        documents:
          type: array
          items:
            type: string
            format: uri
    Logistics:
      type: object
      required:
        - height
        - width
        - length
        - weight
      properties:
        height:
          type: number
          minimum: 0.0001
          maximum: 1000
          description: Altura em cm.
        width:
          type: number
          minimum: 0.0001
          maximum: 1000
          description: Largura em cm.
        length:
          type: number
          minimum: 0.0001
          maximum: 1000
          description: Comprimento em cm.
        weight:
          type: number
          minimum: 0.0001
          maximum: 1000
          description: Peso em kg.
    VariantSummary:
      type: object
      properties:
        id:
          type: string
          format: uuid
        title:
          type: string
        sku:
          type: string
          nullable: true
        price:
          type: number
        stock:
          type: integer
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
  responses:
    ValidationError:
      description: Header `X-Store-Id`, query ou body inválidos.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            success: false
            error:
              message: X-Store-Id deve ser um UUID válido
              code: VALIDATION_ERROR
            meta:
              timestamp: '2026-09-24T14:00:00.000Z'
              status: 400
    Unauthorized:
      description: API Key ausente, inválida, expirada ou revogada.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            success: false
            error:
              message: >-
                Esta rota exige uma API Key. Use Authorization: Bearer
                cvx_live_...
              code: AUTH_API_KEY_REQUIRED
            meta:
              timestamp: '2026-09-24T14:00:00.000Z'
              status: 401
    Forbidden:
      description: >-
        Falta o escopo desta operação (`AUTH_SCOPE_DENIED`) ou a loja não está
        autorizada na chave (`AUTH_STORE_ACCESS_DENIED`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
          example:
            success: false
            error:
              message: Sua API Key não tem o escopo necessário para esta operação.
              code: AUTH_SCOPE_DENIED
            meta:
              timestamp: '2026-09-24T14:00:00.000Z'
              status: 403
    RateLimited:
      description: Muitas requisições. Respeite Retry-After.
      headers:
        Retry-After:
          schema:
            type: integer
          description: Segundos até poder tentar de novo.
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                example: false
              message:
                type: string
              error:
                type: string
                example: RATE_LIMITED
              retryAfter:
                type: integer
          example:
            success: false
            message: Muitas requisições. Tente novamente em instantes.
            error: RATE_LIMITED
            retryAfter: 12
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        API Key no formato `cvx_live_...`, criada no painel Corvex. Não use JWT
        de sessão nem `x-api-key`.

````