SnowBee Public API

Generated from the backend route definitions. The complete machine-readable document is available as openapi.json.

OpenAPI 3.1.0 · Version latest · 44 operations

General

GET/healthcheckGET /healthcheck

Authentication

POST/oauth2/tokenCreate an access token
POST/v1/tenants/{tenantId}/oauth2/v2.0/tokenCreate an access token using the tenant-scoped compatibility endpoint

E-commerce

GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/brandsGet product schema for brands
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/product_categoriesGet product schema for product categories
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/main_product_groupsGet product schema for main product groups
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/sub_product_groupsGet product schema for sub product groups
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/product_conceptsGet product schema for product concepts
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/exclusivity_levelsGet product schema for exclusivity levels
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/main_activitiesGet product schema for main activities
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/product_colorsGet product schema for product colors
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/sizesGet product schema for sizes
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/dynamic_attributesGet product schema for dynamic attributes
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/dynamic_attributes_optionsGet product schema for dynamic attributes options
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/product_schema/unit_of_measuresGet unit of measures
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/productsList product IDs
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/products/{productId}Get product
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/skus/{skuId}/inventoryGet SKU available inventory
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/retail_storesGet retail stores
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/campaignsGet campaigns
POST/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/products/trigger_eventsTrigger product events
POST/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/inventory/trigger_eventsTrigger inventory events
POST/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/ordersCreate sales order
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/orders/{orderId}Get sales order
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/customers/{customerId}/ordersGet customer order history
POST/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/click_and_collectCreate click & collect reservation
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/customers/{customerId}Get customer
PUT/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/customers/{customerId}Create or update customer
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/customers/by_email/{email}Get customer by email
PUT/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/customers/{customerId}/addressesUpdate customer addresses
PUT/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/push-customerPush customer from eCommerce Auth
POST/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/orders/{salesOrderId}/captures/{captureId}/payment_captureUpdate payment capture status
POST/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/orders/{salesOrderId}/refunds/{refundId}/confirmConfirm refund
GET/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/barcodes/code128/{value}Generate Code128 barcode SVG

Loyalty Programs

GET/v1/tenants/{tenantId}/loyalty_programs/{loyaltyProgramId}/retail_storesGet retail stores for loyalty program

Demand Planning (experimental)

GET/v1/tenants/{tenantId}/demand_planning/limitsPublished upload limits
GET/v1/tenants/{tenantId}/demand_planning/retail_storesList retail stores
GET/v1/tenants/{tenantId}/demand_planning/ecom_storesList ecom stores
GET/v1/tenants/{tenantId}/demand_planning/sales_forecast_batches/{batchId}Get the status of a batch of sales forecasts
PUT/v1/tenants/{tenantId}/demand_planning/sales_forecast_batches/{batchId}Upload a batch of sales forecasts
GET/v1/tenants/{tenantId}/demand_planning/replenishment_parameter_batches/{batchId}Get the status of a batch of replenishment parameters
PUT/v1/tenants/{tenantId}/demand_planning/replenishment_parameter_batches/{batchId}Upload a batch of replenishment parameters
GET/v1/tenants/{tenantId}/demand_planning/sales_forecastsList the sales forecasts SnowBee currently holds
GET/v1/tenants/{tenantId}/demand_planning/replenishment_parametersList effective replenishment parameters

Schemas

Reusable request and response schemas referenced by the operations above.

