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β
| Field | Type | Required | Description |
|---|---|---|---|
title | object | Multi-language product title keyed by language code. Tenant system language is required. Supported languages: lt, en, lv, et, pl. | |
price | object | ||
sku | string | Stock Keeping Unit - must be unique within tenant | |
active | boolean | ||
type | string | Product type β see details below | |
measureUnit | string | ||
taxId | integer | Tax ID. Defaults to tenant default tax if not provided. | |
stock | object | ||
categoryIds | array | List of category IDs to assign. Categories must belong to the tenant. | |
productCodes | array | List of product codes (barcodes, EAN codes) | |
media | array | List of product media | |
sellChannels | object | ||
attributes | object | 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⦠| |
variants | array | Required 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). Requiresattributesandvariantsfields. The parent record holds shared data (tax, manageStock, useWarehouses, measureUnit). Each variant becomes a separate product record linked byparent_id. Whentype = simple(or omitted),attributes/variantsMUST 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
{
"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
}
]
}
]
}