---
title: "List business products"
method: GET
path: "/v3/products"
tags: ["Business Products"]
---

# List business products

`GET /v3/products`

Requires the `product:list` scope. Retrieves a paginated list of products with optional filtering. The data is sorted by id in descending order and cannot be changed. Uses cursor-based pagination with default page size of 25 and maximum of 25.

## Query parameters

- `page_size` integer
- `next_cursor` string
- `previous_cursor` string
- `search` string
- `is_inventory` boolean
- `is_product_sharing` boolean
- `warehouse_id` integer
- `qty_type` 'available_qty'
- `store_id` string
- `is_checked` boolean
- `is_owned` boolean
- `item_type` 'physical' | 'digital' | 'course' | 'license' | 'subscription' — Type of the product item
- `label` string
- `pricing_type` 'one_time' | 'recurring'

## Response `200`

Products list

- ListProductsResponseBody — Paginated list payload for v3.
  - `data` ProductList[], required
    - `affiliate_commission_rate` string — Affiliate commission rate (%)
    - `affiliate_pro_commission_rate` string — Affiliate pro commission rate (%)
    - `business` object
      - `account_holder` string — Name of the account holder
      - `email` string, email — Email address of the business
      - `id` integer — Business ID
      - `is_banned` boolean — Is the business banned?
      - `logo` string, uri — URL to the business logo
      - `unique_id` string — Unique identifier for the business
      - `username` string — Username of the business
    - `created_at` string, date-time — Timestamp when the product was created
    - `created_by` object
      - `aff_code` string — Affiliate code of the user
      - `avatar` string, uri — URL to user avatar
      - `email` string, email — User email
      - `fullname` string — User full name
      - `id` integer — User ID
      - `phone` string — User phone number
    - `custom_domains` object[] — List of custom domains from owned stores (where store.business_id == product.business_id)
      - `business_id` integer — Business ID that owns the custom domain
      - `full_url` string — Full URL of the custom domain
      - `id` integer — Unique identifier of the custom domain
    - `description` string — Detailed description of the product
    - `display` string — Display name of the product
    - `id` integer — Product primary key
    - `images` string[] — List of image URLs associated with the product
    - `is_affiliate_auto_accept` boolean — Indicates if affiliate requests are auto-approved
    - `is_affiliate_enabled` boolean — Indicates if the product is enabled for affiliate program
    - `is_affiliate_pro_enabled` boolean — Indicates if the product is enabled for affiliate pro program
    - `is_inventory` boolean — Indicates if the product is tracked in inventory
    - `is_multiple` boolean — Indicates if the product has multiple variants
    - `is_product_sharing` boolean — Indicates if the product is shared across businesses
    - `item_type` 'physical' | 'digital' | 'course' | 'license' | 'subscription' — Type of the product item
    - `item_type_name` string — Human-readable name of the product item type
    - `labels` object[] — List of labels associated with the product
      - `name` string — Label name
    - `last_updated_at` string, date-time — Timestamp when the product was last updated
    - `last_updated_by` object
      - `aff_code` string — Affiliate code of the user
      - `avatar` string, uri — URL to user avatar
      - `email` string, email — User email
      - `fullname` string — User full name
      - `id` integer — User ID
      - `phone` string — User phone number
    - `name` string — Product name
    - `option1_name` string — Name of the first product option
    - `option2_name` string — Name of the second product option
    - `option3_name` string — Name of the third product option
    - `product_partners` object[], nullable — List of product partners. Only included for partner products (where product.business_id != current business). Returns null for owned products.
      - `affiliate_pro_domains` object[] — Approved affiliate_pro custom domains for this partnership
        - `business_id` integer — Business ID that owns the custom domain
        - `full_url` string — Full URL of the custom domain
        - `id` integer — Unique identifier of the custom domain
      - `affiliate_pro_links` object[] — Affiliate Pro links for partners (product + checkout, includes ap=<store_short_unique_id>)
        - `checkout_url` string — Affiliate Pro checkout page URL
        - `domain` string — Custom domain for the affiliate pro link
        - `product_url` string — Affiliate Pro product page URL
      - `affiliate_status` string — Status of the partnership (pending, approved, rejected, banned)
      - `approved_at` string, date-time, nullable — Timestamp when partnership was approved
      - `created_at` string, date-time — Timestamp when the product partner was created
      - `custom_domains` object[] — List of custom domains where the product page can be viewed
        - `business_id` integer — Business ID that owns the custom domain
        - `full_url` string — Full URL of the custom domain
        - `id` integer — Unique identifier of the custom domain
      - `id` integer — Unique identifier of the product partner
      - `message_to_product_owner` string, nullable — Message from partner when requesting partnership
      - `partner` object
        - `account_holder` string — Name of the account holder
        - `email` string, email — Email address of the business
        - `id` integer — Business ID
        - `is_banned` boolean — Is the business banned?
        - `logo` string, uri — URL to the business logo
        - `unique_id` string — Unique identifier for the business
        - `username` string — Username of the business
      - `partnership_type` string — Type of partnership (affiliate, affiliate_pro, or reseller)
      - `rejected_at` string, date-time, nullable — Timestamp when partnership was rejected
      - `requested_at` string, date-time, nullable — Timestamp when partnership was requested
      - `store_id` integer, nullable — Store ID assigned for affiliate_pro routing
    - `uuid` string — Product UUID
    - `variants` object[] — List of variants associated with the product
      - `currency` 'IDR' — The currency code for the subscription item price.
      - `digital_product_files` object[] — List of digital product files associated with the variant
        - `content_type` string — MIME type of the digital product file
        - `id` integer — Digital product file primary key
        - `name` string — File name of the digital product file
        - `size_in_bytes` integer — Size of the digital product file in bytes
        - `url` string, uri — URL to access the digital product file
      - `id` integer — Variant primary key
      - `images` string[] — List of image URLs associated with the variant
      - `interval` 'day' | 'week' | 'month' | 'year' — Unit of the period
      - `interval_count` integer — Interval count for recurring variants
      - `is_checked` boolean — Mark variant as sellable
      - `is_discussion_active` boolean — Variant discussion capability flag
      - `is_email_notification_active` boolean — Variant email notification capability flag
      - `is_file_enabled` boolean — Variant file delivery capability flag
      - `is_license_enabled` boolean — Variant license capability flag
      - `is_lms_enabled` boolean — Variant LMS capability flag
      - `is_editable` boolean — Indicates if the variant is editable
      - `item_type` 'physical' | 'digital' | 'course' | 'license' | 'subscription' — Type of the product item
      - `metadata` object — Additional metadata associated with the variant
      - `name` string — Full name of the variant
      - `pricing_type` 'one_time' | 'recurring' — Type of the product pricing
      - `product_name` string — Name of the associated product
      - `self_file_urls` string[] — List of self file URLs associated with the variant
      - `unique_id` string — Variant unique identifier
      - `uuid` string — Variant UUID
      - `validity_period` integer — Validity period for one time variants
      - `validity_period_unit` 'day' | 'week' | 'month' | 'year' — Unit of the period
      - `weight` integer — Weight of the variant in grams
  - `is_paginated` true, required
  - `has_next` boolean
  - `has_previous` boolean
  - `next_cursor` string, nullable
  - `previous_cursor` string, nullable
  - `page_size` integer

## Other responses

- `401` — Unauthorized
- `403` — Forbidden

---

[API](https://skmtc.net/scalev/apis/nexus-commerce-api.md) · [All operations](https://skmtc.net/scalev/apis/nexus-commerce-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/scalev/nexus-commerce-api/revisions/730030bd6477/schema)
