Naar de inhoud
Open Nexym

List products

GET
/api/connect/products
curl --request GET \
--url 'https://app.nexym.nl/api/connect/products?per_page=50&page=1' \
--header 'Authorization: Bearer <token>'

A page of products for the key’s project, each with its variants. The variants are loaded with a narrow column list — only id, product_id, reference, sku and barcode are present, never the full variant record. Each product also lists its related products, up-sells and cross-sells as SKUs (related_skus, upsell_skus, crosssell_skus).

Requires products: read (or write).

per_page
integer
default: 50 >= 1 <= 200

Records per page. Values above 200 are silently clamped to 200. The value is not otherwise validated, so send a sensible positive integer.

page
integer
default: 1 >= 1

1-based page number.

A page of products.

Media typeapplication/json
object
current_page
required
integer
data
required
Array<object>
object
first_page_url
required
string format: uri
from
required

Index of the first record on this page, or null on an empty page.

integer | null
last_page
required
integer
last_page_url
required
string format: uri
links
required
Array<object>

One entry of the paginator’s rendered link list.

object
url
string | null format: uri
label
string
page
integer | null
active
boolean
next_page_url
required
string | null format: uri
path
required
string format: uri
per_page
required
integer
prev_page_url
required
string | null format: uri
to
required
integer | null
total
required
integer
data
required
Array<object>

A universal article record.

object
id
integer
project_id
integer
reference

The canonical article key, unique within the project.

string
sku
string | null
name
string
type
string
Allowed values: simple configurable bundle grouped
parent_reference

The configurable, bundle or grouped parent this article belongs to.

string | null
attribute_set
string | null
description
string | null
short_description
string | null
url
string | null
meta_title
string | null
meta_description
string | null
labels

Per-store content overrides, keyed by store slot and then by field name — the value used when a record is pushed to that store instead of the hub’s own column.

object | null
pushed_store_labels

What was last pushed per store, so a re-run does not resend it.

object | null
brand
string | null
brand_name
string | null
category_reference
string | null
supplier_reference
string | null
vat_rate

Percentage, two decimals, serialised as a string.

string | null
is_online

Null means no connected system has said either way yet.

boolean | null
status
string
Allowed values: active inactive draft
source_connection_id

The connection this record was last imported from.

integer | null
meta

Free-form store for fields the universal schema does not define for everybody: a connector’s declared extension fields and a project’s own customer fields, each under its own name.

object | null
source_changed_at
string | null format: date-time
created_at
string | null format: date-time
updated_at
string | null format: date-time
variants
Array<object>

A variant as the products listing returns it. Only these columns are selected — the full variant record (barcodes, options, weight, labels, meta) is not exposed by this API.

object
id
integer
product_id
integer
reference
string
sku
string | null
barcode
string | null
related_skus

Related products, in the source’s order. The hub product’s SKU when that product is in the hub, otherwise the SKU the source gave.

Array<string>
upsell_skus

Up-sells, in the source’s order, as SKUs (see related_skus).

Array<string>
crosssell_skus

Cross-sells, in the source’s order, as SKUs (see related_skus).

Array<string>

Example

{
"current_page": 1,
"first_page_url": "https://app.nexym.nl/api/connect/orders?page=1",
"from": 1,
"last_page": 7,
"last_page_url": "https://app.nexym.nl/api/connect/orders?page=7",
"links": [
{
"url": "https://app.nexym.nl/api/connect/orders?page=2",
"label": "2",
"page": 2,
"active": false
}
],
"next_page_url": "https://app.nexym.nl/api/connect/orders?page=2",
"path": "https://app.nexym.nl/api/connect/orders",
"per_page": 50,
"prev_page_url": null,
"to": 50,
"total": 318,
"data": [
{
"id": 4821,
"project_id": 3,
"reference": "ACME-1234",
"sku": "ACME-1234",
"name": "Widget 40 mm, black",
"type": "simple",
"parent_reference": null,
"attribute_set": "default",
"description": "A 40 mm widget in powder-coated black.",
"short_description": "40 mm widget, black",
"url": "/widgets/acme-1234",
"meta_title": "Widget 40 mm, black",
"meta_description": "Buy the 40 mm black widget.",
"labels": {
"nl_main": {
"name": "Widget 40 mm, zwart"
}
},
"pushed_store_labels": {
"nl_main": {
"name": "Widget 40 mm, zwart"
}
},
"brand": "ACME",
"brand_name": "ACME Tools",
"category_reference": "CAT-WIDGETS",
"supplier_reference": "SUP-0042",
"vat_rate": "21.00",
"is_online": true,
"status": "active",
"source_connection_id": 7,
"meta": {
"service_code": "INSTALL-STD"
},
"source_changed_at": "2026-09-18T09:12:41.000000Z",
"created_at": "2026-08-01T11:03:27.000000Z",
"updated_at": "2026-09-18T09:12:41.000000Z",
"variants": [
{
"id": 90412,
"product_id": 4821,
"reference": "ACME-1234-BLK",
"sku": "ACME-1234-BLK",
"barcode": "8712345678906"
}
],
"related_skus": [
"ACME-2000",
"ACME-2001"
],
"upsell_skus": [
"ACME-1234-PRO"
],
"crosssell_skus": []
}
]
}

No key, a key that does not match, a revoked key, or an expired one. The body says which, and nothing else — an unusable key is never described further.

Media typeapplication/json

Every error this API returns carries a single human-readable message.

object
message
required
string

Examples

No bearer token, or one too short to hold a prefix

{
"message": "Missing or invalid API key."
}

The key is valid but its abilities do not cover this resource at this right.

Media typeapplication/json

Every error this API returns carries a single human-readable message.

object
message
required
string

Examples

{
"message": "This API key lacks read access to orders."
}

The per-minute rate limit was exceeded. The limit is 120 requests per minute by default (CONNECT_API_RATE_PER_MIN), counted per API key — or per IP address for a request that never authenticated.

Media typeapplication/json

Every error this API returns carries a single human-readable message.

object
message
required
string

Examples

Examplelimited
{
"message": "Too many requests — slow down."
}
Retry-After
integer

Seconds until the limit resets.

X-RateLimit-Limit
integer

Requests allowed per minute.

X-RateLimit-Remaining
integer

Requests left in the current window.