A page of variants, one row per SKU
A page of variants with the fields a catalogue sync needs per SKU: variant_id and its product_id, product and variant title, sku, vendor, category, description, image, product_status, gtin, unit_cost, sell_price, currency, sales_channels, selected_options, the physical fields (weight, length, width, height, uom, weight_unit), hs_code, country_of_origin, and last_updated_at and last_updated_by.
Unlike the products table these are plain numbers, not {min, max} pairs: a variant has one cost and one price.
Paging is offset and limit, limit at most 10,000 and 8 by default. variants_count and size count this page, filtered_max_size the filtered set and max_size the catalogue. Page on filtered_max_size.
Narrow with filter_args: product_id, vendor, category, department, product_status, sales_channel_id, country_of_origin and collection_id take eq and in; unit_cost and sell_price take gte and lte. search matches title, SKU and vendor. Sort with sort_args: comma-separated columns, - for descending, bare or + for ascending. variant_id, sku and variant_title are sortable here as well as the product fields.
export=true answers a download URL in data.url instead of rows.
Scope: products:read.
Request
- Base URL: https://api.app.tightly.io
- URL: https://api.app.tightly.io/api/v1/variants/table
- Auth: HTTP bearer
Query parameters
Rows to skip before this page.
Rows in this page.
Free text over variant title, SKU, product title and vendor.
A JSON array of {key, operation, value}. product_id, vendor, category, department, product_status, sales_channel_id, country_of_origin and collection_id take eq and in; unit_cost and sell_price take gte and lte. collection_id is a collection as the store syncs it, not a curated collection, so a curated collection's id matches nothing here. It matches on the variant's own product, and a product can sit in several collections, so in answers every variant of every product in any of the ids given.
Comma-separated sort columns, - for descending and + or nothing for ascending. Sortable: product_id, variant_id, product_title, variant_title, sku, vendor, category, department, product_status, unit_cost, sell_price, last_updated_at, last_updated_by, weight, length, width, height, description, gtin, currency, uom, weight_unit, hs_code, country_of_origin, sales_channels.
Answer a download URL for the filtered set instead of a page of rows.
Headers
The date train to answer on. One train exists today, 2026-11, the one this reference describes and the one every key is minted on, so the call answers on it with or without this header. Send it anyway, so a client built now names its train from the start.
Response
A page of variants, with the page's counts and the filtered set's size. department is the source NetSuite item Department label, independent of Brand/Category mapping and distinct from native purchasing subsidiary and the merchandise hierarchy Department. It is read-only; null means no source label. Filter with eq or in using exact labels. A variant matches its own source Department only.
Changes
No recorded changes to this operation across all 1 revision of this API.