AI Commerce Cloud GraphQL API
Public GraphQL schema reference for AI Commerce Cloud integrations.
Browse the live schema
Review available queries, mutations, arguments, input types, and response fields before building an integration.
Build production requests
Use the examples to shape GraphQL POST requests for the production endpoint at https://api.aicommerce.fi/graphql.
Authenticate per tenant
Every request uses tenant credentials and an AI Commerce GraphQL access token issued during onboarding.
API Endpoints
https://api.aicommerce.fi/graphql
Headers
# Required AI Commerce Cloud API access token.
X-GraphQL-Secret: <your-graphql-secret>
# Required tenant identifier.
X-Tenant-ID: your-tenant-id
# Required tenant-specific secret.
X-Tenant-Secret: <your-tenant-secret>
# Required for GraphQL JSON requests.
Content-Type: application/json
Overview
AI Commerce Cloud exposes a single GraphQL API for ecommerce catalog, customer, order, quote, payment, and operational data.
The public reference is generated from the same schema files used by the running API. Field-level behavior, authorization, and tenant data access are enforced by the live API.
Authentication
All requests use the production endpoint:
https://api.aicommerce.fi/graphql
Every request must include these headers:
| Header | Value |
|---|---|
X-GraphQL-Secret |
API access token issued during onboarding |
X-Tenant-ID |
Tenant identifier issued during onboarding |
X-Tenant-Secret |
Tenant-specific secret issued during onboarding |
Content-Type |
application/json |
Do not expose API secrets in browser-side code or public repositories.
Tenant Model
AI Commerce Cloud uses one GraphQL endpoint for all tenants.
Tenant selection is header-based. The API reads X-Tenant-ID and X-Tenant-Secret on each request and routes authorized operations to the matching tenant data.
The schema is shared across tenants. Tenant identity controls data access, not schema shape.
Examples
Fetch products:
query Products {
products(limit: 5, offset: 0) {
id
name
model
price
}
}
Fetch one product:
query Product($id: ID!) {
product(id: $id) {
id
name
price
description
}
}
Fetch categories:
query Categories {
categories(limit: 10, offset: 0) {
id
parentId
descriptions {
languageId
name
}
}
}
Fetch orders:
query Orders {
orders(limit: 5, offset: 0) {
id
customerName
customerEmail
status
datePurchased
}
}
Create an order:
mutation CreateOrder($input: CreateOrderInput!) {
createOrder(input: $input) {
id
status
customerEmail
}
}
Onboarding
Access to live tenant data requires onboarding.
Contact info@petrosoft.fi to request API access, tenant credentials, integration support, or rate limit changes.
Queries
_empty
Response
Returns a String
Example
Query
query _empty {
_empty
}
Response
{"data": {"_empty": "abc123"}}
actionRecorderEntries
Response
Returns an ActionRecorderPage!
Example
Query
query actionRecorderEntries(
$module: String,
$userId: Int,
$success: Boolean,
$limit: Int,
$offset: Int
) {
actionRecorderEntries(
module: $module,
userId: $userId,
success: $success,
limit: $limit,
offset: $offset
) {
total
entries {
id
module
userId
userName
identifier
userAgent
success
dateAdded
}
}
}
Variables
{
"module": "xyz789",
"userId": 123,
"success": true,
"limit": 123,
"offset": 987
}
Response
{
"data": {
"actionRecorderEntries": {
"total": 123,
"entries": [ActionRecorderEntry]
}
}
}
addressBookEntries
Response
Returns [AddressBook]
Example
Query
query addressBookEntries(
$customerId: ID!,
$limit: Int,
$offset: Int
) {
addressBookEntries(
customerId: $customerId,
limit: $limit,
offset: $offset
) {
id
customerId
gender
company
firstname
lastname
streetAddress
vatid
postcode
city
state
countryId
zoneId
comments
billingStreetAddress
billingFirstname
billingLastname
billingPostcode
billingCity
billingCountryId
billingCompany
billingVatid
billingZoneId
billingState
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
}
}
Variables
{
"customerId": "4",
"limit": 123,
"offset": 987
}
Response
{
"data": {
"addressBookEntries": [
{
"id": 4,
"customerId": 123,
"gender": "abc123",
"company": "xyz789",
"firstname": "abc123",
"lastname": "xyz789",
"streetAddress": "xyz789",
"vatid": "xyz789",
"postcode": "abc123",
"city": "abc123",
"state": "xyz789",
"countryId": 123,
"zoneId": 987,
"comments": "abc123",
"billingStreetAddress": "abc123",
"billingFirstname": "abc123",
"billingLastname": "xyz789",
"billingPostcode": "abc123",
"billingCity": "abc123",
"billingCountryId": "abc123",
"billingCompany": "xyz789",
"billingVatid": "xyz789",
"billingZoneId": "xyz789",
"billingState": "abc123",
"billingOperatorId": 123,
"billingInvoiceAddress": "xyz789",
"billingReference": "abc123",
"billingReferenceRequired": false
}
]
}
}
addressFormats
Response
Returns [AddressFormat]
Example
Query
query addressFormats(
$ids: [ID!],
$limit: Int,
$offset: Int
) {
addressFormats(
ids: $ids,
limit: $limit,
offset: $offset
) {
id
addressFormat
addressSummary
}
}
Variables
{"ids": ["4"], "limit": 987, "offset": 123}
Response
{
"data": {
"addressFormats": [
{
"id": "4",
"addressFormat": "xyz789",
"addressSummary": "xyz789"
}
]
}
}
adminNotifications
Response
Returns [AdminNotification]
Example
Query
query adminNotifications(
$limit: Int,
$offset: Int
) {
adminNotifications(
limit: $limit,
offset: $offset
) {
id
errorText
createdAt
emailErrorSent
errorCleared
}
}
Variables
{"limit": 987, "offset": 987}
Response
{
"data": {
"adminNotifications": [
{
"id": "4",
"errorText": "xyz789",
"createdAt": "xyz789",
"emailErrorSent": false,
"errorCleared": false
}
]
}
}
adminTrackingCreate
Response
Returns [AdminTrackingCreate]
Example
Query
query adminTrackingCreate(
$productId: Int,
$userId: Int,
$limit: Int,
$offset: Int
) {
adminTrackingCreate(
productId: $productId,
userId: $userId,
limit: $limit,
offset: $offset
) {
id
productId
userId
userName
action
dateAdded
}
}
Variables
{"productId": 123, "userId": 987, "limit": 987, "offset": 987}
Response
{
"data": {
"adminTrackingCreate": [
{
"id": 4,
"productId": 123,
"userId": 123,
"userName": "abc123",
"action": "xyz789",
"dateAdded": "xyz789"
}
]
}
}
administrators
Response
Returns [Administrator]
Example
Query
query administrators(
$limit: Int,
$offset: Int
) {
administrators(
limit: $limit,
offset: $offset
) {
id
userName
email
twoFactor
superadmin
writePermission
grantAccess
}
}
Variables
{"limit": 123, "offset": 987}
Response
{
"data": {
"administrators": [
{
"id": "4",
"userName": "xyz789",
"email": "abc123",
"twoFactor": false,
"superadmin": true,
"writePermission": false,
"grantAccess": "xyz789"
}
]
}
}
apiProcessQueue
Description
Paginated list of queued API jobs. Filter status accepts 'queued' or 'failed'.
Response
Returns [ApiProcessJob]
Example
Query
query apiProcessQueue(
$status: String,
$api: String,
$endpoint: String,
$jobId: String,
$limit: Int,
$offset: Int
) {
apiProcessQueue(
status: $status,
api: $api,
endpoint: $endpoint,
jobId: $jobId,
limit: $limit,
offset: $offset
) {
id
jobId
api
endpoint
method
data
createdAt
error
status
}
}
Variables
{
"status": "abc123",
"api": "xyz789",
"endpoint": "abc123",
"jobId": "xyz789",
"limit": 123,
"offset": 123
}
Response
{
"data": {
"apiProcessQueue": [
{
"id": 4,
"jobId": "abc123",
"api": "abc123",
"endpoint": "abc123",
"method": "xyz789",
"data": {},
"createdAt": "xyz789",
"error": "abc123",
"status": "xyz789"
}
]
}
}
availabilities
Description
List availability labels, optionally filtered by language. Pass languageId to get only the labels for one storefront language; omit it to receive every (id, languageId) pair the tenant has defined.
Response
Returns [Availability]
Arguments
| Name | Description |
|---|---|
languageId - Int
|
Example
Query
query availabilities($languageId: Int) {
availabilities(languageId: $languageId) {
id
languageId
name
hexCode
}
}
Variables
{"languageId": 987}
Response
{
"data": {
"availabilities": [
{
"id": 4,
"languageId": 123,
"name": "abc123",
"hexCode": "xyz789"
}
]
}
}
bankPayments
Response
Returns [BankPayment!]!
Example
Query
query bankPayments(
$ordersId: Int,
$invoiceDateFrom: String,
$invoiceDateTo: String,
$valueDateFrom: String,
$valueDateTo: String,
$limit: Int,
$offset: Int
) {
bankPayments(
ordersId: $ordersId,
invoiceDateFrom: $invoiceDateFrom,
invoiceDateTo: $invoiceDateTo,
valueDateFrom: $valueDateFrom,
valueDateTo: $valueDateTo,
limit: $limit,
offset: $offset
) {
id
orderId
invoicePaymentDate
invoicePaymentValueDate
amount
}
}
Variables
{
"ordersId": 987,
"invoiceDateFrom": "abc123",
"invoiceDateTo": "abc123",
"valueDateFrom": "xyz789",
"valueDateTo": "xyz789",
"limit": 987,
"offset": 123
}
Response
{
"data": {
"bankPayments": [
{
"id": "4",
"orderId": 987,
"invoicePaymentDate": "xyz789",
"invoicePaymentValueDate": "abc123",
"amount": 123.45
}
]
}
}
billingAddresses
Response
Returns [BillingAddress]
Example
Query
query billingAddresses(
$customerId: ID!,
$limit: Int,
$offset: Int
) {
billingAddresses(
customerId: $customerId,
limit: $limit,
offset: $offset
) {
id
customerId
company
firstname
lastname
streetAddress
postcode
city
state
countryId
zoneId
vatid
operatorId
invoiceAddress
reference
referenceRequired
}
}
Variables
{"customerId": 4, "limit": 123, "offset": 123}
Response
{
"data": {
"billingAddresses": [
{
"id": 4,
"customerId": 987,
"company": "abc123",
"firstname": "abc123",
"lastname": "xyz789",
"streetAddress": "xyz789",
"postcode": "abc123",
"city": "xyz789",
"state": "xyz789",
"countryId": "abc123",
"zoneId": "xyz789",
"vatid": "abc123",
"operatorId": 123,
"invoiceAddress": "abc123",
"reference": "abc123",
"referenceRequired": false
}
]
}
}
browseHistory
Response
Returns [BrowseHistory]
Example
Query
query browseHistory(
$customerId: Int,
$sessionKey: String,
$startDate: String,
$endDate: String,
$limit: Int,
$offset: Int
) {
browseHistory(
customerId: $customerId,
sessionKey: $sessionKey,
startDate: $startDate,
endDate: $endDate,
limit: $limit,
offset: $offset
) {
id
customerId
sessionKey
loadTimeMsec
categoryId
productId
manufacturerId
color
size
geoipCountry
ipAddress
date
timestamp
topPicks
keywords
}
}
Variables
{
"customerId": 123,
"sessionKey": "abc123",
"startDate": "xyz789",
"endDate": "abc123",
"limit": 987,
"offset": 987
}
Response
{
"data": {
"browseHistory": [
{
"id": "4",
"customerId": 123,
"sessionKey": "xyz789",
"loadTimeMsec": 987,
"categoryId": 123,
"productId": 987,
"manufacturerId": 123,
"color": 123,
"size": 123,
"geoipCountry": "abc123",
"ipAddress": "xyz789",
"date": "abc123",
"timestamp": 987,
"topPicks": false,
"keywords": "xyz789"
}
]
}
}
categories
Description
Paginated list of categories across the full tree.
Response
Returns [Category]
Example
Query
query categories(
$limit: Int,
$offset: Int
) {
categories(
limit: $limit,
offset: $offset
) {
id
code
image
banner
parentId
sortOrder
position
descriptions {
languageId
name
url
path
pathOld
description
descriptionTop
metaTitle
metaDescription
featureTitle
typeTitle
bannerText
bannerButton
bannerUrl
redirectStatus
}
}
}
Variables
{"limit": 987, "offset": 123}
Response
{
"data": {
"categories": [
{
"id": 4,
"code": "abc123",
"image": "abc123",
"banner": "xyz789",
"parentId": 987,
"sortOrder": 123,
"position": 987,
"descriptions": [CategoryDescription]
}
]
}
}
category
Description
Fetch a single category by id, optionally localized via languageId.
Example
Query
query category(
$id: ID!,
$languageId: Int
) {
category(
id: $id,
languageId: $languageId
) {
id
code
image
banner
parentId
sortOrder
position
descriptions {
languageId
name
url
path
pathOld
description
descriptionTop
metaTitle
metaDescription
featureTitle
typeTitle
bannerText
bannerButton
bannerUrl
redirectStatus
}
}
}
Variables
{"id": "4", "languageId": 123}
Response
{
"data": {
"category": {
"id": "4",
"code": "abc123",
"image": "xyz789",
"banner": "xyz789",
"parentId": 987,
"sortOrder": 123,
"position": 987,
"descriptions": [CategoryDescription]
}
}
}
configurationGroups
Response
Returns [ConfigurationGroup]
Example
Query
query configurationGroups {
configurationGroups {
id
title
description
sortOrder
configurations {
id
title
key
value
description
groupId
sortOrder
lastModified
dateAdded
useFunction
setFunction
group {
...ConfigurationGroupFragment
}
}
}
}
Response
{
"data": {
"configurationGroups": [
{
"id": 4,
"title": "xyz789",
"description": "xyz789",
"sortOrder": 987,
"configurations": [Configuration]
}
]
}
}
configurationGroupsWithSettings
Response
Returns [ConfigurationGroup]
Example
Query
query configurationGroupsWithSettings {
configurationGroupsWithSettings {
id
title
description
sortOrder
configurations {
id
title
key
value
description
groupId
sortOrder
lastModified
dateAdded
useFunction
setFunction
group {
...ConfigurationGroupFragment
}
}
}
}
Response
{
"data": {
"configurationGroupsWithSettings": [
{
"id": "4",
"title": "abc123",
"description": "abc123",
"sortOrder": 123,
"configurations": [Configuration]
}
]
}
}
configurations
Response
Returns [Configuration]
Example
Query
query configurations(
$groupId: Int,
$limit: Int,
$offset: Int
) {
configurations(
groupId: $groupId,
limit: $limit,
offset: $offset
) {
id
title
key
value
description
groupId
sortOrder
lastModified
dateAdded
useFunction
setFunction
group {
id
title
description
sortOrder
configurations {
...ConfigurationFragment
}
}
}
}
Variables
{"groupId": 987, "limit": 987, "offset": 123}
Response
{
"data": {
"configurations": [
{
"id": "4",
"title": "abc123",
"key": "xyz789",
"value": "xyz789",
"description": "xyz789",
"groupId": 987,
"sortOrder": 987,
"lastModified": "xyz789",
"dateAdded": "abc123",
"useFunction": "abc123",
"setFunction": "abc123",
"group": ConfigurationGroup
}
]
}
}
countries
Example
Query
query countries(
$limit: Int,
$offset: Int
) {
countries(
limit: $limit,
offset: $offset
) {
id
name
iso2
iso3
dutyRate
dutyLimit
addressFormatId
defaultCurrencyId
}
}
Variables
{"limit": 987, "offset": 123}
Response
{
"data": {
"countries": [
{
"id": "4",
"name": "xyz789",
"iso2": "abc123",
"iso3": "abc123",
"dutyRate": 123.45,
"dutyLimit": 987.65,
"addressFormatId": 123,
"defaultCurrencyId": 123
}
]
}
}
currencies
Response
Returns [Currency]
Example
Query
query currencies(
$limit: Int,
$offset: Int
) {
currencies(
limit: $limit,
offset: $offset
) {
id
title
code
symbolLeft
symbolRight
value
lastUpdated
}
}
Variables
{"limit": 123, "offset": 123}
Response
{
"data": {
"currencies": [
{
"id": 4,
"title": "xyz789",
"code": "xyz789",
"symbolLeft": "xyz789",
"symbolRight": "xyz789",
"value": 123.45,
"lastUpdated": "xyz789"
}
]
}
}
customer
Example
Query
query customer($id: ID!) {
customer(id: $id) {
id
gender
firstname
lastname
emailAddress
defaultAddressId
defaultDeliveryAddressId
telephone
newsletter
freeShipping
admin
type
group
approved
undeliveredOrders
blockPayments
blockShipments
temporaryCustomer
emailSent
apiId
apiBillingId
grantWhatsapp
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
info {
dateOfLastLogon
numberOfLogons
numberOfFailedLogins
dateOfLastLoginFail
dateAccountCreated
dateAccountLastModified
sourceId
globalProductNotifications
}
addresses {
id
gender
company
firstname
lastname
streetAddress
vatid
postcode
city
state
countryId
zoneId
comments
billingStreetAddress
billingFirstname
billingLastname
billingPostcode
billingCity
billingCountryId
billingCompany
billingVatid
billingZoneId
billingState
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
}
}
}
Variables
{"id": 4}
Response
{
"data": {
"customer": {
"id": 4,
"gender": "abc123",
"firstname": "abc123",
"lastname": "abc123",
"emailAddress": "abc123",
"defaultAddressId": 123,
"defaultDeliveryAddressId": 987,
"telephone": "xyz789",
"newsletter": true,
"freeShipping": 123.45,
"admin": 987,
"type": 987,
"group": "abc123",
"approved": true,
"undeliveredOrders": 123,
"blockPayments": "xyz789",
"blockShipments": "abc123",
"temporaryCustomer": false,
"emailSent": true,
"apiId": "abc123",
"apiBillingId": 987,
"grantWhatsapp": true,
"billingOperatorId": 123,
"billingInvoiceAddress": "xyz789",
"billingReference": "xyz789",
"billingReferenceRequired": true,
"info": CustomerInfo,
"addresses": [Address]
}
}
}
customerByEmail
Example
Query
query customerByEmail($emailAddress: String!) {
customerByEmail(emailAddress: $emailAddress) {
id
gender
firstname
lastname
emailAddress
defaultAddressId
defaultDeliveryAddressId
telephone
newsletter
freeShipping
admin
type
group
approved
undeliveredOrders
blockPayments
blockShipments
temporaryCustomer
emailSent
apiId
apiBillingId
grantWhatsapp
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
info {
dateOfLastLogon
numberOfLogons
numberOfFailedLogins
dateOfLastLoginFail
dateAccountCreated
dateAccountLastModified
sourceId
globalProductNotifications
}
addresses {
id
gender
company
firstname
lastname
streetAddress
vatid
postcode
city
state
countryId
zoneId
comments
billingStreetAddress
billingFirstname
billingLastname
billingPostcode
billingCity
billingCountryId
billingCompany
billingVatid
billingZoneId
billingState
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
}
}
}
Variables
{"emailAddress": "xyz789"}
Response
{
"data": {
"customerByEmail": {
"id": 4,
"gender": "abc123",
"firstname": "abc123",
"lastname": "xyz789",
"emailAddress": "abc123",
"defaultAddressId": 987,
"defaultDeliveryAddressId": 123,
"telephone": "xyz789",
"newsletter": true,
"freeShipping": 987.65,
"admin": 123,
"type": 123,
"group": "xyz789",
"approved": false,
"undeliveredOrders": 123,
"blockPayments": "xyz789",
"blockShipments": "abc123",
"temporaryCustomer": true,
"emailSent": true,
"apiId": "xyz789",
"apiBillingId": 123,
"grantWhatsapp": false,
"billingOperatorId": 987,
"billingInvoiceAddress": "xyz789",
"billingReference": "xyz789",
"billingReferenceRequired": true,
"info": CustomerInfo,
"addresses": [Address]
}
}
}
customerGroupPriceList
Description
Paginated list of negotiated per-product prices for customer groups. Filter by group, by product, or by a date (returns only rules whose validFrom..validTo window contains validOn).
Response
Returns [CustomerGroupPriceRule]
Example
Query
query customerGroupPriceList(
$customerGroupId: ID,
$productId: Int,
$validOn: String,
$limit: Int,
$offset: Int
) {
customerGroupPriceList(
customerGroupId: $customerGroupId,
productId: $productId,
validOn: $validOn,
limit: $limit,
offset: $offset
) {
id
groupId
productId
productStockId
price
validFrom
validTo
customerGroup {
id
description
discountAmount
discountType
dateStart
dateEnd
minOrder
minOrderType
customerType
discountedProducts
groupsType
dynamicDiscounts {
...CustomerGroupDynamicDiscountFragment
}
priceList {
...CustomerGroupPriceRuleFragment
}
}
product {
id
name
model
image
price
description
shortDescription
material
}
}
}
Variables
{
"customerGroupId": "4",
"productId": 987,
"validOn": "xyz789",
"limit": 987,
"offset": 987
}
Response
{
"data": {
"customerGroupPriceList": [
{
"id": 4,
"groupId": "abc123",
"productId": 123,
"productStockId": 123,
"price": 987.65,
"validFrom": "xyz789",
"validTo": "abc123",
"customerGroup": CustomerGroup,
"product": Product
}
]
}
}
customerGroups
Description
List customer groups, optionally filtered. type matches groupsType (fixed / dynamic / matrix / list); activeOnly excludes groups whose dateStart..dateEnd window has expired.
Response
Returns [CustomerGroup]
Example
Query
query customerGroups(
$type: String,
$activeOnly: Boolean
) {
customerGroups(
type: $type,
activeOnly: $activeOnly
) {
id
description
discountAmount
discountType
dateStart
dateEnd
minOrder
minOrderType
customerType
discountedProducts
groupsType
dynamicDiscounts {
id
groupId
amount
dateStart
dateEnd
manufacturer
category
sort
}
priceList {
id
groupId
productId
productStockId
price
validFrom
validTo
customerGroup {
...CustomerGroupFragment
}
product {
...ProductFragment
}
}
}
}
Variables
{"type": "abc123", "activeOnly": false}
Response
{
"data": {
"customerGroups": [
{
"id": 4,
"description": "xyz789",
"discountAmount": 123.45,
"discountType": "abc123",
"dateStart": "abc123",
"dateEnd": "xyz789",
"minOrder": 987.65,
"minOrderType": "abc123",
"customerType": "xyz789",
"discountedProducts": 123,
"groupsType": "abc123",
"dynamicDiscounts": [
CustomerGroupDynamicDiscount
],
"priceList": [CustomerGroupPriceRule]
}
]
}
}
customerInfo
Description
Fetch login activity and lifecycle metadata for a single customer.
Response
Returns a CustomerInfo
Arguments
| Name | Description |
|---|---|
customerId - ID!
|
Example
Query
query customerInfo($customerId: ID!) {
customerInfo(customerId: $customerId) {
dateOfLastLogon
numberOfLogons
numberOfFailedLogins
dateOfLastLoginFail
dateAccountCreated
dateAccountLastModified
sourceId
globalProductNotifications
}
}
Variables
{"customerId": "4"}
Response
{
"data": {
"customerInfo": {
"dateOfLastLogon": "abc123",
"numberOfLogons": 123,
"numberOfFailedLogins": 123,
"dateOfLastLoginFail": "abc123",
"dateAccountCreated": "abc123",
"dateAccountLastModified": "abc123",
"sourceId": 987,
"globalProductNotifications": 123
}
}
}
customerPrice
Description
Resolve the single applicable per-customer price for one (customer, product) pair on a given date. Use this in checkout flows, quote builders, and admin price look-ups where you need the exact override (if any) that applies right now.
Returns null when no override exists for that pair on that date — in that case the storefront pricing pipeline should fall back to customer-group price-list rules and then to catalog price. For browsing all overrides without applying validity logic to a single target date, use customersPrices instead.
Response
Returns a CustomerPrice
Example
Query
query customerPrice(
$customerId: Int!,
$productId: Int!,
$validOn: String
) {
customerPrice(
customerId: $customerId,
productId: $productId,
validOn: $validOn
) {
id
customerId
productId
price
currency
validFrom
validTo
}
}
Variables
{
"customerId": 123,
"productId": 987,
"validOn": "xyz789"
}
Response
{
"data": {
"customerPrice": {
"id": "4",
"customerId": 987,
"productId": 123,
"price": 987.65,
"currency": "abc123",
"validFrom": "abc123",
"validTo": "abc123"
}
}
}
customers
Response
Returns [Customer]
Example
Query
query customers(
$limit: Int,
$offset: Int
) {
customers(
limit: $limit,
offset: $offset
) {
id
gender
firstname
lastname
emailAddress
defaultAddressId
defaultDeliveryAddressId
telephone
newsletter
freeShipping
admin
type
group
approved
undeliveredOrders
blockPayments
blockShipments
temporaryCustomer
emailSent
apiId
apiBillingId
grantWhatsapp
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
info {
dateOfLastLogon
numberOfLogons
numberOfFailedLogins
dateOfLastLoginFail
dateAccountCreated
dateAccountLastModified
sourceId
globalProductNotifications
}
addresses {
id
gender
company
firstname
lastname
streetAddress
vatid
postcode
city
state
countryId
zoneId
comments
billingStreetAddress
billingFirstname
billingLastname
billingPostcode
billingCity
billingCountryId
billingCompany
billingVatid
billingZoneId
billingState
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
}
}
}
Variables
{"limit": 123, "offset": 987}
Response
{
"data": {
"customers": [
{
"id": "4",
"gender": "xyz789",
"firstname": "xyz789",
"lastname": "xyz789",
"emailAddress": "abc123",
"defaultAddressId": 987,
"defaultDeliveryAddressId": 987,
"telephone": "abc123",
"newsletter": false,
"freeShipping": 123.45,
"admin": 987,
"type": 987,
"group": "xyz789",
"approved": false,
"undeliveredOrders": 987,
"blockPayments": "xyz789",
"blockShipments": "xyz789",
"temporaryCustomer": true,
"emailSent": false,
"apiId": "abc123",
"apiBillingId": 123,
"grantWhatsapp": false,
"billingOperatorId": 123,
"billingInvoiceAddress": "abc123",
"billingReference": "xyz789",
"billingReferenceRequired": true,
"info": CustomerInfo,
"addresses": [Address]
}
]
}
}
customersApi
Description
List customers as seen by the ERP integration. Filter by ERP customer code, email, or discount group (Finnish argument names match the ERP's field names: asiakaskoodi, alennusryhma).
Response
Returns [CustomersApiCustomer!]!
Example
Query
query customersApi(
$asiakaskoodi: String,
$email: String,
$alennusryhma: String,
$limit: Int,
$offset: Int
) {
customersApi(
asiakaskoodi: $asiakaskoodi,
email: $email,
alennusryhma: $alennusryhma,
limit: $limit,
offset: $offset
) {
asiakaskoodi
name
secondaryName
addressLine1
addressLine2
addressLine3
deliveryName1
deliveryName2
deliveryName3
billingCustomerId
paymentTerm
customerGroup
chain
salesCode
creditLimit
deliveryBlock
email
website
phone
fax
deliveryMethod
discountGroup
discountPercent
secondaryDiscountPercent
languageCode
comment1
comment2
contactPerson
contactPersonId
lastLoginAt
vatLiability
currency
modifiedAt
businessId
billingAddress
intermediaryService
netvisorKey
}
}
Variables
{
"asiakaskoodi": "xyz789",
"email": "xyz789",
"alennusryhma": "abc123",
"limit": 123,
"offset": 987
}
Response
{
"data": {
"customersApi": [
{
"asiakaskoodi": "abc123",
"name": "xyz789",
"secondaryName": "xyz789",
"addressLine1": "xyz789",
"addressLine2": "abc123",
"addressLine3": "xyz789",
"deliveryName1": "abc123",
"deliveryName2": "abc123",
"deliveryName3": "xyz789",
"billingCustomerId": 987,
"paymentTerm": "xyz789",
"customerGroup": "abc123",
"chain": "abc123",
"salesCode": "abc123",
"creditLimit": "abc123",
"deliveryBlock": "xyz789",
"email": "abc123",
"website": "abc123",
"phone": "abc123",
"fax": "abc123",
"deliveryMethod": "xyz789",
"discountGroup": "abc123",
"discountPercent": 123.45,
"secondaryDiscountPercent": 123.45,
"languageCode": "xyz789",
"comment1": "xyz789",
"comment2": "abc123",
"contactPerson": "abc123",
"contactPersonId": 987,
"lastLoginAt": "abc123",
"vatLiability": "abc123",
"currency": "abc123",
"modifiedAt": "abc123",
"businessId": "xyz789",
"billingAddress": "xyz789",
"intermediaryService": "abc123",
"netvisorKey": 123
}
]
}
}
customersBasket
Description
Return the line items in a customer's basket. Pass cartId to scope to one specific basket; omit it to return every basket for the customer.
Response
Returns [CustomersBasketItem]
Example
Query
query customersBasket(
$customersId: ID!,
$cartId: String
) {
customersBasket(
customersId: $customersId,
cartId: $cartId
) {
id
cartId
customersId
itemId
productId
variants
productOptions
comment
customOptions
quantity
specialPrice
bundleId
includes
dateAdded
emailSent
emailLast
variableImage
allowSubstitute
}
}
Variables
{"customersId": 4, "cartId": "abc123"}
Response
{
"data": {
"customersBasket": [
{
"id": 4,
"cartId": "xyz789",
"customersId": 123,
"itemId": "abc123",
"productId": 123,
"variants": "abc123",
"productOptions": "xyz789",
"comment": "abc123",
"customOptions": "xyz789",
"quantity": 123,
"specialPrice": 987.65,
"bundleId": "abc123",
"includes": "xyz789",
"dateAdded": "xyz789",
"emailSent": 123,
"emailLast": "abc123",
"variableImage": "abc123",
"allowSubstitute": false
}
]
}
}
customersBlacklist
Description
Paginated list of blacklist entries. Filter by customer, by status (1 = active blocks only is the most common query), or both.
Response
Returns [CustomerBlacklistEntry!]!
Example
Query
query customersBlacklist(
$customerId: Int,
$status: Int,
$limit: Int,
$offset: Int
) {
customersBlacklist(
customerId: $customerId,
status: $status,
limit: $limit,
offset: $offset
) {
id
customerId
status
reason
lastModified
}
}
Variables
{"customerId": 123, "status": 987, "limit": 123, "offset": 123}
Response
{
"data": {
"customersBlacklist": [
{
"id": 4,
"customerId": 123,
"status": 987,
"reason": "xyz789",
"lastModified": "abc123"
}
]
}
}
customersBraintreeTokens
Description
Vaulted Braintree payment methods for a customer, optionally filtered by card brand. Returns empty for tenants not using Braintree.
Response
Returns [CustomersBraintreeToken!]!
Example
Query
query customersBraintreeTokens(
$customersId: Int!,
$cardType: String,
$limit: Int,
$offset: Int
) {
customersBraintreeTokens(
customersId: $customersId,
cardType: $cardType,
limit: $limit,
offset: $offset
) {
id
customersId
braintreeToken
cardType
numberFiltered
expiryDate
dateAdded
}
}
Variables
{
"customersId": 987,
"cardType": "abc123",
"limit": 987,
"offset": 123
}
Response
{
"data": {
"customersBraintreeTokens": [
{
"id": 4,
"customersId": 987,
"braintreeToken": "xyz789",
"cardType": "xyz789",
"numberFiltered": "xyz789",
"expiryDate": "abc123",
"dateAdded": "xyz789"
}
]
}
}
customersHistory
Description
Paginated audit log of changes for one customer, optionally filtered by administrator user id or source table. Returns entries newest-first.
Response
Returns [CustomerHistoryEntry!]!
Example
Query
query customersHistory(
$customerId: Int!,
$userId: Int,
$sourceTable: String,
$limit: Int,
$offset: Int
) {
customersHistory(
customerId: $customerId,
userId: $userId,
sourceTable: $sourceTable,
limit: $limit,
offset: $offset
) {
id
customerId
addressBookId
userId
userName
sourceTable
fieldName
oldValue
newValue
page
dateAdded
}
}
Variables
{
"customerId": 987,
"userId": 987,
"sourceTable": "xyz789",
"limit": 987,
"offset": 123
}
Response
{
"data": {
"customersHistory": [
{
"id": 4,
"customerId": 987,
"addressBookId": 123,
"userId": 987,
"userName": "xyz789",
"sourceTable": "abc123",
"fieldName": "abc123",
"oldValue": "abc123",
"newValue": "xyz789",
"page": "xyz789",
"dateAdded": "xyz789"
}
]
}
}
customersPrices
Description
Paginated list of negotiated per-customer price overrides. Use this query to inspect or audit the contract prices a tenant has agreed with individual buyers — overrides take precedence over catalog price and over customer-group price-list rules during their validFrom..validTo window.
Filter by customerId to see all of one buyer's negotiated prices, by productId to see which buyers have special pricing on a given product, or by validOn to inspect overrides active on a specific date. For resolving the single applicable price for one (customer, product) pair rather than browsing rules, prefer the customerPrice query — it returns the resolved override directly, or null when catalog/group pricing should apply.
Response
Returns [CustomerPrice!]!
Arguments
| Name | Description |
|---|---|
customerId - Int
|
Filter to overrides for this single customer. |
productId - Int
|
Filter to overrides for this single product. |
validOn - String
|
ISO date (YYYY-MM-DD). Returns only overrides whose validity window contains this date. |
limit - Int
|
Maximum rows to return (default 10). |
offset - Int
|
Number of rows to skip for pagination (default 0). |
Example
Query
query customersPrices(
$customerId: Int,
$productId: Int,
$validOn: String,
$limit: Int,
$offset: Int
) {
customersPrices(
customerId: $customerId,
productId: $productId,
validOn: $validOn,
limit: $limit,
offset: $offset
) {
id
customerId
productId
price
currency
validFrom
validTo
}
}
Variables
{
"customerId": 123,
"productId": 987,
"validOn": "xyz789",
"limit": 123,
"offset": 123
}
Response
{
"data": {
"customersPrices": [
{
"id": "4",
"customerId": 987,
"productId": 987,
"price": 987.65,
"currency": "abc123",
"validFrom": "abc123",
"validTo": "xyz789"
}
]
}
}
deliveryAddresses
Response
Returns [DeliveryAddress]
Example
Query
query deliveryAddresses(
$customerId: ID!,
$limit: Int,
$offset: Int,
$includeLegacy: Boolean
) {
deliveryAddresses(
customerId: $customerId,
limit: $limit,
offset: $offset,
includeLegacy: $includeLegacy
) {
id
customerId
gender
company
firstname
lastname
streetAddress
vatid
postcode
city
state
countryId
zoneId
comments
legacyAddressBookId
legacyAddress {
id
customerId
gender
company
firstname
lastname
streetAddress
vatid
postcode
city
state
countryId
zoneId
comments
billingStreetAddress
billingFirstname
billingLastname
billingPostcode
billingCity
billingCountryId
billingCompany
billingVatid
billingZoneId
billingState
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
}
}
}
Variables
{
"customerId": "4",
"limit": 987,
"offset": 123,
"includeLegacy": true
}
Response
{
"data": {
"deliveryAddresses": [
{
"id": 4,
"customerId": 987,
"gender": "xyz789",
"company": "abc123",
"firstname": "abc123",
"lastname": "xyz789",
"streetAddress": "abc123",
"vatid": "xyz789",
"postcode": "abc123",
"city": "abc123",
"state": "abc123",
"countryId": 123,
"zoneId": 987,
"comments": "abc123",
"legacyAddressBookId": 123,
"legacyAddress": AddressBook
}
]
}
}
discountCoupon
Response
Returns a DiscountCoupon
Arguments
| Name | Description |
|---|---|
id - ID!
|
Example
Query
query discountCoupon($id: ID!) {
discountCoupon(id: $id) {
id
description
amount
discountType
dateStart
dateEnd
maxUse
minOrder
minOrderType
numberAvailable
customerType
discountedProducts
discountedProductsOld
allowedProducts
categories
products
customers
orders
manufacturers
shippingMethods
zones
}
}
Variables
{"id": "4"}
Response
{
"data": {
"discountCoupon": {
"id": "4",
"description": "xyz789",
"amount": 123.45,
"discountType": "xyz789",
"dateStart": "abc123",
"dateEnd": "abc123",
"maxUse": 123,
"minOrder": 987.65,
"minOrderType": "xyz789",
"numberAvailable": 123,
"customerType": "xyz789",
"discountedProducts": 987,
"discountedProductsOld": 987,
"allowedProducts": "abc123",
"categories": [987],
"products": [987],
"customers": [123],
"orders": [987],
"manufacturers": [123],
"shippingMethods": ["xyz789"],
"zones": [987]
}
}
}
discountCoupons
Response
Returns [DiscountCoupon]
Example
Query
query discountCoupons(
$limit: Int,
$offset: Int
) {
discountCoupons(
limit: $limit,
offset: $offset
) {
id
description
amount
discountType
dateStart
dateEnd
maxUse
minOrder
minOrderType
numberAvailable
customerType
discountedProducts
discountedProductsOld
allowedProducts
categories
products
customers
orders
manufacturers
shippingMethods
zones
}
}
Variables
{"limit": 987, "offset": 123}
Response
{
"data": {
"discountCoupons": [
{
"id": 4,
"description": "xyz789",
"amount": 987.65,
"discountType": "xyz789",
"dateStart": "xyz789",
"dateEnd": "xyz789",
"maxUse": 123,
"minOrder": 987.65,
"minOrderType": "xyz789",
"numberAvailable": 987,
"customerType": "xyz789",
"discountedProducts": 987,
"discountedProductsOld": 987,
"allowedProducts": "xyz789",
"categories": [123],
"products": [987],
"customers": [123],
"orders": [123],
"manufacturers": [987],
"shippingMethods": ["abc123"],
"zones": [123]
}
]
}
}
discountCouponsToOrders
Response
Returns [DiscountCouponOrderLink]
Example
Query
query discountCouponsToOrders(
$orderId: ID,
$couponCode: ID,
$limit: Int,
$offset: Int
) {
discountCouponsToOrders(
orderId: $orderId,
couponCode: $couponCode,
limit: $limit,
offset: $offset
) {
couponCode
orderId
coupon {
id
description
amount
discountType
dateStart
dateEnd
maxUse
minOrder
minOrderType
numberAvailable
customerType
discountedProducts
discountedProductsOld
allowedProducts
categories
products
customers
orders
manufacturers
shippingMethods
zones
}
order {
id
customerId
customerName
customerEmail
customer {
...OrderPartyFragment
}
deliveryAddress {
...OrderPartyFragment
}
billingAddress {
...OrderPartyFragment
}
status
datePurchased
lastModified
currency
currencyValue
paymentMethod
paymentCode
shippingMethod
shippingCode
shippingCost
deliveryQuantity
deliveryWeight
deliveryLength
deliveryWidth
deliveryHeight
deliveryComments
shippingLocationId
shippingLocationName
shippingLocationStreetAddress
shippingLocationPostcode
shippingLocationCity
paymentApiId
paymentProvider
paymentField
paymentInput
paymentTermId
shippingApiId
shippingApiTermId
shippingCostCentreId
shippingContractId
shippingContractCourier
discountType
discountAmount
trackingCode
trackingLink
warehouseCode
customerNotifiedFlag
trollyLocker
transactionId
ipAddress
ipIsp
pdfFiles
returnReason
referralId
ordersApiId
apiSent
emailSent
apiMessage
apiMessageDate
apiOrderStatusMessage
apiOrderStatusMessageDate
ordersPackingRulesJson
discountCoupons {
...DiscountCouponFragment
}
items {
...OrderItemFragment
}
totals {
...OrderTotalFragment
}
bankPayments {
...BankPaymentFragment
}
vivawalletPayments {
...OrderVivawalletPaymentFragment
}
}
}
}
Variables
{
"orderId": 4,
"couponCode": "4",
"limit": 123,
"offset": 987
}
Response
{
"data": {
"discountCouponsToOrders": [
{
"couponCode": "4",
"orderId": "4",
"coupon": DiscountCoupon,
"order": Order
}
]
}
}
domains
Example
Query
query domains(
$locale: String,
$limit: Int,
$offset: Int
) {
domains(
locale: $locale,
limit: $limit,
offset: $offset
) {
id
languageId
code
hreflang
domain
cctld
flag
sortOrder
googlePixel
googleApiSecret
adwordsPixel
adwordsPhone
adwordsPurchase
adwordsContact
adwordsQuote
metaPixel
metaApiSecret
tiktokPixel
tiktokApiSecret
msAdsPixel
msAdsPhone
msAdsContact
msAdsPurchase
msAdsQuote
pinterestPixel
wpDomain
openaiChatInstructions
openaiVectorStoreId
openaiChatAssistantId
}
}
Variables
{
"locale": "xyz789",
"limit": 987,
"offset": 987
}
Response
{
"data": {
"domains": [
{
"id": 4,
"languageId": 987,
"code": "xyz789",
"hreflang": "abc123",
"domain": "xyz789",
"cctld": "xyz789",
"flag": "xyz789",
"sortOrder": 987,
"googlePixel": "xyz789",
"googleApiSecret": "abc123",
"adwordsPixel": "abc123",
"adwordsPhone": "abc123",
"adwordsPurchase": "abc123",
"adwordsContact": "abc123",
"adwordsQuote": "xyz789",
"metaPixel": "abc123",
"metaApiSecret": "xyz789",
"tiktokPixel": "xyz789",
"tiktokApiSecret": "abc123",
"msAdsPixel": "abc123",
"msAdsPhone": "xyz789",
"msAdsContact": "xyz789",
"msAdsPurchase": "abc123",
"msAdsQuote": "xyz789",
"pinterestPixel": "xyz789",
"wpDomain": "xyz789",
"openaiChatInstructions": "abc123",
"openaiVectorStoreId": "abc123",
"openaiChatAssistantId": "abc123"
}
]
}
}
faqCategories
Response
Returns [FaqCategory]
Example
Query
query faqCategories(
$languageId: Int,
$visibleOnly: Boolean,
$includeHiddenQuestions: Boolean,
$sortByOrder: Boolean
) {
faqCategories(
languageId: $languageId,
visibleOnly: $visibleOnly,
includeHiddenQuestions: $includeHiddenQuestions,
sortByOrder: $sortByOrder
) {
id
icon
image
visibility
googleIndex
sortOrder
descriptions {
languageId
name
url
description
metaTitle
metaDescription
}
questions {
id
image
sortOrder
visibility
googleIndex
enableUrl
categories
descriptions {
...FaqQuestionDescriptionFragment
}
}
}
}
Variables
{
"languageId": 987,
"visibleOnly": true,
"includeHiddenQuestions": false,
"sortByOrder": true
}
Response
{
"data": {
"faqCategories": [
{
"id": 4,
"icon": "xyz789",
"image": "xyz789",
"visibility": 123,
"googleIndex": 987,
"sortOrder": 123,
"descriptions": [FaqCategoryDescription],
"questions": [FaqQuestion]
}
]
}
}
faqQuestion
Response
Returns a FaqQuestion
Example
Query
query faqQuestion(
$id: ID,
$slug: String,
$languageId: Int,
$visibleOnly: Boolean
) {
faqQuestion(
id: $id,
slug: $slug,
languageId: $languageId,
visibleOnly: $visibleOnly
) {
id
image
sortOrder
visibility
googleIndex
enableUrl
categories
descriptions {
languageId
question
answer
shortAnswer
url
metaTitle
metaDescription
}
}
}
Variables
{
"id": "4",
"slug": "abc123",
"languageId": 987,
"visibleOnly": false
}
Response
{
"data": {
"faqQuestion": {
"id": "4",
"image": "xyz789",
"sortOrder": 987,
"visibility": 123,
"googleIndex": 123,
"enableUrl": 987,
"categories": [123],
"descriptions": [FaqQuestionDescription]
}
}
}
languages
Response
Returns [Language]
Example
Query
query languages(
$limit: Int,
$offset: Int
) {
languages(
limit: $limit,
offset: $offset
) {
id
code
name
metadata {
image
directory
}
}
}
Variables
{"limit": 123, "offset": 987}
Response
{
"data": {
"languages": [
{
"id": 4,
"code": "abc123",
"name": "abc123",
"metadata": LanguageMetadata
}
]
}
}
manufacturer
Description
Fetch a single manufacturer by id, optionally localized via languageId.
Response
Returns a Manufacturer
Example
Query
query manufacturer(
$id: ID!,
$languageId: Int
) {
manufacturer(
id: $id,
languageId: $languageId
) {
id
name
code
image
brandPageImage
listingImage
sortOrder
status
dateAdded
lastModified
fitValue
specialDiscount
cmsDescription
countryApprovedProduct
displayFrontpage
infos {
languageId
urlClicked
dateLastClick
description
descriptionTop
}
}
}
Variables
{"id": 4, "languageId": 987}
Response
{
"data": {
"manufacturer": {
"id": 4,
"name": "abc123",
"code": "abc123",
"image": "abc123",
"brandPageImage": "xyz789",
"listingImage": "xyz789",
"sortOrder": 123,
"status": 987,
"dateAdded": "abc123",
"lastModified": "xyz789",
"fitValue": "xyz789",
"specialDiscount": 123,
"cmsDescription": 123,
"countryApprovedProduct": "xyz789",
"displayFrontpage": 123,
"infos": [ManufacturerInfo]
}
}
}
manufacturers
Description
Paginated list of manufacturers / brands.
Response
Returns [Manufacturer]
Example
Query
query manufacturers(
$limit: Int,
$offset: Int
) {
manufacturers(
limit: $limit,
offset: $offset
) {
id
name
code
image
brandPageImage
listingImage
sortOrder
status
dateAdded
lastModified
fitValue
specialDiscount
cmsDescription
countryApprovedProduct
displayFrontpage
infos {
languageId
urlClicked
dateLastClick
description
descriptionTop
}
}
}
Variables
{"limit": 987, "offset": 123}
Response
{
"data": {
"manufacturers": [
{
"id": "4",
"name": "abc123",
"code": "xyz789",
"image": "abc123",
"brandPageImage": "xyz789",
"listingImage": "xyz789",
"sortOrder": 123,
"status": 987,
"dateAdded": "abc123",
"lastModified": "abc123",
"fitValue": "xyz789",
"specialDiscount": 123,
"cmsDescription": 987,
"countryApprovedProduct": "xyz789",
"displayFrontpage": 987,
"infos": [ManufacturerInfo]
}
]
}
}
order
Example
Query
query order($id: ID!) {
order(id: $id) {
id
customerId
customerName
customerEmail
customer {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
deliveryAddress {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
billingAddress {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
status
datePurchased
lastModified
currency
currencyValue
paymentMethod
paymentCode
shippingMethod
shippingCode
shippingCost
deliveryQuantity
deliveryWeight
deliveryLength
deliveryWidth
deliveryHeight
deliveryComments
shippingLocationId
shippingLocationName
shippingLocationStreetAddress
shippingLocationPostcode
shippingLocationCity
paymentApiId
paymentProvider
paymentField
paymentInput
paymentTermId
shippingApiId
shippingApiTermId
shippingCostCentreId
shippingContractId
shippingContractCourier
discountType
discountAmount
trackingCode
trackingLink
warehouseCode
customerNotifiedFlag
trollyLocker
transactionId
ipAddress
ipIsp
pdfFiles
returnReason
referralId
ordersApiId
apiSent
emailSent
apiMessage
apiMessageDate
apiOrderStatusMessage
apiOrderStatusMessageDate
ordersPackingRulesJson
discountCoupons {
id
description
amount
discountType
dateStart
dateEnd
maxUse
minOrder
minOrderType
numberAvailable
customerType
discountedProducts
discountedProductsOld
allowedProducts
categories
products
customers
orders
manufacturers
shippingMethods
zones
}
items {
id
orderId
productId
productModel
productEan
productName
quantity
quantityReturned
price
originalPrice
tax
stockVariants
lineType
comment
customOptions
productCategories
productWeight
productLocation
variableImage
allowSubstitute
confirmFlag
confirmProductsQuantity
autoComment
variants {
...OrderItemVariantFragment
}
}
totals {
id
orderId
title
text
value
valueUnreturned
taxRate
taxAmount
class
sortOrder
}
bankPayments {
id
orderId
invoicePaymentDate
invoicePaymentValueDate
amount
}
vivawalletPayments {
id
orderId
customerId
paymentMethod
notificationId
orderCode
transactionUuid
sessionId
}
}
}
Variables
{"id": 4}
Response
{
"data": {
"order": {
"id": 4,
"customerId": 987,
"customerName": "abc123",
"customerEmail": "xyz789",
"customer": OrderParty,
"deliveryAddress": OrderParty,
"billingAddress": OrderParty,
"status": 123,
"datePurchased": "abc123",
"lastModified": "xyz789",
"currency": "xyz789",
"currencyValue": 123.45,
"paymentMethod": "abc123",
"paymentCode": "abc123",
"shippingMethod": "xyz789",
"shippingCode": "abc123",
"shippingCost": 987.65,
"deliveryQuantity": 123,
"deliveryWeight": 123.45,
"deliveryLength": 987.65,
"deliveryWidth": 987.65,
"deliveryHeight": 987.65,
"deliveryComments": "xyz789",
"shippingLocationId": "xyz789",
"shippingLocationName": "xyz789",
"shippingLocationStreetAddress": "abc123",
"shippingLocationPostcode": "abc123",
"shippingLocationCity": "xyz789",
"paymentApiId": "abc123",
"paymentProvider": "xyz789",
"paymentField": "xyz789",
"paymentInput": "xyz789",
"paymentTermId": "abc123",
"shippingApiId": "xyz789",
"shippingApiTermId": "xyz789",
"shippingCostCentreId": "abc123",
"shippingContractId": "abc123",
"shippingContractCourier": "abc123",
"discountType": "abc123",
"discountAmount": 987.65,
"trackingCode": "xyz789",
"trackingLink": "abc123",
"warehouseCode": "abc123",
"customerNotifiedFlag": 123,
"trollyLocker": 987.65,
"transactionId": "abc123",
"ipAddress": "xyz789",
"ipIsp": "abc123",
"pdfFiles": "xyz789",
"returnReason": "abc123",
"referralId": "xyz789",
"ordersApiId": "abc123",
"apiSent": 987,
"emailSent": 123,
"apiMessage": "abc123",
"apiMessageDate": "abc123",
"apiOrderStatusMessage": "xyz789",
"apiOrderStatusMessageDate": "abc123",
"ordersPackingRulesJson": "abc123",
"discountCoupons": [DiscountCoupon],
"items": [OrderItem],
"totals": [OrderTotal],
"bankPayments": [BankPayment],
"vivawalletPayments": [OrderVivawalletPayment]
}
}
}
orderItems
Description
Return every line on a single order, including each line's variants. Use this when rendering an order detail view where you need the line breakdown separately from the order header.
The same data is exposed through Order.items, which is preferable when you're already fetching the order and want to avoid a round trip. To modify lines on an existing order, see the addOrdersProduct / updateOrdersProduct / removeOrdersProduct mutations, which write to the same underlying orders_products row.
Response
Returns [OrderItem!]!
Arguments
| Name | Description |
|---|---|
orderId - ID!
|
Example
Query
query orderItems($orderId: ID!) {
orderItems(orderId: $orderId) {
id
orderId
productId
productModel
productEan
productName
quantity
quantityReturned
price
originalPrice
tax
stockVariants
lineType
comment
customOptions
productCategories
productWeight
productLocation
variableImage
allowSubstitute
confirmFlag
confirmProductsQuantity
autoComment
variants {
id
orderProductId
optionId
optionName
optionValue
price
pricePrefix
}
}
}
Variables
{"orderId": 4}
Response
{
"data": {
"orderItems": [
{
"id": 4,
"orderId": 987,
"productId": 987,
"productModel": "abc123",
"productEan": "xyz789",
"productName": "abc123",
"quantity": 123,
"quantityReturned": 123,
"price": 123.45,
"originalPrice": 123.45,
"tax": 987.65,
"stockVariants": "abc123",
"lineType": "xyz789",
"comment": "abc123",
"customOptions": {},
"productCategories": "abc123",
"productWeight": 987.65,
"productLocation": "abc123",
"variableImage": "xyz789",
"allowSubstitute": 123,
"confirmFlag": 987,
"confirmProductsQuantity": 987,
"autoComment": 987,
"variants": [OrderItemVariant]
}
]
}
}
orderStatusHistory
Description
Paginated status-transition timeline for one order, returned newest-first. Use this to render the "status history" widget on an admin order detail view, or to investigate when an order entered a particular state.
Pass statusId to filter to one specific status (e.g. only the Shipped transitions). For the broader change-log including non-status edits see ordersHistory; to record a new transition see the addOrdersStatusHistory mutation.
Response
Returns [OrderStatusHistory]
Example
Query
query orderStatusHistory(
$orderId: Int!,
$statusId: Int,
$limit: Int,
$offset: Int
) {
orderStatusHistory(
orderId: $orderId,
statusId: $statusId,
limit: $limit,
offset: $offset
) {
id
orderId
statusId
statusName
dateAdded
customerNotified
comments
}
}
Variables
{"orderId": 123, "statusId": 123, "limit": 987, "offset": 987}
Response
{
"data": {
"orderStatusHistory": [
{
"id": 4,
"orderId": 123,
"statusId": 123,
"statusName": "abc123",
"dateAdded": "xyz789",
"customerNotified": 123,
"comments": "abc123"
}
]
}
}
orderStatuses
Description
Return every order status defined for the connected tenant in the requested language. Use this to render status filters and badges in the admin panel, and to translate Order.status / OrderStatusHistory.statusId numeric ids to display labels.
Tenants extend the canonical id set with custom workflow stages and payment-provider intermediate states; resolve dynamically rather than hardcoding. For per-order transition history use orderStatusHistory; to record a new status transition use addOrdersStatusHistory.
Response
Returns [OrderStatus]
Arguments
| Name | Description |
|---|---|
languageId - Int!
|
Language id to fetch labels in (1=EN, 5=SV, 6=FI, 9=ES, 14=IT). |
Example
Query
query orderStatuses($languageId: Int!) {
orderStatuses(languageId: $languageId) {
id
languageId
code
name
apiFlag
apiId
colorCode
}
}
Variables
{"languageId": 987}
Response
{
"data": {
"orderStatuses": [
{
"id": 4,
"languageId": 987,
"code": "abc123",
"name": "abc123",
"apiFlag": 123,
"apiId": "abc123",
"colorCode": "xyz789"
}
]
}
}
orderTotals
Description
Return the totals breakdown for one order — the rows that render as the "Subtotal / Tax / Shipping / Discount / Grand total" block on an invoice or order summary.
Pass class to scope to one row category (e.g. just 'Tax' to render the tax breakdown). Omit it to receive every row sorted by sortOrder so the result can be rendered top-to-bottom directly.
Order.totals exposes the same data with the same arguments and is preferable when you're already fetching the order header.
Response
Returns [OrderTotal!]!
Example
Query
query orderTotals(
$orderId: ID!,
$class: String
) {
orderTotals(
orderId: $orderId,
class: $class
) {
id
orderId
title
text
value
valueUnreturned
taxRate
taxAmount
class
sortOrder
}
}
Variables
{
"orderId": "4",
"class": "xyz789"
}
Response
{
"data": {
"orderTotals": [
{
"id": "4",
"orderId": 987,
"title": "abc123",
"text": "abc123",
"value": 987.65,
"valueUnreturned": 123.45,
"taxRate": 987.65,
"taxAmount": 123.45,
"class": "abc123",
"sortOrder": 123
}
]
}
}
orders
Example
Query
query orders(
$limit: Int,
$offset: Int,
$customerId: Int
) {
orders(
limit: $limit,
offset: $offset,
customerId: $customerId
) {
id
customerId
customerName
customerEmail
customer {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
deliveryAddress {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
billingAddress {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
status
datePurchased
lastModified
currency
currencyValue
paymentMethod
paymentCode
shippingMethod
shippingCode
shippingCost
deliveryQuantity
deliveryWeight
deliveryLength
deliveryWidth
deliveryHeight
deliveryComments
shippingLocationId
shippingLocationName
shippingLocationStreetAddress
shippingLocationPostcode
shippingLocationCity
paymentApiId
paymentProvider
paymentField
paymentInput
paymentTermId
shippingApiId
shippingApiTermId
shippingCostCentreId
shippingContractId
shippingContractCourier
discountType
discountAmount
trackingCode
trackingLink
warehouseCode
customerNotifiedFlag
trollyLocker
transactionId
ipAddress
ipIsp
pdfFiles
returnReason
referralId
ordersApiId
apiSent
emailSent
apiMessage
apiMessageDate
apiOrderStatusMessage
apiOrderStatusMessageDate
ordersPackingRulesJson
discountCoupons {
id
description
amount
discountType
dateStart
dateEnd
maxUse
minOrder
minOrderType
numberAvailable
customerType
discountedProducts
discountedProductsOld
allowedProducts
categories
products
customers
orders
manufacturers
shippingMethods
zones
}
items {
id
orderId
productId
productModel
productEan
productName
quantity
quantityReturned
price
originalPrice
tax
stockVariants
lineType
comment
customOptions
productCategories
productWeight
productLocation
variableImage
allowSubstitute
confirmFlag
confirmProductsQuantity
autoComment
variants {
...OrderItemVariantFragment
}
}
totals {
id
orderId
title
text
value
valueUnreturned
taxRate
taxAmount
class
sortOrder
}
bankPayments {
id
orderId
invoicePaymentDate
invoicePaymentValueDate
amount
}
vivawalletPayments {
id
orderId
customerId
paymentMethod
notificationId
orderCode
transactionUuid
sessionId
}
}
}
Variables
{"limit": 987, "offset": 123, "customerId": 123}
Response
{
"data": {
"orders": [
{
"id": "4",
"customerId": 987,
"customerName": "xyz789",
"customerEmail": "xyz789",
"customer": OrderParty,
"deliveryAddress": OrderParty,
"billingAddress": OrderParty,
"status": 987,
"datePurchased": "xyz789",
"lastModified": "xyz789",
"currency": "abc123",
"currencyValue": 987.65,
"paymentMethod": "xyz789",
"paymentCode": "xyz789",
"shippingMethod": "xyz789",
"shippingCode": "xyz789",
"shippingCost": 987.65,
"deliveryQuantity": 123,
"deliveryWeight": 987.65,
"deliveryLength": 123.45,
"deliveryWidth": 987.65,
"deliveryHeight": 123.45,
"deliveryComments": "xyz789",
"shippingLocationId": "abc123",
"shippingLocationName": "abc123",
"shippingLocationStreetAddress": "xyz789",
"shippingLocationPostcode": "abc123",
"shippingLocationCity": "abc123",
"paymentApiId": "abc123",
"paymentProvider": "abc123",
"paymentField": "xyz789",
"paymentInput": "xyz789",
"paymentTermId": "xyz789",
"shippingApiId": "xyz789",
"shippingApiTermId": "xyz789",
"shippingCostCentreId": "xyz789",
"shippingContractId": "abc123",
"shippingContractCourier": "abc123",
"discountType": "xyz789",
"discountAmount": 123.45,
"trackingCode": "xyz789",
"trackingLink": "abc123",
"warehouseCode": "xyz789",
"customerNotifiedFlag": 987,
"trollyLocker": 987.65,
"transactionId": "abc123",
"ipAddress": "abc123",
"ipIsp": "abc123",
"pdfFiles": "xyz789",
"returnReason": "abc123",
"referralId": "abc123",
"ordersApiId": "xyz789",
"apiSent": 123,
"emailSent": 123,
"apiMessage": "xyz789",
"apiMessageDate": "abc123",
"apiOrderStatusMessage": "xyz789",
"apiOrderStatusMessageDate": "abc123",
"ordersPackingRulesJson": "xyz789",
"discountCoupons": [DiscountCoupon],
"items": [OrderItem],
"totals": [OrderTotal],
"bankPayments": [BankPayment],
"vivawalletPayments": [OrderVivawalletPayment]
}
]
}
}
ordersHistory
Description
Paginated audit log of changes for one order, returned newest-first. Use this for the "history" tab on an order detail view, for compliance audits, or to reconstruct who changed what and when on an order that's now in dispute.
Filter by userId to see only one administrator's edits, or by date range (startDate / endDate, ISO YYYY-MM-DD) to scope to one investigation window. For status-only transitions there's a more focused view via orderStatusHistory.
Response
Returns [OrderHistoryEntry!]!
Arguments
| Name | Description |
|---|---|
orderId - Int!
|
Order to fetch the change log for. |
userId - Int
|
Filter to changes made by this administrator user id. |
startDate - String
|
ISO date (YYYY-MM-DD) — return only entries on or after this date. |
endDate - String
|
ISO date (YYYY-MM-DD) — return only entries on or before this date. |
limit - Int
|
Maximum rows to return (default 10). |
offset - Int
|
Number of rows to skip for pagination (default 0). |
Example
Query
query ordersHistory(
$orderId: Int!,
$userId: Int,
$startDate: String,
$endDate: String,
$limit: Int,
$offset: Int
) {
ordersHistory(
orderId: $orderId,
userId: $userId,
startDate: $startDate,
endDate: $endDate,
limit: $limit,
offset: $offset
) {
id
orderId
entityType
entityId
columnName
oldValue
newValue
actionType
userId
userName
page
createdAt
}
}
Variables
{
"orderId": 123,
"userId": 123,
"startDate": "xyz789",
"endDate": "abc123",
"limit": 123,
"offset": 987
}
Response
{
"data": {
"ordersHistory": [
{
"id": 4,
"orderId": 123,
"entityType": "xyz789",
"entityId": 123,
"columnName": "xyz789",
"oldValue": "abc123",
"newValue": "abc123",
"actionType": "xyz789",
"userId": 987,
"userName": "abc123",
"page": "abc123",
"createdAt": "xyz789"
}
]
}
}
ordersVivawallet
Description
Look up Vivawallet payment records, by order, by transaction UUID, or by Vivawallet's orderCode. Use this for reconciliation against Vivawallet's merchant reports, for chargeback investigations (filter by transactionUuid), or to render the payment-trail block on an admin order detail.
For all order-attached payments at once, prefer Order.vivawalletPayments when you're already fetching the order. For Nets-provider notifications see ordersNets / OrderNetsNotification (separate table with a different shape).
Response
Returns [OrderVivawalletPayment!]!
Arguments
| Name | Description |
|---|---|
orderId - Int
|
Filter to records for this single order. |
transactionUuid - String
|
Filter to a specific Vivawallet transaction UUID (chargeback / refund lookup). |
orderCode - String
|
Filter to Vivawallet's orderCode for the payment session. |
limit - Int
|
Maximum rows to return. |
offset - Int
|
Number of rows to skip for pagination. |
Example
Query
query ordersVivawallet(
$orderId: Int,
$transactionUuid: String,
$orderCode: String,
$limit: Int,
$offset: Int
) {
ordersVivawallet(
orderId: $orderId,
transactionUuid: $transactionUuid,
orderCode: $orderCode,
limit: $limit,
offset: $offset
) {
id
orderId
customerId
paymentMethod
notificationId
orderCode
transactionUuid
sessionId
}
}
Variables
{
"orderId": 987,
"transactionUuid": "abc123",
"orderCode": "xyz789",
"limit": 123,
"offset": 987
}
Response
{
"data": {
"ordersVivawallet": [
{
"id": "4",
"orderId": 123,
"customerId": 123,
"paymentMethod": "xyz789",
"notificationId": 123,
"orderCode": "abc123",
"transactionUuid": "xyz789",
"sessionId": "xyz789"
}
]
}
}
product
Description
Fetch a single product by id, optionally localized via languageId.
Example
Query
query product(
$id: ID!,
$languageId: Int
) {
product(
id: $id,
languageId: $languageId
) {
id
name
model
image
price
description
shortDescription
material
}
}
Variables
{"id": 4, "languageId": 123}
Response
{
"data": {
"product": {
"id": 4,
"name": "abc123",
"model": "xyz789",
"image": "xyz789",
"price": 987.65,
"description": "xyz789",
"shortDescription": "xyz789",
"material": "abc123"
}
}
}
productAttributes
Response
Returns [ProductOption]
Example
Query
query productAttributes(
$productId: ID!,
$languageId: Int
) {
productAttributes(
productId: $productId,
languageId: $languageId
) {
id
name
code
description
sort
values {
id
name
code
specification
weight
sort
hex
priceDelta
pricePrefix
apiId
}
}
}
Variables
{"productId": 4, "languageId": 123}
Response
{
"data": {
"productAttributes": [
{
"id": 4,
"name": "abc123",
"code": "xyz789",
"description": "abc123",
"sort": 987,
"values": [ProductOptionValue]
}
]
}
}
productExtraImages
Response
Returns [ProductExtraImage]
Example
Query
query productExtraImages(
$productId: ID!,
$languageId: Int
) {
productExtraImages(
productId: $productId,
languageId: $languageId
) {
id
code
url
sort
optionId
description
}
}
Variables
{"productId": 4, "languageId": 987}
Response
{
"data": {
"productExtraImages": [
{
"id": 4,
"code": "abc123",
"url": "abc123",
"sort": 987,
"optionId": 123,
"description": "abc123"
}
]
}
}
productPriceHistory
Response
Returns [ProductPriceHistory]
Example
Query
query productPriceHistory(
$productId: ID!,
$stockId: ID,
$startDate: String,
$endDate: String,
$userName: String,
$limit: Int,
$offset: Int
) {
productPriceHistory(
productId: $productId,
stockId: $stockId,
startDate: $startDate,
endDate: $endDate,
userName: $userName,
limit: $limit,
offset: $offset
) {
id
productId
stockId
price
date
userName
}
}
Variables
{
"productId": 4,
"stockId": "4",
"startDate": "abc123",
"endDate": "abc123",
"userName": "abc123",
"limit": 123,
"offset": 987
}
Response
{
"data": {
"productPriceHistory": [
{
"id": "4",
"productId": "4",
"stockId": "4",
"price": 123.45,
"date": "xyz789",
"userName": "xyz789"
}
]
}
}
productStock
Response
Returns [ProductStock]
Example
Query
query productStock(
$productId: ID!,
$variant: String
) {
productStock(
productId: $productId,
variant: $variant
) {
id
productId
variant
quantity
price
priceOriginal
shelf
}
}
Variables
{"productId": 4, "variant": "xyz789"}
Response
{
"data": {
"productStock": [
{
"id": "4",
"productId": "4",
"variant": "abc123",
"quantity": 123,
"price": 987.65,
"priceOriginal": 987.65,
"shelf": "xyz789"
}
]
}
}
productVolumeAddonPrices
Response
Returns [ProductVolumeAddonPriceTier]
Arguments
| Name | Description |
|---|---|
productId - ID!
|
Example
Query
query productVolumeAddonPrices($productId: ID!) {
productVolumeAddonPrices(productId: $productId) {
minimumQuantity
unitPrice
}
}
Variables
{"productId": 4}
Response
{
"data": {
"productVolumeAddonPrices": [{"minimumQuantity": 987, "unitPrice": 123.45}]
}
}
productVolumeDiscounts
Response
Returns [ProductVolumeDiscountTier]
Arguments
| Name | Description |
|---|---|
productId - ID!
|
Example
Query
query productVolumeDiscounts($productId: ID!) {
productVolumeDiscounts(productId: $productId) {
minimumQuantity
discountPercentage
customerGroupId
customerId
customerType
}
}
Variables
{"productId": "4"}
Response
{
"data": {
"productVolumeDiscounts": [
{
"minimumQuantity": 987,
"discountPercentage": 987.65,
"customerGroupId": "xyz789",
"customerId": 123,
"customerType": "xyz789"
}
]
}
}
products
Description
Paginated list of products in the catalog.
Example
Query
query products(
$limit: Int,
$offset: Int
) {
products(
limit: $limit,
offset: $offset
) {
id
name
model
image
price
description
shortDescription
material
}
}
Variables
{"limit": 987, "offset": 123}
Response
{
"data": {
"products": [
{
"id": 4,
"name": "xyz789",
"model": "abc123",
"image": "xyz789",
"price": 123.45,
"description": "abc123",
"shortDescription": "abc123",
"material": "abc123"
}
]
}
}
productsMedia
Response
Returns [ProductMedia]
Example
Query
query productsMedia(
$productId: ID!,
$languageId: Int,
$includeCategory: Boolean
) {
productsMedia(
productId: $productId,
languageId: $languageId,
includeCategory: $includeCategory
) {
id
productId
categoryId
file
sortOrder
type
size
description
category {
id
code
sortOrder
name
}
}
}
Variables
{
"productId": "4",
"languageId": 987,
"includeCategory": true
}
Response
{
"data": {
"productsMedia": [
{
"id": 4,
"productId": "4",
"categoryId": 123,
"file": "abc123",
"sortOrder": 123,
"type": "abc123",
"size": "abc123",
"description": "xyz789",
"category": ProductMediaCategory
}
]
}
}
productsToCategories
Response
Returns [ProductCategoryLink]
Example
Query
query productsToCategories(
$productId: ID,
$categoryId: ID,
$limit: Int,
$offset: Int
) {
productsToCategories(
productId: $productId,
categoryId: $categoryId,
limit: $limit,
offset: $offset
) {
productId
categoryId
product {
id
name
model
image
price
description
shortDescription
material
}
category {
id
code
image
banner
parentId
sortOrder
position
descriptions {
...CategoryDescriptionFragment
}
}
}
}
Variables
{
"productId": 4,
"categoryId": "4",
"limit": 987,
"offset": 123
}
Response
{
"data": {
"productsToCategories": [
{
"productId": 4,
"categoryId": "4",
"product": Product,
"category": Category
}
]
}
}
quote
Example
Query
query quote($id: ID!) {
quote(id: $id) {
id
customerId
sessionId
ipAddress
statusId
dateAdded
dateModified
dateReminder
dateFollowUp
sendReminder
sendFollowUp
discountType
discountAmount
comment
cc
shipmentMethod
shipmentCode
shipmentPrice
warehouseId
items {
id
quoteId
productId
variant
quantity
discountedPrice
productGroup
comment
customOptions
bundleId
}
}
}
Variables
{"id": 4}
Response
{
"data": {
"quote": {
"id": "4",
"customerId": 123,
"sessionId": "xyz789",
"ipAddress": "abc123",
"statusId": 987,
"dateAdded": "abc123",
"dateModified": "abc123",
"dateReminder": "xyz789",
"dateFollowUp": "abc123",
"sendReminder": "xyz789",
"sendFollowUp": "abc123",
"discountType": "abc123",
"discountAmount": 987.65,
"comment": "xyz789",
"cc": "xyz789",
"shipmentMethod": "abc123",
"shipmentCode": "abc123",
"shipmentPrice": 987.65,
"warehouseId": 123,
"items": [QuoteProduct]
}
}
}
quoteFiles
Response
Returns [QuoteFile]
Arguments
| Name | Description |
|---|---|
quoteId - ID!
|
Example
Query
query quoteFiles($quoteId: ID!) {
quoteFiles(quoteId: $quoteId) {
id
quoteId
file
}
}
Variables
{"quoteId": "4"}
Response
{
"data": {
"quoteFiles": [
{
"id": 4,
"quoteId": 123,
"file": "xyz789"
}
]
}
}
quoteGroups
Response
Returns [QuoteGroup!]!
Arguments
| Name | Description |
|---|---|
languageId - Int!
|
Example
Query
query quoteGroups($languageId: Int!) {
quoteGroups(languageId: $languageId) {
id
languageId
name
}
}
Variables
{"languageId": 987}
Response
{
"data": {
"quoteGroups": [
{
"id": "4",
"languageId": 123,
"name": "xyz789"
}
]
}
}
quoteStatusHistory
Response
Returns [QuoteStatusEntry]
Arguments
| Name | Description |
|---|---|
quoteId - ID!
|
Example
Query
query quoteStatusHistory($quoteId: ID!) {
quoteStatusHistory(quoteId: $quoteId) {
id
quoteId
statusId
statusName
dateAdded
customerNotified
comments
}
}
Variables
{"quoteId": 4}
Response
{
"data": {
"quoteStatusHistory": [
{
"id": "4",
"quoteId": 987,
"statusId": 123,
"statusName": "xyz789",
"dateAdded": "abc123",
"customerNotified": 123,
"comments": "xyz789"
}
]
}
}
quoteStatuses
Response
Returns [QuoteStatus]
Arguments
| Name | Description |
|---|---|
languageId - Int!
|
Example
Query
query quoteStatuses($languageId: Int!) {
quoteStatuses(languageId: $languageId) {
id
languageId
name
code
}
}
Variables
{"languageId": 987}
Response
{
"data": {
"quoteStatuses": [
{
"id": "4",
"languageId": 123,
"name": "xyz789",
"code": "xyz789"
}
]
}
}
quotesByCustomer
Example
Query
query quotesByCustomer(
$customerId: Int!,
$statusId: Int,
$limit: Int
) {
quotesByCustomer(
customerId: $customerId,
statusId: $statusId,
limit: $limit
) {
id
customerId
sessionId
ipAddress
statusId
dateAdded
dateModified
dateReminder
dateFollowUp
sendReminder
sendFollowUp
discountType
discountAmount
comment
cc
shipmentMethod
shipmentCode
shipmentPrice
warehouseId
items {
id
quoteId
productId
variant
quantity
discountedPrice
productGroup
comment
customOptions
bundleId
}
}
}
Variables
{"customerId": 987, "statusId": 123, "limit": 123}
Response
{
"data": {
"quotesByCustomer": [
{
"id": 4,
"customerId": 123,
"sessionId": "xyz789",
"ipAddress": "xyz789",
"statusId": 987,
"dateAdded": "xyz789",
"dateModified": "abc123",
"dateReminder": "abc123",
"dateFollowUp": "xyz789",
"sendReminder": "xyz789",
"sendFollowUp": "xyz789",
"discountType": "abc123",
"discountAmount": 123.45,
"comment": "xyz789",
"cc": "abc123",
"shipmentMethod": "xyz789",
"shipmentCode": "abc123",
"shipmentPrice": 123.45,
"warehouseId": 987,
"items": [QuoteProduct]
}
]
}
}
quotesBySession
Response
Returns [Quote!]!
Example
Query
query quotesBySession(
$sessionId: String!,
$statusId: Int,
$limit: Int
) {
quotesBySession(
sessionId: $sessionId,
statusId: $statusId,
limit: $limit
) {
id
customerId
sessionId
ipAddress
statusId
dateAdded
dateModified
dateReminder
dateFollowUp
sendReminder
sendFollowUp
discountType
discountAmount
comment
cc
shipmentMethod
shipmentCode
shipmentPrice
warehouseId
items {
id
quoteId
productId
variant
quantity
discountedPrice
productGroup
comment
customOptions
bundleId
}
}
}
Variables
{
"sessionId": "xyz789",
"statusId": 987,
"limit": 123
}
Response
{
"data": {
"quotesBySession": [
{
"id": "4",
"customerId": 987,
"sessionId": "abc123",
"ipAddress": "xyz789",
"statusId": 987,
"dateAdded": "abc123",
"dateModified": "xyz789",
"dateReminder": "xyz789",
"dateFollowUp": "abc123",
"sendReminder": "xyz789",
"sendFollowUp": "xyz789",
"discountType": "xyz789",
"discountAmount": 123.45,
"comment": "xyz789",
"cc": "abc123",
"shipmentMethod": "abc123",
"shipmentCode": "xyz789",
"shipmentPrice": 123.45,
"warehouseId": 987,
"items": [QuoteProduct]
}
]
}
}
reviewSummaries
Description
Aggregate review counts and ratings across one or many products.
Response
Returns [ReviewSummary]
Example
Query
query reviewSummaries(
$productId: ID,
$limit: Int,
$offset: Int
) {
reviewSummaries(
productId: $productId,
limit: $limit,
offset: $offset
) {
productId
reviewsCount
ratingSummary
}
}
Variables
{"productId": 4, "limit": 123, "offset": 123}
Response
{
"data": {
"reviewSummaries": [
{
"productId": "4",
"reviewsCount": 987,
"ratingSummary": 987
}
]
}
}
reviews
Description
Paginated list of reviews, optionally filtered by product, status, or language.
Response
Returns [Review]
Example
Query
query reviews(
$productId: ID,
$statusId: Int,
$languageId: Int,
$limit: Int,
$offset: Int
) {
reviews(
productId: $productId,
statusId: $statusId,
languageId: $languageId,
limit: $limit,
offset: $offset
) {
id
productId
customerId
nickname
country
isRecommended
verifiedBuyer
count
statusId
statusCode
dates {
createdAt
orderDate
answerDate
}
details {
languageId
title
detail
answer
}
}
}
Variables
{
"productId": 4,
"statusId": 123,
"languageId": 123,
"limit": 123,
"offset": 123
}
Response
{
"data": {
"reviews": [
{
"id": 4,
"productId": 4,
"customerId": 123,
"nickname": "xyz789",
"country": "xyz789",
"isRecommended": false,
"verifiedBuyer": true,
"count": 123,
"statusId": 123,
"statusCode": "abc123",
"dates": ReviewDates,
"details": [ReviewDetail]
}
]
}
}
serviceCategories
Response
Returns [ServiceCategory]
Example
Query
query serviceCategories(
$languageId: Int!,
$parentId: Int,
$displayFooter: Boolean
) {
serviceCategories(
languageId: $languageId,
parentId: $parentId,
displayFooter: $displayFooter
) {
id
parentId
sortOrder
displayFooter
svgIcon
descriptions {
languageId
name
url
html
}
children {
id
parentId
sortOrder
displayFooter
svgIcon
descriptions {
...ServiceCategoryDescriptionFragment
}
children {
...ServiceCategoryFragment
}
}
}
}
Variables
{"languageId": 123, "parentId": 123, "displayFooter": true}
Response
{
"data": {
"serviceCategories": [
{
"id": "4",
"parentId": 123,
"sortOrder": 123,
"displayFooter": 987,
"svgIcon": "abc123",
"descriptions": [ServiceCategoryDescription],
"children": [ServiceCategory]
}
]
}
}
services
Response
Returns [Service]
Example
Query
query services(
$languageId: Int!,
$categoryId: Int,
$displayFooter: Boolean
) {
services(
languageId: $languageId,
categoryId: $categoryId,
displayFooter: $displayFooter
) {
id
categoryId
image
sortOrder
displayFooter
googleFeed
css
externalJs
externalCss
svgIcon
descriptions {
languageId
name
url
html
metaTitle
metaDescription
}
category {
id
parentId
sortOrder
displayFooter
svgIcon
descriptions {
...ServiceCategoryDescriptionFragment
}
children {
...ServiceCategoryFragment
}
}
}
}
Variables
{"languageId": 987, "categoryId": 123, "displayFooter": false}
Response
{
"data": {
"services": [
{
"id": 4,
"categoryId": 987,
"image": "xyz789",
"sortOrder": 123,
"displayFooter": 987,
"googleFeed": 123,
"css": "xyz789",
"externalJs": "abc123",
"externalCss": "xyz789",
"svgIcon": "xyz789",
"descriptions": [ServiceDescription],
"category": ServiceCategory
}
]
}
}
warehouseStock
Response
Returns [WarehouseStock]
Example
Query
query warehouseStock(
$warehouseId: Int,
$productId: Int
) {
warehouseStock(
warehouseId: $warehouseId,
productId: $productId
) {
id
warehouseId
productId
quantity
}
}
Variables
{"warehouseId": 987, "productId": 123}
Response
{
"data": {
"warehouseStock": [
{
"id": "4",
"warehouseId": 987,
"productId": 123,
"quantity": 987
}
]
}
}
warehouses
Response
Returns [Warehouse]
Example
Query
query warehouses(
$limit: Int,
$offset: Int
) {
warehouses(
limit: $limit,
offset: $offset
) {
id
name
code
phone
email
visible
stock {
id
warehouseId
productId
quantity
}
}
}
Variables
{"limit": 987, "offset": 987}
Response
{
"data": {
"warehouses": [
{
"id": "4",
"name": "xyz789",
"code": "xyz789",
"phone": "xyz789",
"email": "abc123",
"visible": true,
"stock": [WarehouseStock]
}
]
}
}
Mutations
_empty
Response
Returns a String
Example
Query
mutation _empty {
_empty
}
Response
{"data": {"_empty": "xyz789"}}
addOrdersProduct
Description
Add a new line to an existing order. Use this from the admin panel or an ERP integration to extend an order after it has been placed — e.g. to add an upsold accessory, an apology gift, or a manual correction line. Returns the inserted OrdersProduct including its assigned id.
To attach configurable-option selections to the new line, follow up with addOrdersProductsVariant once you have the returned id.
Response
Returns an OrdersProduct!
Arguments
| Name | Description |
|---|---|
input - AddOrdersProductInput!
|
Example
Query
mutation addOrdersProduct($input: AddOrdersProductInput!) {
addOrdersProduct(input: $input) {
id
orderId
productId
productModel
productEan
productName
price
originalPrice
tax
quantity
quantityReturned
stockVariants
lineType
comment
customOptions
}
}
Variables
{"input": AddOrdersProductInput}
Response
{
"data": {
"addOrdersProduct": {
"id": 4,
"orderId": 987,
"productId": 987,
"productModel": "xyz789",
"productEan": "abc123",
"productName": "xyz789",
"price": 987.65,
"originalPrice": 987.65,
"tax": 123.45,
"quantity": 123,
"quantityReturned": 987,
"stockVariants": "abc123",
"lineType": "xyz789",
"comment": "xyz789",
"customOptions": {}
}
}
}
addOrdersProductsVariant
Description
Attach a new variant selection to an existing order line. Use this after addOrdersProduct (or on an existing line) to record a size/colour/personalisation choice that affects the line's total via pricePrefix. Returns the inserted OrdersProductsVariant.
Response
Returns an OrdersProductsVariant!
Arguments
| Name | Description |
|---|---|
input - AddOrdersProductsVariantInput!
|
Example
Query
mutation addOrdersProductsVariant($input: AddOrdersProductsVariantInput!) {
addOrdersProductsVariant(input: $input) {
id
orderId
orderProductId
optionId
optionName
optionValue
price
pricePrefix
}
}
Variables
{"input": AddOrdersProductsVariantInput}
Response
{
"data": {
"addOrdersProductsVariant": {
"id": "4",
"orderId": 987,
"orderProductId": 987,
"optionId": 123,
"optionName": "abc123",
"optionValue": "abc123",
"price": 987.65,
"pricePrefix": "abc123"
}
}
}
addOrdersStatusHistory
Description
Record a new status transition on an order. Used by the admin panel and integrations to advance an order through its workflow (Received → Packing → Shipped → Delivered) and to optionally notify the customer in the same call.
Two side-effect flags:
- notifyCustomer: when true, emits an order-status notification email to the customer using the tenant's notification template for the new status.
- updateOrderStatus: when true (default), also writes the new statusId to orders.orders_status so it becomes the order's current status. Set false to record an audit-only transition without changing the visible status.
The transition is also surfaced through the orderStatusHistory read query and as an OrderHistoryEntry on the broader audit log.
Response
Returns an OrdersStatusHistoryEntry!
Arguments
| Name | Description |
|---|---|
input - OrdersStatusHistoryInput!
|
Example
Query
mutation addOrdersStatusHistory($input: OrdersStatusHistoryInput!) {
addOrdersStatusHistory(input: $input) {
id
orderId
statusId
dateAdded
customerNotified
comments
}
}
Variables
{"input": OrdersStatusHistoryInput}
Response
{
"data": {
"addOrdersStatusHistory": {
"id": "4",
"orderId": 123,
"statusId": 987,
"dateAdded": "xyz789",
"customerNotified": 123,
"comments": "xyz789"
}
}
}
addQuoteFile
Response
Returns a QuoteFile!
Example
Query
mutation addQuoteFile(
$quoteId: ID!,
$file: String!
) {
addQuoteFile(
quoteId: $quoteId,
file: $file
) {
id
quoteId
file
}
}
Variables
{"quoteId": 4, "file": "xyz789"}
Response
{
"data": {
"addQuoteFile": {
"id": "4",
"quoteId": 123,
"file": "xyz789"
}
}
}
addQuoteStatusHistory
Response
Returns a QuoteStatusEntry
Arguments
| Name | Description |
|---|---|
input - AddQuoteStatusHistoryInput!
|
|
updateNotifications - QuoteNotificationFlagsInput
|
Example
Query
mutation addQuoteStatusHistory(
$input: AddQuoteStatusHistoryInput!,
$updateNotifications: QuoteNotificationFlagsInput
) {
addQuoteStatusHistory(
input: $input,
updateNotifications: $updateNotifications
) {
id
quoteId
statusId
statusName
dateAdded
customerNotified
comments
}
}
Variables
{
"input": AddQuoteStatusHistoryInput,
"updateNotifications": QuoteNotificationFlagsInput
}
Response
{
"data": {
"addQuoteStatusHistory": {
"id": "4",
"quoteId": 123,
"statusId": 123,
"statusName": "abc123",
"dateAdded": "abc123",
"customerNotified": 987,
"comments": "abc123"
}
}
}
attachDiscountCouponToCustomer
Response
Returns a DiscountCouponCustomerLink!
Arguments
| Name | Description |
|---|---|
input - DiscountCouponCustomerLinkInput!
|
Example
Query
mutation attachDiscountCouponToCustomer($input: DiscountCouponCustomerLinkInput!) {
attachDiscountCouponToCustomer(input: $input) {
couponCode
customerId
}
}
Variables
{"input": DiscountCouponCustomerLinkInput}
Response
{
"data": {
"attachDiscountCouponToCustomer": {
"couponCode": 4,
"customerId": "4"
}
}
}
createCustomer
Description
Create a registered customer account with a password. Email address must be unique across registered customers in the tenant. Returns the created Customer including its assigned id.
Response
Returns a Customer!
Arguments
| Name | Description |
|---|---|
input - CreateCustomerInput!
|
Example
Query
mutation createCustomer($input: CreateCustomerInput!) {
createCustomer(input: $input) {
id
gender
firstname
lastname
emailAddress
defaultAddressId
defaultDeliveryAddressId
telephone
newsletter
freeShipping
admin
type
group
approved
undeliveredOrders
blockPayments
blockShipments
temporaryCustomer
emailSent
apiId
apiBillingId
grantWhatsapp
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
info {
dateOfLastLogon
numberOfLogons
numberOfFailedLogins
dateOfLastLoginFail
dateAccountCreated
dateAccountLastModified
sourceId
globalProductNotifications
}
addresses {
id
gender
company
firstname
lastname
streetAddress
vatid
postcode
city
state
countryId
zoneId
comments
billingStreetAddress
billingFirstname
billingLastname
billingPostcode
billingCity
billingCountryId
billingCompany
billingVatid
billingZoneId
billingState
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
}
}
}
Variables
{"input": CreateCustomerInput}
Response
{
"data": {
"createCustomer": {
"id": "4",
"gender": "xyz789",
"firstname": "xyz789",
"lastname": "abc123",
"emailAddress": "abc123",
"defaultAddressId": 987,
"defaultDeliveryAddressId": 987,
"telephone": "xyz789",
"newsletter": false,
"freeShipping": 987.65,
"admin": 123,
"type": 123,
"group": "xyz789",
"approved": false,
"undeliveredOrders": 987,
"blockPayments": "abc123",
"blockShipments": "abc123",
"temporaryCustomer": false,
"emailSent": false,
"apiId": "xyz789",
"apiBillingId": 987,
"grantWhatsapp": true,
"billingOperatorId": 123,
"billingInvoiceAddress": "abc123",
"billingReference": "abc123",
"billingReferenceRequired": false,
"info": CustomerInfo,
"addresses": [Address]
}
}
}
createFavorite
Description
Add a product to a customer's wishlist. Returns the created favorite, or null if the (customer, product) pair already exists.
Response
Returns a CustomerFavorite
Arguments
| Name | Description |
|---|---|
input - AddCustomerFavoriteInput!
|
Example
Query
mutation createFavorite($input: AddCustomerFavoriteInput!) {
createFavorite(input: $input) {
id
customersId
productsId
}
}
Variables
{"input": AddCustomerFavoriteInput}
Response
{
"data": {
"createFavorite": {
"id": "4",
"customersId": 123,
"productsId": 987
}
}
}
createGuestCustomer
Description
Create a guest customer for one-time checkout, without a password. Guest customers may share email addresses with each other and with registered customers. Returns the created Customer including its assigned id.
Response
Returns a Customer!
Arguments
| Name | Description |
|---|---|
input - CreateGuestCustomerInput!
|
Example
Query
mutation createGuestCustomer($input: CreateGuestCustomerInput!) {
createGuestCustomer(input: $input) {
id
gender
firstname
lastname
emailAddress
defaultAddressId
defaultDeliveryAddressId
telephone
newsletter
freeShipping
admin
type
group
approved
undeliveredOrders
blockPayments
blockShipments
temporaryCustomer
emailSent
apiId
apiBillingId
grantWhatsapp
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
info {
dateOfLastLogon
numberOfLogons
numberOfFailedLogins
dateOfLastLoginFail
dateAccountCreated
dateAccountLastModified
sourceId
globalProductNotifications
}
addresses {
id
gender
company
firstname
lastname
streetAddress
vatid
postcode
city
state
countryId
zoneId
comments
billingStreetAddress
billingFirstname
billingLastname
billingPostcode
billingCity
billingCountryId
billingCompany
billingVatid
billingZoneId
billingState
billingOperatorId
billingInvoiceAddress
billingReference
billingReferenceRequired
}
}
}
Variables
{"input": CreateGuestCustomerInput}
Response
{
"data": {
"createGuestCustomer": {
"id": 4,
"gender": "xyz789",
"firstname": "abc123",
"lastname": "abc123",
"emailAddress": "xyz789",
"defaultAddressId": 987,
"defaultDeliveryAddressId": 987,
"telephone": "abc123",
"newsletter": false,
"freeShipping": 123.45,
"admin": 987,
"type": 123,
"group": "xyz789",
"approved": false,
"undeliveredOrders": 123,
"blockPayments": "xyz789",
"blockShipments": "abc123",
"temporaryCustomer": true,
"emailSent": true,
"apiId": "abc123",
"apiBillingId": 987,
"grantWhatsapp": false,
"billingOperatorId": 987,
"billingInvoiceAddress": "xyz789",
"billingReference": "abc123",
"billingReferenceRequired": false,
"info": CustomerInfo,
"addresses": [Address]
}
}
}
createOrder
Description
Create an order with line items, addresses, and an optional payment intent. The status defaults to 1 (created) unless an explicit status id is supplied.
Response
Returns an Order!
Arguments
| Name | Description |
|---|---|
input - CreateOrderInput!
|
Example
Query
mutation createOrder($input: CreateOrderInput!) {
createOrder(input: $input) {
id
customerId
customerName
customerEmail
customer {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
deliveryAddress {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
billingAddress {
name
company
vatId
streetAddress
city
postcode
state
country
telephone
emailAddress
addressFormatId
invoiceAddress
operatorId
reference
}
status
datePurchased
lastModified
currency
currencyValue
paymentMethod
paymentCode
shippingMethod
shippingCode
shippingCost
deliveryQuantity
deliveryWeight
deliveryLength
deliveryWidth
deliveryHeight
deliveryComments
shippingLocationId
shippingLocationName
shippingLocationStreetAddress
shippingLocationPostcode
shippingLocationCity
paymentApiId
paymentProvider
paymentField
paymentInput
paymentTermId
shippingApiId
shippingApiTermId
shippingCostCentreId
shippingContractId
shippingContractCourier
discountType
discountAmount
trackingCode
trackingLink
warehouseCode
customerNotifiedFlag
trollyLocker
transactionId
ipAddress
ipIsp
pdfFiles
returnReason
referralId
ordersApiId
apiSent
emailSent
apiMessage
apiMessageDate
apiOrderStatusMessage
apiOrderStatusMessageDate
ordersPackingRulesJson
discountCoupons {
id
description
amount
discountType
dateStart
dateEnd
maxUse
minOrder
minOrderType
numberAvailable
customerType
discountedProducts
discountedProductsOld
allowedProducts
categories
products
customers
orders
manufacturers
shippingMethods
zones
}
items {
id
orderId
productId
productModel
productEan
productName
quantity
quantityReturned
price
originalPrice
tax
stockVariants
lineType
comment
customOptions
productCategories
productWeight
productLocation
variableImage
allowSubstitute
confirmFlag
confirmProductsQuantity
autoComment
variants {
...OrderItemVariantFragment
}
}
totals {
id
orderId
title
text
value
valueUnreturned
taxRate
taxAmount
class
sortOrder
}
bankPayments {
id
orderId
invoicePaymentDate
invoicePaymentValueDate
amount
}
vivawalletPayments {
id
orderId
customerId
paymentMethod
notificationId
orderCode
transactionUuid
sessionId
}
}
}
Variables
{"input": CreateOrderInput}
Response
{
"data": {
"createOrder": {
"id": 4,
"customerId": 987,
"customerName": "xyz789",
"customerEmail": "xyz789",
"customer": OrderParty,
"deliveryAddress": OrderParty,
"billingAddress": OrderParty,
"status": 123,
"datePurchased": "xyz789",
"lastModified": "abc123",
"currency": "xyz789",
"currencyValue": 987.65,
"paymentMethod": "abc123",
"paymentCode": "abc123",
"shippingMethod": "abc123",
"shippingCode": "xyz789",
"shippingCost": 123.45,
"deliveryQuantity": 123,
"deliveryWeight": 987.65,
"deliveryLength": 123.45,
"deliveryWidth": 123.45,
"deliveryHeight": 123.45,
"deliveryComments": "abc123",
"shippingLocationId": "xyz789",
"shippingLocationName": "abc123",
"shippingLocationStreetAddress": "xyz789",
"shippingLocationPostcode": "xyz789",
"shippingLocationCity": "xyz789",
"paymentApiId": "abc123",
"paymentProvider": "abc123",
"paymentField": "xyz789",
"paymentInput": "abc123",
"paymentTermId": "xyz789",
"shippingApiId": "abc123",
"shippingApiTermId": "abc123",
"shippingCostCentreId": "abc123",
"shippingContractId": "xyz789",
"shippingContractCourier": "xyz789",
"discountType": "xyz789",
"discountAmount": 987.65,
"trackingCode": "abc123",
"trackingLink": "abc123",
"warehouseCode": "abc123",
"customerNotifiedFlag": 123,
"trollyLocker": 987.65,
"transactionId": "xyz789",
"ipAddress": "xyz789",
"ipIsp": "xyz789",
"pdfFiles": "abc123",
"returnReason": "xyz789",
"referralId": "abc123",
"ordersApiId": "abc123",
"apiSent": 987,
"emailSent": 987,
"apiMessage": "abc123",
"apiMessageDate": "abc123",
"apiOrderStatusMessage": "abc123",
"apiOrderStatusMessageDate": "abc123",
"ordersPackingRulesJson": "xyz789",
"discountCoupons": [DiscountCoupon],
"items": [OrderItem],
"totals": [OrderTotal],
"bankPayments": [BankPayment],
"vivawalletPayments": [OrderVivawalletPayment]
}
}
}
createProductCustomOption
Response
Returns a ProductCustomOption
Arguments
| Name | Description |
|---|---|
input - CreateProductCustomOptionInput!
|
Example
Query
mutation createProductCustomOption($input: CreateProductCustomOptionInput!) {
createProductCustomOption(input: $input) {
id
productId
productsOptionsId
required
position
type
}
}
Variables
{"input": CreateProductCustomOptionInput}
Response
{
"data": {
"createProductCustomOption": {
"id": "4",
"productId": 123,
"productsOptionsId": 987,
"required": false,
"position": 987,
"type": "xyz789"
}
}
}
createQuote
Description
Create a quote (B2B request-for-pricing) with one or more line items.
Response
Returns a Quote!
Arguments
| Name | Description |
|---|---|
input - CreateQuoteInput!
|
Example
Query
mutation createQuote($input: CreateQuoteInput!) {
createQuote(input: $input) {
id
customerId
sessionId
ipAddress
statusId
dateAdded
dateModified
dateReminder
dateFollowUp
sendReminder
sendFollowUp
discountType
discountAmount
comment
cc
shipmentMethod
shipmentCode
shipmentPrice
warehouseId
items {
id
quoteId
productId
variant
quantity
discountedPrice
productGroup
comment
customOptions
bundleId
}
}
}
Variables
{"input": CreateQuoteInput}
Response
{
"data": {
"createQuote": {
"id": 4,
"customerId": 987,
"sessionId": "abc123",
"ipAddress": "abc123",
"statusId": 987,
"dateAdded": "abc123",
"dateModified": "abc123",
"dateReminder": "abc123",
"dateFollowUp": "abc123",
"sendReminder": "abc123",
"sendFollowUp": "xyz789",
"discountType": "xyz789",
"discountAmount": 123.45,
"comment": "abc123",
"cc": "xyz789",
"shipmentMethod": "abc123",
"shipmentCode": "xyz789",
"shipmentPrice": 123.45,
"warehouseId": 123,
"items": [QuoteProduct]
}
}
}
deleteFavorite
Description
Remove a product from a customer's wishlist. Returns true if a row was deleted, false if no matching favorite was found.
Response
Returns a Boolean
Arguments
| Name | Description |
|---|---|
input - RemoveCustomerFavoriteInput!
|
Example
Query
mutation deleteFavorite($input: RemoveCustomerFavoriteInput!) {
deleteFavorite(input: $input)
}
Variables
{"input": RemoveCustomerFavoriteInput}
Response
{"data": {"deleteFavorite": false}}
grantCustomerProductAccess
Response
Returns a CustomerProductInclusion!
Arguments
| Name | Description |
|---|---|
input - CustomerProductInclusionInput!
|
Example
Query
mutation grantCustomerProductAccess($input: CustomerProductInclusionInput!) {
grantCustomerProductAccess(input: $input) {
id
customerId
productId
}
}
Variables
{"input": CustomerProductInclusionInput}
Response
{
"data": {
"grantCustomerProductAccess": {"id": 4, "customerId": 987, "productId": 987}
}
}
removeDiscountCouponFromCustomer
Response
Returns a Boolean!
Arguments
| Name | Description |
|---|---|
input - DiscountCouponCustomerLinkInput!
|
Example
Query
mutation removeDiscountCouponFromCustomer($input: DiscountCouponCustomerLinkInput!) {
removeDiscountCouponFromCustomer(input: $input)
}
Variables
{"input": DiscountCouponCustomerLinkInput}
Response
{"data": {"removeDiscountCouponFromCustomer": true}}
removeOrdersProduct
Description
Delete an order line. Returns true on success, false when no row matched the given id. Variants attached to the line are deleted by cascade. This is a hard delete — for refunds prefer adding a 'refund' line via addOrdersProduct, which preserves the audit trail.
removeOrdersProductsVariant
Description
Delete a variant selection from an order line. Returns true on success, false when no row matched. Hard delete — does not change the parent line's price; recompute the line price separately if needed.
removeProductCustomOption
revokeCustomerProductAccess
Response
Returns a Boolean!
Arguments
| Name | Description |
|---|---|
input - CustomerProductInclusionInput!
|
Example
Query
mutation revokeCustomerProductAccess($input: CustomerProductInclusionInput!) {
revokeCustomerProductAccess(input: $input)
}
Variables
{"input": CustomerProductInclusionInput}
Response
{"data": {"revokeCustomerProductAccess": true}}
updateOrdersProduct
Description
Partially update an existing order line. Only the fields included in the input payload are written; omitted fields are left as-is. Returns the updated OrdersProduct.
For variant selections on the line, use updateOrdersProductsVariant instead — they live on a separate table.
Response
Returns an OrdersProduct!
Arguments
| Name | Description |
|---|---|
id - ID!
|
|
input - UpdateOrdersProductInput!
|
Example
Query
mutation updateOrdersProduct(
$id: ID!,
$input: UpdateOrdersProductInput!
) {
updateOrdersProduct(
id: $id,
input: $input
) {
id
orderId
productId
productModel
productEan
productName
price
originalPrice
tax
quantity
quantityReturned
stockVariants
lineType
comment
customOptions
}
}
Variables
{
"id": "4",
"input": UpdateOrdersProductInput
}
Response
{
"data": {
"updateOrdersProduct": {
"id": 4,
"orderId": 123,
"productId": 123,
"productModel": "xyz789",
"productEan": "xyz789",
"productName": "xyz789",
"price": 987.65,
"originalPrice": 987.65,
"tax": 123.45,
"quantity": 987,
"quantityReturned": 987,
"stockVariants": "xyz789",
"lineType": "abc123",
"comment": "xyz789",
"customOptions": {}
}
}
}
updateOrdersProductsVariant
Description
Partially update an existing variant selection. Only the fields in the input payload are written. Useful for correcting an option name or price delta after the order was placed without removing and re-adding the variant. Returns the updated OrdersProductsVariant.
Response
Returns an OrdersProductsVariant!
Arguments
| Name | Description |
|---|---|
id - ID!
|
|
input - UpdateOrdersProductsVariantInput!
|
Example
Query
mutation updateOrdersProductsVariant(
$id: ID!,
$input: UpdateOrdersProductsVariantInput!
) {
updateOrdersProductsVariant(
id: $id,
input: $input
) {
id
orderId
orderProductId
optionId
optionName
optionValue
price
pricePrefix
}
}
Variables
{
"id": "4",
"input": UpdateOrdersProductsVariantInput
}
Response
{
"data": {
"updateOrdersProductsVariant": {
"id": 4,
"orderId": 123,
"orderProductId": 123,
"optionId": 123,
"optionName": "xyz789",
"optionValue": "abc123",
"price": 123.45,
"pricePrefix": "xyz789"
}
}
}
updateProductCustomOption
Response
Returns a ProductCustomOption
Arguments
| Name | Description |
|---|---|
id - ID!
|
|
input - UpdateProductCustomOptionInput!
|
Example
Query
mutation updateProductCustomOption(
$id: ID!,
$input: UpdateProductCustomOptionInput!
) {
updateProductCustomOption(
id: $id,
input: $input
) {
id
productId
productsOptionsId
required
position
type
}
}
Variables
{"id": 4, "input": UpdateProductCustomOptionInput}
Response
{
"data": {
"updateProductCustomOption": {
"id": "4",
"productId": 987,
"productsOptionsId": 123,
"required": false,
"position": 987,
"type": "abc123"
}
}
}
upsertOrdersNetsNotification
Description
Idempotently record a Nets payment notification. Inserts a new orders_nets row on first call; on a duplicate ordersPaytrailId it updates the row with the latest webhook payload (newer notificationId, transactionId, stamp, reference, amount, error).
Use this from the Nets webhook handler so retries and out-of-order deliveries from Nets's side don't create duplicate rows. Returns the persisted OrderNetsNotification, or null on a no-op.
For Vivawallet, see ordersVivawallet (separate table with a different shape).
Response
Returns an OrderNetsNotification
Arguments
| Name | Description |
|---|---|
input - OrdersNetsNotificationInput!
|
Example
Query
mutation upsertOrdersNetsNotification($input: OrdersNetsNotificationInput!) {
upsertOrdersNetsNotification(input: $input) {
ordersPaytrailId
customersId
notificationId
sessionId
transactionId
stamp
reference
amount
error
}
}
Variables
{"input": OrdersNetsNotificationInput}
Response
{
"data": {
"upsertOrdersNetsNotification": {
"ordersPaytrailId": 123,
"customersId": 123,
"notificationId": 987,
"sessionId": "xyz789",
"transactionId": "xyz789",
"stamp": "xyz789",
"reference": "xyz789",
"amount": 987.65,
"error": "xyz789"
}
}
}
Types
ActionRecorderEntry
Example
{
"id": 4,
"module": "xyz789",
"userId": 123,
"userName": "abc123",
"identifier": "xyz789",
"userAgent": "xyz789",
"success": false,
"dateAdded": "abc123"
}
ActionRecorderPage
Fields
| Field Name | Description |
|---|---|
total - Int!
|
|
entries - [ActionRecorderEntry!]!
|
Example
{"total": 123, "entries": [ActionRecorderEntry]}
AddCustomerFavoriteInput
AddOrdersProductInput
Description
Input shape for adding a new line to an existing order via addOrdersProduct.
Fields
| Input Field | Description |
|---|---|
orderId - ID!
|
Order to attach the new line to. |
productId - Int
|
Catalog product id, when the line corresponds to a real product. Null for free-form lines. |
productModel - String
|
|
productEan - String
|
|
productName - String!
|
Display name shown on the receipt. Required. |
price - Float!
|
Unit price to charge. |
originalPrice - Float
|
Catalog price for discount-tracking. Falls back to price when omitted. |
tax - Float
|
Tax rate as percentage. Falls back to 0 when omitted. |
quantity - Int!
|
|
stockVariants - String
|
|
lineType - String
|
Line type — defaults to 'item'. |
comment - String
|
|
customOptions - JSON
|
Example
{
"orderId": "4",
"productId": 987,
"productModel": "abc123",
"productEan": "xyz789",
"productName": "xyz789",
"price": 123.45,
"originalPrice": 123.45,
"tax": 123.45,
"quantity": 123,
"stockVariants": "xyz789",
"lineType": "abc123",
"comment": "xyz789",
"customOptions": {}
}
AddOrdersProductsVariantInput
Description
Input shape for attaching a new variant selection to an existing order line.
Fields
| Input Field | Description |
|---|---|
orderId - ID!
|
Order this line belongs to. |
orderProductId - ID!
|
Order line to attach the variant to. |
optionId - Int!
|
Product option id from the catalog. |
optionName - String!
|
Display label of the option. |
optionValue - String!
|
Selected value. |
price - Float!
|
Price delta this variant contributes. |
pricePrefix - String
|
How price is applied — defaults to '+' (additive) when omitted. |
Example
{
"orderId": "4",
"orderProductId": 4,
"optionId": 987,
"optionName": "abc123",
"optionValue": "abc123",
"price": 987.65,
"pricePrefix": "abc123"
}
AddQuoteStatusHistoryInput
Address
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Unique primary key for the Customer row. |
gender - String
|
|
company - String
|
|
firstname - String!
|
|
lastname - String!
|
|
streetAddress - String!
|
|
vatid - String
|
|
postcode - String!
|
|
city - String!
|
|
state - String
|
|
countryId - Int
|
|
zoneId - Int
|
|
comments - String
|
|
billingStreetAddress - String
|
|
billingFirstname - String
|
|
billingLastname - String
|
|
billingPostcode - String
|
|
billingCity - String
|
|
billingCountryId - String
|
|
billingCompany - String
|
|
billingVatid - String
|
|
billingZoneId - String
|
|
billingState - String
|
|
billingOperatorId - Int
|
|
billingInvoiceAddress - String
|
|
billingReference - String
|
|
billingReferenceRequired - Boolean
|
Example
{
"id": 4,
"gender": "abc123",
"company": "abc123",
"firstname": "abc123",
"lastname": "xyz789",
"streetAddress": "abc123",
"vatid": "abc123",
"postcode": "xyz789",
"city": "abc123",
"state": "abc123",
"countryId": 987,
"zoneId": 123,
"comments": "abc123",
"billingStreetAddress": "xyz789",
"billingFirstname": "abc123",
"billingLastname": "abc123",
"billingPostcode": "xyz789",
"billingCity": "abc123",
"billingCountryId": "abc123",
"billingCompany": "abc123",
"billingVatid": "xyz789",
"billingZoneId": "xyz789",
"billingState": "abc123",
"billingOperatorId": 123,
"billingInvoiceAddress": "xyz789",
"billingReference": "xyz789",
"billingReferenceRequired": false
}
AddressBook
Description
An address book entry belonging to a customer.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
customerId - Int!
|
|
gender - String
|
|
company - String
|
|
firstname - String!
|
|
lastname - String!
|
|
streetAddress - String!
|
|
vatid - String
|
|
postcode - String!
|
|
city - String!
|
|
state - String
|
|
countryId - Int!
|
|
zoneId - Int!
|
|
comments - String
|
|
billingStreetAddress - String
|
|
billingFirstname - String
|
|
billingLastname - String
|
|
billingPostcode - String
|
|
billingCity - String
|
|
billingCountryId - String
|
|
billingCompany - String
|
|
billingVatid - String
|
|
billingZoneId - String
|
|
billingState - String
|
|
billingOperatorId - Int
|
|
billingInvoiceAddress - String
|
|
billingReference - String
|
|
billingReferenceRequired - Boolean
|
Example
{
"id": "4",
"customerId": 123,
"gender": "xyz789",
"company": "xyz789",
"firstname": "xyz789",
"lastname": "abc123",
"streetAddress": "abc123",
"vatid": "abc123",
"postcode": "xyz789",
"city": "abc123",
"state": "abc123",
"countryId": 123,
"zoneId": 987,
"comments": "xyz789",
"billingStreetAddress": "xyz789",
"billingFirstname": "xyz789",
"billingLastname": "abc123",
"billingPostcode": "xyz789",
"billingCity": "xyz789",
"billingCountryId": "xyz789",
"billingCompany": "abc123",
"billingVatid": "abc123",
"billingZoneId": "abc123",
"billingState": "xyz789",
"billingOperatorId": 987,
"billingInvoiceAddress": "abc123",
"billingReference": "abc123",
"billingReferenceRequired": false
}
AddressFormat
AdminNotification
AdminTrackingCreate
Administrator
Example
{
"id": 4,
"userName": "xyz789",
"email": "xyz789",
"twoFactor": true,
"superadmin": true,
"writePermission": true,
"grantAccess": "xyz789"
}
ApiProcessJob
Description
A job queued for an outbound third-party API call (e.g. ERP/PIM/marketplace synchronization).
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
jobId - String
|
|
api - String!
|
Identifier of the target third-party API the job will call. |
endpoint - String!
|
API endpoint or path the job will invoke. |
method - String
|
|
data - JSON!
|
|
createdAt - String!
|
|
error - String
|
Error text from the most recent attempt; null while the job has not failed. |
status - String!
|
Computed status derived from the error column:
|
Example
{
"id": 4,
"jobId": "abc123",
"api": "abc123",
"endpoint": "xyz789",
"method": "abc123",
"data": {},
"createdAt": "xyz789",
"error": "abc123",
"status": "abc123"
}
Availability
Description
A stock-availability label shown on product detail and listing pages (e.g. "In Stock", "Out of Stock", custom delivery-window phrases).
Each tenant defines its own set of labels. Ids 1 and 2 are conventionally reserved for "In Stock" and "Out of Stock"; ids 3+ are tenant-defined delivery-window variants ("usually ships in 1–3 days", "special order", etc.).
Returned in one row per (id, languageId) pair so storefronts can pick the shopper's language at render time.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Stable numeric id of the availability label across all languages. |
languageId - Int!
|
Language identifier matching the languages query. Example values:
Tenants may add or remove languages — resolve dynamically via the languages query rather than hardcoding ids. |
name - String!
|
Localized label shown to shoppers in the chosen language. |
hexCode - String
|
Hex color (without leading #) used to tint the label in storefront UI. Example conventions:
May be null for legacy labels that pre-date the colored-badge UI. |
Example
{
"id": 4,
"languageId": 123,
"name": "xyz789",
"hexCode": "abc123"
}
BankPayment
Banner
Example
{
"id": 4,
"title": "xyz789",
"url": "abc123",
"group": "abc123",
"status": 987,
"image": "abc123",
"history": BannerHistory,
"historyByDate": [BannerHistoryEntry]
}
BannerHistory
BannerHistoryEntry
BillingAddress
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
customerId - Int!
|
|
company - String
|
|
firstname - String
|
|
lastname - String
|
|
streetAddress - String
|
|
postcode - String
|
|
city - String
|
|
state - String
|
|
countryId - String
|
|
zoneId - String
|
|
vatid - String
|
|
operatorId - Int
|
|
invoiceAddress - String
|
|
reference - String
|
|
referenceRequired - Boolean!
|
Example
{
"id": "4",
"customerId": 123,
"company": "xyz789",
"firstname": "xyz789",
"lastname": "xyz789",
"streetAddress": "abc123",
"postcode": "abc123",
"city": "abc123",
"state": "abc123",
"countryId": "abc123",
"zoneId": "abc123",
"vatid": "xyz789",
"operatorId": 987,
"invoiceAddress": "abc123",
"reference": "abc123",
"referenceRequired": true
}
Boolean
Description
The Boolean scalar type represents true or false.
BrowseHistory
Example
{
"id": "4",
"customerId": 987,
"sessionKey": "xyz789",
"loadTimeMsec": 987,
"categoryId": 123,
"productId": 987,
"manufacturerId": 987,
"color": 123,
"size": 987,
"geoipCountry": "abc123",
"ipAddress": "abc123",
"date": "xyz789",
"timestamp": 987,
"topPicks": false,
"keywords": "abc123"
}
Category
Description
A node in the product category tree. Categories are nested via parentId (a value of 0 indicates a top-level category). Localized titles, URLs, and descriptions are returned through the descriptions field.
Example
{
"id": "4",
"code": "xyz789",
"image": "xyz789",
"banner": "xyz789",
"parentId": 123,
"sortOrder": 123,
"position": 123,
"descriptions": [CategoryDescription]
}
CategoryDescription
Fields
| Field Name | Description |
|---|---|
languageId - Int!
|
|
name - String
|
|
url - String
|
|
path - String
|
|
pathOld - String
|
|
description - String
|
|
descriptionTop - String
|
|
metaTitle - String
|
|
metaDescription - String
|
|
featureTitle - String
|
|
typeTitle - String
|
|
bannerText - String
|
|
bannerButton - String
|
|
bannerUrl - String
|
|
redirectStatus - Int
|
Example
{
"languageId": 123,
"name": "xyz789",
"url": "abc123",
"path": "abc123",
"pathOld": "xyz789",
"description": "xyz789",
"descriptionTop": "abc123",
"metaTitle": "abc123",
"metaDescription": "abc123",
"featureTitle": "abc123",
"typeTitle": "abc123",
"bannerText": "xyz789",
"bannerButton": "abc123",
"bannerUrl": "abc123",
"redirectStatus": 987
}
Configuration
Example
{
"id": "4",
"title": "abc123",
"key": "abc123",
"value": "xyz789",
"description": "xyz789",
"groupId": 987,
"sortOrder": 987,
"lastModified": "abc123",
"dateAdded": "abc123",
"useFunction": "xyz789",
"setFunction": "abc123",
"group": ConfigurationGroup
}
ConfigurationGroup
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
title - String
|
|
description - String
|
|
sortOrder - Int
|
|
configurations - [Configuration]
|
Example
{
"id": "4",
"title": "xyz789",
"description": "abc123",
"sortOrder": 987,
"configurations": [Configuration]
}
Country
Description
A country supported for shipping or billing addresses.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
name - String!
|
|
iso2 - String!
|
Two-letter ISO 3166-1 alpha-2 country code (e.g. 'FI', 'US'). |
iso3 - String!
|
Three-letter ISO 3166-1 alpha-3 country code (e.g. 'FIN', 'USA'). |
dutyRate - Float
|
Default customs duty rate applied to imports from this country, as a percentage. |
dutyLimit - Float
|
Order value below which no duty applies, in the tenant's default currency. |
addressFormatId - Int
|
|
defaultCurrencyId - Int
|
Example
{
"id": "4",
"name": "abc123",
"iso2": "xyz789",
"iso3": "abc123",
"dutyRate": 987.65,
"dutyLimit": 987.65,
"addressFormatId": 123,
"defaultCurrencyId": 987
}
CreateCustomerInput
Fields
| Input Field | Description |
|---|---|
gender - String
|
|
firstname - String
|
|
lastname - String
|
|
emailAddress - String!
|
|
password - String!
|
|
telephone - String
|
|
newsletter - Boolean
|
|
company - String
|
|
streetAddress - String
|
|
vatid - String
|
|
postcode - String
|
|
city - String
|
|
state - String
|
|
countryId - Int
|
|
zoneId - Int
|
|
comments - String
|
Example
{
"gender": "xyz789",
"firstname": "xyz789",
"lastname": "xyz789",
"emailAddress": "abc123",
"password": "xyz789",
"telephone": "xyz789",
"newsletter": true,
"company": "abc123",
"streetAddress": "xyz789",
"vatid": "xyz789",
"postcode": "abc123",
"city": "abc123",
"state": "xyz789",
"countryId": 987,
"zoneId": 987,
"comments": "abc123"
}
CreateGuestCustomerInput
Example
{
"gender": "abc123",
"firstname": "xyz789",
"lastname": "xyz789",
"emailAddress": "abc123",
"telephone": "abc123",
"newsletter": true,
"company": "abc123",
"streetAddress": "xyz789",
"vatid": "abc123",
"postcode": "abc123",
"city": "xyz789",
"state": "xyz789",
"countryId": 987,
"zoneId": 123,
"comments": "xyz789"
}
CreateOrderInput
Fields
| Input Field | Description |
|---|---|
customerId - Int!
|
|
deliveryAddressId - Int
|
|
billingAddressId - Int
|
|
customer - OrderPartyInput
|
|
deliveryAddress - OrderPartyInput
|
|
billingAddress - OrderPartyInput
|
|
status - Int
|
|
statusComment - String
|
|
currency - String
|
|
currencyValue - Float
|
|
paymentMethod - String!
|
Display label for the chosen payment method as shown to the shopper at checkout (e.g. 'Verkkopankki', 'Pay by paypal'). Required and non-empty. |
paymentCode - String!
|
Code identifying the chosen payment module. Required. Must match one of the entries in the tenant's MODULE_PAYMENT_INSTALLED configuration value (a ';'-separated list of currently-installed payment modules such as 'Cod', 'NetsBank', 'VivawalletCreditcard'). Free-form values and codes from removed/renamed modules are rejected — the createOrder mutation fails loud and the error message lists the modules currently available for the connected tenant. |
paymentApiId - String
|
|
paymentField - String
|
|
paymentInput - JSON
|
|
shippingMethod - String!
|
Display label for the chosen shipping method as shown to the shopper at checkout (e.g. 'Posti - Noutopiste'). Required. |
shippingApiId - String
|
|
shippingCode - String!
|
Code identifying the chosen shipping module. Required. Must match one of the entries in the tenant's MODULE_SHIPPING_INSTALLED configuration value (a ';'-separated list such as 'Flat', 'Matkahuolto', 'Smartpost'). Free-form values are rejected. |
shippingCost - Float
|
|
warehouseCode - String
|
|
items - [CreateOrderItemInput!]
|
Example
{
"customerId": 123,
"deliveryAddressId": 987,
"billingAddressId": 123,
"customer": OrderPartyInput,
"deliveryAddress": OrderPartyInput,
"billingAddress": OrderPartyInput,
"status": 987,
"statusComment": "abc123",
"currency": "abc123",
"currencyValue": 987.65,
"paymentMethod": "xyz789",
"paymentCode": "xyz789",
"paymentApiId": "xyz789",
"paymentField": "xyz789",
"paymentInput": {},
"shippingMethod": "abc123",
"shippingApiId": "xyz789",
"shippingCode": "xyz789",
"shippingCost": 987.65,
"warehouseCode": "abc123",
"items": [CreateOrderItemInput]
}
CreateOrderItemInput
Fields
| Input Field | Description |
|---|---|
productId - Int
|
|
sku - String
|
|
productModel - String
|
|
productEan - String
|
|
productName - String!
|
|
price - Float!
|
|
originalPrice - Float
|
|
tax - Float
|
|
quantity - Int!
|
|
stockVariants - String
|
|
lineType - String
|
|
comment - String
|
|
customOptions - JSON
|
|
variants - [CreateOrderItemVariantInput!]
|
Example
{
"productId": 123,
"sku": "xyz789",
"productModel": "abc123",
"productEan": "xyz789",
"productName": "abc123",
"price": 987.65,
"originalPrice": 123.45,
"tax": 123.45,
"quantity": 123,
"stockVariants": "abc123",
"lineType": "abc123",
"comment": "xyz789",
"customOptions": {},
"variants": [CreateOrderItemVariantInput]
}
CreateOrderItemVariantInput
CreateProductCustomOptionInput
CreateQuoteInput
Example
{
"customerId": 987,
"sessionId": "abc123",
"ipAddress": "xyz789",
"statusId": 987,
"shipmentMethod": "xyz789",
"shipmentCode": "abc123",
"shipmentPrice": 123.45,
"warehouseId": 987,
"items": [QuoteProductInput]
}
Currency
Description
A currency available to the storefront for display and order placement.
Example
{
"id": "4",
"title": "abc123",
"code": "xyz789",
"symbolLeft": "xyz789",
"symbolRight": "abc123",
"value": 987.65,
"lastUpdated": "abc123"
}
Customer
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
gender - String
|
|
firstname - String
|
|
lastname - String
|
|
emailAddress - String
|
Email address has to be unique for registered customers. Temporary customers can have the same email address. |
defaultAddressId - Int
|
Default address book record for the customer. |
defaultDeliveryAddressId - Int
|
Default delivery address book record for the customer. |
telephone - String
|
Telephone number of the customer. |
newsletter - Boolean
|
Newsletter subscription status. |
freeShipping - Float
|
Free shipping status. |
admin - Int
|
Does the account have admin privileges. |
type - Int
|
Customer category:
|
group - String
|
JSON-encoded array of customer group ids the customer belongs to. Empty array when the customer is in no groups. Group definitions live in the customer_groups table; resolve human-readable names via the customerGroups query. Each group carries its own discount type (fixed / percent / shipping) and pricing strategy. |
approved - Boolean
|
True once the customer has confirmed their email and the account is enabled for purchasing. |
undeliveredOrders - Int
|
|
blockPayments - String
|
|
blockShipments - String
|
|
temporaryCustomer - Boolean
|
|
emailSent - Boolean
|
|
apiId - String
|
|
apiBillingId - Int
|
|
grantWhatsapp - Boolean
|
Permission to send WhatsApp notifications. |
billingOperatorId - Int
|
|
billingInvoiceAddress - String
|
|
billingReference - String
|
|
billingReferenceRequired - Boolean
|
|
info - CustomerInfo
|
|
addresses - [Address]
|
Example
{
"id": "4",
"gender": "abc123",
"firstname": "abc123",
"lastname": "abc123",
"emailAddress": "xyz789",
"defaultAddressId": 987,
"defaultDeliveryAddressId": 987,
"telephone": "abc123",
"newsletter": true,
"freeShipping": 987.65,
"admin": 987,
"type": 987,
"group": "xyz789",
"approved": false,
"undeliveredOrders": 123,
"blockPayments": "abc123",
"blockShipments": "xyz789",
"temporaryCustomer": true,
"emailSent": false,
"apiId": "xyz789",
"apiBillingId": 987,
"grantWhatsapp": false,
"billingOperatorId": 987,
"billingInvoiceAddress": "abc123",
"billingReference": "xyz789",
"billingReferenceRequired": true,
"info": CustomerInfo,
"addresses": [Address]
}
CustomerBlacklistEntry
Description
A block-list entry preventing a customer (and their associated email and phone number) from completing checkouts. Created by admin staff after fraud, chargeback, or persistent abuse incidents.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
customerId - Int!
|
|
status - Int!
|
Block status:
Tenants may extend with custom intermediate states (e.g. soft-block requiring manual review). Resolve dynamically rather than hardcoding. |
reason - String!
|
Free-form reason text recorded by the administrator who created or updated the entry. |
lastModified - String
|
Example
{
"id": "4",
"customerId": 987,
"status": 123,
"reason": "abc123",
"lastModified": "xyz789"
}
CustomerFavorite
CustomerGroup
Description
A customer group is a B2B/segmentation construct that bundles a discount rule, an order-threshold rule, and an optional price list. Customers belong to zero or more groups via Customer.group (JSON-encoded array of group ids).
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Tenant-defined string id (e.g. 'VAKIOASIAKKAAT', 'WHOLESALE_VIP'). |
description - String
|
|
discountAmount - Float
|
Discount value applied to qualifying orders, interpreted via discountType. |
discountType - String
|
How discountAmount is applied. One of:
|
dateStart - String
|
|
dateEnd - String
|
|
minOrder - Float
|
Minimum order threshold for the group's discount to apply, interpreted via minOrderType. |
minOrderType - String
|
How minOrder is interpreted: 'price' (currency total) or 'quantity' (line item count). |
customerType - String
|
Customer eligibility filter:
|
discountedProducts - Int
|
|
groupsType - String
|
Pricing strategy / rule shape for the group:
|
dynamicDiscounts - [CustomerGroupDynamicDiscount]
|
|
priceList - [CustomerGroupPriceRule]
|
Example
{
"id": "4",
"description": "xyz789",
"discountAmount": 987.65,
"discountType": "xyz789",
"dateStart": "abc123",
"dateEnd": "xyz789",
"minOrder": 123.45,
"minOrderType": "xyz789",
"customerType": "xyz789",
"discountedProducts": 123,
"groupsType": "abc123",
"dynamicDiscounts": [CustomerGroupDynamicDiscount],
"priceList": [CustomerGroupPriceRule]
}
CustomerGroupDynamicDiscount
Description
A time-bounded discount rule attached to a customer group, optionally scoped to a manufacturer or category.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
groupId - String
|
Identifier of the parent customer group (matches CustomerGroup.id). |
amount - Float
|
Discount value, interpreted according to the parent group's discountType. |
dateStart - String
|
|
dateEnd - String
|
|
manufacturer - String
|
Manufacturer code this rule applies to, or null for any manufacturer. |
category - String
|
Category code this rule applies to, or null for any category. |
sort - Int
|
Example
{
"id": "4",
"groupId": "xyz789",
"amount": 123.45,
"dateStart": "xyz789",
"dateEnd": "xyz789",
"manufacturer": "abc123",
"category": "abc123",
"sort": 987
}
CustomerGroupPriceRule
Description
A negotiated per-product price for one customer group, with optional validity window.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
groupId - String
|
|
productId - Int
|
|
productStockId - Int
|
If set, the price applies only to a specific stock variant of the product. |
price - Float
|
Negotiated unit price in the tenant's default currency. |
validFrom - String
|
|
validTo - String
|
|
customerGroup - CustomerGroup
|
Resolved customer group this rule belongs to. |
product - Product
|
Resolved product this rule applies to. |
Example
{
"id": 4,
"groupId": "abc123",
"productId": 987,
"productStockId": 123,
"price": 987.65,
"validFrom": "abc123",
"validTo": "abc123",
"customerGroup": CustomerGroup,
"product": Product
}
CustomerHistoryEntry
Description
An audit-log entry recording a single field change on a customer-related row. Captured by the admin panel when staff modify a customer profile, address book entry, or blacklist record.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
customerId - Int!
|
Customer the changed row belongs to. |
addressBookId - Int
|
Address book row id when sourceTable is 'address_book'; null otherwise. |
userId - Int!
|
Administrator user id who made the change. |
userName - String!
|
|
sourceTable - String!
|
Source table the change happened in. Example values:
|
fieldName - String!
|
Database column name that changed (e.g. 'customers_email_address', 'entry_postcode'). |
oldValue - String
|
Previous value as stored in the column, serialized to string. Null for newly created rows. |
newValue - String
|
New value as stored in the column, serialized to string. Null when a value was cleared. |
page - String
|
Admin panel route the change was made from (helps trace whether the change was from a list page, detail page, or bulk action). |
dateAdded - String!
|
Example
{
"id": 4,
"customerId": 987,
"addressBookId": 123,
"userId": 123,
"userName": "xyz789",
"sourceTable": "abc123",
"fieldName": "abc123",
"oldValue": "abc123",
"newValue": "abc123",
"page": "xyz789",
"dateAdded": "xyz789"
}
CustomerInfo
Description
Activity and lifecycle metadata for a customer account. Login counters and timestamps are updated by the storefront authentication flow.
Fields
| Field Name | Description |
|---|---|
dateOfLastLogon - String
|
ISO timestamp of the customer's most recent successful sign-in. |
numberOfLogons - Int
|
Cumulative count of successful sign-ins on this account. |
numberOfFailedLogins - Int
|
Cumulative count of failed sign-in attempts (used for lockout / abuse monitoring). |
dateOfLastLoginFail - String
|
|
dateAccountCreated - String
|
ISO timestamp of when the account was first created. |
dateAccountLastModified - String
|
|
sourceId - Int
|
Source/referral indicator captured when the account was created. 0 = direct registration (default); non-zero values are tenant-defined source codes for marketing attribution or external-system imports. |
globalProductNotifications - Int
|
If non-zero, the customer is opted in to global product back-in-stock notifications across the catalog. |
Example
{
"dateOfLastLogon": "abc123",
"numberOfLogons": 123,
"numberOfFailedLogins": 987,
"dateOfLastLoginFail": "xyz789",
"dateAccountCreated": "xyz789",
"dateAccountLastModified": "xyz789",
"sourceId": 123,
"globalProductNotifications": 987
}
CustomerPrice
Description
A negotiated per-customer price override for one product. Captures the result of an individual contract negotiation between the tenant and a single buyer (typically B2B), where one customer is entitled to a specific unit price that may differ from catalog and from the customer's group price list.
In the storefront pricing pipeline, customer-price overrides are evaluated before customer-group price lists, which are evaluated before catalog prices. An override only applies while validOn falls within the validFrom..validTo window; outside that window the storefront falls back to the next pricing layer.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the price override. |
customerId - Int!
|
Customer the override applies to. |
productId - Int!
|
Product the override applies to. |
price - Float!
|
Negotiated unit price in the currency below (or the tenant default when currency is null). |
currency - String
|
ISO 4217 currency code (e.g. 'EUR', 'USD'); null falls back to the tenant's default currency. |
validFrom - String
|
ISO date the override becomes active. Null means no lower bound — the override has always been in effect. |
validTo - String
|
ISO date the override expires. Null means no upper bound — the override is open-ended. |
Example
{
"id": 4,
"customerId": 987,
"productId": 123,
"price": 987.65,
"currency": "xyz789",
"validFrom": "abc123",
"validTo": "xyz789"
}
CustomerProductInclusion
CustomerProductInclusionInput
CustomersApiCustomer
Description
Customer record as exchanged with the tenant's external ERP system (Lemonsoft, Netvisor, Tehden, Pasaati, etc.). Field names retain the Finnish identifiers used by the source ERPs (asiakaskoodi = customer code, alennusryhma = discount group) so storefronts and ERP adapters share a single contract.
Use the customers query for storefront-facing customer accounts; use this type when integrating with finance / accounting / invoicing.
Fields
| Field Name | Description |
|---|---|
asiakaskoodi - String!
|
ERP customer code (Finnish: 'asiakaskoodi'). The natural key in the source ERP. |
name - String
|
Primary business or person name. |
secondaryName - String
|
Secondary line of the legal name (department, c/o, etc.). |
addressLine1 - String
|
|
addressLine2 - String
|
|
addressLine3 - String
|
|
deliveryName1 - String
|
|
deliveryName2 - String
|
|
deliveryName3 - String
|
|
billingCustomerId - Int
|
If set, this customer is invoiced via another customer's billing account (chain billing). |
paymentTerm - String
|
ERP payment term code (e.g. '14 NETTO'). Strings are passed through from the ERP unchanged. |
customerGroup - String
|
ERP customer group code. |
chain - String
|
Chain / cooperative / franchise group identifier, when the customer belongs to one. |
salesCode - String
|
Salesperson code assigned in the ERP. |
creditLimit - String
|
Credit limit string as stored in the ERP (currency-prefixed in some ERPs). |
deliveryBlock - String
|
Delivery block code; non-empty values indicate the customer is on a delivery hold in the ERP. |
email - String
|
|
website - String
|
|
phone - String
|
|
fax - String
|
|
deliveryMethod - String
|
ERP delivery method code (e.g. carrier or shipping service identifier). |
discountGroup - String
|
Discount group (Finnish: 'alennusryhma'). Maps the customer to a tiered discount tier in the ERP. |
discountPercent - Float
|
Primary discount percentage (0-100). |
secondaryDiscountPercent - Float
|
Secondary discount percentage applied on top of the primary, if the ERP supports stacked discounts. |
languageCode - String
|
Language code in the ERP's convention (often a 2-letter ISO 639-1 like 'fi', 'en', 'sv'). |
comment1 - String
|
|
comment2 - String
|
|
contactPerson - String
|
|
contactPersonId - Int
|
|
lastLoginAt - String
|
|
vatLiability - String
|
VAT liability code (e.g. 'KOTIMAINEN' / 'EU' / 'EU-VATID'). ERP-defined enum. |
currency - String
|
ISO 4217 currency code the customer is invoiced in. |
modifiedAt - String
|
|
businessId - String
|
Finnish business id (Y-tunnus) or equivalent national tax id, when the customer is a company. |
billingAddress - String
|
Free-form invoice address override; takes precedence over the structured addressLine fields when sending invoices. |
intermediaryService - String
|
Electronic-invoice intermediary code (e.g. operator id for Finnish e-invoicing). |
netvisorKey - Int
|
Netvisor-specific internal key, when the tenant's ERP integration is Netvisor. |
Example
{
"asiakaskoodi": "abc123",
"name": "xyz789",
"secondaryName": "xyz789",
"addressLine1": "xyz789",
"addressLine2": "xyz789",
"addressLine3": "abc123",
"deliveryName1": "xyz789",
"deliveryName2": "abc123",
"deliveryName3": "abc123",
"billingCustomerId": 123,
"paymentTerm": "abc123",
"customerGroup": "xyz789",
"chain": "xyz789",
"salesCode": "abc123",
"creditLimit": "abc123",
"deliveryBlock": "abc123",
"email": "abc123",
"website": "abc123",
"phone": "xyz789",
"fax": "xyz789",
"deliveryMethod": "abc123",
"discountGroup": "xyz789",
"discountPercent": 987.65,
"secondaryDiscountPercent": 987.65,
"languageCode": "xyz789",
"comment1": "xyz789",
"comment2": "xyz789",
"contactPerson": "abc123",
"contactPersonId": 123,
"lastLoginAt": "abc123",
"vatLiability": "xyz789",
"currency": "xyz789",
"modifiedAt": "xyz789",
"businessId": "xyz789",
"billingAddress": "abc123",
"intermediaryService": "xyz789",
"netvisorKey": 987
}
CustomersBasketItem
Description
A line item in a customer's saved shopping basket. One customer may have multiple baskets distinguished by cartId (e.g. browser session vs. mobile app vs. saved-for-later list). Items persist across sessions for signed-in customers.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
cartId - String!
|
Identifier of the basket this line belongs to. One customer can hold multiple baskets in parallel. |
customersId - Int!
|
|
itemId - String
|
Stable line identifier within the basket (used for client-side updates). |
productId - Int
|
|
variants - String
|
Comma- or JSON-encoded variant selection (e.g. size + color choices). |
productOptions - String
|
Caller-provided product option payload (additional configurator data). |
comment - String
|
|
customOptions - String
|
Custom configuration values from configurable products. |
quantity - Int!
|
|
specialPrice - Float
|
Negotiated price override for this line; null falls back to current catalog price. |
bundleId - String
|
Bundle id when this line is part of a configured product bundle (0/null = standalone). |
includes - String
|
Comma-separated list of included child line ids when this is a bundle parent. |
dateAdded - String
|
|
emailSent - Int
|
Number of abandoned-cart reminder emails already sent for this basket (0 = none). |
emailLast - String
|
ISO timestamp of the most recent abandoned-cart reminder email. |
variableImage - String
|
Filename of a per-line custom image (for personalized / printed products). |
allowSubstitute - Boolean!
|
True if the customer has opted into substitution: warehouse may ship a similar product when the requested variant is out of stock. False (the default) means strict matching — out-of-stock cancels the line. |
Example
{
"id": 4,
"cartId": "xyz789",
"customersId": 123,
"itemId": "abc123",
"productId": 987,
"variants": "abc123",
"productOptions": "abc123",
"comment": "abc123",
"customOptions": "abc123",
"quantity": 987,
"specialPrice": 987.65,
"bundleId": "abc123",
"includes": "xyz789",
"dateAdded": "xyz789",
"emailSent": 987,
"emailLast": "xyz789",
"variableImage": "abc123",
"allowSubstitute": false
}
CustomersBraintreeToken
Description
A vaulted Braintree payment method on file for one customer. Available only on tenants whose payment integration is Braintree; other tenants will return an empty list.
The card number itself is never stored — only Braintree's tokenized reference plus a masked display string and expiry, enough to render "VISA ending in 4242" in the storefront.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
customersId - Int!
|
|
braintreeToken - String!
|
Braintree's vault token. Reference only — passed to Braintree to charge; never the raw card number. |
cardType - String!
|
Card brand label as returned by Braintree. Example values: 'visa', 'mastercard', 'amex', 'discover'. |
numberFiltered - String!
|
Masked card number for display. Example: '************4242'. |
expiryDate - String!
|
Card expiry as 'MM/YYYY' (Braintree's wire format). |
dateAdded - String!
|
Example
{
"id": 4,
"customersId": 123,
"braintreeToken": "abc123",
"cardType": "abc123",
"numberFiltered": "abc123",
"expiryDate": "abc123",
"dateAdded": "xyz789"
}
DeliveryAddress
Description
A delivery address entry belonging to a customer.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
customerId - Int!
|
|
gender - String
|
|
company - String
|
|
firstname - String!
|
|
lastname - String!
|
|
streetAddress - String!
|
|
vatid - String
|
|
postcode - String!
|
|
city - String!
|
|
state - String
|
|
countryId - Int!
|
|
zoneId - Int!
|
|
comments - String
|
|
legacyAddressBookId - Int
|
|
legacyAddress - AddressBook
|
Example
{
"id": "4",
"customerId": 123,
"gender": "xyz789",
"company": "xyz789",
"firstname": "abc123",
"lastname": "abc123",
"streetAddress": "abc123",
"vatid": "abc123",
"postcode": "xyz789",
"city": "xyz789",
"state": "abc123",
"countryId": 123,
"zoneId": 123,
"comments": "xyz789",
"legacyAddressBookId": 123,
"legacyAddress": AddressBook
}
DiscountCoupon
Description
A discount coupon definition. Coupons may be targeted at specific products, categories, customers, manufacturers, or shipping zones.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
description - String!
|
|
amount - Float!
|
Discount value, interpreted according to discountType. |
discountType - String!
|
How the amount is applied. One of:
|
dateStart - String
|
|
dateEnd - String
|
|
maxUse - Int!
|
Maximum number of times this coupon may be used in total (0 = unlimited). |
minOrder - Float!
|
Minimum order threshold for the coupon to apply, interpreted according to minOrderType. |
minOrderType - String
|
How minOrder is interpreted: 'price' (currency amount) or 'quantity' (line item count). |
numberAvailable - Int!
|
Number of remaining uses across all customers (decremented as the coupon is redeemed). |
customerType - String!
|
Customer eligibility filter:
|
discountedProducts - Int
|
|
discountedProductsOld - Int
|
|
allowedProducts - String
|
|
categories - [Int!]
|
|
products - [Int!]
|
|
customers - [Int!]
|
|
orders - [Int!]
|
|
manufacturers - [Int!]
|
|
shippingMethods - [String!]
|
|
zones - [Int!]
|
Example
{
"id": "4",
"description": "abc123",
"amount": 123.45,
"discountType": "abc123",
"dateStart": "abc123",
"dateEnd": "abc123",
"maxUse": 123,
"minOrder": 987.65,
"minOrderType": "abc123",
"numberAvailable": 123,
"customerType": "xyz789",
"discountedProducts": 123,
"discountedProductsOld": 987,
"allowedProducts": "abc123",
"categories": [123],
"products": [123],
"customers": [123],
"orders": [987],
"manufacturers": [987],
"shippingMethods": ["xyz789"],
"zones": [123]
}
DiscountCouponCustomerLink
DiscountCouponCustomerLinkInput
DiscountCouponOrderLink
Fields
| Field Name | Description |
|---|---|
couponCode - ID!
|
|
orderId - ID!
|
|
coupon - DiscountCoupon
|
|
order - Order
|
Example
{
"couponCode": "4",
"orderId": 4,
"coupon": DiscountCoupon,
"order": Order
}
Domain
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
languageId - Int!
|
|
code - String!
|
|
hreflang - String!
|
|
domain - String!
|
|
cctld - String!
|
|
flag - String!
|
|
sortOrder - Int
|
|
googlePixel - String
|
|
googleApiSecret - String
|
|
adwordsPixel - String
|
|
adwordsPhone - String
|
|
adwordsPurchase - String
|
|
adwordsContact - String
|
|
adwordsQuote - String
|
|
metaPixel - String
|
|
metaApiSecret - String
|
|
tiktokPixel - String
|
|
tiktokApiSecret - String
|
|
msAdsPixel - String
|
|
msAdsPhone - String
|
|
msAdsContact - String
|
|
msAdsPurchase - String
|
|
msAdsQuote - String
|
|
pinterestPixel - String
|
|
wpDomain - String
|
|
openaiChatInstructions - String
|
|
openaiVectorStoreId - String
|
|
openaiChatAssistantId - String
|
Example
{
"id": "4",
"languageId": 123,
"code": "xyz789",
"hreflang": "abc123",
"domain": "abc123",
"cctld": "xyz789",
"flag": "abc123",
"sortOrder": 123,
"googlePixel": "abc123",
"googleApiSecret": "xyz789",
"adwordsPixel": "xyz789",
"adwordsPhone": "xyz789",
"adwordsPurchase": "abc123",
"adwordsContact": "xyz789",
"adwordsQuote": "abc123",
"metaPixel": "xyz789",
"metaApiSecret": "xyz789",
"tiktokPixel": "xyz789",
"tiktokApiSecret": "xyz789",
"msAdsPixel": "xyz789",
"msAdsPhone": "xyz789",
"msAdsContact": "xyz789",
"msAdsPurchase": "xyz789",
"msAdsQuote": "abc123",
"pinterestPixel": "abc123",
"wpDomain": "abc123",
"openaiChatInstructions": "xyz789",
"openaiVectorStoreId": "xyz789",
"openaiChatAssistantId": "xyz789"
}
FaqCategory
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
icon - String
|
|
image - String
|
|
visibility - Int
|
|
googleIndex - Int
|
|
sortOrder - Int
|
|
descriptions - [FaqCategoryDescription]
|
|
questions - [FaqQuestion]
|
Example
{
"id": "4",
"icon": "abc123",
"image": "xyz789",
"visibility": 123,
"googleIndex": 987,
"sortOrder": 987,
"descriptions": [FaqCategoryDescription],
"questions": [FaqQuestion]
}
FaqCategoryDescription
FaqQuestion
Example
{
"id": 4,
"image": "abc123",
"sortOrder": 123,
"visibility": 123,
"googleIndex": 123,
"enableUrl": 987,
"categories": [987],
"descriptions": [FaqQuestionDescription]
}
FaqQuestionDescription
Example
{
"languageId": 987,
"question": "xyz789",
"answer": "xyz789",
"shortAnswer": "abc123",
"url": "abc123",
"metaTitle": "abc123",
"metaDescription": "xyz789"
}
Float
Description
The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.
Example
987.65
ID
Description
The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.
Example
4
Int
Description
The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
Example
123
JSON
Example
{}
Language
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
code - String!
|
|
name - String!
|
|
metadata - LanguageMetadata
|
Example
{
"id": "4",
"code": "xyz789",
"name": "abc123",
"metadata": LanguageMetadata
}
LanguageMetadata
Manufacturer
Description
A brand or manufacturer associated with one or more products in the catalog.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
name - String
|
Brand display name. |
code - String
|
Internal code or short identifier for the brand. |
image - String
|
|
brandPageImage - String
|
|
listingImage - String
|
|
sortOrder - Int
|
|
status - Int
|
|
dateAdded - String
|
|
lastModified - String
|
|
fitValue - String
|
|
specialDiscount - Int
|
|
cmsDescription - Int
|
|
countryApprovedProduct - String
|
|
displayFrontpage - Int
|
|
infos - [ManufacturerInfo]
|
Example
{
"id": 4,
"name": "xyz789",
"code": "xyz789",
"image": "xyz789",
"brandPageImage": "xyz789",
"listingImage": "xyz789",
"sortOrder": 987,
"status": 123,
"dateAdded": "abc123",
"lastModified": "xyz789",
"fitValue": "xyz789",
"specialDiscount": 987,
"cmsDescription": 123,
"countryApprovedProduct": "abc123",
"displayFrontpage": 123,
"infos": [ManufacturerInfo]
}
ManufacturerInfo
Order
Description
A purchase placed by a customer. Includes the customer snapshot at order time, delivery and billing addresses, and the chosen payment and shipping methods.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
customerId - Int
|
|
customerName - String!
|
|
customerEmail - String!
|
|
customer - OrderParty
|
|
deliveryAddress - OrderParty
|
|
billingAddress - OrderParty
|
|
status - Int!
|
Numeric status id. Example values across tenants:
Tenants may extend this set with custom statuses (e.g. payment-provider intermediate states, test orders). Always resolve dynamically via the orderStatuses query rather than hardcoding ids. |
datePurchased - String
|
ISO timestamp of when the order was placed. |
lastModified - String
|
|
currency - String
|
ISO 4217 currency code the order was placed in. |
currencyValue - Float
|
|
paymentMethod - String
|
Display label of the chosen payment method as shown to the shopper at checkout (e.g. 'Verkkopankki', 'Postiennakko - 4.90 EUR'). Localized — varies per tenant and language. |
paymentCode - String
|
Code identifying the payment module behind the order. Range seen in production includes module names ('NetsBank', 'Cod', 'NetsCreditcard'), Finnish identifiers ('Lasku', 'Nouto'), snake_case keys ('paylane_paypal'), and historical codes from modules since removed ('WalleyInvoice', 'PaylaneCard', 'BraintreeCard'). For new orders it must match the tenant's MODULE_PAYMENT_INSTALLED list; older orders may carry codes that are no longer in the active list. Use this for routing, reconciliation, and reports. |
shippingMethod - String
|
Display label of the chosen shipping method as shown to the shopper at checkout (e.g. 'Posti - Noutopiste'). Localized; may include a price suffix. |
shippingCode - String
|
Code identifying the shipping module behind the order. Range seen in production includes module-pair forms ('flat_flat', 'matkahuolto_matkahuolto'), bare module names ('Smartpost', 'Flat'), and historical codes. For new orders it must match the tenant's MODULE_SHIPPING_INSTALLED list. |
shippingCost - Float
|
|
deliveryQuantity - Int
|
Number of physical packages the order ships in (defaults to 1). |
deliveryWeight - Float
|
Total package weight in kilograms (decimal, 4-digit precision). |
deliveryLength - Float
|
Package length in centimetres. |
deliveryWidth - Float
|
Package width in centimetres. |
deliveryHeight - Float
|
Package height in centimetres. |
deliveryComments - String
|
Free-form delivery notes captured at checkout (e.g. 'leave at front door', 'call before arrival'). |
shippingLocationId - String
|
Pickup-point identifier when the chosen shipping method is a parcel locker / pickup-point service. Empty/0 for home delivery. |
shippingLocationName - String
|
Display name of the chosen pickup point (e.g. 'R-kioski Kamppi'). |
shippingLocationStreetAddress - String
|
|
shippingLocationPostcode - String
|
|
shippingLocationCity - String
|
|
paymentApiId - String
|
Internal id passed to the chosen payment module's API for reconciliation. |
paymentProvider - String
|
Payment provider key. Coarser grouping than paymentCode (e.g. 'nets', 'vivawallet'). |
paymentField - String
|
Free-form payment field captured at checkout (module-specific extra payload). |
paymentInput - String
|
Module-specific payment input payload as captured at checkout. |
paymentTermId - String
|
Payment-term identifier when the order uses an invoice with terms (e.g. '14 NETTO'). |
shippingApiId - String
|
Internal id passed to the chosen shipping module's API for label generation and tracking. |
shippingApiTermId - String
|
Term identifier within the shipping module (e.g. selected service tier). |
shippingCostCentreId - String
|
Cost-centre id used for accounting allocation of shipping costs. |
shippingContractId - String
|
Carrier-contract identifier used to negotiate shipping rates. |
shippingContractCourier - String
|
Carrier name on the contract (Posti, DHL, Schenker, etc.). |
discountType - String
|
How discountAmount is applied at the order level. Same enum as on coupons and customer groups: 'fixed', 'percent', or 'shipping'. Defaults to 'fixed'. |
discountAmount - Float
|
Order-level discount value, interpreted according to discountType. |
trackingCode - String
|
Carrier tracking code. Populated once the order has been shipped. |
trackingLink - String
|
Full tracking URL the customer can click to follow the parcel. May embed the tracking code in the path. |
warehouseCode - String
|
|
customerNotifiedFlag - Int
|
True (1) once the order-confirmation email has been queued/sent to the customer; 0 means not sent. |
trollyLocker - Float
|
Trolley-locker workflow flag (warehouse pick-and-pack staging). 0 = not picked, non-zero = picked / staged. DECIMAL(2,1) in the DB. |
transactionId - String
|
Payment-provider transaction id (the id the bank/PSP returned). Used for reconciliation against statements. |
ipAddress - String
|
IP address the order was placed from (used for fraud / risk scoring). |
ipIsp - String
|
ISP or geo-org of the placing IP (when resolved). |
pdfFiles - String
|
Newline-separated list of attached PDF filenames (invoice, packing slip, return label, etc.) stored in the tenant's order-document directory. |
returnReason - String
|
Customer-supplied reason text when the order was returned. Null when the order was not returned. |
referralId - String
|
Marketing / referral attribution token captured at checkout (UTM tag, click id, etc.). |
ordersApiId - String
|
External ERP / marketplace order id, when this order originated from or was synced to an external system. |
apiSent - Int
|
Outbound-API send status: 0 = not yet exported to the ERP, 1 = exported successfully, larger values are tenant-specific intermediate states. |
emailSent - Int
|
Order-creation push-status flag: 1 = order-confirmation email has been emitted; 0 = not yet. |
apiMessage - String
|
Last error / status message from the ERP push (null on success). |
apiMessageDate - String
|
ISO timestamp of the apiMessage. |
apiOrderStatusMessage - String
|
Last error / status message from the ERP order-status push. |
apiOrderStatusMessageDate - String
|
ISO timestamp of the apiOrderStatusMessage. |
ordersPackingRulesJson - String
|
Resolved packing rules (JSON-encoded) applied when the order was picked. Null when no per-order packing rules were attached. |
discountCoupons - [DiscountCoupon]
|
|
items - [OrderItem!]!
|
All purchased lines on this order, including their selected variants. Equivalent to the orderItems query but resolves in the same round-trip when you're already fetching the Order. |
totals - [OrderTotal!]!
|
Totals breakdown for this order, optionally filtered to one class. Equivalent to the orderTotals query but resolves in the same round-trip. |
Arguments
|
|
bankPayments - [BankPayment!]!
|
|
vivawalletPayments - [OrderVivawalletPayment!]!
|
Vivawallet payment records linked to this order. Empty for orders paid via other providers (Nets, Cod, invoice). |
Example
{
"id": "4",
"customerId": 123,
"customerName": "abc123",
"customerEmail": "xyz789",
"customer": OrderParty,
"deliveryAddress": OrderParty,
"billingAddress": OrderParty,
"status": 123,
"datePurchased": "abc123",
"lastModified": "xyz789",
"currency": "abc123",
"currencyValue": 123.45,
"paymentMethod": "abc123",
"paymentCode": "abc123",
"shippingMethod": "xyz789",
"shippingCode": "xyz789",
"shippingCost": 987.65,
"deliveryQuantity": 123,
"deliveryWeight": 123.45,
"deliveryLength": 987.65,
"deliveryWidth": 987.65,
"deliveryHeight": 987.65,
"deliveryComments": "abc123",
"shippingLocationId": "abc123",
"shippingLocationName": "abc123",
"shippingLocationStreetAddress": "xyz789",
"shippingLocationPostcode": "xyz789",
"shippingLocationCity": "xyz789",
"paymentApiId": "xyz789",
"paymentProvider": "abc123",
"paymentField": "abc123",
"paymentInput": "abc123",
"paymentTermId": "abc123",
"shippingApiId": "xyz789",
"shippingApiTermId": "xyz789",
"shippingCostCentreId": "xyz789",
"shippingContractId": "abc123",
"shippingContractCourier": "abc123",
"discountType": "abc123",
"discountAmount": 123.45,
"trackingCode": "xyz789",
"trackingLink": "abc123",
"warehouseCode": "abc123",
"customerNotifiedFlag": 123,
"trollyLocker": 987.65,
"transactionId": "xyz789",
"ipAddress": "xyz789",
"ipIsp": "xyz789",
"pdfFiles": "abc123",
"returnReason": "abc123",
"referralId": "abc123",
"ordersApiId": "abc123",
"apiSent": 987,
"emailSent": 123,
"apiMessage": "xyz789",
"apiMessageDate": "abc123",
"apiOrderStatusMessage": "abc123",
"apiOrderStatusMessageDate": "abc123",
"ordersPackingRulesJson": "xyz789",
"discountCoupons": [DiscountCoupon],
"items": [OrderItem],
"totals": [OrderTotal],
"bankPayments": [BankPayment],
"vivawalletPayments": [OrderVivawalletPayment]
}
OrderHistoryEntry
Description
An audit-log entry recording a single change to an order or one of its child rows (line items, totals, status history, notifications). Captured automatically by the admin panel and selected automation flows whenever order data is modified after the order is placed — typically a staff edit, a refund, or a re-trigger.
Use this for compliance audits, order-detail change logs, and the "history" view on the admin order page. The log is append-only at the application layer; combined with orderStatusHistory (status transitions only), it provides the complete order-modification trail.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the audit entry. |
orderId - Int!
|
Order whose row was changed. |
entityType - String!
|
Source table the change happened in. Example values seen in production:
|
entityId - Int
|
Row id within the entity table when the change targets a specific row (line id, totals row id, etc.). Null for header-level changes on orders itself. |
columnName - String!
|
Database column name that changed (e.g. 'orders_status', 'products_quantity', 'shipping_method'). |
oldValue - String
|
Previous value as stored in the column, serialized to string. Null when the row was newly created or the field was previously null. |
newValue - String
|
New value as stored in the column, serialized to string. Null when the field was cleared. |
actionType - String!
|
Kind of change. Example values seen in production:
|
userId - Int
|
Administrator user id who made the change. Null for automated / system-triggered changes. |
userName - String
|
Administrator user name (denormalised at write time for stability). |
page - String
|
Admin panel route the change was made from (helps trace whether it came from a list page, detail page, or bulk action). |
createdAt - String!
|
ISO timestamp of when the change was recorded. |
Example
{
"id": "4",
"orderId": 987,
"entityType": "xyz789",
"entityId": 987,
"columnName": "abc123",
"oldValue": "abc123",
"newValue": "xyz789",
"actionType": "abc123",
"userId": 987,
"userName": "abc123",
"page": "xyz789",
"createdAt": "xyz789"
}
OrderItem
Description
A purchased line on an order — the snapshot of one product (or shipping / fee / comment line) as it appeared in the cart at the moment of checkout. Includes the per-line price, tax, configurable variant selections, and warehouse pick-and-pack state that gets populated as the order moves through fulfilment.
Read-only on this type. To modify lines on an existing order use the addOrdersProduct / updateOrdersProduct / removeOrdersProduct mutations, which write to the same underlying orders_products row but expose a write-shaped contract via the OrdersProduct type.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the order line (orders_products_id). |
orderId - Int!
|
Order this line belongs to. |
productId - Int
|
Product id from the catalog. Null for lines that don't reference a catalog product (free-form refund / fee lines). |
productModel - String
|
Product SKU / model identifier captured at order time. |
productEan - String
|
EAN / barcode captured at order time. |
productName - String!
|
Display name shown on the receipt and admin order detail. |
quantity - Int!
|
Quantity ordered. |
quantityReturned - Int!
|
Quantity already returned (for refunds / partial returns). 0 on a fresh order. |
price - Float!
|
Unit price actually charged, in the order's currency. |
originalPrice - Float!
|
Catalog price at the time of order (before any per-customer or coupon adjustments). Useful for computing realised discount per line. |
tax - Float!
|
Tax rate applied to this line as a percentage (e.g. 24.0 = 24% VAT). |
stockVariants - String
|
Comma- or JSON-encoded snapshot of the variant stock-id selection (e.g. for size/colour SKUs). |
lineType - String
|
Line type. Example values seen in production:
Tenants may extend with custom types ('shipping', 'fee', 'comment'). |
comment - String
|
Free-form comment captured at checkout (gift message, configuration notes, etc.). |
customOptions - JSON
|
Module-specific custom-options payload (JSON-encoded). Set when the product has configurable options the shopper filled out at checkout. |
productCategories - String
|
Snapshot of the product's category memberships at order time (comma-separated category ids). |
productWeight - Float
|
Per-line product weight in kilograms (used for shipping calculation when line-level weights matter). |
productLocation - String
|
Per-line warehouse location code captured at order time (e.g. shelf identifier). |
variableImage - String
|
Filename of a per-line custom image uploaded by the shopper (for personalised / printed products). Null when the line carries no custom image. |
allowSubstitute - Int!
|
True (1) if the customer accepted product substitution for this line: warehouse may ship a similar product when the requested variant is unavailable. 0 = strict matching. |
confirmFlag - Int!
|
True (1) if a confirmation step was applied to this line during pick-and-pack (warehouse confirmed the SKU + quantity). 0 = unconfirmed. |
confirmProductsQuantity - Int!
|
Confirmed quantity captured during pick-and-pack. May differ from the ordered quantity when shortages or substitutions occurred. |
autoComment - Int!
|
True (1) if the line was added by an automatic process (auto-bundle expansion, accessory rule, etc.) rather than by the shopper. 0 = manually added. |
variants - [OrderItemVariant!]!
|
Configurable variants selected on this line. Empty array for products without options or when the order line is a fee / refund / comment row. |
Example
{
"id": "4",
"orderId": 987,
"productId": 123,
"productModel": "xyz789",
"productEan": "abc123",
"productName": "abc123",
"quantity": 987,
"quantityReturned": 123,
"price": 987.65,
"originalPrice": 987.65,
"tax": 987.65,
"stockVariants": "abc123",
"lineType": "xyz789",
"comment": "abc123",
"customOptions": {},
"productCategories": "abc123",
"productWeight": 987.65,
"productLocation": "abc123",
"variableImage": "abc123",
"allowSubstitute": 123,
"confirmFlag": 987,
"confirmProductsQuantity": 123,
"autoComment": 123,
"variants": [OrderItemVariant]
}
OrderItemVariant
Description
A configurable-product option selected on one order line — for example a size/colour pair on a t-shirt, or a personalisation field on a gift. Variants stack: a single OrderItem can carry many OrderItemVariants, each contributing an additive or replacement price delta to the line total via pricePrefix. Captured as a snapshot at order time, so later changes to the underlying product option definition do not retroactively rewrite already-placed orders.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the variant selection. |
orderProductId - Int!
|
Order line (OrderItem) this variant selection belongs to. |
optionId - Int!
|
Product option id (matches a row in the catalog options table). |
optionName - String!
|
Display label of the option as shown to the shopper at checkout (e.g. 'Size', 'Engraving'). |
optionValue - String!
|
Selected value as shown to the shopper (e.g. 'XL', 'Happy Birthday Anna'). |
price - Float!
|
Price delta this variant contributes to the line, interpreted via pricePrefix. |
pricePrefix - String
|
How the price delta is applied to the line:
Tenants may define additional prefixes; treat unrecognised values as additive by default. |
Example
{
"id": 4,
"orderProductId": 987,
"optionId": 123,
"optionName": "abc123",
"optionValue": "xyz789",
"price": 123.45,
"pricePrefix": "xyz789"
}
OrderNetsNotification
Description
A payment notification from the Nets payment service for one order. Captured by the storefront's webhook handler (or the admin's manual reconcile flow) for every callback Nets sends — authorization callbacks, settlement notifications, refunds, and error events.
The table is keyed by ordersPaytrailId (a Nets-provided session id that pre-dates the rename from Paytrail to Nets), with notificationId distinguishing successive callbacks for the same session. Use this type for reconciliation against Nets settlement reports and for diagnosing failed payments. Available only on tenants whose payment integration is Nets; other tenants will not have rows for these fields.
Fields
| Field Name | Description |
|---|---|
ordersPaytrailId - Int!
|
Nets-side session/order id (legacy 'paytrail' name retained for backwards compatibility). Primary key on the orders_nets table. |
customersId - Int!
|
Customer the originating order belongs to (denormalised from orders.customers_id). |
notificationId - Int!
|
Sequence number distinguishing successive notifications for the same ordersPaytrailId (e.g. 1 = authorization, 2 = settlement, 3 = refund). |
sessionId - String
|
Browser session id captured at checkout. Useful for correlating with storefront analytics. |
transactionId - String
|
Nets transaction id returned by the provider. Used for reconciliation against Nets reports. |
stamp - String
|
Provider-side stamp/timestamp value captured from the webhook payload. |
reference - String
|
Provider-side reference token (Nets-supplied) for this notification, used for reconciliation against settlement reports. |
amount - Float
|
Amount this notification covers, in the smallest currency unit (e.g. cents). May be the full order amount, a partial refund, or zero for status-only callbacks. |
error - String
|
Error code or message from the provider when this notification represents a failed event. Null for successful events. |
Example
{
"ordersPaytrailId": 987,
"customersId": 987,
"notificationId": 987,
"sessionId": "abc123",
"transactionId": "xyz789",
"stamp": "abc123",
"reference": "abc123",
"amount": 123.45,
"error": "xyz789"
}
OrderParty
Example
{
"name": "abc123",
"company": "xyz789",
"vatId": "abc123",
"streetAddress": "abc123",
"city": "abc123",
"postcode": "abc123",
"state": "xyz789",
"country": "xyz789",
"telephone": "abc123",
"emailAddress": "abc123",
"addressFormatId": 987,
"invoiceAddress": "abc123",
"operatorId": 987,
"reference": "abc123"
}
OrderPartyInput
Fields
| Input Field | Description |
|---|---|
name - String
|
|
company - String
|
|
vatId - String
|
|
streetAddress - String
|
|
city - String
|
|
postcode - String
|
|
state - String
|
|
countryId - Int
|
|
countryCode - String
|
|
telephone - String
|
|
emailAddress - String
|
|
addressFormatId - Int
|
|
invoiceAddress - String
|
|
operatorId - Int
|
|
reference - String
|
Example
{
"name": "abc123",
"company": "abc123",
"vatId": "abc123",
"streetAddress": "xyz789",
"city": "abc123",
"postcode": "xyz789",
"state": "abc123",
"countryId": 987,
"countryCode": "xyz789",
"telephone": "xyz789",
"emailAddress": "abc123",
"addressFormatId": 123,
"invoiceAddress": "xyz789",
"operatorId": 987,
"reference": "abc123"
}
OrderStatus
Description
A status label for orders, defined per tenant and per language. Returned in one row per (id, languageId) pair so storefronts and admin panels can render the status in the operator's chosen language.
Tenants typically share a common core set of ids (1=Received, 2=Packing, 3=Shipped, etc. — see Order.status for the cross-tenant default list) and add custom statuses on top for payment-provider intermediate states or workflow-specific stages. Always resolve Order.status via this query rather than hardcoding ids.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Stable numeric status id, used in Order.status and OrderStatusHistory.statusId. |
languageId - Int!
|
Language the localized name is in (1=English, 5=Swedish, 6=Finnish, 9=Spanish, 14=Italian; tenants may extend). |
code - String
|
Internal code for the status (e.g. 'received', 'shipped', 'awaiting_payment'). Null for legacy entries that pre-date the code column. |
name - String!
|
Localized display label shown to operators and (for some tenants) to customers in transactional emails. |
apiFlag - Int!
|
If non-zero, this status triggers ERP / order-management API push when set on an order. 0 = local-only status. |
apiId - String
|
External-system identifier when the status is mirrored in an ERP (Lemonsoft / Netvisor / Tehden status code). |
colorCode - String
|
Hex color (without leading #) used to tint the status badge in admin UI. Null = default neutral color. |
Example
{
"id": 4,
"languageId": 123,
"code": "abc123",
"name": "xyz789",
"apiFlag": 987,
"apiId": "xyz789",
"colorCode": "abc123"
}
OrderStatusHistory
Description
A status-transition entry on an order's timeline — one row per status change captured as the order progresses (Received → Packing → Shipped → Delivered, plus any backwards transitions for cancellations or returns). Each row records the new status id, an optional staff comment, and whether the customer was notified.
Read-only on this type. To record a new transition (and optionally emit a notification to the customer) use the addOrdersStatusHistory mutation, which writes to the same underlying table.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the status-transition entry. |
orderId - Int!
|
Order this status transition belongs to. |
statusId - Int!
|
Numeric status id moved to. Resolve to a localized name via the orderStatuses query. |
statusName - String
|
Localized status name as it was at the time of the transition (denormalised for stability when status names are later renamed). |
dateAdded - String!
|
ISO timestamp of when the transition was recorded. |
customerNotified - Int
|
Whether a notification email was sent to the customer for this transition. Example values:
|
comments - String
|
Free-form staff comment attached to the transition (e.g. 'Awaiting carrier pickup', 'Refunded — damaged on arrival'). |
Example
{
"id": "4",
"orderId": 987,
"statusId": 987,
"statusName": "abc123",
"dateAdded": "abc123",
"customerNotified": 987,
"comments": "abc123"
}
OrderTotal
Description
A single line on the order's totals breakdown — the rendered "totals block" at the bottom of an invoice or order detail (Subtotal, Tax, Shipping, Coupon discount, Grand total). Each row represents one contribution to the final order amount, sorted by sortOrder, and carries the formatted display text the storefront / receipt renders verbatim.
Mutations don't write to OrderTotal directly: totals are recomputed by the order pipeline whenever the underlying lines or coupons change. Use this type for read-only reporting and rendering.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the totals entry (orders_total_id). |
orderId - Int!
|
Order this totals row belongs to. |
title - String!
|
Display label shown next to the value (e.g. 'Subtotal', 'Tax 24%', 'Shipping'). |
text - String!
|
Pre-formatted display value rendered next to the title (e.g. '€ 49.90', 'Free'). Includes currency symbol and locale formatting. |
value - Float!
|
Numeric amount in the order's currency. Sum of all rows of class 'Total' equals the order's final amount. |
valueUnreturned - Float!
|
Numeric amount excluding any returned/refunded portion. Equals value when the order has not been partially returned. |
taxRate - Float
|
Tax rate (percentage) applied to compute taxAmount, when this row represents a taxed total. Null for tax-free totals (e.g. shipping discounts). |
taxAmount - Float
|
Tax portion of value, in the order's currency. Null when the row is itself a tax line. |
class - String!
|
Total category. Example values seen in production:
Tenants may extend with additional 'ot_*' modules. |
sortOrder - Int!
|
Display sort order. Lower values render first; the totals block typically goes Subtotal → Tax → Shipping → Discount → Total. |
Example
{
"id": "4",
"orderId": 123,
"title": "abc123",
"text": "xyz789",
"value": 987.65,
"valueUnreturned": 123.45,
"taxRate": 123.45,
"taxAmount": 987.65,
"class": "xyz789",
"sortOrder": 123
}
OrderVivawalletPayment
Description
A payment record from the Viva Wallet (Vivawallet) payment service for one order. Captured when the shopper completes payment through any of the Vivawallet-hosted methods (cards, Klarna, PayPal, Apple Pay, Google Pay) and returned for reconciliation against Vivawallet's merchant reports.
Available only on tenants whose payment integration is Vivawallet. The paymentMethod string indicates which Vivawallet sub-method was used; transactionUuid is the cross-system identifier for chargeback and refund flows.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the payment record. |
orderId - Int!
|
Order this payment belongs to. |
customerId - Int!
|
Customer who placed the order (denormalised from orders.customers_id). |
paymentMethod - String!
|
Which Vivawallet sub-method was used. Example values seen in production:
Both CamelCase and snake_case variants appear in production — historical drift across module versions. Treat them as equivalent when matching by sub-method. |
notificationId - Int!
|
Sequence number distinguishing successive notifications for the same order (1 = initial, higher = retries / refunds). |
orderCode - String
|
Vivawallet 'orderCode' identifying the payment session at the provider. Used for cross-referencing with Vivawallet's merchant portal. |
transactionUuid - String
|
Vivawallet transaction UUID. Stable cross-system identifier — use this for chargeback handling and refund APIs. |
sessionId - String
|
Browser session id captured at checkout. Useful for correlating with storefront analytics. |
Example
{
"id": "4",
"orderId": 123,
"customerId": 123,
"paymentMethod": "xyz789",
"notificationId": 123,
"orderCode": "abc123",
"transactionUuid": "abc123",
"sessionId": "abc123"
}
OrdersNetsNotificationInput
Description
Input shape for upsertOrdersNetsNotification — every field that Nets supplies on a callback can be persisted here.
Fields
| Input Field | Description |
|---|---|
ordersPaytrailId - Int!
|
Nets-side session/order id (primary key). |
customersId - Int!
|
Customer the originating order belongs to. |
notificationId - Int!
|
Sequence number for successive notifications on the same session. |
sessionId - String
|
Browser session id captured at checkout. |
transactionId - String
|
Nets transaction id returned by the provider. |
stamp - String
|
Provider-side stamp value from the webhook. |
reference - String
|
Provider-side reference token captured from the Nets webhook payload. |
amount - Float
|
Amount in the smallest currency unit. |
error - String
|
Error code/message; pass null on successful events. |
Example
{
"ordersPaytrailId": 987,
"customersId": 123,
"notificationId": 123,
"sessionId": "xyz789",
"transactionId": "abc123",
"stamp": "xyz789",
"reference": "xyz789",
"amount": 987.65,
"error": "xyz789"
}
OrdersProduct
Description
Write-shaped representation of an order line, returned by the addOrdersProduct / updateOrdersProduct mutations. Maps to the same underlying orders_products row that OrderItem reads from, but excludes the nested variants list (manage variants separately via the addOrdersProductsVariant / updateOrdersProductsVariant / removeOrdersProductsVariant mutations).
Use OrderItem for read flows; use OrdersProduct + the matching mutations when modifying lines on an already-placed order from the admin panel or an integration.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the line (orders_products_id). |
orderId - Int!
|
Order this line belongs to. |
productId - Int
|
Catalog product id this line references. Null for free-form lines. |
productModel - String
|
|
productEan - String
|
|
productName - String!
|
|
price - Float!
|
Unit price actually charged, in the order's currency. |
originalPrice - Float!
|
Catalog price at the time of order, before per-customer or coupon adjustments. |
tax - Float!
|
Tax rate applied to this line as a percentage (e.g. 24.0 = 24% VAT). |
quantity - Int!
|
|
quantityReturned - Int!
|
Quantity already returned. 0 on a fresh line. |
stockVariants - String
|
Comma- or JSON-encoded snapshot of the variant stock-id selection. |
lineType - String
|
Line type. Example values: 'item' (default), 'refund'. |
comment - String!
|
Free-form comment captured at checkout (gift message, configuration notes). |
customOptions - JSON
|
Module-specific custom-options payload (JSON-encoded) for configurable products. |
Example
{
"id": "4",
"orderId": 123,
"productId": 987,
"productModel": "abc123",
"productEan": "xyz789",
"productName": "abc123",
"price": 123.45,
"originalPrice": 987.65,
"tax": 123.45,
"quantity": 987,
"quantityReturned": 123,
"stockVariants": "xyz789",
"lineType": "xyz789",
"comment": "abc123",
"customOptions": {}
}
OrdersProductsVariant
Description
A configurable-product option selected on an order line, returned by the addOrdersProductsVariant / updateOrdersProductsVariant mutations. Stored on a separate table (orders_products_variants) from the line itself so a single line can carry many variant selections.
Read-side: this same data is exposed through OrderItem.variants on the read query path. Use the mutations here when you need to add, modify, or remove option selections on an already-placed order from the admin panel or an integration.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the variant selection. |
orderId - Int!
|
Order the variant belongs to (denormalised for filtering). |
orderProductId - Int!
|
Order line (OrderItem / OrdersProduct) this variant selection belongs to. |
optionId - Int!
|
Product option id (matches a row in the catalog options table). |
optionName - String!
|
Display label of the option as shown to the shopper at checkout (e.g. 'Size', 'Engraving'). |
optionValue - String!
|
Selected value as shown to the shopper (e.g. 'XL', 'Happy Birthday Anna'). |
price - Float!
|
Price delta this variant contributes to the line, interpreted via pricePrefix. |
pricePrefix - String
|
How the price delta is applied. Example values:
|
Example
{
"id": 4,
"orderId": 987,
"orderProductId": 987,
"optionId": 987,
"optionName": "abc123",
"optionValue": "abc123",
"price": 987.65,
"pricePrefix": "xyz789"
}
OrdersStatusHistoryEntry
Description
Write-side representation of a status-transition entry, returned by the addOrdersStatusHistory mutation. Maps to the same underlying orders_status_history row that OrderStatusHistory reads from, with a trimmed shape (no statusName lookup — the read query enriches it).
Fields
| Field Name | Description |
|---|---|
id - ID!
|
Database row id of the inserted transition. |
orderId - Int!
|
Order the transition belongs to. |
statusId - Int!
|
Numeric status id moved to. |
dateAdded - String!
|
ISO timestamp of when the transition was recorded. |
customerNotified - Int
|
Whether a customer notification email was emitted for this transition (0 = not notified, 1 = notified). |
comments - String
|
Staff comment attached to the transition. |
Example
{
"id": "4",
"orderId": 123,
"statusId": 123,
"dateAdded": "xyz789",
"customerNotified": 123,
"comments": "abc123"
}
OrdersStatusHistoryInput
Description
Input shape for addOrdersStatusHistory. orderId + statusId are required; the optional flags control side effects (customer notification and order-header status update).
Fields
| Input Field | Description |
|---|---|
orderId - Int!
|
Order to record the transition on. |
statusId - Int!
|
New status id (must exist in orderStatuses for the connected tenant). |
comments - String
|
Free-form staff comment to attach to the transition. |
notifyCustomer - Boolean
|
If true, send a notification email to the customer about this status change. Default: false. |
updateOrderStatus - Boolean
|
If true, also update the order header's current status (orders.orders_status) to this statusId. If false, the transition is recorded for audit but the order's current status is unchanged. Default: true. |
Example
{
"orderId": 987,
"statusId": 123,
"comments": "xyz789",
"notifyCustomer": true,
"updateOrderStatus": true
}
Product
Description
A product available for sale in the catalog. Localized fields are returned for the language requested via the languageId argument; defaults to the tenant's primary language when omitted.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
name - String!
|
Display name shown to shoppers. |
model - String
|
Manufacturer or vendor SKU/model identifier. |
image - String
|
Primary product image filename, served from the tenant's media host. |
price - Float!
|
Unit price in the tenant's default currency, exclusive of VAT. |
description - String
|
Long-form HTML description used on product detail pages. |
shortDescription - String
|
Plain-text summary used in product listings and meta descriptions. |
material - String
|
Example
{
"id": 4,
"name": "abc123",
"model": "xyz789",
"image": "xyz789",
"price": 123.45,
"description": "abc123",
"shortDescription": "xyz789",
"material": "xyz789"
}
ProductCategoryLink
ProductCustomOption
ProductExtraImage
ProductMedia
Example
{
"id": "4",
"productId": 4,
"categoryId": 123,
"file": "xyz789",
"sortOrder": 987,
"type": "abc123",
"size": "abc123",
"description": "xyz789",
"category": ProductMediaCategory
}
ProductMediaCategory
ProductOption
ProductOptionValue
Example
{
"id": "4",
"name": "abc123",
"code": "abc123",
"specification": "abc123",
"weight": 987.65,
"sort": 123,
"hex": "xyz789",
"priceDelta": 987.65,
"pricePrefix": "abc123",
"apiId": "xyz789"
}
ProductPriceHistory
ProductStock
ProductVolumeAddonPriceTier
ProductVolumeDiscountTier
Quote
Description
A quote (B2B request-for-pricing) created by or on behalf of a customer. Quotes can be tied to a customer account or anonymous via sessionId, and progress through status states until accepted or expired.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
customerId - Int
|
|
sessionId - String
|
Anonymous browser session identifier when the quote is created without a customer account. |
ipAddress - String
|
|
statusId - Int
|
Numeric status id of the quote. Example values:
Tenants may extend this set. Always resolve dynamically via the quoteStatuses query. |
dateAdded - String
|
|
dateModified - String
|
|
dateReminder - String
|
|
dateFollowUp - String
|
|
sendReminder - String
|
|
sendFollowUp - String
|
|
discountType - String
|
How the discountAmount is interpreted. One of: 'fixed' (currency amount), 'percent' (percentage off), or 'shipping' (free shipping). Defaults to 'fixed' on new quotes. |
discountAmount - Float
|
Discount value to apply, interpreted according to discountType. |
comment - String
|
|
cc - String
|
|
shipmentMethod - String
|
|
shipmentCode - String
|
|
shipmentPrice - Float
|
|
warehouseId - Int
|
|
items - [QuoteProduct!]!
|
Example
{
"id": "4",
"customerId": 987,
"sessionId": "abc123",
"ipAddress": "abc123",
"statusId": 987,
"dateAdded": "abc123",
"dateModified": "abc123",
"dateReminder": "abc123",
"dateFollowUp": "xyz789",
"sendReminder": "xyz789",
"sendFollowUp": "xyz789",
"discountType": "xyz789",
"discountAmount": 987.65,
"comment": "xyz789",
"cc": "xyz789",
"shipmentMethod": "xyz789",
"shipmentCode": "abc123",
"shipmentPrice": 987.65,
"warehouseId": 123,
"items": [QuoteProduct]
}
QuoteFile
QuoteGroup
QuoteNotificationFlagsInput
QuoteProduct
Description
A line item on a quote — references a product, an optional variant, quantity, and any per-line pricing overrides.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
quoteId - ID!
|
|
productId - Int!
|
|
variant - String!
|
|
quantity - Int!
|
|
discountedPrice - Float
|
Per-line negotiated price override. Null means use the product's catalog price. |
productGroup - Int
|
Line-item bundle/pricing-rule grouping marker. 0 means ungrouped (the default for most lines). Non-zero groups multiple lines together for combined discount calculation or kit-style packaging. |
comment - String
|
|
customOptions - String
|
|
bundleId - Int
|
Bundle id this line belongs to, when the line is part of a configured product bundle. 0 means standalone line. |
Example
{
"id": "4",
"quoteId": 4,
"productId": 987,
"variant": "xyz789",
"quantity": 123,
"discountedPrice": 987.65,
"productGroup": 987,
"comment": "abc123",
"customOptions": "xyz789",
"bundleId": 123
}
QuoteProductInput
Example
{
"productId": 987,
"variant": "abc123",
"quantity": 987,
"discountedPrice": 123.45,
"productGroup": 123,
"comment": "xyz789",
"customOptions": "xyz789",
"bundleId": 987
}
QuoteStatus
QuoteStatusEntry
RemoveCustomerFavoriteInput
Review
Description
A customer review of a product, with optional vendor reply via ReviewDetail.answer.
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
productId - ID!
|
|
customerId - Int
|
|
nickname - String
|
Public display name shown alongside the review. |
country - String
|
|
isRecommended - Boolean
|
True if the reviewer would recommend the product. |
verifiedBuyer - Boolean
|
True if the reviewer is a verified purchaser of the product. |
count - Int
|
|
statusId - Int
|
|
statusCode - String
|
|
dates - ReviewDates
|
|
details - [ReviewDetail]
|
Example
{
"id": "4",
"productId": 4,
"customerId": 123,
"nickname": "abc123",
"country": "abc123",
"isRecommended": true,
"verifiedBuyer": true,
"count": 987,
"statusId": 987,
"statusCode": "abc123",
"dates": ReviewDates,
"details": [ReviewDetail]
}
ReviewDates
ReviewDetail
ReviewSummary
Service
Example
{
"id": "4",
"categoryId": 987,
"image": "xyz789",
"sortOrder": 123,
"displayFooter": 987,
"googleFeed": 123,
"css": "xyz789",
"externalJs": "abc123",
"externalCss": "xyz789",
"svgIcon": "xyz789",
"descriptions": [ServiceDescription],
"category": ServiceCategory
}
ServiceCategory
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
parentId - Int
|
|
sortOrder - Int
|
|
displayFooter - Int
|
|
svgIcon - String
|
|
descriptions - [ServiceCategoryDescription]
|
|
children - [ServiceCategory]
|
Example
{
"id": 4,
"parentId": 123,
"sortOrder": 987,
"displayFooter": 123,
"svgIcon": "abc123",
"descriptions": [ServiceCategoryDescription],
"children": [ServiceCategory]
}
ServiceCategoryDescription
ServiceDescription
String
Description
The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
Example
"abc123"
UpdateOrdersProductInput
Description
Input shape for partially updating an existing order line via updateOrdersProduct. All fields are optional — only the provided fields are written.
Example
{
"orderId": "4",
"productId": 987,
"productModel": "abc123",
"productEan": "xyz789",
"productName": "xyz789",
"price": 123.45,
"originalPrice": 123.45,
"tax": 123.45,
"quantity": 123,
"stockVariants": "abc123",
"lineType": "abc123",
"comment": "abc123",
"customOptions": {}
}
UpdateOrdersProductsVariantInput
Description
Input shape for partially updating an existing variant selection. All fields are optional — only provided fields are written.
Example
{
"orderId": "4",
"orderProductId": "4",
"optionId": 123,
"optionName": "xyz789",
"optionValue": "xyz789",
"price": 987.65,
"pricePrefix": "xyz789"
}
UpdateProductCustomOptionInput
Warehouse
Example
{
"id": 4,
"name": "abc123",
"code": "xyz789",
"phone": "abc123",
"email": "xyz789",
"visible": true,
"stock": [WarehouseStock]
}