snowbee.SbPublicApiAuthorizeRequestGrantType
{
  "type": "string",
  "description": "OAuth2 grant type",
  "enum": [
    "client_credentials"
  ],
  "title": "SbPublicApiAuthorizeRequestGrantType"
}
kotlin.String
{
  "type": "string",
  "description": "Discount type",
  "enum": [
    "PERCENTAGE",
    "AMOUNT"
  ],
  "example": "PERCENTAGE",
  "title": "String"
}
snowbee.SbPublicApiOAuthTokenRequest
{
  "type": "object",
  "description": "OAuth 2.0 client credentials token request",
  "properties": {
    "client_id": {
      "type": [
        "null",
        "string"
      ],
      "description": "Client ID when using client_secret_post. Omit when using HTTP Basic.",
      "title": "String"
    },
    "client_secret": {
      "type": [
        "null",
        "string"
      ],
      "description": "Client secret when using client_secret_post. Omit when using HTTP Basic.",
      "title": "String"
    },
    "grant_type": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiAuthorizeRequestGrantType",
      "description": "OAuth 2.0 grant type"
    },
    "resource": {
      "type": [
        "null",
        "string"
      ],
      "description": "eCom store ID for ecom or loyalty program ID for loyalty_programs. Omit for demand_planning.",
      "title": "String"
    },
    "scope": {
      "$ref": "#/components/schemas/kotlin.String",
      "description": "API scope to request"
    },
    "tenant_id": {
      "type": "string",
      "description": "SnowBee tenant ID",
      "example": "019c1234-5678-7abc-8def-123456789012",
      "title": "String"
    }
  },
  "required": [
    "grant_type",
    "scope",
    "tenant_id"
  ],
  "title": "SbPublicApiOAuthTokenRequest"
}
snowbee.SbPublicApiAuthorizeResponse
{
  "type": "object",
  "description": "OAuth2 token response",
  "properties": {
    "access_token": {
      "type": "string",
      "description": "JWT access token to use for API requests",
      "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
      "title": "String"
    },
    "expires_in": {
      "type": "integer",
      "format": "int32",
      "description": "Token expiration time in seconds",
      "example": "3600",
      "title": "Int"
    },
    "scope": {
      "type": "string",
      "description": "Scope granted to the access token",
      "example": "ecom",
      "title": "String"
    },
    "token_type": {
      "$ref": "#/components/schemas/kotlin.String",
      "description": "OAuth 2.0 token type"
    }
  },
  "required": [
    "access_token",
    "expires_in",
    "scope",
    "token_type"
  ],
  "title": "SbPublicApiAuthorizeResponse"
}
snowbee.SbPublicApiOAuthErrorResponse
{
  "type": "object",
  "description": "OAuth 2.0 token error response",
  "properties": {
    "error": {
      "type": "string",
      "description": "OAuth 2.0 error code",
      "example": "invalid_request",
      "title": "String"
    },
    "error_description": {
      "type": "string",
      "description": "Human-readable error description",
      "example": "The tenant_id parameter is required",
      "title": "String"
    },
    "resolution": {
      "type": "string",
      "description": "Suggested next action",
      "example": "Add tenant_id to the form-encoded request and retry",
      "title": "String"
    }
  },
  "required": [
    "error",
    "error_description",
    "resolution"
  ],
  "title": "SbPublicApiOAuthErrorResponse"
}
snowbee.SbPublicApiAuthorizeRequest
{
  "type": "object",
  "description": "OAuth2 token request",
  "properties": {
    "client_id": {
      "type": "string",
      "description": "Client ID from your API credentials",
      "example": "your-client-id",
      "title": "String"
    },
    "client_secret": {
      "type": "string",
      "description": "Client secret from your API credentials",
      "example": "your-client-secret",
      "title": "String"
    },
    "grant_type": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiAuthorizeRequestGrantType",
      "description": "OAuth2 grant type"
    },
    "resource": {
      "type": [
        "null",
        "string"
      ],
      "description": "Resource identifier: the eCom store ID for the ecom scope, the loyalty program ID for the loyalty_programs scope. Not used by the tenant-wide demand_planning scope.",
      "title": "String"
    },
    "scope": {
      "$ref": "#/components/schemas/kotlin.String",
      "description": "API scope to request access to"
    }
  },
  "required": [
    "client_id",
    "client_secret",
    "grant_type",
    "scope"
  ],
  "title": "SbPublicApiAuthorizeRequest"
}
snowbee.SbPublicApiEcomStoreProductAttributesNameEntityResponse
{
  "type": "object",
  "description": "Named entity with localized name",
  "properties": {
    "id": {
      "type": "string",
      "description": "Entity identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized entity name"
    }
  },
  "required": [
    "id",
    "name"
  ],
  "title": "SbPublicApiEcomStoreProductAttributesNameEntityResponse"
}
snowbee.SbPublicApiLocalizedString
{
  "type": "object",
  "example": "{\"NO\":\"Norsk tekststreng\",\"EN\":\"English string\"}",
  "properties": {
    "value": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "required": [
    "value"
  ],
  "title": "SbPublicApiLocalizedString"
}
snowbee.SbPublicApiEcomStoreBrandsResponse
{
  "type": "object",
  "description": "List of brands",
  "properties": {
    "brands": {
      "type": "array",
      "description": "Available brands",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesNameEntityResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductAttributesNameEntityResponse>"
    }
  },
  "required": [
    "brands"
  ],
  "title": "SbPublicApiEcomStoreBrandsResponse"
}
snowbee.ApiErrorResponse
{
  "type": "object",
  "description": "API error response",
  "properties": {
    "error": {
      "type": "string",
      "description": "Stable error code",
      "example": "INVALID_REQUEST",
      "title": "String"
    },
    "message": {
      "type": "string",
      "description": "Human-readable error message",
      "example": "Invalid customer ID format",
      "title": "String"
    },
    "resolution": {
      "type": "string",
      "description": "Suggested next action",
      "example": "Correct the customer ID and retry the request",
      "title": "String"
    }
  },
  "required": [
    "error",
    "message",
    "resolution"
  ],
  "title": "ApiErrorResponse"
}
snowbee.SbPublicApiEcomStoreProductCategoryResponse
{
  "type": "object",
  "description": "Product category",
  "properties": {
    "code": {
      "type": [
        "null",
        "string"
      ],
      "description": "Product category code",
      "example": "CAT-001",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Entity identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized entity name"
    }
  },
  "required": [
    "id",
    "name"
  ],
  "title": "SbPublicApiEcomStoreProductCategoryResponse"
}
snowbee.SbPublicApiEcomStoreProductCategoriesResponse
{
  "type": "object",
  "description": "List of product categories",
  "properties": {
    "productCategories": {
      "type": "array",
      "description": "Product categories",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductCategoryResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductCategoryResponse>"
    }
  },
  "required": [
    "productCategories"
  ],
  "title": "SbPublicApiEcomStoreProductCategoriesResponse"
}
snowbee.SbPublicApiEcomStoreMainProductGroupResponse
{
  "type": "object",
  "description": "Main product group",
  "properties": {
    "code": {
      "type": "string",
      "description": "Group code",
      "example": "MPG-001",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Group identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized group name"
    },
    "productCategoryId": {
      "type": "string",
      "description": "Product category this group belongs to",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "code",
    "id",
    "name",
    "productCategoryId"
  ],
  "title": "SbPublicApiEcomStoreMainProductGroupResponse"
}
snowbee.SbPublicApiEcomStoreMainProductGroupsResponse
{
  "type": "object",
  "description": "List of main product groups",
  "properties": {
    "mainProductGroups": {
      "type": "array",
      "description": "Main product groups",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreMainProductGroupResponse"
      },
      "title": "List<SbPublicApiEcomStoreMainProductGroupResponse>"
    }
  },
  "required": [
    "mainProductGroups"
  ],
  "title": "SbPublicApiEcomStoreMainProductGroupsResponse"
}
snowbee.SbPublicApiEcomStoreSubProductGroupResponse
{
  "type": "object",
  "description": "Sub product group",
  "properties": {
    "code": {
      "type": "string",
      "description": "Group code",
      "example": "SPG-001",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Group identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "mainProductGroupId": {
      "type": "string",
      "description": "Parent main product group",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized group name"
    }
  },
  "required": [
    "code",
    "id",
    "mainProductGroupId",
    "name"
  ],
  "title": "SbPublicApiEcomStoreSubProductGroupResponse"
}
snowbee.SbPublicApiEcomStoreSubProductGroupsResponse
{
  "type": "object",
  "description": "List of sub product groups",
  "properties": {
    "subProductGroups": {
      "type": "array",
      "description": "Sub product groups",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreSubProductGroupResponse"
      },
      "title": "List<SbPublicApiEcomStoreSubProductGroupResponse>"
    }
  },
  "required": [
    "subProductGroups"
  ],
  "title": "SbPublicApiEcomStoreSubProductGroupsResponse"
}
snowbee.SbPublicApiEcomStoreProductConceptsResponse
{
  "type": "object",
  "description": "List of product concepts",
  "properties": {
    "productConcepts": {
      "type": "array",
      "description": "Product concepts",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesNameEntityResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductAttributesNameEntityResponse>"
    }
  },
  "required": [
    "productConcepts"
  ],
  "title": "SbPublicApiEcomStoreProductConceptsResponse"
}
snowbee.SbPublicApiEcomStoreExclusivityLevelsResponse
{
  "type": "object",
  "description": "List of exclusivity levels",
  "properties": {
    "exclusivityLevels": {
      "type": "array",
      "description": "Exclusivity levels",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesNameEntityResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductAttributesNameEntityResponse>"
    }
  },
  "required": [
    "exclusivityLevels"
  ],
  "title": "SbPublicApiEcomStoreExclusivityLevelsResponse"
}
snowbee.SbPublicApiEcomStoreMainActivitiesResponse
{
  "type": "object",
  "description": "List of main activities",
  "properties": {
    "mainActivities": {
      "type": "array",
      "description": "Main activities",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesNameEntityResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductAttributesNameEntityResponse>"
    }
  },
  "required": [
    "mainActivities"
  ],
  "title": "SbPublicApiEcomStoreMainActivitiesResponse"
}
snowbee.SbPublicApiEcomStoreProductAttributesProductColorResponse
{
  "type": "object",
  "description": "Product color information",
  "properties": {
    "code": {
      "type": "string",
      "description": "Color code",
      "example": "BLK",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Color identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized color name"
    }
  },
  "required": [
    "code",
    "id",
    "name"
  ],
  "title": "SbPublicApiEcomStoreProductAttributesProductColorResponse"
}
snowbee.SbPublicApiEcomStoreProductColorsResponse
{
  "type": "object",
  "description": "List of product colors",
  "properties": {
    "productColors": {
      "type": "array",
      "description": "Product colors",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesProductColorResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductAttributesProductColorResponse>"
    }
  },
  "required": [
    "productColors"
  ],
  "title": "SbPublicApiEcomStoreProductColorsResponse"
}
snowbee.SbPublicApiEcomStoreSizeResponse
{
  "type": "object",
  "description": "Product size information",
  "properties": {
    "code": {
      "type": "string",
      "description": "Size code",
      "example": "M",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Size identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized size name"
    },
    "sizeGroup": {
      "type": "string",
      "description": "Size group this size belongs to",
      "example": "CLOTHING",
      "title": "String"
    },
    "sizeGroupId": {
      "type": "string",
      "description": "Id of size group this size belongs to",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "sortFactor": {
      "type": "integer",
      "format": "int32",
      "description": "Sort order factor",
      "example": "3",
      "title": "Int"
    },
    "status": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEntityStatus",
      "description": "Size status"
    }
  },
  "required": [
    "code",
    "id",
    "name",
    "sizeGroup",
    "sizeGroupId",
    "sortFactor",
    "status"
  ],
  "title": "SbPublicApiEcomStoreSizeResponse"
}
snowbee.SbPublicApiEntityStatus
{
  "type": "string",
  "description": "Entity status",
  "enum": [
    "ACTIVE",
    "INACTIVE"
  ],
  "title": "SbPublicApiEntityStatus"
}
snowbee.SbPublicApiEcomStoreSizesResponse
{
  "type": "object",
  "description": "List of sizes",
  "properties": {
    "sizes": {
      "type": "array",
      "description": "Available sizes",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreSizeResponse"
      },
      "title": "List<SbPublicApiEcomStoreSizeResponse>"
    }
  },
  "required": [
    "sizes"
  ],
  "title": "SbPublicApiEcomStoreSizesResponse"
}
snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseBoolean"
    },
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseMultiSelect"
    },
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseRange"
    },
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseSingleSelect"
    },
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseText"
    }
  ],
  "description": "Dynamic attribute definition",
  "title": "SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse"
}
snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseBoolean
{
  "type": "object",
  "description": "Boolean dynamic attribute definition",
  "properties": {
    "attributeType": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Attribute type"
    },
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized attribute name"
    }
  },
  "required": [
    "attributeType",
    "id",
    "name"
  ],
  "title": "SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseBoolean"
}
snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse
{
  "type": "string",
  "enum": [
    "BOOLEAN",
    "RANGE",
    "SINGLE_SELECT",
    "MULTI_SELECT",
    "TEXT"
  ],
  "title": "SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse"
}
snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseMultiSelect
{
  "type": "object",
  "description": "Multi-select dynamic attribute definition",
  "properties": {
    "attributeType": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Attribute type"
    },
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized attribute name"
    }
  },
  "required": [
    "attributeType",
    "id",
    "name"
  ],
  "title": "SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseMultiSelect"
}
snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseRange
{
  "type": "object",
  "description": "Range/numeric dynamic attribute definition with min, max and step",
  "properties": {
    "attributeType": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Attribute type"
    },
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized attribute name"
    },
    "from": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Minimum value",
      "example": "0.0",
      "title": "BigDecimalAsString"
    },
    "step": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Step increment",
      "example": "1.0",
      "title": "BigDecimalAsString"
    },
    "to": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Maximum value",
      "example": "100.0",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "attributeType",
    "from",
    "id",
    "name",
    "step",
    "to"
  ],
  "title": "SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseRange"
}
snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseSingleSelect
{
  "type": "object",
  "description": "Single-select dynamic attribute definition",
  "properties": {
    "attributeType": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Attribute type"
    },
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized attribute name"
    }
  },
  "required": [
    "attributeType",
    "id",
    "name"
  ],
  "title": "SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseSingleSelect"
}
snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseText
{
  "type": "object",
  "description": "Text dynamic attribute definition",
  "properties": {
    "attributeType": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Attribute type"
    },
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized attribute name"
    },
    "contentFormat": {
      "type": "string",
      "description": "Content format: PLAIN or MARKDOWN",
      "example": "PLAIN",
      "title": "String"
    }
  },
  "required": [
    "attributeType",
    "contentFormat",
    "id",
    "name"
  ],
  "title": "SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponseText"
}
snowbee.SbPublicApiEcomStoreDynamicAttributesResponse
{
  "type": "object",
  "description": "List of dynamic attributes",
  "properties": {
    "dynamicAttributes": {
      "type": "array",
      "description": "Dynamic attributes",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductAttributesDynamicAttributeResponse>"
    }
  },
  "required": [
    "dynamicAttributes"
  ],
  "title": "SbPublicApiEcomStoreDynamicAttributesResponse"
}
snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeOptionResponse
{
  "type": "object",
  "description": "Dynamic attribute option",
  "properties": {
    "description": {
      "type": [
        "null",
        "string"
      ],
      "description": "Option description",
      "example": "Product is waterproof",
      "title": "String"
    },
    "dynamicAttributeId": {
      "type": "string",
      "description": "Parent dynamic attribute",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Option identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Option name",
      "example": "Waterproof",
      "title": "String"
    }
  },
  "required": [
    "dynamicAttributeId",
    "id",
    "name"
  ],
  "title": "SbPublicApiEcomStoreProductAttributesDynamicAttributeOptionResponse"
}
snowbee.SbPublicApiEcomStoreDynamicAttributeOptionsResponse
{
  "type": "object",
  "description": "List of dynamic attribute options",
  "properties": {
    "dynamicAttributeOptions": {
      "type": "array",
      "description": "Dynamic attribute options",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductAttributesDynamicAttributeOptionResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductAttributesDynamicAttributeOptionResponse>"
    }
  },
  "required": [
    "dynamicAttributeOptions"
  ],
  "title": "SbPublicApiEcomStoreDynamicAttributeOptionsResponse"
}
snowbee.SbPublicApiUnitOfMeasureResponse
{
  "type": "object",
  "description": "Unit of measure",
  "properties": {
    "code": {
      "type": "string",
      "description": "Unit code",
      "example": "PCS",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized unit name"
    }
  },
  "required": [
    "code",
    "id",
    "name"
  ],
  "title": "SbPublicApiUnitOfMeasureResponse"
}
snowbee.SbPublicApiUnitOfMeasuresResponse
{
  "type": "object",
  "description": "List of units of measure",
  "properties": {
    "unitOfMeasures": {
      "type": "array",
      "description": "List of available units of measure",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiUnitOfMeasureResponse"
      },
      "title": "List<SbPublicApiUnitOfMeasureResponse>"
    }
  },
  "required": [
    "unitOfMeasures"
  ],
  "title": "SbPublicApiUnitOfMeasuresResponse"
}
snowbee.SbPublicApiProductIdsResponse
{
  "type": "object",
  "description": "List of product IDs in the ecom store assortment",
  "properties": {
    "productIds": {
      "type": "array",
      "description": "List of product IDs",
      "items": {
        "type": "string",
        "title": "String"
      },
      "title": "List<String>"
    }
  },
  "required": [
    "productIds"
  ],
  "title": "SbPublicApiProductIdsResponse"
}
snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseBoolean"
    },
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseMultiSelect"
    },
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseRange"
    },
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseSingleSelect"
    },
    {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseText"
    }
  ],
  "description": "Dynamic attribute value for a product",
  "title": "SbPublicApiEcomStoreProductDynamicAttributeValuesResponse"
}
snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseBoolean
{
  "type": "object",
  "description": "Boolean dynamic attribute value",
  "properties": {
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "type": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Value type"
    },
    "value": {
      "type": "boolean",
      "description": "Boolean value",
      "example": "true",
      "title": "Boolean"
    }
  },
  "required": [
    "id",
    "type",
    "value"
  ],
  "title": "SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseBoolean"
}
snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseMultiSelect
{
  "type": "object",
  "description": "Multi-select dynamic attribute value",
  "properties": {
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "type": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Value type"
    },
    "value": {
      "type": "array",
      "description": "List of selected option IDs",
      "items": {
        "type": "string",
        "title": "String"
      },
      "title": "List<String>"
    }
  },
  "required": [
    "id",
    "type",
    "value"
  ],
  "title": "SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseMultiSelect"
}
snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseRange
{
  "type": "object",
  "description": "Range/numeric dynamic attribute value",
  "properties": {
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "type": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Value type"
    },
    "value": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Numeric value",
      "example": "42.5",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "id",
    "type",
    "value"
  ],
  "title": "SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseRange"
}
snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseSingleSelect
{
  "type": "object",
  "description": "Single-select dynamic attribute value",
  "properties": {
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "type": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Value type"
    },
    "value": {
      "type": [
        "null",
        "string"
      ],
      "description": "Selected option ID",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "id",
    "type"
  ],
  "title": "SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseSingleSelect"
}
snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseText
{
  "type": "object",
  "description": "Text dynamic attribute value",
  "properties": {
    "id": {
      "type": "string",
      "description": "Dynamic attribute identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "type": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValueTypeResponse",
      "description": "Value type"
    },
    "value": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized text value"
    }
  },
  "required": [
    "id",
    "type",
    "value"
  ],
  "title": "SbPublicApiEcomStoreProductDynamicAttributeValuesResponse.SbPublicApiEcomStoreProductDynamicAttributeValuesResponseText"
}
snowbee.SbPublicApiEcomStoreProductImageResponse
{
  "type": "object",
  "description": "Product image",
  "properties": {
    "id": {
      "type": "string",
      "description": "Image identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "sortOrder": {
      "type": "integer",
      "format": "int32",
      "description": "Sort order for display",
      "example": "1",
      "title": "Int"
    },
    "url": {
      "type": "string",
      "description": "Image URL",
      "example": "https://cdn.example.com/images/product-001.jpg",
      "title": "String"
    }
  },
  "required": [
    "id",
    "sortOrder",
    "url"
  ],
  "title": "SbPublicApiEcomStoreProductImageResponse"
}
snowbee.SbPublicApiProductPrice
{
  "type": "object",
  "description": "Product pricing information",
  "properties": {
    "campaignPrice": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Campaign/sale price",
      "example": "249.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "loyaltyMemberPrice": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Loyalty member price",
      "example": "239.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "price": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Regular price",
      "example": "299.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "price"
  ],
  "title": "SbPublicApiProductPrice"
}
snowbee.SbPublicApiEcomStoreProductSkuResponse
{
  "type": "object",
  "description": "Product SKU (Stock Keeping Unit) variant",
  "properties": {
    "barcode": {
      "type": [
        "null",
        "string"
      ],
      "description": "Barcode (EAN/UPC)",
      "example": "1234567890123",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "SKU identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "productColorId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Product color identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "published": {
      "type": "boolean",
      "description": "Whether the SKU is published",
      "example": "true",
      "title": "Boolean"
    },
    "sizeId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Size identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "skuNumber": {
      "type": "string",
      "description": "SKU number/code",
      "example": "PROD-BLK-M",
      "title": "String"
    }
  },
  "required": [
    "id",
    "published",
    "skuNumber"
  ],
  "title": "SbPublicApiEcomStoreProductSkuResponse"
}
snowbee.SbPublicApiUpcomingProductPrice
{
  "type": "object",
  "description": "Upcoming price change",
  "properties": {
    "activatesAt": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "description": "When this price becomes active",
      "example": "2025-10-28T12:37:42Z",
      "title": "ISO8681"
    },
    "campaignPrice": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Campaign/sale price",
      "example": "269.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "loyaltyMemberPrice": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Loyalty member price",
      "example": "259.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "price": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Regular price",
      "example": "319.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "activatesAt",
    "price"
  ],
  "title": "SbPublicApiUpcomingProductPrice"
}
snowbee.SbPublicApiEcomStoreProductResponse
{
  "type": "object",
  "description": "Product information with SKUs, images, and pricing",
  "properties": {
    "brandId": {
      "type": "string",
      "description": "Brand identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "bundledProductModelIds": {
      "type": "array",
      "description": "IDs of bundled product models",
      "items": {
        "type": "string",
        "title": "String"
      },
      "title": "List<String>"
    },
    "dynamicAttributeValues": {
      "type": "array",
      "description": "Dynamic attribute values for this product",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductDynamicAttributeValuesResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductDynamicAttributeValuesResponse>"
    },
    "exclusivityLevelId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Exclusivity level identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Product identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "images": {
      "type": "array",
      "description": "Product images",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductImageResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductImageResponse>"
    },
    "mainActivityId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Main activity identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "mainProductGroupId": {
      "type": "string",
      "description": "Main product group identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "newFrom": {
      "type": [
        "null",
        "string"
      ],
      "format": "date",
      "description": "Date the product is tagged as new from (inclusive)",
      "example": "2026-06-01",
      "title": "LocalDate"
    },
    "newTo": {
      "type": [
        "null",
        "string"
      ],
      "format": "date",
      "description": "Date the product is tagged as new until (inclusive)",
      "example": "2026-08-31",
      "title": "LocalDate"
    },
    "price": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiProductPrice"
      },
      "description": "Current prices by currency (key is ISO 4217 currency code)",
      "title": "Map<String,SbPublicApiProductPrice>"
    },
    "productCategoryId": {
      "type": "string",
      "description": "Product category identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "productConceptId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Product concept identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "productDescription": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized product description"
    },
    "productFeatures": {
      "type": "array",
      "description": "List of localized product features",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString"
      },
      "title": "List<SbPublicApiLocalizedString>"
    },
    "productName": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiLocalizedString",
      "description": "Localized product name"
    },
    "productNumber": {
      "type": "string",
      "description": "Product number/code",
      "example": "PROD-001",
      "title": "String"
    },
    "published": {
      "type": "boolean",
      "description": "Whether the product is published",
      "example": "true",
      "title": "Boolean"
    },
    "skus": {
      "type": "array",
      "description": "SKU variants for this product",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiEcomStoreProductSkuResponse"
      },
      "title": "List<SbPublicApiEcomStoreProductSkuResponse>"
    },
    "subProductGroupId": {
      "type": "string",
      "description": "Sub product group identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "upcomingPriceCalendar": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/snowbee.SbPublicApiUpcomingProductPrice"
        },
        "title": "List<SbPublicApiUpcomingProductPrice>"
      },
      "description": "Upcoming price changes by currency for the next 30 days",
      "title": "Map<String,List<SbPublicApiUpcomingProductPrice>>"
    },
    "vatGroupId": {
      "type": "string",
      "description": "VAT group identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "brandId",
    "bundledProductModelIds",
    "dynamicAttributeValues",
    "id",
    "images",
    "mainProductGroupId",
    "price",
    "productCategoryId",
    "productDescription",
    "productFeatures",
    "productName",
    "productNumber",
    "published",
    "skus",
    "subProductGroupId",
    "upcomingPriceCalendar",
    "vatGroupId"
  ],
  "title": "SbPublicApiEcomStoreProductResponse"
}
snowbee.SbPublicApiInventoryByLocation
{
  "type": "object",
  "description": "Inventory quantity at a specific location",
  "properties": {
    "availableQuantity": {
      "type": "string",
      "description": "Available quantity at this location",
      "example": "25",
      "title": "String"
    },
    "id": {
      "type": [
        "null",
        "string"
      ],
      "description": "Location identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Location name",
      "example": "Oslo Main Warehouse",
      "title": "String"
    }
  },
  "required": [
    "availableQuantity",
    "name"
  ],
  "title": "SbPublicApiInventoryByLocation"
}
snowbee.SbPublicApiEcomStoreProductInventorySkuResponse
{
  "type": "object",
  "description": "SKU inventory information",
  "properties": {
    "availableQuantity": {
      "type": "string",
      "description": "Total available quantity",
      "example": "100",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "SKU identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "inventoryByLocation": {
      "type": "array",
      "description": "Breakdown of inventory by location",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiInventoryByLocation"
      },
      "title": "List<SbPublicApiInventoryByLocation>"
    },
    "sizeId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Size identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "skuNumber": {
      "type": "string",
      "description": "SKU number/code",
      "example": "PROD-BLK-M",
      "title": "String"
    },
    "unitOfMeasure": {
      "type": [
        "null",
        "string"
      ],
      "description": "Unit of measure code",
      "example": "PCS",
      "title": "String"
    }
  },
  "required": [
    "availableQuantity",
    "id",
    "inventoryByLocation",
    "skuNumber"
  ],
  "title": "SbPublicApiEcomStoreProductInventorySkuResponse"
}
snowbee.SbPublicApiRetailStoreResponse
{
  "type": "object",
  "description": "Retail store information",
  "properties": {
    "id": {
      "type": "string",
      "description": "Unique identifier of the store",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Store name",
      "example": "Oslo City Store",
      "title": "String"
    },
    "number": {
      "type": "string",
      "description": "Store number",
      "example": "1001",
      "title": "String"
    },
    "visitAddress": {
      "description": "Store visit address",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiRetailStoreAddressResponse"
        }
      ]
    }
  },
  "required": [
    "id",
    "name",
    "number"
  ],
  "title": "SbPublicApiRetailStoreResponse"
}
snowbee.SbPublicApiRetailStoreAddressResponse
{
  "type": "object",
  "description": "Address for a retail store",
  "properties": {
    "city": {
      "type": "string",
      "description": "City name",
      "example": "Oslo",
      "title": "String"
    },
    "countryIsoCode": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code",
      "example": "NO",
      "title": "String"
    },
    "postCode": {
      "type": "string",
      "description": "Postal/ZIP code",
      "example": "0154",
      "title": "String"
    },
    "street": {
      "type": "string",
      "description": "Street address including number",
      "example": "Karl Johans gate 1",
      "title": "String"
    },
    "type": {
      "type": "string",
      "description": "Address type",
      "example": "VISIT",
      "title": "String"
    }
  },
  "required": [
    "city",
    "countryIsoCode",
    "postCode",
    "street",
    "type"
  ],
  "title": "SbPublicApiRetailStoreAddressResponse"
}
snowbee.SbPublicApiRetailStoresResponse
{
  "type": "object",
  "description": "List of retail stores",
  "properties": {
    "retailStores": {
      "type": "array",
      "description": "List of retail stores",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiRetailStoreResponse"
      },
      "title": "List<SbPublicApiRetailStoreResponse>"
    }
  },
  "required": [
    "retailStores"
  ],
  "title": "SbPublicApiRetailStoresResponse"
}
snowbee.SbPublicApiCampaignResponse
{
  "type": "object",
  "description": "Campaign information with pricing for specific SKUs",
  "properties": {
    "campaignType": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiCampaignType",
      "description": "The campaign's type, which decides how to read each sku's campaignPrice"
    },
    "code": {
      "type": [
        "null",
        "string"
      ],
      "description": "Campaign code for reference",
      "example": "SUMMER2024",
      "title": "String"
    },
    "currencyIsoCode": {
      "type": "string",
      "description": "ISO 4217 currency code for campaign prices",
      "example": "NOK",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier of the campaign",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "loyaltyProgram": {
      "description": "Loyalty program associated with this campaign",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiCampaignLoyaltyProgramResponse"
        }
      ]
    },
    "name": {
      "type": "string",
      "description": "Display name of the campaign",
      "example": "Summer Sale 2024",
      "title": "String"
    },
    "skus": {
      "type": "array",
      "description": "List of SKUs included in this campaign with their campaign prices",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiCampaignSkuResponse"
      },
      "title": "List<SbPublicApiCampaignSkuResponse>"
    },
    "status": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiCampaignStatus",
      "description": "Current status of the campaign"
    },
    "validFrom": {
      "type": "string",
      "format": "date",
      "description": "Start date of the campaign (inclusive)",
      "example": "2024-06-01",
      "title": "LocalDate"
    },
    "validTo": {
      "type": "string",
      "format": "date",
      "description": "End date of the campaign (inclusive)",
      "example": "2024-08-31",
      "title": "LocalDate"
    }
  },
  "required": [
    "campaignType",
    "currencyIsoCode",
    "id",
    "name",
    "skus",
    "status",
    "validFrom",
    "validTo"
  ],
  "title": "SbPublicApiCampaignResponse"
}
snowbee.SbPublicApiCampaignType
{
  "type": "string",
  "description": "What kind of campaign this is, matching the campaign type set in SnowBee",
  "enum": [
    "NORMAL",
    "THREE_FOR_TWO"
  ],
  "title": "SbPublicApiCampaignType"
}
snowbee.SbPublicApiCampaignLoyaltyProgramResponse
{
  "type": "object",
  "description": "Loyalty program associated with a campaign",
  "properties": {
    "id": {
      "type": "string",
      "description": "Unique identifier of the loyalty program",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Name of the loyalty program",
      "example": "Premium Members Club",
      "title": "String"
    }
  },
  "required": [
    "id",
    "name"
  ],
  "title": "SbPublicApiCampaignLoyaltyProgramResponse"
}
snowbee.SbPublicApiCampaignSkuResponse
{
  "type": "object",
  "description": "SKU pricing within a campaign",
  "properties": {
    "campaignPrice": {
      "type": "string",
      "format": "BigDecimal",
      "description": "The price this sku sells at while the campaign runs. For a NORMAL campaign that is the discounted price; for THREE_FOR_TWO the unit price does not change, so it is the sku's normal price and campaignType is what carries the offer",
      "example": "199.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "loyaltyProgramMembershipRequired": {
      "type": "boolean",
      "description": "Whether loyalty program membership is required to purchase this SKU at the campaign price",
      "example": "false",
      "title": "Boolean"
    },
    "skuId": {
      "type": "string",
      "description": "Unique identifier of the SKU",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "campaignPrice",
    "loyaltyProgramMembershipRequired",
    "skuId"
  ],
  "title": "SbPublicApiCampaignSkuResponse"
}
snowbee.SbPublicApiCampaignStatus
{
  "type": "string",
  "description": "Campaign status",
  "enum": [
    "PLANNED",
    "ACTIVE"
  ],
  "title": "SbPublicApiCampaignStatus"
}
snowbee.SbPublicApiCampaignsResponse
{
  "type": "object",
  "description": "List of campaigns",
  "properties": {
    "campaigns": {
      "type": "array",
      "description": "List of available campaigns",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiCampaignResponse"
      },
      "title": "List<SbPublicApiCampaignResponse>"
    }
  },
  "required": [
    "campaigns"
  ],
  "title": "SbPublicApiCampaignsResponse"
}
snowbee.SbPublicApiTriggerProductEventsResponse
{
  "type": "object",
  "description": "Response for product event trigger operation",
  "properties": {
    "eventsTriggered": {
      "type": "integer",
      "format": "int32",
      "description": "Number of events triggered",
      "example": "42",
      "title": "Int"
    },
    "message": {
      "type": "string",
      "description": "Status message",
      "example": "Successfully triggered product events",
      "title": "String"
    }
  },
  "required": [
    "eventsTriggered",
    "message"
  ],
  "title": "SbPublicApiTriggerProductEventsResponse"
}
snowbee.SbPublicApiTriggerInventoryEventsResponse
{
  "type": "object",
  "description": "Response for inventory event trigger operation",
  "properties": {
    "eventsTriggered": {
      "type": "integer",
      "format": "int32",
      "description": "Number of events triggered",
      "example": "150",
      "title": "Int"
    },
    "message": {
      "type": "string",
      "description": "Status message",
      "example": "Successfully triggered inventory events",
      "title": "String"
    }
  },
  "required": [
    "eventsTriggered",
    "message"
  ],
  "title": "SbPublicApiTriggerInventoryEventsResponse"
}
snowbee.SbPublicApiDeliveryAddressRequest
{
  "type": "object",
  "description": "Delivery address for an order",
  "properties": {
    "city": {
      "type": "string",
      "description": "City name",
      "example": "Oslo",
      "title": "String"
    },
    "countryIsoCode": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code",
      "example": "NO",
      "title": "String"
    },
    "email": {
      "type": [
        "null",
        "string"
      ],
      "description": "Contact email for delivery notifications",
      "example": "ola.nordmann@example.com",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Recipient name",
      "example": "Ola Nordmann",
      "title": "String"
    },
    "phone": {
      "type": [
        "null",
        "string"
      ],
      "description": "Contact phone for delivery",
      "example": "+4790123456",
      "title": "String"
    },
    "postCode": {
      "type": "string",
      "description": "Postal/ZIP code",
      "example": "0123",
      "title": "String"
    },
    "street": {
      "type": "string",
      "description": "Street address including house number",
      "example": "Storgata 1",
      "title": "String"
    }
  },
  "required": [
    "city",
    "countryIsoCode",
    "name",
    "postCode",
    "street"
  ],
  "title": "SbPublicApiDeliveryAddressRequest"
}
snowbee.SbPublicApiFreightInfo
{
  "type": "object",
  "description": "Freight/shipping information for an order",
  "properties": {
    "carrierAgreementCode": {
      "type": "string",
      "description": "Carrier agreement code",
      "example": "6838716034162098000",
      "title": "String"
    },
    "carrierCode": {
      "type": "string",
      "description": "Carrier code",
      "example": "porterbuddy",
      "title": "String"
    },
    "carrierName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Carrier display name",
      "example": "Porterbuddy",
      "title": "String"
    },
    "carrierProductCode": {
      "type": "string",
      "description": "Carrier product code",
      "example": "8747679326213767168",
      "title": "String"
    },
    "carrierProductName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Carrier product display name",
      "example": "Evening delivery",
      "title": "String"
    },
    "carrierProductPayload": {
      "description": "Provider-specific extra data",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiCarrierProductPayload"
        }
      ]
    },
    "freightVatRate": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "VAT rate for freight as a percentage",
      "example": "25.00",
      "title": "BigDecimalAsString"
    },
    "netFreightAmount": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Net freight/shipping cost amount (excl. VAT)",
      "example": "49.00",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "carrierAgreementCode",
    "carrierCode",
    "carrierProductCode"
  ],
  "title": "SbPublicApiFreightInfo"
}
snowbee.SbPublicApiCarrierProductPayload
{
  "type": "object",
  "description": "Carrier product payload",
  "properties": {
    "partnerName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Partner name from provider",
      "title": "String"
    },
    "partnerNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "Partner number from provider",
      "title": "String"
    }
  },
  "title": "SbPublicApiCarrierProductPayload"
}
snowbee.SbPublicApiInvoiceAddressRequest
{
  "type": "object",
  "description": "Invoice/billing address for an order",
  "properties": {
    "city": {
      "type": "string",
      "description": "City name",
      "example": "Oslo",
      "title": "String"
    },
    "countryIsoCode": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code",
      "example": "NO",
      "title": "String"
    },
    "email": {
      "type": "string",
      "description": "Email for invoice delivery",
      "example": "ola.nordmann@example.com",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Recipient name",
      "example": "Ola Nordmann",
      "title": "String"
    },
    "postCode": {
      "type": "string",
      "description": "Postal/ZIP code",
      "example": "0123",
      "title": "String"
    },
    "street": {
      "type": "string",
      "description": "Street address including house number",
      "example": "Storgata 1",
      "title": "String"
    }
  },
  "required": [
    "city",
    "countryIsoCode",
    "email",
    "name",
    "postCode",
    "street"
  ],
  "title": "SbPublicApiInvoiceAddressRequest"
}
snowbee.SbPublicApiOrderLineItemRequest
{
  "type": "object",
  "description": "Line item for an order. Either skuId or skuNumber must be provided.",
  "properties": {
    "campaignCode": {
      "type": [
        "null",
        "string"
      ],
      "description": "Code of the campaign this line was sold under, as returned by GET /campaigns. Send it on every line sold under a campaign. For a NORMAL campaign the line must be priced at that SKU's campaignPrice. For a THREE_FOR_TWO, price the line at the basket's answer -- the blended per-unit price after the offer, at most the SKU's normal price -- exactly as a cash register would. Rejected if the code is not a released campaign covering the SKU on the order date, or if the line's price does not bear the campaign out.",
      "example": "SUMMER24",
      "title": "String"
    },
    "netUnitOrderDiscountAmount": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Per-unit reduction taken on top of netUnitPrice, such as a gift voucher or a coupon share spread across the order's lines. Not for a campaign price or any other markdown belonging in netUnitPrice: summed into one figure, a campaign markdown and a voucher cannot be told apart afterwards.",
      "example": "10.00",
      "title": "BigDecimalAsString"
    },
    "netUnitPrice": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Price of one unit excluding VAT, as charged to the customer. Send the price after any campaign price or markdown -- not a list price. Where the line was sold under a campaign, this must be that campaign's campaignPrice from GET /campaigns.",
      "example": "299.00",
      "title": "BigDecimalAsString"
    },
    "quantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity ordered",
      "example": "2.0",
      "title": "BigDecimalAsString"
    },
    "skuId": {
      "type": [
        "null",
        "string"
      ],
      "description": "SKU ID of the product (provide either skuId or skuNumber)",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "skuNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "SKU number/code of the product (provide either skuId or skuNumber)",
      "example": "PROD-BLK-M",
      "title": "String"
    },
    "vatRate": {
      "type": "string",
      "format": "BigDecimal",
      "description": "VAT rate as percentage",
      "example": "25.00",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "netUnitPrice",
    "quantity",
    "vatRate"
  ],
  "title": "SbPublicApiOrderLineItemRequest"
}
snowbee.SbPublicApiVoucherRequest
{
  "type": "object",
  "description": "Voucher/discount coupon to apply to an order",
  "properties": {
    "externalReference": {
      "type": "string",
      "description": "External reference for the voucher (e.g. Trigg promotion UUID)",
      "example": "abc123-promo-uuid",
      "title": "String"
    },
    "title": {
      "type": [
        "null",
        "string"
      ],
      "description": "Display name for the voucher",
      "example": "Summer Sale 20%",
      "title": "String"
    },
    "type": {
      "description": "Discount type",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/kotlin.String"
        }
      ]
    },
    "value": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Discount value (percentage 0-100 or fixed amount)",
      "example": "20.00",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "externalReference"
  ],
  "title": "SbPublicApiVoucherRequest"
}
snowbee.SbPublicApiCreateOrderRequest
{
  "type": "object",
  "description": "Request body for creating a new sales order",
  "properties": {
    "customerId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer ID to associate with the order",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "deliveryAddress": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiDeliveryAddressRequest",
      "description": "Delivery/shipping address for the order"
    },
    "externalOrderId": {
      "type": [
        "null",
        "string"
      ],
      "description": "External order ID from your e-commerce platform",
      "example": "SHOP-ORD-12345",
      "title": "String"
    },
    "externalOrderNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "External order number displayed to customer",
      "example": "WEB-2024-00123",
      "title": "String"
    },
    "freight": {
      "description": "Optional freight/shipping information",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiFreightInfo"
        }
      ]
    },
    "invoiceAddress": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiInvoiceAddressRequest",
      "description": "Invoice/billing address for the order"
    },
    "lineItems": {
      "type": "array",
      "description": "List of items to include in the order",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiOrderLineItemRequest"
      },
      "title": "List<SbPublicApiOrderLineItemRequest>"
    },
    "vouchers": {
      "type": [
        "null",
        "array"
      ],
      "description": "Vouchers/discount coupons to apply to the order",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiVoucherRequest"
      },
      "title": "List<SbPublicApiVoucherRequest>"
    }
  },
  "required": [
    "deliveryAddress",
    "invoiceAddress",
    "lineItems"
  ],
  "title": "SbPublicApiCreateOrderRequest"
}
snowbee.SbPublicApiCreateOrderResponse
{
  "type": "object",
  "description": "Response after accepting an order, containing full order id",
  "properties": {
    "id": {
      "type": "string",
      "description": "Unique identifier of the created order",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "id"
  ],
  "title": "SbPublicApiCreateOrderResponse"
}
snowbee.SbPublicApiCaptureResponse
{
  "type": "object",
  "description": "Payment capture for an order",
  "properties": {
    "amount": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Captured amount",
      "example": "747.50",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "createdDate": {
      "type": [
        "null",
        "string"
      ],
      "format": "date",
      "description": "Date the capture was created",
      "example": "2024-06-15",
      "title": "LocalDate"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "lines": {
      "type": "array",
      "description": "Line items in this capture",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiCaptureLineResponse"
      },
      "title": "List<SbPublicApiCaptureLineResponse>"
    },
    "status": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiCaptureStatus",
      "description": "Capture status"
    }
  },
  "required": [
    "id",
    "lines",
    "status"
  ],
  "title": "SbPublicApiCaptureResponse"
}
snowbee.SbPublicApiCaptureLineResponse
{
  "type": "object",
  "description": "Line item in a capture",
  "properties": {
    "lineItemId": {
      "type": "string",
      "description": "Reference to order line item",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "quantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity captured",
      "example": "2.0",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "lineItemId",
    "quantity"
  ],
  "title": "SbPublicApiCaptureLineResponse"
}
snowbee.SbPublicApiCaptureStatus
{
  "type": "string",
  "description": "Payment capture status",
  "enum": [
    "PENDING",
    "CONFIRMED",
    "FAILED"
  ],
  "title": "SbPublicApiCaptureStatus"
}
snowbee.SbPublicApiDeliveryAddressResponse
{
  "type": "object",
  "description": "Delivery address details",
  "properties": {
    "city": {
      "type": "string",
      "description": "City name",
      "example": "Oslo",
      "title": "String"
    },
    "countryIsoCode": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code",
      "example": "NO",
      "title": "String"
    },
    "email": {
      "type": [
        "null",
        "string"
      ],
      "description": "Contact email",
      "example": "ola.nordmann@example.com",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Recipient name",
      "example": "Ola Nordmann",
      "title": "String"
    },
    "phone": {
      "type": [
        "null",
        "string"
      ],
      "description": "Contact phone",
      "example": "+4790123456",
      "title": "String"
    },
    "postCode": {
      "type": "string",
      "description": "Postal/ZIP code",
      "example": "0123",
      "title": "String"
    },
    "street": {
      "type": "string",
      "description": "Street address including house number",
      "example": "Storgata 1",
      "title": "String"
    }
  },
  "required": [
    "city",
    "countryIsoCode",
    "name",
    "postCode",
    "street"
  ],
  "title": "SbPublicApiDeliveryAddressResponse"
}
snowbee.SbPublicApiFreightResponse
{
  "type": "object",
  "description": "Freight/shipping information for an order response",
  "properties": {
    "carrierAgreementCode": {
      "type": "string",
      "description": "Carrier agreement code",
      "example": "6838716034162098000",
      "title": "String"
    },
    "carrierCode": {
      "type": "string",
      "description": "Carrier code",
      "example": "porterbuddy",
      "title": "String"
    },
    "carrierName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Carrier display name",
      "example": "Porterbuddy",
      "title": "String"
    },
    "carrierProductCode": {
      "type": "string",
      "description": "Carrier product code",
      "example": "8747679326213767168",
      "title": "String"
    },
    "carrierProductName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Carrier product display name",
      "example": "Evening delivery",
      "title": "String"
    },
    "carrierProductPayload": {
      "description": "Provider-specific extra data",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiCarrierProductPayload"
        }
      ]
    },
    "freightVatRate": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "VAT rate for freight as a percentage",
      "example": "25.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "netFreightAmount": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Net freight/shipping cost amount (excl. VAT)",
      "example": "49.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "carrierAgreementCode",
    "carrierCode",
    "carrierProductCode"
  ],
  "title": "SbPublicApiFreightResponse"
}
snowbee.SbPublicApiInvoiceAddressResponse
{
  "type": "object",
  "description": "Invoice/billing address details",
  "properties": {
    "city": {
      "type": "string",
      "description": "City name",
      "example": "Oslo",
      "title": "String"
    },
    "countryIsoCode": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code",
      "example": "NO",
      "title": "String"
    },
    "email": {
      "type": "string",
      "description": "Email for invoice delivery",
      "example": "ola.nordmann@example.com",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Recipient name",
      "example": "Ola Nordmann",
      "title": "String"
    },
    "postCode": {
      "type": "string",
      "description": "Postal/ZIP code",
      "example": "0123",
      "title": "String"
    },
    "street": {
      "type": "string",
      "description": "Street address including house number",
      "example": "Storgata 1",
      "title": "String"
    }
  },
  "required": [
    "city",
    "countryIsoCode",
    "email",
    "name",
    "postCode",
    "street"
  ],
  "title": "SbPublicApiInvoiceAddressResponse"
}
snowbee.SbPublicApiOrderLineItemResponse
{
  "type": "object",
  "description": "Order line item with product details and pricing",
  "properties": {
    "barcode": {
      "type": [
        "null",
        "string"
      ],
      "description": "Barcode (EAN/GTIN)",
      "example": "1234567890123",
      "title": "String"
    },
    "cancelledQuantity": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Quantity cancelled after line closure; null while the line is open or fully shipped",
      "example": "1.0",
      "title": "BigDecimalAsString"
    },
    "discount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Discount percentage applied to this line",
      "example": "0.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "estimatedDeliveryDate": {
      "type": "string",
      "format": "date",
      "description": "Estimated delivery date",
      "example": "2024-06-20",
      "title": "LocalDate"
    },
    "fulfilledQuantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity fulfilled/shipped for this line",
      "example": "2.0",
      "title": "BigDecimalAsString"
    },
    "grossAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Gross amount including VAT",
      "example": "747.50",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier of the line item",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "netAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Net amount excluding VAT (quantity × netUnitPrice)",
      "example": "598.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "netUnitOrderDiscountAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Net unit order discount amount applied to this line",
      "example": "10.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "netUnitPrice": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Net unit price excluding VAT",
      "example": "299.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "productName": {
      "type": "string",
      "description": "Product display name",
      "example": "Classic T-Shirt Black Medium",
      "title": "String"
    },
    "quantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity ordered",
      "example": "2.0",
      "title": "BigDecimalAsString"
    },
    "returnTicketBarcodeUrl": {
      "type": [
        "null",
        "string"
      ],
      "description": "URL to a Code128 barcode SVG image for this line's exchange label. The last path segment is the base64url encoding of the scannable barcode value \"SO <order number> <line position>\", which is what the barcode encodes, not the return ticket number above",
      "example": "/v1/tenants/{tenantId}/ecom_stores/{eComStoreId}/barcodes/code128/U08gV0VCNDAwOTkwMyAy",
      "title": "String"
    },
    "returnTicketNumber": {
      "type": "string",
      "description": "Human readable return ticket number (exchange label code) for this line, the order number followed by the line position",
      "example": "WEB40099032",
      "title": "String"
    },
    "skuId": {
      "type": "string",
      "description": "SKU ID of the product",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "skuNumber": {
      "type": "string",
      "description": "SKU number/code",
      "example": "PROD-BLK-M",
      "title": "String"
    },
    "vatAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "VAT amount",
      "example": "149.50",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "vatRate": {
      "type": "string",
      "format": "BigDecimal",
      "description": "VAT rate as percentage",
      "example": "25.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "discount",
    "estimatedDeliveryDate",
    "fulfilledQuantity",
    "grossAmount",
    "id",
    "netAmount",
    "netUnitOrderDiscountAmount",
    "netUnitPrice",
    "productName",
    "quantity",
    "returnTicketNumber",
    "skuId",
    "skuNumber",
    "vatAmount",
    "vatRate"
  ],
  "title": "SbPublicApiOrderLineItemResponse"
}
snowbee.SbPublicApiOrderStatus
{
  "type": "string",
  "description": "Order status",
  "enum": [
    "PLANNED",
    "CLOSED",
    "RELEASED"
  ],
  "title": "SbPublicApiOrderStatus"
}
snowbee.SbPublicApiReceiptResponse
{
  "type": "object",
  "description": "Receipt for a sales order",
  "properties": {
    "createdDate": {
      "type": "string",
      "format": "date",
      "description": "Date the receipt was created",
      "example": "2024-06-15",
      "title": "LocalDate"
    },
    "grossAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Gross amount including VAT",
      "example": "747.50",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "lines": {
      "type": "array",
      "description": "Line items in this receipt",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiReceiptLineResponse"
      },
      "title": "List<SbPublicApiReceiptLineResponse>"
    },
    "netAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Net amount excluding VAT",
      "example": "598.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "createdDate",
    "grossAmount",
    "id",
    "lines",
    "netAmount"
  ],
  "title": "SbPublicApiReceiptResponse"
}
snowbee.SbPublicApiReceiptLineResponse
{
  "type": "object",
  "description": "Line item in a receipt",
  "properties": {
    "fulfilledQuantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity fulfilled/picked",
      "example": "2.0",
      "title": "BigDecimalAsString"
    },
    "lineItemId": {
      "type": "string",
      "description": "Reference to order line item",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "quantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity invoiced",
      "example": "2.0",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "fulfilledQuantity",
    "lineItemId",
    "quantity"
  ],
  "title": "SbPublicApiReceiptLineResponse"
}
snowbee.SbPublicApiRefundResponse
{
  "type": "object",
  "description": "Refund for a sales order",
  "properties": {
    "createdDate": {
      "type": "string",
      "format": "date",
      "description": "Date the refund was created",
      "example": "2024-06-20",
      "title": "LocalDate"
    },
    "grossAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Gross refund amount including VAT",
      "example": "747.50",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "grossReturnFeeAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Gross return fee amount including VAT",
      "example": "59.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "lines": {
      "type": "array",
      "description": "Line items in this refund",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiRefundLineResponse"
      },
      "title": "List<SbPublicApiRefundLineResponse>"
    },
    "netAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Net refund amount excluding VAT",
      "example": "598.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "netReturnFeeAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Net return fee amount excluding VAT",
      "example": "47.20",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    },
    "status": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiRefundOrderStatus",
      "description": "Refund status"
    }
  },
  "required": [
    "createdDate",
    "grossAmount",
    "grossReturnFeeAmount",
    "id",
    "lines",
    "netAmount",
    "netReturnFeeAmount",
    "status"
  ],
  "title": "SbPublicApiRefundResponse"
}
snowbee.SbPublicApiRefundLineResponse
{
  "type": "object",
  "description": "Line item in a refund",
  "properties": {
    "lineItemId": {
      "type": "string",
      "description": "Reference to order line item",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "quantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity refunded",
      "example": "1.0",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "lineItemId",
    "quantity"
  ],
  "title": "SbPublicApiRefundLineResponse"
}
snowbee.SbPublicApiRefundOrderStatus
{
  "type": "string",
  "description": "Refund status",
  "enum": [
    "OPEN",
    "CLOSED"
  ],
  "title": "SbPublicApiRefundOrderStatus"
}
snowbee.SbPublicApiShipmentResponse
{
  "type": "object",
  "description": "Shipment for a sales order",
  "properties": {
    "captureId": {
      "type": "string",
      "description": "Reference to the capture (picking list) this shipment originated from",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "createdDate": {
      "type": [
        "null",
        "string"
      ],
      "format": "date",
      "description": "Date the shipment was created",
      "example": "2024-06-16",
      "title": "LocalDate"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "lines": {
      "type": "array",
      "description": "Line items in this shipment",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiShipmentLineResponse"
      },
      "title": "List<SbPublicApiShipmentLineResponse>"
    },
    "trackingNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "Tracking number",
      "example": "1Z999AA10123456784",
      "title": "String"
    },
    "trackingUrl": {
      "type": [
        "null",
        "string"
      ],
      "description": "Tracking URL",
      "example": "https://track.example.com/1Z999AA10123456784",
      "title": "String"
    }
  },
  "required": [
    "captureId",
    "id",
    "lines"
  ],
  "title": "SbPublicApiShipmentResponse"
}
snowbee.SbPublicApiShipmentLineResponse
{
  "type": "object",
  "description": "Line item in a shipment",
  "properties": {
    "lineItemId": {
      "type": "string",
      "description": "Reference to order line item",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "quantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity shipped",
      "example": "2.0",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "lineItemId",
    "quantity"
  ],
  "title": "SbPublicApiShipmentLineResponse"
}
snowbee.SbPublicApiVoucherResponse
{
  "type": "object",
  "description": "Voucher/discount coupon on an order",
  "properties": {
    "externalReference": {
      "type": "string",
      "description": "External reference for the voucher",
      "example": "abc123-promo-uuid",
      "title": "String"
    },
    "title": {
      "type": [
        "null",
        "string"
      ],
      "description": "Display name for the voucher",
      "example": "Summer Sale 20%",
      "title": "String"
    },
    "type": {
      "type": [
        "null",
        "string"
      ],
      "description": "Discount type",
      "example": "PERCENTAGE",
      "title": "String"
    },
    "value": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Discount value",
      "example": "20.00",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "externalReference"
  ],
  "title": "SbPublicApiVoucherResponse"
}
snowbee.SbPublicApiGetOrderResponse
{
  "type": "object",
  "description": "Full GET order response with captures, receipts, refunds, shipments, and vouchers",
  "properties": {
    "captures": {
      "type": "array",
      "description": "Payment captures",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiCaptureResponse"
      },
      "title": "List<SbPublicApiCaptureResponse>"
    },
    "currencyIsoCode": {
      "type": "string",
      "description": "ISO 4217 currency code",
      "example": "NOK",
      "title": "String"
    },
    "customerId": {
      "type": "string",
      "description": "Customer ID associated with the order",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "deliveryAddress": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiDeliveryAddressResponse",
      "description": "Delivery/shipping address"
    },
    "externalOrderId": {
      "type": [
        "null",
        "string"
      ],
      "description": "External order ID from your e-commerce platform",
      "example": "SHOP-123",
      "title": "String"
    },
    "externalOrderNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "External order number displayed to customer",
      "example": "WEB-2024-00123",
      "title": "String"
    },
    "freight": {
      "description": "Freight/shipping information",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiFreightResponse"
        }
      ]
    },
    "id": {
      "type": "string",
      "description": "Unique identifier of the order",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "invoiceAddress": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiInvoiceAddressResponse",
      "description": "Invoice/billing address"
    },
    "lineItems": {
      "type": "array",
      "description": "Order line items",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiOrderLineItemResponse"
      },
      "title": "List<SbPublicApiOrderLineItemResponse>"
    },
    "orderDate": {
      "type": "string",
      "format": "date",
      "description": "Date the order was placed",
      "example": "2024-06-15",
      "title": "LocalDate"
    },
    "orderNumber": {
      "type": "string",
      "description": "Human-readable order number",
      "example": "SO-2024-00123",
      "title": "String"
    },
    "orderStatus": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiOrderStatus",
      "description": "Current status of the order"
    },
    "receipts": {
      "type": "array",
      "description": "Receipts",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiReceiptResponse"
      },
      "title": "List<SbPublicApiReceiptResponse>"
    },
    "refunds": {
      "type": "array",
      "description": "Refunds",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiRefundResponse"
      },
      "title": "List<SbPublicApiRefundResponse>"
    },
    "shipments": {
      "type": "array",
      "description": "Shipments",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiShipmentResponse"
      },
      "title": "List<SbPublicApiShipmentResponse>"
    },
    "updatedAt": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "description": "Timestamp when the order was last modified",
      "example": "2025-10-28T12:37:42Z",
      "title": "ISO8681"
    },
    "vouchers": {
      "type": "array",
      "description": "Applied vouchers/discount coupons",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiVoucherResponse"
      },
      "title": "List<SbPublicApiVoucherResponse>"
    }
  },
  "required": [
    "captures",
    "currencyIsoCode",
    "customerId",
    "deliveryAddress",
    "id",
    "invoiceAddress",
    "lineItems",
    "orderDate",
    "orderNumber",
    "orderStatus",
    "receipts",
    "refunds",
    "shipments",
    "updatedAt",
    "vouchers"
  ],
  "title": "SbPublicApiGetOrderResponse"
}
snowbee.SbPublicApiOrderHistorySummary
{
  "type": "object",
  "description": "Order summary for customer order history",
  "properties": {
    "currencyIsoCode": {
      "type": "string",
      "description": "ISO 4217 currency code",
      "example": "NOK",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier of the order",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "orderDate": {
      "type": "string",
      "format": "date",
      "description": "Date the order was placed",
      "example": "2024-06-15",
      "title": "LocalDate"
    },
    "orderNumber": {
      "type": "string",
      "description": "Human-readable order number",
      "example": "SO-2024-00123",
      "title": "String"
    },
    "orderStatus": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiOrderStatus",
      "description": "Current status of the order"
    },
    "totalAmount": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Total order amount including VAT",
      "example": "598.00",
      "pattern": "^-?\\d+(\\.\\d{1,2})?$",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "currencyIsoCode",
    "id",
    "orderDate",
    "orderNumber",
    "orderStatus",
    "totalAmount"
  ],
  "title": "SbPublicApiOrderHistorySummary"
}
snowbee.SbPublicApiCustomerOrderHistoryResponse
{
  "type": "object",
  "description": "Customer's order history",
  "properties": {
    "orders": {
      "type": "array",
      "description": "List of customer's orders",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiOrderHistorySummary"
      },
      "title": "List<SbPublicApiOrderHistorySummary>"
    }
  },
  "required": [
    "orders"
  ],
  "title": "SbPublicApiCustomerOrderHistoryResponse"
}
snowbee.SbPublicApiClickAndCollectLineItemRequest
{
  "type": "object",
  "description": "Line item for a click & collect reservation",
  "properties": {
    "netUnitPrice": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Net unit price (excluding VAT)",
      "example": "299.00",
      "title": "BigDecimalAsString"
    },
    "quantity": {
      "type": "string",
      "format": "BigDecimal",
      "description": "Quantity to reserve",
      "example": "2.0",
      "title": "BigDecimalAsString"
    },
    "skuId": {
      "type": [
        "null",
        "string"
      ],
      "description": "SKU ID to reserve (provide either skuId or skuNumber)",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "skuNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "SKU number/code to reserve (provide either skuId or skuNumber)",
      "example": "PROD-BLK-M",
      "title": "String"
    },
    "vatRate": {
      "type": "string",
      "format": "BigDecimal",
      "description": "VAT rate as percentage",
      "example": "25.00",
      "title": "BigDecimalAsString"
    }
  },
  "required": [
    "netUnitPrice",
    "quantity",
    "vatRate"
  ],
  "title": "SbPublicApiClickAndCollectLineItemRequest"
}
snowbee.SbPublicApiCreateClickAndCollectRequest
{
  "type": "object",
  "description": "Request to create a click & collect reservation",
  "properties": {
    "customerId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer ID (optional, will try to match B2C customer by email/phone if not provided)",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "lineItems": {
      "type": "array",
      "description": "List of SKUs to reserve for click & collect",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiClickAndCollectLineItemRequest"
      },
      "title": "List<SbPublicApiClickAndCollectLineItemRequest>"
    },
    "reservationEmail": {
      "type": [
        "null",
        "string"
      ],
      "description": "Reservation email (optional, used to match B2C customer if customerId not set)",
      "example": "ola@example.com",
      "title": "String"
    },
    "reservationName": {
      "type": "string",
      "description": "Name for the reservation (typically customer name)",
      "example": "Ola Nordmann",
      "title": "String"
    },
    "reservationPhone": {
      "type": [
        "null",
        "string"
      ],
      "description": "Reservation phone (optional, used to match B2C customer if customerId not set)",
      "example": "+4712345678",
      "title": "String"
    },
    "retailStoreId": {
      "type": "string",
      "description": "ID of the retail store where customer will pick up items",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "lineItems",
    "reservationName",
    "retailStoreId"
  ],
  "title": "SbPublicApiCreateClickAndCollectRequest"
}
snowbee.SbPublicApiClickAndCollectResponse
{
  "type": "object",
  "description": "Response after creating a click & collect reservation",
  "properties": {
    "id": {
      "type": "string",
      "description": "ID of the click and collect cart",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "id"
  ],
  "title": "SbPublicApiClickAndCollectResponse"
}
snowbee.SbPublicApiCustomerLoyaltyProgramResponse
{
  "type": "object",
  "description": "Loyalty program enrollment status for a customer",
  "properties": {
    "enrolled": {
      "type": "boolean",
      "description": "Whether the customer is enrolled in this loyalty program",
      "example": "true",
      "title": "Boolean"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier of the loyalty program",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Name of the loyalty program",
      "example": "Premium Members Club",
      "title": "String"
    }
  },
  "required": [
    "enrolled",
    "id",
    "name"
  ],
  "title": "SbPublicApiCustomerLoyaltyProgramResponse"
}
snowbee.SbPublicApiUpdateCustomerRequest
{
  "type": "object",
  "description": "Request body for partially updating a customer. All fields are optional.",
  "properties": {
    "countryIsoCode": {
      "type": [
        "null",
        "string"
      ],
      "description": "ISO 3166-1 alpha-2 country code",
      "example": "NO",
      "title": "String"
    },
    "electronicReceipt": {
      "type": [
        "null",
        "boolean"
      ],
      "description": "Whether the customer wants electronic receipts",
      "example": "true",
      "title": "Boolean"
    },
    "email": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer's email address",
      "example": "ola.nordmann@example.com",
      "title": "String"
    },
    "firstName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer's first name",
      "example": "Ola",
      "title": "String"
    },
    "languageIsoCode": {
      "type": [
        "null",
        "string"
      ],
      "description": "ISO 639-2 language code",
      "example": "NOR",
      "title": "String"
    },
    "lastName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer's last name",
      "example": "Nordmann",
      "title": "String"
    },
    "loyaltyPrograms": {
      "type": [
        "null",
        "array"
      ],
      "description": "Loyalty program enrollments to set for this customer",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiCustomerLoyaltyProgramResponse"
      },
      "title": "List<SbPublicApiCustomerLoyaltyProgramResponse>"
    },
    "newsletter": {
      "type": [
        "null",
        "boolean"
      ],
      "description": "Whether the customer subscribes to the newsletter",
      "example": "false",
      "title": "Boolean"
    },
    "phone": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer's phone number in E.164 format",
      "example": "+4790123456",
      "title": "String"
    }
  },
  "title": "SbPublicApiUpdateCustomerRequest"
}
snowbee.SbPublicApiCustomerAddressData
{
  "type": "object",
  "description": "Address data containing street, postal code, city and country",
  "properties": {
    "city": {
      "type": "string",
      "description": "City name",
      "example": "Oslo",
      "title": "String"
    },
    "countryIsoCode": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code",
      "example": "NO",
      "title": "String"
    },
    "postCode": {
      "type": "string",
      "description": "Postal/ZIP code",
      "example": "0123",
      "title": "String"
    },
    "street": {
      "type": "string",
      "description": "Street address including house number",
      "example": "Storgata 1",
      "title": "String"
    }
  },
  "required": [
    "city",
    "countryIsoCode",
    "postCode",
    "street"
  ],
  "title": "SbPublicApiCustomerAddressData"
}
snowbee.SbPublicApiCustomerResponse
{
  "type": "object",
  "description": "Customer information including personal details, preferences, and addresses",
  "properties": {
    "countryIsoCode": {
      "type": [
        "null",
        "string"
      ],
      "description": "ISO 3166-1 alpha-2 country code",
      "example": "NO",
      "title": "String"
    },
    "customerNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "Human-readable customer number",
      "example": "CUST-10042",
      "title": "String"
    },
    "deliveryAddress": {
      "description": "Customer's main delivery address",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiCustomerAddressData"
        }
      ]
    },
    "electronicReceipt": {
      "type": "boolean",
      "description": "Whether the customer wants electronic receipts",
      "example": "true",
      "title": "Boolean"
    },
    "email": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer's email address",
      "example": "ola.nordmann@example.com",
      "title": "String"
    },
    "firstName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer's first name",
      "example": "Ola",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier of the customer (UUID)",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "invoiceAddress": {
      "description": "Customer's main invoice/billing address",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiCustomerAddressData"
        }
      ]
    },
    "languageIsoCode": {
      "type": [
        "null",
        "string"
      ],
      "description": "ISO 639-2 language code",
      "example": "NOR",
      "title": "String"
    },
    "lastName": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer's last name",
      "example": "Nordmann",
      "title": "String"
    },
    "loyaltyPrograms": {
      "type": "array",
      "description": "List of loyalty programs and the customer's enrollment status",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiCustomerLoyaltyProgramResponse"
      },
      "title": "List<SbPublicApiCustomerLoyaltyProgramResponse>"
    },
    "phone": {
      "type": [
        "null",
        "string"
      ],
      "description": "Customer's phone number in E.164 format",
      "example": "+4790123456",
      "title": "String"
    }
  },
  "required": [
    "electronicReceipt",
    "id",
    "loyaltyPrograms"
  ],
  "title": "SbPublicApiCustomerResponse"
}
snowbee.SbPublicApiUpdateCustomerAddressesRequest
{
  "type": "object",
  "description": "Request to update customer addresses. Both fields are optional - only provided addresses will be created or updated.",
  "properties": {
    "deliveryAddress": {
      "description": "Delivery address to create or update. If null, delivery address is not changed.",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiCustomerAddressData"
        }
      ]
    },
    "invoiceAddress": {
      "description": "Invoice address to create or update. If null, invoice address is not changed.",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.SbPublicApiCustomerAddressData"
        }
      ]
    }
  },
  "title": "SbPublicApiUpdateCustomerAddressesRequest"
}
snowbee.SbPublicApiPushCustomerRequest
{
  "type": "object",
  "description": "Request to identify or create a customer by phone number. Used for quick customer lookup/creation at checkout.",
  "properties": {
    "email": {
      "type": [
        "null",
        "string"
      ],
      "description": "Email address (optional). Only provide if verified.",
      "example": "ola.nordmann@example.com",
      "title": "String"
    },
    "phone": {
      "type": "string",
      "description": "Phone number in E.164 format. Will be normalized automatically.",
      "example": "+4790123456",
      "title": "String"
    }
  },
  "required": [
    "phone"
  ],
  "title": "SbPublicApiPushCustomerRequest"
}
snowbee.SbPublicApiPaymentCaptureStatus
{
  "type": "string",
  "description": "Payment capture status",
  "enum": [
    "CONFIRMED",
    "FAILED"
  ],
  "example": "CONFIRMED",
  "title": "SbPublicApiPaymentCaptureStatus"
}
snowbee.SbPublicApiPaymentCaptureRequest
{
  "type": "object",
  "description": "Request body for updating payment capture status",
  "properties": {
    "capturedAmount": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Amount captured, if applicable",
      "example": "1499.00",
      "title": "BigDecimalAsString"
    },
    "status": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiPaymentCaptureStatus",
      "description": "Payment capture status"
    }
  },
  "required": [
    "status"
  ],
  "title": "SbPublicApiPaymentCaptureRequest"
}
snowbee.SbPublicApiRefundStatus
{
  "type": "string",
  "description": "Refund status",
  "enum": [
    "CONFIRMED",
    "FAILED"
  ],
  "example": "CONFIRMED",
  "title": "SbPublicApiRefundStatus"
}
snowbee.SbPublicApiRefundRequest
{
  "type": "object",
  "description": "Request body for confirming a refund on a return invoice",
  "properties": {
    "refundedAmount": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "description": "Amount refunded, if applicable",
      "example": "299.00",
      "title": "BigDecimalAsString"
    },
    "status": {
      "$ref": "#/components/schemas/snowbee.SbPublicApiRefundStatus",
      "description": "Refund status"
    }
  },
  "required": [
    "status"
  ],
  "title": "SbPublicApiRefundRequest"
}
snowbee.SbPublicApiLoyaltyProgramRetailStoreResponse
{
  "type": "object",
  "description": "Retail store associated with a loyalty program",
  "properties": {
    "addresses": {
      "type": "array",
      "description": "List of store addresses",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiRetailStoreAddressResponse"
      },
      "title": "List<SbPublicApiRetailStoreAddressResponse>"
    },
    "email": {
      "type": [
        "null",
        "string"
      ],
      "description": "Store email address",
      "example": "oslo.city@example.com",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Unique identifier of the store",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Store name",
      "example": "Oslo City Store",
      "title": "String"
    },
    "number": {
      "type": "string",
      "description": "Store number/code",
      "example": "STORE-001",
      "title": "String"
    },
    "phone": {
      "type": [
        "null",
        "string"
      ],
      "description": "Store phone number",
      "example": "+4722123456",
      "title": "String"
    },
    "webAddress": {
      "type": [
        "null",
        "string"
      ],
      "description": "Store website URL",
      "example": "https://store.example.com",
      "title": "String"
    }
  },
  "required": [
    "addresses",
    "id",
    "name",
    "number"
  ],
  "title": "SbPublicApiLoyaltyProgramRetailStoreResponse"
}
snowbee.SbPublicApiLoyaltyProgramRetailStoresResponse
{
  "type": "object",
  "description": "List of retail stores for a loyalty program",
  "properties": {
    "retailStores": {
      "type": "array",
      "description": "List of retail stores",
      "items": {
        "$ref": "#/components/schemas/snowbee.SbPublicApiLoyaltyProgramRetailStoreResponse"
      },
      "title": "List<SbPublicApiLoyaltyProgramRetailStoreResponse>"
    }
  },
  "required": [
    "retailStores"
  ],
  "title": "SbPublicApiLoyaltyProgramRetailStoresResponse"
}
snowbee.publicapi.SbPublicApiDemandPlanningLimitsResponse
{
  "type": "object",
  "description": "Published limits for demand planning batch uploads. Requests above a hard limit are rejected with 413.",
  "properties": {
    "maxBodyBytes": {
      "type": "integer",
      "format": "int64",
      "description": "Maximum request body size in bytes as sent over the wire",
      "example": "10485760",
      "title": "Long"
    },
    "maxCompressionRatio": {
      "type": "integer",
      "format": "int32",
      "description": "Maximum ratio between decompressed and compressed body size",
      "example": "100",
      "title": "Int"
    },
    "maxDecimals": {
      "type": "integer",
      "format": "int32",
      "description": "Maximum decimals in quantities and replenishment parameters",
      "example": "4",
      "title": "Int"
    },
    "maxDecompressedBodyBytes": {
      "type": "integer",
      "format": "int64",
      "description": "Maximum request body size in bytes after gzip decompression",
      "example": "52428800",
      "title": "Long"
    },
    "maxHorizonDays": {
      "type": "integer",
      "format": "int32",
      "description": "Maximum number of days in a sales forecast horizon",
      "example": "62",
      "title": "Int"
    },
    "maxInlineRejectedItems": {
      "type": "integer",
      "format": "int32",
      "description": "Maximum number of rejected items listed in a batch status",
      "example": "500",
      "title": "Int"
    },
    "maxInlineValidationErrors": {
      "type": "integer",
      "format": "int32",
      "description": "Maximum number of validation errors listed in a 400 response",
      "example": "100",
      "title": "Int"
    },
    "maxItemsPerBatch": {
      "type": "integer",
      "format": "int32",
      "description": "Maximum number of items per batch",
      "example": "20000",
      "title": "Int"
    },
    "recommendedBodyBytes": {
      "type": "integer",
      "format": "int64",
      "description": "Recommended request body size in bytes as sent over the wire, assuming gzip. A 5,000-item forecast batch is ~1.3 MB uncompressed and ~0.2 MB gzipped.",
      "example": "1048576",
      "title": "Long"
    },
    "recommendedHorizonDays": {
      "type": "integer",
      "format": "int32",
      "description": "Recommended number of days in a sales forecast horizon",
      "example": "30",
      "title": "Int"
    },
    "recommendedItemsPerBatch": {
      "type": "integer",
      "format": "int32",
      "description": "Recommended number of items per batch",
      "example": "5000",
      "title": "Int"
    }
  },
  "required": [
    "maxBodyBytes",
    "maxCompressionRatio",
    "maxDecimals",
    "maxDecompressedBodyBytes",
    "maxHorizonDays",
    "maxInlineRejectedItems",
    "maxInlineValidationErrors",
    "maxItemsPerBatch",
    "recommendedBodyBytes",
    "recommendedHorizonDays",
    "recommendedItemsPerBatch"
  ],
  "title": "SbPublicApiDemandPlanningLimitsResponse"
}
snowbee.publicapi.SbPublicApiDemandPlanningRetailStoreResponse
{
  "type": "object",
  "description": "One retail store, for mapping retailStoreNumber in uploads",
  "properties": {
    "companyId": {
      "type": "string",
      "description": "Company identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Retail store identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Retail store name",
      "example": "Bjørklund Storo",
      "title": "String"
    },
    "number": {
      "type": "string",
      "description": "Retail store number, the key used in uploads",
      "example": "1001",
      "title": "String"
    },
    "status": {
      "type": [
        "null",
        "string"
      ],
      "description": "Lifecycle status. Uploads are only applied for RELEASED stores.",
      "example": "RELEASED",
      "title": "String"
    },
    "warehouseId": {
      "type": [
        "null",
        "string"
      ],
      "description": "Warehouse the store sells from",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "companyId",
    "id",
    "name",
    "number"
  ],
  "title": "SbPublicApiDemandPlanningRetailStoreResponse"
}
snowbee.publicapi.SbPublicApiDemandPlanningRetailStoresResponse
{
  "type": "object",
  "description": "List of retail stores",
  "properties": {
    "retailStores": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiDemandPlanningRetailStoreResponse"
      },
      "title": "List<SbPublicApiDemandPlanningRetailStoreResponse>"
    }
  },
  "required": [
    "retailStores"
  ],
  "title": "SbPublicApiDemandPlanningRetailStoresResponse"
}
snowbee.publicapi.SbPublicApiDemandPlanningEcomStoreResponse
{
  "type": "object",
  "description": "One ecom store, for mapping ecomStoreNumber in uploads",
  "properties": {
    "companyId": {
      "type": "string",
      "description": "Company identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "id": {
      "type": "string",
      "description": "Ecom store identifier",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    },
    "name": {
      "type": "string",
      "description": "Ecom store name",
      "example": "bjorklund.no",
      "title": "String"
    },
    "number": {
      "type": "string",
      "description": "Ecom store number, the key used in uploads",
      "example": "9001",
      "title": "String"
    },
    "status": {
      "type": [
        "null",
        "string"
      ],
      "description": "Lifecycle status. Uploads are only applied for RELEASED stores.",
      "example": "RELEASED",
      "title": "String"
    },
    "warehouseId": {
      "type": "string",
      "description": "Warehouse the store ships from",
      "example": "01234567-89ab-cdef-0123-456789abcdef",
      "title": "String"
    }
  },
  "required": [
    "companyId",
    "id",
    "name",
    "number",
    "warehouseId"
  ],
  "title": "SbPublicApiDemandPlanningEcomStoreResponse"
}
snowbee.publicapi.SbPublicApiDemandPlanningEcomStoresResponse
{
  "type": "object",
  "description": "List of ecom stores",
  "properties": {
    "ecomStores": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiDemandPlanningEcomStoreResponse"
      },
      "title": "List<SbPublicApiDemandPlanningEcomStoreResponse>"
    }
  },
  "required": [
    "ecomStores"
  ],
  "title": "SbPublicApiDemandPlanningEcomStoresResponse"
}
snowbee.publicapi.SbPublicApiSalesForecastItem
{
  "type": "object",
  "description": "Sales forecast for one store and SKU. The item replaces the whole forecast held for that store and SKU.",
  "properties": {
    "ecomStoreNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "Ecom store number. Exactly one of retailStoreNumber and ecomStoreNumber must be set.",
      "example": "9001",
      "title": "String"
    },
    "ext": {
      "type": [
        "null",
        "object"
      ],
      "additionalProperties": {
        "type": "object",
        "title": "Any"
      },
      "description": "Partner-owned fields. Never interpreted by Snowbee.",
      "title": "Map<String,Any>"
    },
    "horizonEndDate": {
      "type": "string",
      "format": "date",
      "description": "Last forecast day, an ISO 8601 calendar date. Must equal horizonStartDate plus quantities.length - 1 days; catches horizons of the wrong length.",
      "example": "2026-09-30",
      "title": "LocalDate"
    },
    "horizonStartDate": {
      "type": "string",
      "format": "date",
      "description": "First forecast day, an ISO 8601 calendar date. No earlier than 7 days ago.",
      "example": "2026-09-01",
      "title": "LocalDate"
    },
    "quantities": {
      "type": "array",
      "description": "Expected gross sales quantity per day from horizonStartDate to horizonEndDate inclusive, as decimal strings with at most 4 decimals. quantities[i] is the forecast for horizonStartDate plus i days.",
      "example": "[\"4.7\", \"3.1\", \"0\", \"5.25\"]",
      "items": {
        "type": "string",
        "title": "String"
      },
      "title": "List<String>"
    },
    "retailStoreNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "Retail store number. Exactly one of retailStoreNumber and ecomStoreNumber must be set.",
      "example": "1001",
      "title": "String"
    },
    "skuNumber": {
      "type": "string",
      "description": "SKU number",
      "example": "10025",
      "title": "String"
    }
  },
  "required": [
    "horizonEndDate",
    "horizonStartDate",
    "quantities",
    "skuNumber"
  ],
  "title": "SbPublicApiSalesForecastItem"
}
snowbee.publicapi.SbPublicApiSalesForecastBatchRequest
{
  "type": "object",
  "description": "A batch of sales forecasts from one planning run",
  "properties": {
    "batchIndex": {
      "type": [
        "null",
        "integer"
      ],
      "format": "int32",
      "description": "1-based position of this batch within the run. Set together with batchTotal or not at all.",
      "example": "12",
      "title": "Int"
    },
    "batchTotal": {
      "type": [
        "null",
        "integer"
      ],
      "format": "int32",
      "description": "Number of batches in the run",
      "example": "140",
      "title": "Int"
    },
    "ext": {
      "type": [
        "null",
        "object"
      ],
      "additionalProperties": {
        "type": "object",
        "title": "Any"
      },
      "description": "Partner-owned fields. Never interpreted by Snowbee.",
      "title": "Map<String,Any>"
    },
    "generatedAt": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "description": "Timestamp of the planning run that produced every item in the batch. Identical for all batches of one run; a later run must have a later value.",
      "example": "2026-08-28T03:12:00Z",
      "title": "ISO8681"
    },
    "itemCount": {
      "type": "integer",
      "format": "int32",
      "description": "Must equal the length of items",
      "example": "5000",
      "title": "Int"
    },
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiSalesForecastItem"
      },
      "title": "List<SbPublicApiSalesForecastItem>"
    }
  },
  "required": [
    "generatedAt",
    "itemCount",
    "items"
  ],
  "title": "SbPublicApiSalesForecastBatchRequest"
}
snowbee.publicapi.SbPublicApiDemandPlanningBatchKind
{
  "type": "string",
  "description": "Kind of demand planning batch",
  "enum": [
    "SALES_FORECAST",
    "REPLENISHMENT_PARAMETERS"
  ],
  "title": "SbPublicApiDemandPlanningBatchKind"
}
snowbee.publicapi.SbPublicApiDemandPlanningBatchCounts
{
  "type": "object",
  "description": "Item counts after processing",
  "properties": {
    "applied": {
      "type": "integer",
      "format": "int32",
      "description": "Items written to Snowbee",
      "example": "4996",
      "title": "Int"
    },
    "items": {
      "type": "integer",
      "format": "int32",
      "description": "Items in the batch",
      "example": "5000",
      "title": "Int"
    },
    "locked": {
      "type": "integer",
      "format": "int32",
      "description": "Items skipped because the line is locked in Snowbee (replenishment parameters only)",
      "example": "0",
      "title": "Int"
    },
    "rejected": {
      "type": "integer",
      "format": "int32",
      "description": "Items not applied; listed in rejectedItems",
      "example": "4",
      "title": "Int"
    },
    "superseded": {
      "type": "integer",
      "format": "int32",
      "description": "Items skipped because a newer generatedAt was already applied for the same key",
      "example": "0",
      "title": "Int"
    }
  },
  "required": [
    "applied",
    "items",
    "locked",
    "rejected",
    "superseded"
  ],
  "title": "SbPublicApiDemandPlanningBatchCounts"
}
snowbee.publicapi.SbPublicApiDemandPlanningBatchProgress
{
  "type": "string",
  "description": "Processing progress of a batch",
  "enum": [
    "PENDING",
    "PROCESSING",
    "COMPLETED",
    "COMPLETED_WITH_REJECTED_ITEMS",
    "FAILED"
  ],
  "title": "SbPublicApiDemandPlanningBatchProgress"
}
snowbee.publicapi.SbPublicApiDemandPlanningRejectedItem
{
  "type": "object",
  "description": "An item that was not applied",
  "properties": {
    "code": {
      "type": "string",
      "description": "One of: UNKNOWN_RETAIL_STORE, RETAIL_STORE_NOT_RELEASED, UNKNOWN_ECOM_STORE, ECOM_STORE_NOT_RELEASED, UNKNOWN_SKU, SKU_NOT_IN_ASSORTMENT, REPLENISHMENT_TYPE_MANUAL",
      "example": "UNKNOWN_SKU",
      "title": "String"
    },
    "ecomStoreNumber": {
      "type": [
        "null",
        "string"
      ],
      "example": "9001",
      "title": "String"
    },
    "index": {
      "type": "integer",
      "format": "int32",
      "description": "0-based index into items",
      "example": "17",
      "title": "Int"
    },
    "message": {
      "type": [
        "null",
        "string"
      ],
      "title": "String"
    },
    "retailStoreNumber": {
      "type": [
        "null",
        "string"
      ],
      "example": "1001",
      "title": "String"
    },
    "skuNumber": {
      "type": [
        "null",
        "string"
      ],
      "example": "10025",
      "title": "String"
    }
  },
  "required": [
    "code",
    "index"
  ],
  "title": "SbPublicApiDemandPlanningRejectedItem"
}
snowbee.publicapi.SbPublicApiDemandPlanningWarning
{
  "type": "object",
  "description": "A non-fatal observation about the batch",
  "properties": {
    "code": {
      "type": "string",
      "description": "UNKNOWN_FIELD: a field Snowbee does not know and did not apply",
      "example": "UNKNOWN_FIELD",
      "title": "String"
    },
    "count": {
      "type": [
        "null",
        "integer"
      ],
      "format": "int32",
      "description": "How many times the observation occurred",
      "example": "5000",
      "title": "Int"
    },
    "field": {
      "type": [
        "null",
        "string"
      ],
      "description": "Path of the field, with [] for array elements",
      "example": "items[].campaignQuantity",
      "title": "String"
    },
    "message": {
      "type": [
        "null",
        "string"
      ],
      "title": "String"
    }
  },
  "required": [
    "code"
  ],
  "title": "SbPublicApiDemandPlanningWarning"
}
snowbee.publicapi.SbPublicApiDemandPlanningBatchStatusResponse
{
  "type": "object",
  "description": "Status of a demand planning batch",
  "properties": {
    "batchId": {
      "type": "string",
      "description": "Client-generated batch id",
      "example": "0192a3b4-5c6d-7e8f-9012-3456789abcde",
      "title": "String"
    },
    "batchIndex": {
      "type": [
        "null",
        "integer"
      ],
      "format": "int32",
      "example": "12",
      "title": "Int"
    },
    "batchKind": {
      "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiDemandPlanningBatchKind",
      "description": "Kind of demand planning batch"
    },
    "batchTotal": {
      "type": [
        "null",
        "integer"
      ],
      "format": "int32",
      "example": "140",
      "title": "Int"
    },
    "completedTime": {
      "type": [
        "null",
        "string"
      ],
      "format": "ISO 8681 timestamp",
      "description": "When processing finished",
      "example": "2025-10-28T12:37:42Z",
      "title": "ISO8681"
    },
    "counts": {
      "description": "Null until the batch has been processed",
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiDemandPlanningBatchCounts"
        }
      ]
    },
    "errorMessage": {
      "type": [
        "null",
        "string"
      ],
      "description": "Why the batch FAILED",
      "title": "String"
    },
    "generatedAt": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "example": "2026-08-28T03:12:00Z",
      "title": "ISO8681"
    },
    "itemCount": {
      "type": "integer",
      "format": "int32",
      "example": "5000",
      "title": "Int"
    },
    "progress": {
      "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiDemandPlanningBatchProgress",
      "description": "Processing progress of a batch"
    },
    "receivedTime": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "description": "When Snowbee stored the batch",
      "example": "2026-08-28T03:12:04.120Z",
      "title": "ISO8681"
    },
    "rejectedItems": {
      "type": [
        "null",
        "array"
      ],
      "description": "First rejected items; null until processed. See rejectedItemsTruncated.",
      "items": {
        "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiDemandPlanningRejectedItem"
      },
      "title": "List<SbPublicApiDemandPlanningRejectedItem>"
    },
    "rejectedItemsTruncated": {
      "type": "boolean",
      "description": "True when more items were rejected than are listed",
      "example": "false",
      "title": "Boolean"
    },
    "startedTime": {
      "type": [
        "null",
        "string"
      ],
      "format": "ISO 8681 timestamp",
      "description": "When processing started",
      "example": "2025-10-28T12:37:42Z",
      "title": "ISO8681"
    },
    "warnings": {
      "type": [
        "null",
        "array"
      ],
      "description": "Warnings recorded at receipt and during processing",
      "items": {
        "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiDemandPlanningWarning"
      },
      "title": "List<SbPublicApiDemandPlanningWarning>"
    }
  },
  "required": [
    "batchId",
    "batchKind",
    "generatedAt",
    "itemCount",
    "progress",
    "receivedTime",
    "rejectedItemsTruncated"
  ],
  "title": "SbPublicApiDemandPlanningBatchStatusResponse"
}
snowbee.publicapi.SbPublicApiDetailedErrorResponse
{
  "type": "object",
  "description": "API error response with structured details",
  "properties": {
    "details": {
      "type": [
        "null",
        "object"
      ],
      "description": "Structured details; shape depends on error",
      "title": "Any"
    },
    "error": {
      "type": "string",
      "description": "Error type",
      "example": "VALIDATION_ERROR",
      "title": "String"
    },
    "message": {
      "type": "string",
      "description": "Human-readable error message",
      "example": "3 of 5000 items failed validation",
      "title": "String"
    },
    "resolution": {
      "type": "string",
      "description": "Suggested next action",
      "example": "Correct the invalid items and retry the complete batch",
      "title": "String"
    }
  },
  "required": [
    "error",
    "message",
    "resolution"
  ],
  "title": "SbPublicApiDetailedErrorResponse"
}
snowbee.publicapi.SbPublicApiReplenishmentParameterItem
{
  "type": "object",
  "description": "Reorder point and maximum inventory for one retail store and SKU",
  "properties": {
    "ext": {
      "type": [
        "null",
        "object"
      ],
      "additionalProperties": {
        "type": "object",
        "title": "Any"
      },
      "description": "Partner-owned fields. Never interpreted by Snowbee.",
      "title": "Map<String,Any>"
    },
    "maximumInventory": {
      "type": "string",
      "description": "Maximum inventory as a decimal string with at most 4 decimals",
      "example": "12",
      "title": "String"
    },
    "reorderPoint": {
      "type": "string",
      "description": "Reorder point as a decimal string with at most 4 decimals. Must be less than maximumInventory.",
      "example": "3",
      "title": "String"
    },
    "retailStoreNumber": {
      "type": "string",
      "description": "Retail store number",
      "example": "1001",
      "title": "String"
    },
    "skuNumber": {
      "type": "string",
      "description": "SKU number",
      "example": "10025",
      "title": "String"
    }
  },
  "required": [
    "maximumInventory",
    "reorderPoint",
    "retailStoreNumber",
    "skuNumber"
  ],
  "title": "SbPublicApiReplenishmentParameterItem"
}
snowbee.publicapi.SbPublicApiReplenishmentParameterBatchRequest
{
  "type": "object",
  "description": "A batch of replenishment parameters from one planning run",
  "properties": {
    "batchIndex": {
      "type": [
        "null",
        "integer"
      ],
      "format": "int32",
      "description": "1-based position of this batch within the run. Set together with batchTotal or not at all.",
      "example": "1",
      "title": "Int"
    },
    "batchTotal": {
      "type": [
        "null",
        "integer"
      ],
      "format": "int32",
      "description": "Number of batches in the run",
      "example": "3",
      "title": "Int"
    },
    "ext": {
      "type": [
        "null",
        "object"
      ],
      "additionalProperties": {
        "type": "object",
        "title": "Any"
      },
      "description": "Partner-owned fields. Never interpreted by Snowbee.",
      "title": "Map<String,Any>"
    },
    "generatedAt": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "description": "Timestamp of the planning run that produced every item in the batch. Identical for all batches of one run; a later run must have a later value.",
      "example": "2026-08-28T03:12:00Z",
      "title": "ISO8681"
    },
    "itemCount": {
      "type": "integer",
      "format": "int32",
      "description": "Must equal the length of items",
      "example": "5000",
      "title": "Int"
    },
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiReplenishmentParameterItem"
      },
      "title": "List<SbPublicApiReplenishmentParameterItem>"
    }
  },
  "required": [
    "generatedAt",
    "itemCount",
    "items"
  ],
  "title": "SbPublicApiReplenishmentParameterBatchRequest"
}
snowbee.publicapi.SbPublicApiSalesForecastResponse
{
  "type": "object",
  "description": "The sales forecast Snowbee currently holds for one store and SKU",
  "properties": {
    "ecomStoreNumber": {
      "type": [
        "null",
        "string"
      ],
      "example": "9001",
      "title": "String"
    },
    "generatedAt": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "description": "The planning run that produced this forecast. An old value means the horizon is stale.",
      "example": "2026-08-31T03:12:00Z",
      "title": "ISO8681"
    },
    "horizonEndDate": {
      "type": "string",
      "format": "date",
      "description": "Last forecast day",
      "example": "2026-09-30",
      "title": "LocalDate"
    },
    "horizonStartDate": {
      "type": "string",
      "format": "date",
      "description": "First forecast day",
      "example": "2026-09-01",
      "title": "LocalDate"
    },
    "modifiedTime": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "description": "When Snowbee applied it",
      "example": "2025-10-28T12:37:42Z",
      "title": "ISO8681"
    },
    "quantities": {
      "type": "array",
      "description": "Expected gross sales quantity per day from horizonStartDate, as decimal strings",
      "example": "[\"4.7\", \"3.1\", \"0\"]",
      "items": {
        "type": "string",
        "title": "String"
      },
      "title": "List<String>"
    },
    "retailStoreNumber": {
      "type": [
        "null",
        "string"
      ],
      "example": "1001",
      "title": "String"
    },
    "skuNumber": {
      "type": "string",
      "example": "10025",
      "title": "String"
    }
  },
  "required": [
    "generatedAt",
    "horizonEndDate",
    "horizonStartDate",
    "modifiedTime",
    "quantities",
    "skuNumber"
  ],
  "title": "SbPublicApiSalesForecastResponse"
}
snowbee.publicapi.SbPublicApiSalesForecastsResponse
{
  "type": "object",
  "description": "A page of current sales forecasts, retail stores first, ordered by store number then SKU number",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiSalesForecastResponse"
      },
      "title": "List<SbPublicApiSalesForecastResponse>"
    },
    "nextCursor": {
      "type": [
        "null",
        "string"
      ],
      "description": "Pass as cursor to fetch the next page; null on the last page",
      "title": "String"
    }
  },
  "required": [
    "items"
  ],
  "title": "SbPublicApiSalesForecastsResponse"
}
snowbee.publicapi.SbPublicApiReplenishmentParameterResponse
{
  "type": "object",
  "description": "Effective replenishment parameters for one retail store and SKU",
  "properties": {
    "locked": {
      "type": "boolean",
      "description": "True when a Snowbee user has locked the values; uploads for this store and SKU are skipped",
      "example": "false",
      "title": "Boolean"
    },
    "maximumInventory": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "example": "12",
      "title": "BigDecimalAsString"
    },
    "modifiedTime": {
      "type": "string",
      "format": "ISO 8681 timestamp",
      "description": "When the effective line was last modified in Snowbee",
      "example": "2026-08-27T03:14:11Z",
      "title": "ISO8681"
    },
    "parameterSource": {
      "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiReplenishmentParameterSource",
      "description": "Where an effective replenishment parameter value comes from"
    },
    "reorderPoint": {
      "type": [
        "null",
        "string"
      ],
      "format": "BigDecimal",
      "example": "3",
      "title": "BigDecimalAsString"
    },
    "replenishmentType": {
      "type": [
        "null",
        "string"
      ],
      "description": "AUTO, MANUAL or PROPOSAL",
      "example": "AUTO",
      "title": "String"
    },
    "retailStoreNumber": {
      "type": "string",
      "example": "1001",
      "title": "String"
    },
    "skuNumber": {
      "type": "string",
      "example": "10025",
      "title": "String"
    }
  },
  "required": [
    "locked",
    "modifiedTime",
    "parameterSource",
    "retailStoreNumber",
    "skuNumber"
  ],
  "title": "SbPublicApiReplenishmentParameterResponse"
}
snowbee.publicapi.SbPublicApiReplenishmentParameterSource
{
  "type": "string",
  "description": "Where an effective replenishment parameter value comes from",
  "enum": [
    "RETAIL_STORE_SPECIFIC",
    "LOCAL_ASSORTMENT",
    "BASE_ASSORTMENT"
  ],
  "title": "SbPublicApiReplenishmentParameterSource"
}
snowbee.publicapi.SbPublicApiReplenishmentParametersResponse
{
  "type": "object",
  "description": "A page of effective replenishment parameters, ordered by retail store number then SKU number",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/snowbee.publicapi.SbPublicApiReplenishmentParameterResponse"
      },
      "title": "List<SbPublicApiReplenishmentParameterResponse>"
    },
    "nextCursor": {
      "type": [
        "null",
        "string"
      ],
      "description": "Pass as cursor to fetch the next page; null on the last page",
      "title": "String"
    }
  },
  "required": [
    "items"
  ],
  "title": "SbPublicApiReplenishmentParametersResponse"
}