Overview
Contact policies are rules that prevent customers from being over-contacted. They act as guardrails on top of the decisioning engine, filtering out offers that would violate frequency, timing, or budget constraints. Contact policies are evaluated after qualification rules and before final ranking.
Rule Types
Kaireon supports 8 types of contact policy rules:
| Rule Type | Description |
|---|
frequency_cap | Limit the number of contacts within a time window |
cooldown | Enforce a minimum wait period between contacts |
budget_exhausted | Block offers when their budget has been fully spent |
outcome_based | Suppress based on past interaction outcomes (e.g., customer complained) |
segment_exclusion | Exclude customers in specific segments |
time_window | Only allow contact during specified hours/days |
mutual_exclusion | Prevent competing offers from being shown together |
cross_channel_cap | Limit total contacts across multiple channels |
frequency_cap
Limits how many times a customer can be contacted within a rolling time window.
{
"ruleType": "frequency_cap",
"config": {
"maxContacts": 3,
"windowDays": 7
}
}
cooldown
Enforces a minimum number of hours between consecutive contacts.
{
"ruleType": "cooldown",
"config": {
"cooldownHours": 48
}
}
budget_exhausted
Automatically suppresses offers when their budget allocation has been fully consumed.
{
"ruleType": "budget_exhausted",
"config": {
"checkImpressions": true,
"checkDailyBudget": true
}
}
outcome_based
Suppresses offers when a customer has recorded specific outcomes recently.
{
"ruleType": "outcome_based",
"config": {
"outcomeType": "complaint",
"lookbackDays": 90,
"action": "suppress"
}
}
segment_exclusion
Excludes customers who belong to specified segments.
{
"ruleType": "segment_exclusion",
"config": {
"excludeSegments": ["do_not_contact", "legal_hold", "recently_churned"]
}
}
time_window
Restricts contacts to specific times and days.
{
"ruleType": "time_window",
"config": {
"allowedDays": [1, 2, 3, 4, 5],
"startTime": "09:00",
"endTime": "18:00",
"timezone": "America/New_York"
}
}
mutual_exclusion
Prevents competing or conflicting offers from being recommended together in the same decision.
{
"ruleType": "mutual_exclusion",
"config": {
"excludeOfferIds": ["act_competitor_a", "act_competitor_b"],
"reason": "Competing credit card products"
}
}
cross_channel_cap
Limits the total number of contacts across multiple channels within a window.
{
"ruleType": "cross_channel_cap",
"config": {
"channels": ["email", "push", "sms"],
"maxContacts": 5,
"windowDays": 7
}
}
Scope
Each contact policy rule operates within a defined scope:
| Scope | Description |
|---|
global | Applies to all offers across all channels |
offer | Applies to a specific offer only |
creative | Applies to a specific creative/treatment |
channel | Applies to all offers on a specific channel |
Use global scope for company-wide compliance rules (e.g., “no more than 5 contacts per week across all channels”) and narrower scopes for product-specific rules.
Navigate to Contact Policies
Go to Studio > Contact Policies in the sidebar.
Click Create Policy
Click the + New Policy button.
Name the policy
Enter a descriptive name (e.g., “Weekly Email Cap” or “Complaint Suppression”).
Select rule type
Choose one of the 8 rule types from the dropdown.
Configure rule parameters
Fill in the configuration specific to the chosen rule type (e.g., max contacts, window days, cooldown hours).
Set scope
Choose the scope: global, offer, creative, or channel. If not global, select the specific entity.
Save
Save the policy. It takes effect immediately for all active decision flows.
API Reference
POST /api/v1/contact-policies
Content-Type: application/json
Request body:
{
"name": "Weekly Cross-Channel Cap",
"description": "Limit total customer contacts to 5 per week across email, push, and SMS",
"ruleType": "cross_channel_cap",
"scope": "global",
"config": {
"channels": ["email", "push", "sms"],
"maxContacts": 5,
"windowDays": 7
},
"enabled": true
}
Response (201 Created):
{
"id": "cp_weekly_cap",
"name": "Weekly Cross-Channel Cap",
"description": "Limit total customer contacts to 5 per week across email, push, and SMS",
"ruleType": "cross_channel_cap",
"scope": "global",
"config": {
"channels": ["email", "push", "sms"],
"maxContacts": 5,
"windowDays": 7
},
"enabled": true,
"createdAt": "2026-03-10T14:30:00Z",
"updatedAt": "2026-03-10T14:30:00Z"
}
GET /api/v1/contact-policies
PUT /api/v1/contact-policies/:id
DELETE /api/v1/contact-policies/:id
Disabling or deleting a contact policy immediately removes its restrictions. Make sure to review the impact on customer experience before removing protective policies.
Behavioral Metrics Integration
Contact policies can reference behavioral metrics for dynamic, data-driven rules. For example, you can create a policy that suppresses offers when a customer’s 7-day impression count exceeds a threshold, using a behavioral metric instead of a hard-coded frequency cap.
See the Behavioral Metrics page for recipes and examples.