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.

Contact

AI Commerce Cloud onboarding

info@petrosoft.fi

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!

Arguments
Name Description
module - String
userId - Int
success - Boolean
limit - Int
offset - Int

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]

Arguments
Name Description
customerId - ID!
limit - Int
offset - Int

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]

Arguments
Name Description
ids - [ID!]
limit - Int
offset - Int

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]

Arguments
Name Description
limit - Int
offset - Int

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]

Arguments
Name Description
productId - Int
userId - Int
limit - Int
offset - Int

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]

Arguments
Name Description
limit - Int
offset - Int

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]

Arguments
Name Description
status - String
api - String
endpoint - String
jobId - String
limit - Int
offset - Int

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!]!

Arguments
Name Description
ordersId - Int
invoiceDateFrom - String
invoiceDateTo - String
valueDateFrom - String
valueDateTo - String
limit - Int
offset - Int

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
      }
    ]
  }
}

bannerHistory

Response

Returns [BannerHistoryEntry!]!

Arguments
Name Description
bannerId - Int!
startDate - String
endDate - String
limit - Int
offset - Int

Example

Query
query bannerHistory(
  $bannerId: Int!,
  $startDate: String,
  $endDate: String,
  $limit: Int,
  $offset: Int
) {
  bannerHistory(
    bannerId: $bannerId,
    startDate: $startDate,
    endDate: $endDate,
    limit: $limit,
    offset: $offset
  ) {
    bannerId
    date
    impressions
    clicks
  }
}
Variables
{
  "bannerId": 123,
  "startDate": "xyz789",
  "endDate": "abc123",
  "limit": 123,
  "offset": 987
}
Response
{
  "data": {
    "bannerHistory": [
      {
        "bannerId": 987,
        "date": "abc123",
        "impressions": 123,
        "clicks": 123
      }
    ]
  }
}

banners

Response

Returns [Banner]

Arguments
Name Description
limit - Int
offset - Int

Example

Query
query banners(
  $limit: Int,
  $offset: Int
) {
  banners(
    limit: $limit,
    offset: $offset
  ) {
    id
    title
    url
    group
    status
    image
    history {
      impressions
      clicks
    }
    historyByDate {
      bannerId
      date
      impressions
      clicks
    }
  }
}
Variables
{"limit": 987, "offset": 123}
Response
{
  "data": {
    "banners": [
      {
        "id": 4,
        "title": "abc123",
        "url": "xyz789",
        "group": "xyz789",
        "status": 123,
        "image": "xyz789",
        "history": BannerHistory,
        "historyByDate": [BannerHistoryEntry]
      }
    ]
  }
}

bannersByGroup

Response

Returns [Banner]

Arguments
Name Description
group - String!
limit - Int
offset - Int

Example

Query
query bannersByGroup(
  $group: String!,
  $limit: Int,
  $offset: Int
) {
  bannersByGroup(
    group: $group,
    limit: $limit,
    offset: $offset
  ) {
    id
    title
    url
    group
    status
    image
    history {
      impressions
      clicks
    }
    historyByDate {
      bannerId
      date
      impressions
      clicks
    }
  }
}
Variables
{
  "group": "xyz789",
  "limit": 123,
  "offset": 123
}
Response
{
  "data": {
    "bannersByGroup": [
      {
        "id": 4,
        "title": "abc123",
        "url": "abc123",
        "group": "xyz789",
        "status": 123,
        "image": "xyz789",
        "history": BannerHistory,
        "historyByDate": [BannerHistoryEntry]
      }
    ]
  }
}

billingAddresses

Response

Returns [BillingAddress]

Arguments
Name Description
customerId - ID!
limit - Int
offset - Int

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]

Arguments
Name Description
customerId - Int
sessionKey - String
startDate - String
endDate - String
limit - Int
offset - Int

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]

Arguments
Name Description
limit - Int
offset - Int

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.

Response

Returns a Category

Arguments
Name Description
id - ID!
languageId - Int

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]

Arguments
Name Description
groupId - Int
limit - Int
offset - Int

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

Response

Returns [Country]

Arguments
Name Description
limit - Int
offset - Int

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]

Arguments
Name Description
limit - Int
offset - Int

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

Response

Returns a Customer

Arguments
Name Description
id - ID!

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

Response

Returns a Customer

Arguments
Name Description
emailAddress - String!

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]

