Skip to main content

Create a new product

POST https://pos.paysera.com/eapi/v1/products

Create a new product. Set type to variable and provide variants to create a product with option-based variants (e.g. Color/Size combinations).

Authorization​

This endpoint requires a Personal Access Token, sent as a Bearer token.

To obtain one, your account needs API permission. Once granted, go to /user/settings in your POS account and create a personal access token.

Authorization Header Format:

Authorization: Bearer YOUR_ACCESS_TOKEN

Example:

Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

For more details, see the Authentication section.

Request Body​

FieldTypeRequiredDescription
titleobjectMulti-language product title keyed by language code. Tenant system language is required. Supported languages: lt, en, lv, et, pl.
priceobject
skustringStock Keeping Unit - must be unique within tenant
activeboolean
typestringProduct type β€” see details below
measureUnitstring
taxIdintegerTax ID. Defaults to tenant default tax if not provided.
stockobject
categoryIdsarrayList of category IDs to assign. Categories must belong to the tenant.
productCodesarrayList of product codes (barcodes, EAN codes)
mediaarrayList of product media
sellChannelsobject
attributesobjectRequired when type = variable. Maps each product option ID (as the key) to an array of option value IDs the parent product exposes for that option. All…
variantsarrayRequired when type = variable. List of variant combinations. Each variant references option value IDs declared in attributes. The variant identity = sorted…

type​

Product type:

  • simple β€” standalone product without variants. Default if omitted.
  • variable β€” parent product with one or more variants (e.g. size/color). Requires attributes and variants fields. The parent record holds shared data (tax, manageStock, useWarehouses, measureUnit). Each variant becomes a separate product record linked by parent_id. When type = simple (or omitted), attributes/variants MUST NOT be sent (422 otherwise).

attributes​

Required when type = variable. Maps each product option ID (as the key) to an array of option value IDs the parent product exposes for that option. All option IDs and value IDs must belong to the tenant. Each value ID must belong to its parent option. MUST NOT be sent for simple products.

variants​

Required when type = variable. List of variant combinations. Each variant references option value IDs declared in attributes. The variant identity = sorted optionValueIds joined with -. Duplicate combinations across variants β†’ 422. Variant optionValueIds MUST be a subset of values declared in attributes for its option.

Errors​

This endpoint may return the following errors:

400 - Bad Request​

Invalid request

This error is resulted by incorrectly providing one of the parameters.

401 - Unauthorized​

Unauthorized

This error was produced by providing incorrect credentials.

403 - Forbidden​

Forbidden

This error indicates you don't have permission to access this resource.

409 - Conflict​

SKU already exists

422 - Unprocessable Entity​

Unprocessable entity

429 - Too Many Requests​

You have exceeded the rate limit. Please try again in a minute.

500 - Internal Server Error​

Internal server error

Example​

Request​

POST https://pos.paysera.com/eapi/v1/products
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
{
"title": {
"lt": "Produkto pavadinimas",
"en": "Product title"
},
"price": {
"regular": "9.99",
"special": "7.99",
"cost": "4.50"
},
"sku": "MED-EKO-500",
"active": true,
"type": "simple",
"measureUnit": "unit",
"taxId": 1,
"stock": {
"quantity": "10",
"manageStock": true,
"useWarehouses": true
},
"categoryIds": [
1,
2
],
"productCodes": [
{
"type": "ean",
"code": "1234567890123"
}
],
"media": [
{
"url": "https://example.com/images/product.jpg",
"sort": 0
}
],
"sellChannels": {
"pos": true,
"api": true
},
"attributes": {
"5": [
10,
11,
12
],
"7": [
20,
21
]
},
"variants": [
{
"optionValueIds": [
10,
20
],
"sku": "MED-EKO-500-RED-S",
"active": true,
"price": {
"regular": "9.99",
"special": "7.99",
"cost": "4.50"
},
"stock": {
"quantity": "5"
},
"productCodes": [
{
"type": "ean",
"code": "1234567890123"
}
],
"media": [
{
"url": "https://example.com/images/product.jpg",
"sort": 0
}
]
}
]
}

Response​

