API ReferenceCommerce

Products

Products: their SKU, prices per currency, categories and publishing. Descriptions, variants and categories have pages of their own.

Products in Postman

About products

Three records make up the catalogue. A product holds the commerce data: the SKU (code), prices, weight and dimensions, the main image, categories, the tax and shipping category, and whether it is published. A description holds the content and the URL in one language, and keeps its content in revisions like a page. A variant is a purchasable combination of a product, with its own SKU and prices.

Each product and variant has one price row per currency, with a base, special, RRP and cost price; the price charged, finalPrice, is the lower of the base and the special price. There are no price lists and no prices per customer.

Records Product, description, variant

The commerce data, the content per language, and the purchasable combinations.

The catalogue
Prices Per currency

Base, special, RRP and cost. finalPrice is the lower of base and special.

The catalogue
Revisions Descriptions only

A product is not versioned; its descriptions are, like pages.

Revisions, publishing and approval
Publishing Yes

A product and each description are published separately. Only a published product can be added to a cart.

Revisions, publishing and approval
Custom fields Yes

Products take custom fields; variants do not.

Custom fields

List products#

GET /cdna-api/products/products

Lists products. Add a category id to the path, /products/products/{id}, for the products whose primary category it is. Without limit every match comes back.

Access
Admin users and integrations, with an OAuth access token or an API key.
Model
Product, in the Reference

Parameters

propertiesquery
selector
The fields and relations to return, such as {id,code,name,fullPath,finalPrice,published}.
filtersquery
name=value
Any stored field, or a relation with a dot, such as parent.id=12. Prefix the name with !, >, <, % or |. Use stored field names exactly as in the model, and compare totalCount with the unfiltered list's to confirm a filter applied.
orderByquery
string
field:ASC or field:DESC, comma-separated. Stored fields only.
limitquery
integer
Records per response. There is no default.
offsetquery
integer
Records to skip.

Example

List products
GET /cdna-api/products/products?limit=2&properties={id,code,name,fullPath,finalPrice,published} HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Response 200 OK
{
  "result": "success",
  "totalCount": 1,
  "data": [
    {
      "id": 1,
      "code": "API-SANDBOX-MUG",
      "name": "API sandbox mug",
      "fullPath": "/products/api-sandbox/api-sandbox-mug",
      "finalPrice": "10.0000",
      "published": "2026-10-18T01:26:41+00:00"
    }
  ]
}
Open in Postman docs Real response from this documentation site

Show a product#

GET /cdna-api/products/product/{id}

Reads one product by its id. finalPrice is the price one unit costs in the default currency; pricings holds every currency’s row.

Access
Admin users and integrations, with an OAuth access token or an API key.
Model
Product, in the Reference

Parameters

idpathrequired
integer
The product id.
propertiesquery
selector
The fields and relations to return, such as {id,code,name,fullPath,finalPrice,published}.

Example

Show a product
GET /cdna-api/products/product/1?properties={id,code,name,fullPath,finalPrice,published} HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Response 200 OK
{
  "result": "success",
  "data": {
    "id": 1,
    "code": "API-SANDBOX-MUG",
    "name": "API sandbox mug",
    "fullPath": "/products/api-sandbox/api-sandbox-mug",
    "finalPrice": "10.0000",
    "published": "2026-10-18T01:26:41+00:00"
  }
}
Open in Postman docs Real response from this documentation site

Create a product#

POST /cdna-api/products/product

Creates a product, with its descriptions, prices and, if you like, its variants, in one request.

Access
Admin users and integrations, with an OAuth access token or an API key.
Returns
The new product, in the fields properties asks for, and a message.

Parameters

codebodyrequired
string
The SKU. Unique across every product and variant.
primaryCategorybodyrequired
integer
The category the product belongs to, and takes its URL from, by id. Required.
descriptionsbodyrequired
list
The content per language: each with language, name and slug. At least one, in the site’s default language.
pricingsbodyrequired
list
One price row per currency: currency and basePrice, optionally specialPrice, rrp and costPrice. At least one, in the site’s default currency.
publishedbody
datetime
true publishes now, a future datetime schedules, null unpublishes. Needs the publish permission.
purchasablebody
boolean
false keeps the product visible but not buyable.
variantsbody
list
Variants to create with the product, each as on Variants.
categoryElementsbody
list
Secondary categories, each as {"category": <id>}.

Example

Create a product
POST /cdna-api/products/product?properties={id,code,name,slug,published,finalPrice,primaryCategory{id,name}} HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "code": "API-SANDBOX-MUG",
  "primaryCategory": 3,
  "published": true,
  "descriptions": [
    { "language": 47, "name": "API sandbox mug", "slug": "api-sandbox-mug" }
  ],
  "pricings": [
    { "currency": 142, "basePrice": "12.00" }
  ]
}
Response 200 OK
{
  "result": "success",
  "data": {
    "id": 1,
    "code": "API-SANDBOX-MUG",
    "name": "API sandbox mug",
    "slug": "api-sandbox-mug",
    "published": "2026-10-18T01:26:41+00:00",
    "finalPrice": "12.00",
    "primaryCategory": {
      "id": 3,
      "name": "API sandbox"
    }
  },
  "message": "The Product has been added successfully."
}
Open in Postman docs Real response from this documentation site

Edit a product#

PUT /cdna-api/products/product/{id}

Changes a product. Fields left out keep their values. The example puts the mug on special: finalPrice becomes the lower price.

Access
Admin users and integrations, with an OAuth access token or an API key.
Returns
The saved product, in the fields properties asks for, and a message.

Parameters

idpathrequired
integer
The product id.
defaultPricingbody
object
The default currency’s price row; to change it, send its id with the new values.
pricingsbody
list
Every price row: a row with id changes that row, one without adds a row, and a row left out is deleted.
code, primaryCategory, published, purchasablebody
As for Create a product.

Example

Edit a product
PUT /cdna-api/products/product/1?properties={id,code,finalPrice,defaultPricing{id,basePrice,specialPrice}} HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "defaultPricing": {
    "id": 1,
    "specialPrice": "10.00"
  }
}
Response 200 OK
{
  "result": "success",
  "data": {
    "id": 1,
    "code": "API-SANDBOX-MUG",
    "finalPrice": "10.00",
    "defaultPricing": {
      "id": 1,
      "basePrice": "12.0000",
      "specialPrice": "10.00"
    }
  },
  "message": "The Product has been saved successfully."
}
Open in Postman docs Real response from this documentation site

Delete a product#

DELETE /cdna-api/products/product/{id}

Deletes a product, with its descriptions and variants.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

idpathrequired
integer
The product id.

Example

Delete a product
DELETE /cdna-api/products/product/7 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

Duplicate a product#

POST /cdna-api/products/duplicate-product/{id}

Copies a product and saves the copy, whose name starts with “Copy of”.

Access
Admin users and integrations, with an OAuth access token or an API key.
Returns
The copy under data.product, and a message.

Parameters

idpathrequired
integer
The product id.

Example

Duplicate a product
POST /cdna-api/products/duplicate-product/7 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

In Products