Arguments
Name Description
customerGroupId - ID
productId - Int
validOn - String ISO date (YYYY-MM-DD); returns only rules valid on that day.
limit - Int
offset - Int

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]

Arguments
Name Description
type - String
activeOnly - Boolean

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

Arguments
Name Description
customerId - Int! Customer to resolve the price for.
productId - Int! Product to resolve the price for.
validOn - String ISO date (YYYY-MM-DD). When omitted, today's date is used.

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]

Arguments
Name Description
limit - Int
offset - Int

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!]!

Arguments
Name Description
asiakaskoodi - String ERP customer code.
email - String
alennusryhma - String Discount group code.
limit - Int
offset - Int

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]

Arguments
Name Description
customersId - ID!
cartId - String

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!]!

Arguments
Name Description
customerId - Int
status - Int Filter by status (e.g. 1 for active blocks only).
limit - Int
offset - Int

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!]!

Arguments
Name Description
customersId - Int!
cardType - String Filter by card brand (e.g. 'visa', 'mastercard').
limit - Int
offset - Int

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!]!

Arguments
Name Description
customerId - Int!
userId - Int
sourceTable - String Filter by source table — 'customers', 'address_book', or 'customers_blacklist'.
limit - Int
offset - Int

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]

Arguments
Name Description
customerId - ID!
limit - Int
offset - Int
includeLegacy - Boolean

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]

Arguments
Name Description
limit - Int
offset - Int

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]

Arguments
Name Description
orderId - ID
couponCode - ID
limit - Int
offset - Int

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

Response

Returns [Domain]

Arguments
Name Description
locale - String
limit - Int
offset - Int

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]

Arguments
Name Description
languageId - Int
visibleOnly - Boolean
includeHiddenQuestions - Boolean
sortByOrder - Boolean

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

Arguments
Name Description
id - ID
slug - String
languageId - Int
visibleOnly - Boolean

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]

Arguments
Name Description
limit - Int
offset - Int

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

Arguments
Name Description
id - ID!
languageId - Int

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]

Arguments
Name Description
limit - Int
offset - Int

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

Response

Returns an Order

Arguments
Name Description
id - ID!

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]

Arguments
Name Description
orderId - Int! Order to fetch the timeline for.
statusId - Int Filter to transitions to this single status id.
limit - Int Maximum rows to return.
offset - Int Number of rows to skip for pagination.

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!]!

Arguments
Name Description
orderId - ID!
class - String

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

Response

Returns [Order]

Arguments
Name Description
limit - Int
offset - Int
customerId - Int

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.

Response

Returns a Product

Arguments
Name Description
id - ID!
languageId - Int

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]

Arguments
Name Description
productId - ID!
languageId - Int

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]

Arguments
Name Description
productId - ID!
languageId - Int

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]

Arguments
Name Description
productId - ID!
stockId - ID
startDate - String
endDate - String
userName - String
limit - Int
offset - Int

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]

Arguments
Name Description
productId - ID!
variant - String

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

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.

Response

Returns [Product]

Arguments
Name Description
limit - Int
offset - Int

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]

Arguments
Name Description
productId - ID!
languageId - Int
includeCategory - Boolean Default = true

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]

Arguments
Name Description
productId - ID
categoryId - ID
limit - Int
offset - Int

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

Response

Returns a Quote

Arguments
Name Description
id - ID!

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

Response

Returns [Quote!]!

Arguments
Name Description
customerId - Int!
statusId - Int
limit - Int

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!]!

Arguments
Name Description
sessionId - String!
statusId - Int
limit - Int

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]

Arguments
Name Description
productId - ID
limit - Int
offset - Int

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]

Arguments
Name Description
productId - ID
statusId - Int
languageId - Int
limit - Int
offset - Int

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]

Arguments
Name Description
languageId - Int!
parentId - Int
displayFooter - Boolean

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]

Arguments
Name Description
languageId - Int!
categoryId - Int
displayFooter - Boolean

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]

Arguments
Name Description
warehouseId - Int
productId - Int

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]

Arguments
Name Description
limit - Int
offset - Int

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!

Arguments
Name Description
quoteId - ID!
file - String!

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]
    }
  }
}

createOrUpdateSharedBasket

Response

Returns a SharedBasketItem!

Arguments
Name Description
input - CreateSharedBasketInput!

Example

