> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kaireonai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Outcome Types

> Define the vocabulary of customer interactions — impressions, clicks, conversions, complaints, and custom outcomes.

<Note>
  **See also**: [Outcome Types REST API reference](/api-reference/outcome-types) for request/response shapes, status codes, and error semantics.
</Note>

## Overview

**Outcome types** define the vocabulary of customer interactions that KaireonAI tracks. Every time a customer interacts with a recommendation — viewing it, clicking it, converting, dismissing it, or complaining — you record that interaction as an outcome with a specific type. Outcome types drive reporting, contact policies, behavioral metrics, and experiment analysis.

## Key Fields

| Field            | Type   | Description                                                      |
| ---------------- | ------ | ---------------------------------------------------------------- |
| `key`            | string | Unique machine-readable identifier (e.g., `click`, `conversion`) |
| `name`           | string | Human-readable display name                                      |
| `description`    | string | Description of when this outcome is recorded                     |
| `classification` | enum   | Sentiment classification                                         |
| `category`       | enum   | Interaction category                                             |

### Classification

| Value      | Description                                          |
| ---------- | ---------------------------------------------------- |
| `positive` | Customer showed interest or took a desired action    |
| `negative` | Customer explicitly rejected or had a bad experience |
| `neutral`  | Informational interaction with no clear sentiment    |

### Category

| Value        | Description                                                   |
| ------------ | ------------------------------------------------------------- |
| `impression` | The customer was exposed to the recommendation                |
| `response`   | The customer took an action in response to the recommendation |

## System Defaults

KaireonAI ships with 10 built-in outcome types that cover the most common interaction patterns:

| Key              | Name           | Classification | Category   |
| ---------------- | -------------- | -------------- | ---------- |
| `impression`     | Impression     | neutral        | impression |
| `click`          | Click          | positive       | response   |
| `conversion`     | Conversion     | positive       | response   |
| `not_interested` | Not Interested | negative       | response   |
| `opt_out`        | Opt Out        | negative       | response   |
| `defer`          | Defer          | neutral        | response   |
| `dismiss`        | Dismiss        | negative       | response   |
| `share`          | Share          | positive       | response   |
| `save`           | Save           | positive       | response   |
| `complaint`      | Complaint      | negative       | response   |

<Info>
  System default outcome types cannot be deleted or modified. They are always available across all tenants.
</Info>

## Custom Outcome Types

You can create custom outcome types to capture domain-specific interactions:

**Examples:**

| Key               | Name            | Classification | Category   | Use Case                                 |
| ----------------- | --------------- | -------------- | ---------- | ---------------------------------------- |
| `quote_requested` | Quote Requested | positive       | response   | Insurance: customer requested a quote    |
| `applied`         | Applied         | positive       | response   | Banking: customer started an application |
| `scheduled_call`  | Scheduled Call  | positive       | response   | Advisory: customer booked a follow-up    |
| `forwarded`       | Forwarded       | positive       | response   | Customer forwarded the offer to someone  |
| `expired`         | Expired         | neutral        | impression | Offer expired before customer saw it     |

## How Outcome Types Are Used

<CardGroup cols={2}>
  <Card title="Respond API" icon="reply">
    When recording interactions via the Respond API, you specify the outcome type key. KaireonAI validates it against the registered outcome types.
  </Card>

  <Card title="Contact Policies" icon="shield">
    The `outcome_based` contact policy rule type references outcome types to suppress offers (e.g., suppress for 90 days after a `complaint`).
  </Card>

  <Card title="Behavioral Metrics" icon="chart-bar">
    Behavioral metrics aggregate interactions by outcome type (e.g., count of `click` events in 7 days).
  </Card>

  <Card title="Experiments" icon="flask">
    A/B test analysis uses outcome types to calculate conversion rates and uplift (typically comparing `impression` to `conversion`).
  </Card>
</CardGroup>

## Creating a Custom Outcome Type

<Steps>
  <Step title="Navigate to Outcome Types">
    Go to **Studio > Outcome Types** in the sidebar.
  </Step>

  <Step title="Click Create Outcome Type">
    Click the **+ New Outcome Type** button.
  </Step>

  <Step title="Define the key">
    Enter a unique machine-readable key (lowercase, underscores allowed). This cannot be changed after creation.
  </Step>

  <Step title="Set name and description">
    Enter a human-readable name and description explaining when this outcome should be recorded.
  </Step>

  <Step title="Choose classification">
    Select **positive**, **negative**, or **neutral**.
  </Step>

  <Step title="Choose category">
    Select **impression** or **response**.
  </Step>

  <Step title="Save">
    Save the outcome type. It is immediately available for use in the Respond API and throughout the platform.
  </Step>
</Steps>

## API Reference

### List Outcome Types

```bash theme={null}
GET /api/v1/outcome-types
```

**Response:**

```json theme={null}
{
  "data": [
    {
      "key": "impression",
      "name": "Impression",
      "description": "Customer was shown the recommendation",
      "classification": "neutral",
      "category": "impression",
      "isSystem": true
    },
    {
      "key": "click",
      "name": "Click",
      "description": "Customer clicked on the recommendation",
      "classification": "positive",
      "category": "response",
      "isSystem": true
    },
    {
      "key": "quote_requested",
      "name": "Quote Requested",
      "description": "Customer requested a price quote",
      "classification": "positive",
      "category": "response",
      "isSystem": false
    }
  ]
}
```

### Create a Custom Outcome Type

```bash theme={null}
POST /api/v1/outcome-types
Content-Type: application/json
```

**Request body:**

```json theme={null}
{
  "key": "quote_requested",
  "name": "Quote Requested",
  "description": "Customer requested a price quote for the offered product",
  "classification": "positive",
  "category": "response"
}
```

**Response (201 Created):**

```json theme={null}
{
  "key": "quote_requested",
  "name": "Quote Requested",
  "description": "Customer requested a price quote for the offered product",
  "classification": "positive",
  "category": "response",
  "isSystem": false,
  "createdAt": "2026-03-10T14:30:00Z"
}
```

### Delete a Custom Outcome Type

```bash theme={null}
DELETE /api/v1/outcome-types?id=<outcomeTypeId>
```

The query param is the outcome type's database `id` (CUID/UUID), not the `key` slug. System outcome types cannot be deleted.

<Warning>
  Only custom outcome types can be deleted. System defaults are permanent. Deleting an outcome type does not remove historical interaction records that used it.
</Warning>

## Next Steps

<CardGroup cols={2}>
  <Card title="Behavioral Metrics" icon="chart-bar" href="/studio/behavioral-metrics">
    Aggregate outcomes into metrics for scoring and qualification.
  </Card>

  <Card title="API Tutorial" icon="code" href="/tutorials/api-tutorial">
    Learn how to record outcomes with the Respond API.
  </Card>
</CardGroup>
