Overview
A creative is a content variant that defines how a specific offer is rendered on a specific channel. Creatives contain the actual messaging — subject lines, headlines, body copy, images, and calls-to-action — along with personalization variables and A/B test configuration. Each creative links one offer to one channel, allowing the same offer to have different presentations across email, push, web, and other delivery mechanisms.Field Reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
name | string | Yes | — | Internal name for the creative (1–255 chars) |
offerId | string | Yes | — | The offer this creative presents |
channelId | string | Yes | — | The channel this creative is delivered through |
placementId | string | No | null | Optional placement slot within the channel |
status | enum | No | "draft" | Lifecycle status: draft, active, paused, archived |
templateType | string | No | "email_html" | Content format template (see Template Types below) |
content | object | No | {} | The actual content payload (subject, headline, body, etc.) |
personalization | array | No | [] | Dynamic variable substitutions (up to 500 items) |
constraints | object | No | {} | Frequency caps, cooldown periods, and delivery constraints |
abTestVariant | string | No | null | A/B test variant assignment (e.g., "control", "variant_a", "variant_b") |
weight | integer | No | 100 | Traffic allocation weight for the variant (0–100) |
metrics | object | No | {} | Performance metrics (impressions, clicks, conversions) |
Template Types
| Type | Channel | Description |
|---|---|---|
email_html | Full HTML email template | |
email_text | Plain text email fallback | |
push_notification | Push | Title + body + optional image |
sms_text | SMS | Plain text message (160 char recommended) |
in_app_banner | In-App | Banner with image, headline, CTA |
in_app_modal | In-App | Full-screen modal overlay |
in_app_card | In-App | Card-style recommendation |
web_banner | Web | Website banner ad |
web_overlay | Web | Popup/overlay |
webhook_payload | Webhook | Custom JSON payload |
whatsapp_template | WhatsApp Business template |
Content Object
Thecontent object varies by template type, but common fields include:
| Field | Description |
|---|---|
subject | Email subject line or notification title |
headline | Primary heading text |
body | Main message body (supports {{variable}} placeholders) |
imageUrl | URL to hero image or thumbnail |
ctaText | Call-to-action button text |
ctaUrl | Click-through destination URL |
deepLink | Mobile app deep link URI |
Personalization Variables
Personalization variables inject dynamic values into the content at delivery time:| Field | Description |
|---|---|
variable | Placeholder name used in content (referenced as {{variable}}) |
source | Data source path — customer.*, computed.*, offer.*, or attributes.* |
fallback | Default value if the source is null or unavailable |
A/B Test Variants
Creatives support A/B testing by assigning each creative a variant label and traffic weight:| Variant | Description |
|---|---|
control | The baseline creative (existing or default content) |
variant_a | First test variant |
variant_b | Second test variant |
weight field on each creative. Weights are relative — if control has weight 50 and variant_a has weight 50, traffic is split 50/50.
A/B Variant Weight Resolution
At runtime, the decision engine normalizes variant weights to select which creative a customer sees:- Collection — All active creatives for the same offer + channel are grouped.
- Normalization — Weights are summed and each creative’s probability is calculated as
weight / totalWeight. For the example above: control = 50/100 (50%), variant_a = 30/100 (30%), variant_b = 20/100 (20%). - Selection — A deterministic hash of the customer ID is used to pick a variant, ensuring the same customer always sees the same creative across requests.
- Fallback — If no
abTestVariantis set, the creative is treated as a standalone (no A/B split). If all weights are 0, each creative receives equal probability.
A/B test results are analyzed in the Algorithms module under Experiments. KaireonAI calculates statistical significance using z-tests on conversion rates.
Constraints
| Field | Type | Description |
|---|---|---|
frequencyCap | number | Maximum total impressions of this creative per customer |
cooldownHours | number | Minimum hours between consecutive impressions to the same customer |
Creating a Creative
Choose template type
Select the appropriate template type for the channel (e.g.,
email_html for email, push_notification for push).Write content
Fill in the content fields: subject, headline, body, image URL, CTA text, and CTA URL. Use
{{variable}} placeholders for dynamic content.Configure personalization
Add personalization variables that map placeholders to data sources with fallback values.
Set A/B variant (optional)
If running an experiment, assign a variant role (control, variant_a, variant_b) and traffic weight.
Save
Save the creative. It is available for use in Decision Flows immediately.
API Reference
Create a Creative
List Creatives
offerId or channelId using query parameters.
Update a Creative
Delete a Creative
Next Steps
Offers
Define the offers that creatives present to customers.
Channels
Configure the delivery mechanisms for your creatives.
Qualification Rules
Control who is eligible to receive each offer.
Decision Flows
Build pipelines that select and rank creatives for delivery.