Query
mutation createOrUpdateSharedBasket($input: CreateSharedBasketInput!) {
  createOrUpdateSharedBasket(input: $input) {
    id
    sharedCartId
    customersId
    itemId
    productId
    variants
    productOptions
    comment
    customOptions
    quantity
    specialPrice
    bundleId
    includes
    dateAdded
    expiresAt
  }
}
Variables
{"input": CreateSharedBasketInput}
Response
{
  "data": {
    "createOrUpdateSharedBasket": {
      "id": "4",
      "sharedCartId": "xyz789",
      "customersId": 123,
      "itemId": "xyz789",
      "productId": 123,
      "variants": "abc123",
      "productOptions": "xyz789",
      "comment": "abc123",
      "customOptions": "abc123",
      "quantity": 987,
      "specialPrice": 123.45,
      "bundleId": "xyz789",
      "includes": "abc123",
      "dateAdded": "abc123",
      "expiresAt": "xyz789"
    }
  }
}

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}}

expireSharedBasketItem

Response

Returns a SharedBasketItem!

Arguments
Name Description
input - ExpireSharedBasketInput!

Example

Query
mutation expireSharedBasketItem($input: ExpireSharedBasketInput!) {
  expireSharedBasketItem(input: $input) {
    id
    sharedCartId
    customersId
    itemId
    productId
    variants
    productOptions
    comment
    customOptions
    quantity
    specialPrice
    bundleId
    includes
    dateAdded
    expiresAt
  }
}
Variables
{"input": ExpireSharedBasketInput}
Response
{
  "data": {
    "expireSharedBasketItem": {
      "id": "4",
      "sharedCartId": "xyz789",
      "customersId": 987,
      "itemId": "abc123",
      "productId": 987,
      "variants": "abc123",
      "productOptions": "xyz789",
      "comment": "abc123",
      "customOptions": "xyz789",
      "quantity": 987,
      "specialPrice": 123.45,
      "bundleId": "xyz789",
      "includes": "abc123",
      "dateAdded": "abc123",
      "expiresAt": "xyz789"
    }
  }
}

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.

Response

Returns a Boolean!

Arguments
Name Description
id - ID!

Example

Query
mutation removeOrdersProduct($id: ID!) {
  removeOrdersProduct(id: $id)
}
Variables
{"id": "4"}
Response
{"data": {"removeOrdersProduct": true}}

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.

Response

Returns a Boolean!

Arguments
Name Description
id - ID!

Example

Query
mutation removeOrdersProductsVariant($id: ID!) {
  removeOrdersProductsVariant(id: $id)
}
Variables
{"id": "4"}
Response
{"data": {"removeOrdersProductsVariant": false}}

removeProductCustomOption

Response

Returns a Boolean

Arguments
Name Description
id - ID!

Example

Query
mutation removeProductCustomOption($id: ID!) {
  removeProductCustomOption(id: $id)
}
Variables
{"id": "4"}
Response
{"data": {"removeProductCustomOption": false}}

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"
    }
  }
}

updateSharedBasketQuantity

Response

Returns a SharedBasketItem!

Arguments
Name Description
input - UpdateSharedBasketQuantityInput!

Example

Query
mutation updateSharedBasketQuantity($input: UpdateSharedBasketQuantityInput!) {
  updateSharedBasketQuantity(input: $input) {
    id
    sharedCartId
    customersId
    itemId
    productId
    variants
    productOptions
    comment
    customOptions
    quantity
    specialPrice
    bundleId
    includes
    dateAdded
    expiresAt
  }
}
Variables
{"input": UpdateSharedBasketQuantityInput}
Response
{
  "data": {
    "updateSharedBasketQuantity": {
      "id": "4",
      "sharedCartId": "abc123",
      "customersId": 987,
      "itemId": "abc123",
      "productId": 987,
      "variants": "abc123",
      "productOptions": "abc123",
      "comment": "xyz789",
      "customOptions": "xyz789",
      "quantity": 987,
      "specialPrice": 987.65,
      "bundleId": "xyz789",
      "includes": "xyz789",
      "dateAdded": "xyz789",
      "expiresAt": "xyz789"
    }
  }
}

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

Fields
Field Name Description
id - ID!
module - String!
userId - Int
userName - String
identifier - String!
userAgent - String
success - Boolean
dateAdded - String!
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

Fields
Input Field Description
customersId - Int!
productsId - Int!
Example
{"customersId": 987, "productsId": 123}

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

Fields
Input Field Description
quoteId - Int!
statusId - Int!
customerNotified - Int
comments - String
Example
{
  "quoteId": 123,
  "statusId": 987,
  "customerNotified": 123,
  "comments": "abc123"
}

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

