Skip to main content

Overview

A creative (also called a treatment) 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.

Key Fields

FieldTypeDescription
namestringInternal name for the creative
offerIdstringThe offer this creative presents
channelIdstringThe channel this creative is delivered through
templateTypeenumContent format template
contentobjectThe actual content payload
personalizationarrayDynamic variable substitutions
variantenumA/B test variant assignment
weightnumberTraffic allocation weight for the variant
frequencyCapnumberMaximum times this creative can be shown to one customer
cooldownHoursnumberHours to wait before showing this creative again to the same customer

Template Types

TypeChannelDescription
email_htmlEmailFull HTML email template
email_textEmailPlain text email fallback
push_notificationPushTitle + body + optional image
sms_textSMSPlain text message (160 char recommended)
in_app_bannerIn-AppBanner with image, headline, CTA
in_app_modalIn-AppFull-screen modal overlay
in_app_cardIn-AppCard-style recommendation
web_bannerWebWebsite banner ad
web_overlayWebPopup/overlay
webhook_payloadWebhookCustom JSON payload
whatsapp_templateWhatsAppWhatsApp Business template

Content Object

The content object varies by template type, but common fields include:
{
  "subject": "You're pre-approved for our Premium Card",
  "headline": "Upgrade to 3x Rewards",
  "body": "Hi {{first_name}}, based on your spending patterns...",
  "imageUrl": "https://cdn.example.com/premium-card.png",
  "ctaText": "Apply Now",
  "ctaUrl": "https://example.com/apply?offer={{offer_id}}",
  "deepLink": "myapp://offers/premium-card"
}
FieldDescription
subjectEmail subject line or notification title
headlinePrimary heading text
bodyMain message body (supports {{variable}} placeholders)
imageUrlURL to hero image or thumbnail
ctaTextCall-to-action button text
ctaUrlClick-through destination URL
deepLinkMobile app deep link URI

Personalization Variables

Personalization variables inject dynamic values into the content at delivery time:
{
  "personalization": [
    {
      "variable": "first_name",
      "source": "customer.first_name",
      "fallback": "Valued Customer"
    },
    {
      "variable": "offer_rate",
      "source": "computed.personalized_rate",
      "fallback": "competitive"
    },
    {
      "variable": "offer_id",
      "source": "offer.id",
      "fallback": ""
    }
  ]
}
FieldDescription
variablePlaceholder name used in content (referenced as {{variable}})
sourceData source path — customer.*, computed.*, offer.*, or attributes.*
fallbackDefault value if the source is null or unavailable
Use computed.* sources to inject dynamic computed values like personalized rates or custom pricing into creative content.

A/B Test Variants

Creatives support A/B testing by assigning each variant a role and traffic weight:
VariantDescription
controlThe baseline treatment (existing or default content)
variant_aFirst test variant
variant_bSecond test variant
Traffic is split according to the weight field on each creative. Weights are relative — if control has weight 50 and variant_a has weight 50, traffic is split 50/50.
[
  { "name": "Email v1 - Control", "variant": "control", "weight": 50 },
  { "name": "Email v1 - New CTA", "variant": "variant_a", "weight": 30 },
  { "name": "Email v1 - Short Copy", "variant": "variant_b", "weight": 20 }
]
A/B test results are analyzed in the Algorithms module under Experiments. Kaireon calculates statistical significance using z-tests on conversion rates.

Constraints

FieldTypeDescription
frequencyCapnumberMaximum total impressions of this creative per customer
cooldownHoursnumberMinimum hours between consecutive impressions to the same customer
These creative-level constraints work alongside contact policies which apply broader rules across offers, channels, and categories.

Creating a Creative

1

Navigate to Creatives

Go to Studio > Creatives in the sidebar.
2

Click Create Creative

Click the + New Creative button.
3

Select offer and channel

Choose the offer this creative presents and the channel it will be delivered through.
4

Choose template type

Select the appropriate template type for the channel (e.g., email_html for email, push_notification for push).
5

Write content

Fill in the content fields: subject, headline, body, image URL, CTA text, and CTA URL. Use {{variable}} placeholders for dynamic content.
6

Configure personalization

Add personalization variables that map placeholders to data sources with fallback values.
7

Set A/B variant (optional)

If running an experiment, assign a variant role (control, variant_a, variant_b) and traffic weight.
8

Set constraints (optional)

Configure frequency cap and cooldown hours for this creative.
9

Save

Save the creative. It is available for use in decision flows immediately.

API Reference

Create a Creative

POST /api/v1/treatments
Content-Type: application/json
Request body:
{
  "name": "Premium Card - Email HTML",
  "offerId": "act_abc123",
  "channelId": "ch_mktg_email",
  "templateType": "email_html",
  "content": {
    "subject": "You're pre-approved, {{first_name}}!",
    "headline": "Upgrade to 3x Rewards",
    "body": "Based on your spending of {{monthly_spend}}, you qualify for our Premium Card at {{offer_rate}}% APR.",
    "imageUrl": "https://cdn.example.com/premium-card.png",
    "ctaText": "Apply Now",
    "ctaUrl": "https://example.com/apply?offer={{offer_id}}"
  },
  "personalization": [
    { "variable": "first_name", "source": "customer.first_name", "fallback": "Valued Customer" },
    { "variable": "monthly_spend", "source": "customer.avg_monthly_spend", "fallback": "" },
    { "variable": "offer_rate", "source": "computed.personalized_rate", "fallback": "19.99" },
    { "variable": "offer_id", "source": "offer.id", "fallback": "" }
  ],
  "variant": "control",
  "weight": 60,
  "frequencyCap": 3,
  "cooldownHours": 72
}
Response (201 Created):
{
  "id": "treat_xyz789",
  "name": "Premium Card - Email HTML",
  "offerId": "act_abc123",
  "channelId": "ch_mktg_email",
  "templateType": "email_html",
  "variant": "control",
  "weight": 60,
  "frequencyCap": 3,
  "cooldownHours": 72,
  "createdAt": "2026-03-10T14:30:00Z",
  "updatedAt": "2026-03-10T14:30:00Z"
}

List Creatives

GET /api/v1/treatments
Filter by offerId or channelId using query parameters.

Update a Creative

PUT /api/v1/treatments/:id

Delete a Creative

DELETE /api/v1/treatments/:id