{
"id": 789,
"sku": "MED-EKO-500",
"type": "simple",
"active": true,
"title": {
"lt": "Produkto pavadinimas",
"en": "Product title"
},
"measureUnit": "unit",
"taxId": 1,
"price": {
"regular": "9.99",
"special": "7.99",
"cost": "4.50"
},
"stock": {
"quantity": "10",
"manageStock": true,
"useWarehouses": false
},
"categoryIds": [
1,
2
],
"productCodes": [
{
"type": "ean",
"code": "1234567890123"
}
],
"media": [
{
"url": "https://example.com/images/product.jpg",
"sort": 0
}
],
"sellChannels": {
"pos": true,
"api": true
},
"isPriceDynamic": false,
"isTitleDynamic": false,
"isShownInPinPadView": false,
"isShownInTouchView": true,
"createdAt": "2026-04-20T12:00:00Z",
"updatedAt": "2026-04-20T12:00:00Z",
"attributes": {
"5": [
10,
11
]
},
"optionGroups": [
{
"id": 5,
"title": {
"lt": "Dydis",
"en": "Size"
},
"values": [
{
"id": 10,
"title": {
"lt": "MaΕΎas",
"en": "Small"
}
}
]
}
],
"variants": [
{
"id": 7890,
"sku": "MED-EKO-500-RED-S",
"optionValueIds": [
10,
20
],
"active": true,
"price": {
"regular": "9.99",
"special": "7.99",
"cost": "4.50"
},
"stock": {
"quantity": "5"
},
"productCodes": [
{
"type": "ean",
"code": "1234567890123"
}
],
"media": [
{
"url": "https://example.com/images/product.jpg",
"sort": 0
}
]
}
]
}

AUTHORIZATION: HTTP

REQUEST

Base URL
https://pos.paysera.com
Body REQUIRED
{
"title": {
"lt": "Produkto pavadinimas",
"en": "Product title"
},
"price": {
"regular": "9.99",
"special": "7.99",
"cost": "4.50"
},
"sku": "MED-EKO-500",
"active": true,
"type": "simple",
"measureUnit": "unit",
"taxId": 1,
"stock": {
"quantity": "10",
"manageStock": true,
"useWarehouses": true
},
"categoryIds": [
1,
2
],
"productCodes": [
{
"type": "ean",
"code": "1234567890123"
}
],
"media": [
{
"url": "https://example.com/images/product.jpg",
"sort": 0
}
],
"sellChannels": {
"pos": true,
"api": true
},
"attributes": {
"5": [
10,
11,
12
],
"7": [
20,
21
]
},
"variants": [
{
"optionValueIds": [
10,
20
],
"sku": "MED-EKO-500-RED-S",
"active": true,
"price": {
"regular": "9.99",
"special": "7.99",
"cost": "4.50"
},
"stock": {
"quantity": "5"
},
"productCodes": [
{
"type": "ean",
"code": "1234567890123"
}
],
"media": [
{
"url": "https://example.com/images/product.jpg",
"sort": 0
}
]
}
]
}

RESPONSE

Product created successfully
{
"id": 789,
"sku": "MED-EKO-500",
"type": "simple",
"active": true,
"title": {
"lt": "Produkto pavadinimas",
"en": "Product title"
},
"measureUnit": "unit",
"taxId": 1,
"price": {
"regular": "9.99",
"special": "7.99",
"cost": "4.50"
},
"stock": {
"quantity": "10",
"manageStock": true,
"useWarehouses": false
},
"categoryIds": [
1,
2
],
"productCodes": [
{
"type": "ean",
"code": "1234567890123"
}
],
"media": [
{
"url": "https://example.com/images/product.jpg",
"sort": 0
}
],
"sellChannels": {
"pos": true,
"api": true
},
"isPriceDynamic": false,
"isTitleDynamic": false,
"isShownInPinPadView": false,
"isShownInTouchView": true,
"createdAt": "2026-04-20T12:00:00Z",
"updatedAt": "2026-04-20T12:00:00Z",
"attributes": {
"5": [
10,
11
]
},
"optionGroups": [
{
"id": 5,
"title": {
"lt": "Dydis",
"en": "Size"
},
"values": [
{
"id": 10,
"title": {
"lt": "MaΕΎas",
"en": "Small"
}
}
]
}
],
"variants": [
{
"id": 7890,
"sku": "MED-EKO-500-RED-S",
"optionValueIds": [
10,
20
],
"active": true,
"price": {
"regular": "9.99",
"special": "7.99",
"cost": "4.50"
},
"stock": {
"quantity": "5"
},
"productCodes": [
{
"type": "ean",
"code": "1234567890123"
}
],
"media": [
{
"url": "https://example.com/images/product.jpg",
"sort": 0
}
]
}
]
}