Fields
Field Name Description
id - ID!
addressFormat - String!
addressSummary - String!
Example
{
  "id": "4",
  "addressFormat": "abc123",
  "addressSummary": "abc123"
}

AdminNotification

Fields
Field Name Description
id - ID!
errorText - String!
createdAt - String!
emailErrorSent - Boolean!
errorCleared - Boolean!
Example
{
  "id": 4,
  "errorText": "abc123",
  "createdAt": "abc123",
  "emailErrorSent": false,
  "errorCleared": true
}

AdminTrackingCreate

Fields
Field Name Description
id - ID!
productId - Int!
userId - Int
userName - String
action - String
dateAdded - String!
Example
{
  "id": "4",
  "productId": 987,
  "userId": 123,
  "userName": "xyz789",
  "action": "xyz789",
  "dateAdded": "xyz789"
}

Administrator

Fields
Field Name Description
id - ID!
userName - String!
email - String
twoFactor - Boolean
superadmin - Boolean
writePermission - Boolean
grantAccess - String
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:

  • 'queued': job has not failed (error is null) — pending or successfully processed
  • 'failed': last attempt produced an error
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:

  • 1: English
  • 5: Swedish
  • 6: Finnish
  • 9: Spanish
  • 14: Italian

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:

  • '005900' (dark green): item is available
  • 'ff0000' (red): item is unavailable or has an extended delivery window

May be null for legacy labels that pre-date the colored-badge UI.

Example
{
  "id": 4,
  "languageId": 123,
  "name": "xyz789",
  "hexCode": "abc123"
}

BankPayment

Fields
Field Name Description
id - ID!
orderId - Int!
invoicePaymentDate - String!
invoicePaymentValueDate - String!
amount - Float!
Example
{
  "id": "4",
  "orderId": 987,
  "invoicePaymentDate": "xyz789",
  "invoicePaymentValueDate": "xyz789",
  "amount": 987.65
}

Banner

Fields
Field Name Description
id - ID!
title - String!
url - String!
group - String!
status - Int!
image - String
history - BannerHistory!
historyByDate - [BannerHistoryEntry!]!
Arguments
startDate - String
endDate - String
limit - Int
offset - Int
Example
{
  "id": 4,
  "title": "xyz789",
  "url": "abc123",
  "group": "abc123",
  "status": 987,
  "image": "abc123",
  "history": BannerHistory,
  "historyByDate": [BannerHistoryEntry]
}

BannerHistory

Fields
Field Name Description
impressions - Int!
clicks - Int!
Example
{"impressions": 987, "clicks": 123}

BannerHistoryEntry

Fields
Field Name Description
bannerId - Int!
date - String!
impressions - Int!
clicks - Int!
Example
{
  "bannerId": 987,
  "date": "xyz789",
  "impressions": 123,
  "clicks": 123
}

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

Fields
Field Name Description
id - ID!
customerId - Int
sessionKey - String!
loadTimeMsec - Int!
categoryId - Int
productId - Int
manufacturerId - Int
color - Int
size - Int
geoipCountry - String!
ipAddress - String!
date - String!
timestamp - Int
topPicks - Boolean!
keywords - String
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.

Fields
Field Name Description
id - ID!
code - String
image - String
banner - String
parentId - Int Id of the parent category, or 0 for top-level categories.
sortOrder - Int
position - Int
descriptions - [CategoryDescription]
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

Fields
Field Name Description
id - ID!
title - String
key - String!
value - String
description - String
groupId - Int
sortOrder - Int
lastModified - String
dateAdded - String
useFunction - String
setFunction - String
group - ConfigurationGroup
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

Fields
Input Field Description
gender - String
firstname - String
lastname - String
emailAddress - 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": "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

Fields
Input Field Description
optionId - Int!
optionName - String!
optionValue - String!
price - Float
pricePrefix - String
Example
{
  "optionId": 123,
  "optionName": "xyz789",
  "optionValue": "abc123",
  "price": 987.65,
  "pricePrefix": "xyz789"
}

CreateProductCustomOptionInput

Fields
Input Field Description
productId - Int!
productsOptionsId - Int!
required - Boolean
position - Int
type - String
Example
{
  "productId": 987,
  "productsOptionsId": 123,
  "required": false,
  "position": 123,
  "type": "abc123"
}

CreateQuoteInput

