Skip to main content
GET
/
v1
/
products
List products
curl --request GET \
  --url https://api-eu.flexportal.io/v1/products \
  --header 'Authorization: Bearer <token>' \
  --header 'Tenant-ID: <tenant-id>'
{
  "products": [
    {
      "productId": "<string>",
      "tenantId": "<string>",
      "productSku": "<string>",
      "name": "<string>",
      "specification": "<string>",
      "category": "<string>",
      "brand": "<string>",
      "status": "active",
      "createdAt": "<string>",
      "updatedAt": "<string>",
      "description": "<string>",
      "images": [
        "<string>"
      ],
      "variants": [
        {
          "variantId": "<string>",
          "tenantId": "<string>",
          "productId": "<string>",
          "productSku": "<string>",
          "variantSku": "<string>",
          "variantName": "<string>",
          "grade": "<string>",
          "pricing": [
            {
              "contractLength": 123,
              "monthlyPrice": 123,
              "setupFee": 123,
              "source": "suggested",
              "calculatedAt": "<string>",
              "presetUsed": "<string>"
            }
          ],
          "status": "active",
          "createdAt": "<string>",
          "updatedAt": "<string>",
          "condition": "<string>",
          "colorName": "<string>",
          "images": [
            "<string>"
          ],
          "listPrice": 123,
          "acquisitionCost": 123
        }
      ]
    }
  ],
  "count": 123,
  "limit": 123,
  "hasMore": true,
  "nextCursor": "<string>"
}

Overview

Retrieve a paginated list of products in your catalog. Products are the parent items that contain variants—each variant represents a specific configuration (e.g., color, storage size, grade) with its own SKU and pricing.

Product vs Variant

Understanding the product hierarchy is key:
ConceptExamplePurpose
ProductMacBook Pro 16”The base product/model
VariantMacBook Pro 16” M3 Max, 64GB, Space BlackSpecific configuration with SKU and pricing
A product can have multiple variants, and orders reference variants by SKU.

Common Use Cases

Product Catalog

Display your product catalog in e-commerce or customer-facing applications

Inventory Check

Verify products exist before creating orders or importing inventory

Admin Dashboard

Build product management interfaces for your operations team

Sync Systems

Keep product data synchronized with external systems

Filtering Products

# Get all active products
GET /v1/products?status=active

# Get products by category
GET /v1/products?category=laptops

# Get products by brand
GET /v1/products?brand=Apple

# Combine filters
GET /v1/products?status=active&category=laptops&brand=Apple

Response Fields

Key fields in each product object:
FieldDescription
productIdUnique product identifier
productSkuProduct-level SKU (parent SKU)
nameProduct display name
categoryProduct category
brandProduct brand/manufacturer
statusactive or discontinued
variantCountNumber of variants for this product
createdAtISO 8601 timestamp
Product list responses include variant counts but not full variant details. Use Get Product to retrieve a product with all its variants, or List Variants to query variants directly.

Pagination

Results are paginated using cursor-based pagination. See Pagination for details.
// Fetch all products
const allProducts = [];
let cursor = null;

do {
  const params = new URLSearchParams({ limit: '100' });
  if (cursor) params.set('startAfter', cursor);

  const { products, nextCursor } = await fetchProducts(params);
  allProducts.push(...products);
  cursor = nextCursor;
} while (cursor);

Authorizations

Authorization
string
header
required

API key obtained from FlexPortal dashboard

Headers

Tenant-ID
string
required

Your tenant identifier

Query Parameters

limit
string

Items per page (default: 50, max: 100)

startAfter
string

Cursor for pagination

status
string

Filter by status (active, discontinued)

category
string

Filter by category

brand
string

Filter by brand

Response

200 - application/json

List of products

products
object[]
required
count
number
required
limit
number
required
hasMore
boolean
required
nextCursor
string | null
required