Overview
You organize your offers into a business hierarchy — a two-level structure of categories (top-level groupings) and sub-categories (nested beneath them). This hierarchy provides logical organization, drives custom field schemas, and enables category-level rules and reporting.Categories
A category represents a top-level business domain or product line (e.g., “Credit Cards”, “Personal Loans”, “Insurance Products”).Field Reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
name | string | Yes | — | Display name of the category (1–255 chars) |
description | string | No | "" | Optional description |
icon | string | No | "" | Icon identifier for the UI |
color | string | No | "blue" | Color preset for visual distinction |
status | enum | No | "active" | Lifecycle status: draft, active, paused, archived |
ordinal | integer | No | 0 | Display order position (min 0) |
customFields | array | No | [] | Schema definition for fields on offers in this category (up to 500 items) |
Custom Fields
Categories define a custom field schema that applies to all offers within the category. Each custom field has:| Property | Type | Description |
|---|---|---|
name | string | Field identifier (used as key in offer data) |
label | string | Display label in the UI |
type | enum | Field type |
required | boolean | Whether the field must be filled |
options | string[] | Choices for select type fields |
formula | string | Formula expression for computed type fields |
outputType | enum | Output data type for computed fields: number or text |
Custom Field Types
| Type | Description | Example |
|---|---|---|
text | Free-text string | Product description, internal notes |
number | Integer value | Points multiplier, term length |
select | Single choice from options | Risk tier, product variant |
boolean | True/false toggle | Pre-approved flag, promotional |
date | Date value | Effective date, review date |
computed | Formula-evaluated at decision time | Personalized rate, dynamic discount |
Computed Field Formulas
Computed fields use the formula engine with three variable namespaces:| Namespace | Source | Example |
|---|---|---|
| (bare name) | Other custom field values on the offer | base_rate, annual_fee |
customer.* | Enriched data from schema tables | customer.loan_amount, customer.credit_score |
attributes.* | Request-time attributes from the Recommend API | attributes.tier, attributes.channel |
Formula Examples
1. Personalized interest rate — discount based on loyalty score:base_rate is 12.5 and customer.loyalty_score is 80, the result is 12.5 * (1 - 0.8) = 2.5.
2. Dynamic credit limit — capped at 3x income with a floor:
min and max functions to ensure the limit stays between 5,000 and 50,000.
3. Tiered welcome bonus — conditional on customer tier:
concat to build a string and coalesce to fall back if the preferred name is null.
See the Formula Reference for the complete list of supported operators and functions (min, max, round, abs, coalesce, concat, ternary). In the Composable Pipeline, the Compute node also evaluates these formulas.
Computed Field Validation
When you create or update a category with computed fields, KaireonAI validates:- Formula is present — a computed field must have a non-empty
formulastring. - Output type is valid —
outputTypemust be"number"or"text". - Syntax check — click Validate in the UI to parse the formula and catch syntax errors before saving.
Sub-Categories
Sub-categories provide a second level of grouping beneath a category (e.g., “Premium Cards” and “Travel Cards” under “Credit Cards”).Sub-Category Fields
| Field | Type | Description |
|---|---|---|
name | string | Display name |
description | string | Optional description |
categoryId | string | Parent category ID |
ordinal | number | Display order within the parent category |
Cascade Behavior
Deleting a sub-category unlinks its offers in the same way — offers are preserved but lose their sub-category association. Here is a summary of what happens at each level:| Action | Sub-Categories | Offers | Creatives | Decision Traces |
|---|---|---|---|---|
| Delete a Category | Cascade-deleted | Unlinked (categoryId set to null) | Unaffected (linked to offers, not categories) | Preserved with original category ID |
| Delete a Sub-Category | N/A | Unlinked (subCategoryId set to null) | Unaffected | Preserved with original sub-category ID |
Because offers are unlinked rather than deleted, you will not lose any historical decision traces, outcomes, or experiment data when reorganizing your hierarchy.
Creating a Category
Define custom fields
Add custom fields that will apply to all offers in this category. For each field, specify the name, label, type, and whether it is required.
Add computed fields (optional)
For computed fields, enter the formula expression and select the output type (
number or text). Click Validate to check the formula syntax before saving.Creating a Sub-Category
Select parent category
In the Business Hierarchy view, click on the category you want to add a sub-category to.
API Reference
Create a Category
Create a Sub-Category
List Categories
Delete a Category
Next Steps
Offers
Create offers within your categories.
Computed Values
Full guide to dynamic computed values and formula syntax.
Formula Reference
Complete operator and function reference for the formula engine.
Composable Pipeline
Use the Compute node to evaluate formulas at decision time.