Fields
Input Field Description
customerId - Int
sessionId - String
ipAddress - String
statusId - Int
shipmentMethod - String
shipmentCode - String
shipmentPrice - Float
warehouseId - Int
items - [QuoteProductInput!]!
Example
{
  "customerId": 987,
  "sessionId": "abc123",
  "ipAddress": "xyz789",
  "statusId": 987,
  "shipmentMethod": "xyz789",
  "shipmentCode": "abc123",
  "shipmentPrice": 123.45,
  "warehouseId": 987,
  "items": [QuoteProductInput]
}

CreateSharedBasketInput

Fields
Input Field Description
sharedCartId - String!
itemId - String!
customersId - Int
productId - Int
variants - String
productOptions - String
comment - String
customOptions - String
quantity - Int!
specialPrice - Float
bundleId - String
includes - String
expiresAt - String
requireActive - Boolean
Example
{
  "sharedCartId": "abc123",
  "itemId": "abc123",
  "customersId": 987,
  "productId": 987,
  "variants": "abc123",
  "productOptions": "abc123",
  "comment": "abc123",
  "customOptions": "abc123",
  "quantity": 987,
  "specialPrice": 987.65,
  "bundleId": "abc123",
  "includes": "xyz789",
  "expiresAt": "abc123",
  "requireActive": false
}

Currency

Description

A currency available to the storefront for display and order placement.

Fields
Field Name Description
id - ID!
title - String
code - String ISO 4217 three-letter currency code (e.g. 'EUR', 'USD', 'GBP').
symbolLeft - String
symbolRight - String
value - Float Exchange rate against the tenant's primary currency at lastUpdated.
lastUpdated - String
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:

  • 0: temporary or anonymized account (system-managed; placeholder for soft-deleted records)
  • 1: registered individual customer (default for normal end-user accounts)
  • 2: business customer — has VAT id and company name fields populated
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:

  • 0: inactive (entry kept for audit history but no longer enforced)
  • 1: active block (checkout will be rejected)

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

Description

A wishlist / saved-for-later entry pairing one customer with one product.

Fields
Field Name Description
id - ID!
customersId - Int!
productsId - Int!
Example
{"id": 4, "customersId": 987, "productsId": 123}

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:

  • 'fixed': fixed currency amount off the qualifying line/order
  • 'percent': percentage off
  • 'shipping': free shipping for qualifying orders
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:

  • 'all': any customer in the group
  • 'vatid': only customers with a VAT id (B2B)
  • 'regular': only customers without a VAT id (B2C)
discountedProducts - Int
groupsType - String

Pricing strategy / rule shape for the group:

  • 'fixed': a flat discount applies via discountAmount + discountType
  • 'dynamic': discounts come from the dynamicDiscounts list (manufacturer/category windows)
  • 'matrix': discounts come from a structured manufacturer × category matrix
  • 'list': prices come from the priceList (per-product negotiated prices)
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:

  • 'customers': profile-level field change
  • 'address_book': address book entry change
  • 'customers_blacklist': blacklist add/remove/status change
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

Fields
Field Name Description
id - ID!
customerId - Int!
productId - Int!
Example
{
  "id": "4",
  "customerId": 123,
  "productId": 123
}

CustomerProductInclusionInput

Fields
Input Field Description
customerId - Int!
productId - Int!
Example
{"customerId": 987, "productId": 123}

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:

  • 'fixed': fixed currency amount off the order
  • 'percent': percentage off
  • 'shipping': free shipping
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:

  • 'all': any customer
  • 'vatid': only customers with a VAT id (B2B)
  • 'regular': only customers without a VAT id (B2C)
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]
}

DiscountCouponCustomerLinkInput

Fields
Input Field Description
couponCode - ID!
customerId - ID!
Example
{"couponCode": 4, "customerId": "4"}

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"
}

ExpireSharedBasketInput

Fields
Input Field Description
sharedCartId - String!
itemId - String!
expiresAt - String
Example
{
  "sharedCartId": "abc123",
  "itemId": "xyz789",
  "expiresAt": "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

Fields
Field Name Description
languageId - Int!
name - String
url - String
description - String
metaTitle - String
metaDescription - String
Example
{
  "languageId": 123,
  "name": "xyz789",
  "url": "xyz789",
  "description": "xyz789",
  "metaTitle": "xyz789",
  "metaDescription": "xyz789"
}

FaqQuestion

Fields
Field Name Description
id - ID!
image - String
sortOrder - Int
visibility - Int
googleIndex - Int
enableUrl - Int
categories - [Int]
descriptions - [FaqQuestionDescription]
Example
{
  "id": 4,
  "image": "abc123",
  "sortOrder": 123,
  "visibility": 123,
  "googleIndex": 123,
  "enableUrl": 987,
  "categories": [987],
  "descriptions": [FaqQuestionDescription]
}

FaqQuestionDescription

Fields
Field Name Description
languageId - Int!
question - String
answer - String
shortAnswer - String
url - String
metaTitle - String
metaDescription - String
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

Fields
Field Name Description
image - String
directory - String
Example
{
  "image": "abc123",
  "directory": "xyz789"
}

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

Fields
Field Name Description
languageId - Int!
urlClicked - Int
dateLastClick - String
description - String
descriptionTop - String
Example
{
  "languageId": 987,
  "urlClicked": 987,
  "dateLastClick": "xyz789",
  "description": "xyz789",
  "descriptionTop": "abc123"
}

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:

  • 1: Received
  • 2: Packing
  • 3: Shipped
  • 9: Under investigation
  • 10: To be picked up
  • 11: Packed
  • 15: Awaiting payment
  • 16: Cancelled
  • 17: Returned
  • 21: Uncollected
  • 23: Backorder

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
class - String
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:

  • 'orders': field on the order header
  • 'orders_products': field on a line item
  • 'orders_total': totals breakdown adjustment
  • 'orders_status_history': status-history modification
  • 'orders_notifications': notification record
  • 'orders_products_variants': variant selection on a line
  • 'invoice_book', 'orders_actions': tenant-specific extensions
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:

  • 'update' (most common): a column on an existing row was modified
  • 'rebuild': bulk recomputation (e.g. totals re-derived from lines)
  • 'delete': row was deleted
  • 'insert': row was created
  • 'notify': a notification was emitted to the customer
  • 'action': tenant-specific custom action
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:

  • 'item' (default): regular product line
  • 'refund': return-credit line subtracted from the order total

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:

  • '+' (most common): additive — added to the base product price
  • '' (empty): replacement — overrides the base price entirely

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

Fields
Field Name Description
name - String!
company - String
vatId - String
streetAddress - String!
city - String!
postcode - String!
state - String
country - String!
telephone - String
emailAddress - String
addressFormatId - Int
invoiceAddress - String
operatorId - Int
reference - String
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:

  • 0: not notified (internal state change)
  • 1: notification email sent
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:

  • 'Total': grand total of the order
  • 'Subtotal': line-items subtotal before fees and taxes
  • 'Tax': aggregated tax line (or one row per VAT rate)
  • 'Shipping': shipping cost line
  • 'DiscountCoupon': coupon-applied discount
  • 'Cod': cash-on-delivery surcharge
  • 'ot_klarna_fee', 'ot_collector_invoice_fee', 'ot_kreditor_fin_payment_chg': payment-provider fees
  • 'ot_3for2': 3-for-2 promotional discount
  • 'ot_custom', 'ot_custom_2': tenant-defined custom totals

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:

  • 'VivawalletKlarna' / 'vivawallet_klarna': Klarna invoice / pay-later
  • 'VivawalletCreditcard' / 'vivawallet_creditcard': card payment
  • 'VivawalletPaypal' / 'vivawallet_paypal': PayPal
  • 'VivawalletApplepay' / 'vivawallet_applepay': Apple Pay
  • 'VivawalletGooglepay' / 'vivawallet_googlepay': Google Pay

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:

  • '+' (most common): additive — added to the base product price
  • '' (empty): replacement — overrides the base price entirely
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"
}

ProductCustomOption

Fields
Field Name Description
id - ID!
productId - Int!
productsOptionsId - Int!
required - Boolean!
position - Int!
type - String!
Example
{
  "id": "4",
  "productId": 987,
  "productsOptionsId": 123,
  "required": false,
  "position": 123,
  "type": "xyz789"
}

ProductExtraImage

Fields
Field Name Description
id - ID!
code - String
url - String
sort - Int
optionId - Int
description - String
Example
{
  "id": 4,
  "code": "abc123",
  "url": "abc123",
  "sort": 987,
  "optionId": 987,
  "description": "abc123"
}

ProductMedia

Fields
Field Name Description
id - ID!
productId - ID
categoryId - Int
file - String
sortOrder - Int
type - String
size - String
description - String
category - ProductMediaCategory
Example
{
  "id": "4",
  "productId": 4,
  "categoryId": 123,
  "file": "xyz789",
  "sortOrder": 987,
  "type": "abc123",
  "size": "abc123",
  "description": "xyz789",
  "category": ProductMediaCategory
}

ProductMediaCategory

Fields
Field Name Description
id - ID!
code - String
sortOrder - Int
name - String
Example
{
  "id": "4",
  "code": "xyz789",
  "sortOrder": 123,
  "name": "abc123"
}

ProductOption

Fields
Field Name Description
id - ID!
name - String
code - String
description - String
sort - Int
values - [ProductOptionValue]
Example
{
  "id": "4",
  "name": "abc123",
  "code": "xyz789",
  "description": "xyz789",
  "sort": 123,
  "values": [ProductOptionValue]
}

ProductOptionValue

Fields
Field Name Description
id - ID!
name - String
code - String
specification - String
weight - Float
sort - Int
hex - String
priceDelta - Float
pricePrefix - String
apiId - String
Example
{
  "id": "4",
  "name": "abc123",
  "code": "abc123",
  "specification": "abc123",
  "weight": 987.65,
  "sort": 123,
  "hex": "xyz789",
  "priceDelta": 987.65,
  "pricePrefix": "abc123",
  "apiId": "xyz789"
}

ProductPriceHistory

Fields
Field Name Description
id - ID!
productId - ID!
stockId - ID!
price - Float!
date - String!
userName - String!
Example
{
  "id": "4",
  "productId": "4",
  "stockId": 4,
  "price": 987.65,
  "date": "abc123",
  "userName": "xyz789"
}

ProductStock

Fields
Field Name Description
id - ID!
productId - ID!
variant - String
quantity - Int!
price - Float!
priceOriginal - Float!
shelf - String
Example
{
  "id": "4",
  "productId": 4,
  "variant": "abc123",
  "quantity": 123,
  "price": 123.45,
  "priceOriginal": 123.45,
  "shelf": "abc123"
}

ProductVolumeAddonPriceTier

Fields
Field Name Description
minimumQuantity - Int!
unitPrice - Float!
Example
{"minimumQuantity": 123, "unitPrice": 123.45}

ProductVolumeDiscountTier

Fields
Field Name Description
minimumQuantity - Int!
discountPercentage - Float!
customerGroupId - String
customerId - Int
customerType - String
Example
{
  "minimumQuantity": 123,
  "discountPercentage": 987.65,
  "customerGroupId": "abc123",
  "customerId": 123,
  "customerType": "abc123"
}

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:

  • 1: Open (received)
  • 2: Accepted
  • 3: Cancelled
  • 4: Ordered (converted to an order)
  • 5: Proposal sent
  • 50: Pending approval

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

Fields
Field Name Description
id - ID!
quoteId - Int!
file - String!
Example
{
  "id": "4",
  "quoteId": 987,
  "file": "abc123"
}

QuoteGroup

Fields
Field Name Description
id - ID!
languageId - Int!
name - String!
Example
{
  "id": "4",
  "languageId": 987,
  "name": "xyz789"
}

QuoteNotificationFlagsInput

Fields
Input Field Description
sendReminder - Boolean
sendFollowUp - Boolean
Example
{"sendReminder": false, "sendFollowUp": false}

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

Fields
Input Field Description
productId - Int!
variant - String!
quantity - Int
discountedPrice - Float
productGroup - Int
comment - String
customOptions - String
bundleId - Int
Example
{
  "productId": 987,
  "variant": "abc123",
  "quantity": 987,
  "discountedPrice": 123.45,
  "productGroup": 123,
  "comment": "xyz789",
  "customOptions": "xyz789",
  "bundleId": 987
}

QuoteStatus

Fields
Field Name Description
id - ID!
languageId - Int!
name - String!
code - String!
Example
{
  "id": "4",
  "languageId": 987,
  "name": "xyz789",
  "code": "xyz789"
}

QuoteStatusEntry

Fields
Field Name Description
id - ID!
quoteId - Int!
statusId - Int!
statusName - String
dateAdded - String!
customerNotified - Int
comments - String
Example
{
  "id": 4,
  "quoteId": 123,
  "statusId": 987,
  "statusName": "xyz789",
  "dateAdded": "abc123",
  "customerNotified": 123,
  "comments": "xyz789"
}

RemoveCustomerFavoriteInput

Description

Either id alone, or (customersId + productsId), is sufficient to identify the row to remove.

Fields
Input Field Description
id - ID
customersId - Int
productsId - Int
Example
{
  "id": "4",
  "customersId": 987,
  "productsId": 123
}

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

Fields
Field Name Description
createdAt - String
orderDate - String
answerDate - String
Example
{
  "createdAt": "abc123",
  "orderDate": "abc123",
  "answerDate": "xyz789"
}

ReviewDetail

Fields
Field Name Description
languageId - Int
title - String
detail - String
answer - String
Example
{
  "languageId": 123,
  "title": "xyz789",
  "detail": "abc123",
  "answer": "abc123"
}

ReviewSummary

Description

Aggregate review metrics for a product.

Fields
Field Name Description
productId - ID!
reviewsCount - Int Total count of approved reviews for this product.
ratingSummary - Int Aggregate star rating (1–5 scale).
Example
{"productId": 4, "reviewsCount": 123, "ratingSummary": 987}

Service

Fields
Field Name Description
id - ID!
categoryId - Int
image - String
sortOrder - Int
displayFooter - Int
googleFeed - Int
css - String
externalJs - String
externalCss - String
svgIcon - String
descriptions - [ServiceDescription]
category - ServiceCategory
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

Fields
Field Name Description
languageId - Int!
name - String
url - String
html - String
Example
{
  "languageId": 123,
  "name": "xyz789",
  "url": "abc123",
  "html": "abc123"
}

ServiceDescription

Fields
Field Name Description
languageId - Int!
name - String
url - String
html - String
metaTitle - String
metaDescription - String
Example
{
  "languageId": 987,
  "name": "xyz789",
  "url": "xyz789",
  "html": "xyz789",
  "metaTitle": "xyz789",
  "metaDescription": "abc123"
}

SharedBasketItem

Fields
Field Name Description
id - ID!
sharedCartId - String!
customersId - Int
itemId - String
productId - Int
variants - String
productOptions - String
comment - String
customOptions - String
quantity - Int!
specialPrice - Float
bundleId - String
includes - String
dateAdded - String
expiresAt - String
Example
{
  "id": "4",
  "sharedCartId": "abc123",
  "customersId": 123,
  "itemId": "abc123",
  "productId": 987,
  "variants": "abc123",
  "productOptions": "xyz789",
  "comment": "xyz789",
  "customOptions": "abc123",
  "quantity": 987,
  "specialPrice": 987.65,
  "bundleId": "abc123",
  "includes": "abc123",
  "dateAdded": "xyz789",
  "expiresAt": "xyz789"
}

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.

Fields
Input Field Description
orderId - ID
productId - Int
productModel - String
productEan - String
productName - String
price - Float
originalPrice - Float
tax - Float
quantity - Int
stockVariants - String
lineType - String
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": "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.

Fields
Input Field Description
orderId - ID
orderProductId - ID
optionId - Int
optionName - String
optionValue - String
price - Float
pricePrefix - String
Example
{
  "orderId": "4",
  "orderProductId": "4",
  "optionId": 123,
  "optionName": "xyz789",
  "optionValue": "xyz789",
  "price": 987.65,
  "pricePrefix": "xyz789"
}

UpdateProductCustomOptionInput

Fields
Input Field Description
productId - Int
productsOptionsId - Int
required - Boolean
position - Int
type - String
Example
{
  "productId": 987,
  "productsOptionsId": 987,
  "required": false,
  "position": 987,
  "type": "abc123"
}

UpdateSharedBasketQuantityInput

Fields
Input Field Description
sharedCartId - String!
itemId - String!
quantity - Int!
requireActive - Boolean
Example
{
  "sharedCartId": "xyz789",
  "itemId": "xyz789",
  "quantity": 987,
  "requireActive": true
}

Warehouse

Fields
Field Name Description
id - ID!
name - String
code - String
phone - String
email - String
visible - Boolean!
stock - [WarehouseStock]
Arguments
productId - Int
Example
{
  "id": 4,
  "name": "abc123",
  "code": "xyz789",
  "phone": "abc123",
  "email": "xyz789",
  "visible": true,
  "stock": [WarehouseStock]
}

WarehouseStock

Fields
Field Name Description
id - ID!
warehouseId - Int!
productId - Int!
quantity - Int!
Example
{
  "id": "4",
  "warehouseId": 987,
  "productId": 123,
  "quantity": 987
}