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

# Workflow Actions

> Complete guide to all workflow actions with implementation examples and best practices

# Workflow Actions

Actions are the building blocks of your workflows - they define what happens after your trigger fires. Chain actions together to create powerful automations that save time and deliver personalized experiences.

## How Actions Work

Actions are executed in sequence, with each action receiving data from previous steps. Use connection paths to handle success and failure scenarios.

```yaml theme={null}
Trigger: Data Captured
├── Action 1: Contact Filter (validates data)
│   ├── Success Path → Action 2: Send Email
│   └── Failure Path → Action 3: Add to "Incomplete Data" list
```

## Quick Action Finder

| I Want To...              | Use This Action                 | Category          |
| ------------------------- | ------------------------------- | ----------------- |
| **Send an email**         | `ContactEmailSend`              | Contact           |
| **Update user profile**   | `ContactUpdate`                 | Contact           |
| **Add to email list**     | `ContactAddToList`              | Contact           |
| **Award loyalty points**  | `LoyaltyAwardPoints`            | Loyalty           |
| **Send to CRM**           | `SalesforceCreateObject`        | Integration       |
| **Add conditions**        | `ContactFilter` or `Decision`   | Utility           |
| **Send a gift card**      | `LocalCardSendCardFromTemplate` | Cards and Coupons |
| **Issue a campaign gift** | `LocalCardGenerateCampaignGift` | Cards and Coupons |
| **Send webhook**          | `HttpRequest`                   | Utility           |

## Contact Actions

Manage contact data, communications, and list memberships.

### Data Management

| Action                    | Purpose                   | Required Data          | Example Use                      |
| ------------------------- | ------------------------- | ---------------------- | -------------------------------- |
| **ContactUpdate**         | Modify contact properties | Field names and values | Update preferences, scores, tags |
| **ContactFilter**         | Apply conditional logic   | Filter conditions      | Route users based on properties  |
| **ContactAddToList**      | Add contact to list       | List name              | Segment users for campaigns      |
| **ContactRemoveFromList** | Remove from list          | List name              | Unsubscribe or re-segment        |

### Communications

| Action               | Purpose                 | Required Data             | Example Use                     |
| -------------------- | ----------------------- | ------------------------- | ------------------------------- |
| **ContactEmailSend** | Send personalized email | Email template, recipient | Welcome emails, notifications   |
| **ContactSmsSend**   | Send SMS message        | Phone number, message     | Urgent alerts, mobile campaigns |

### Rewards & Recognition

| Action                       | Purpose                   | Required Data                     | Example Use                         |
| ---------------------------- | ------------------------- | --------------------------------- | ----------------------------------- |
| **ContactCouponIssue**       | Issue one or more coupons | Coupon offer, quantity (optional) | Reward completions, bulk incentives |
| **AssignContactAchievement** | Award achievement badge   | Achievement type                  | Recognize milestones, gamify        |
| **ContactVaultCardIssue**    | Issue digital wallet card | Card template                     | Membership cards, tickets           |

#### ContactCouponIssue Configuration

The ContactCouponIssue action supports issuing multiple coupons in a single workflow step.

| Setting                 | Description                                                                | Default  |
| ----------------------- | -------------------------------------------------------------------------- | -------- |
| **Coupon Offer**        | The coupon offer to issue from                                             | Required |
| **Quantity**            | Number of coupons to issue (supports variables)                            | 1        |
| **Contact Limit**       | Maximum coupons per contact from this offer                                | No limit |
| **Allow Partial Award** | If enabled, issues available coupons when quantity exceeds remaining limit | Disabled |

**Output Variables:**

When issuing a single coupon:

* `coupon_id` - The issued coupon ID
* `coupon_link` - Direct link to the coupon
* `coupon_code` - The coupon barcode/code

When issuing multiple coupons:

* `coupon_id` - JSON array of coupon IDs
* `coupon_link` - JSON array of coupon links
* `coupon_code` - JSON array of coupon codes
* `coupon_count` - Total number of coupons issued

**Output Paths:**

* **Success** - Coupons issued successfully
* **OfferLimitsExceeded** - Contact or offer limits prevent issuing
* **OfferExpired** - Coupon offer is no longer active

**Example: Issue Multiple Coupons**

```yaml theme={null}
Trigger: Competition.EntrySubmitted
├── ContactCouponIssue:
│   ├── Offer: "10% Discount"
│   ├── Quantity: 3
│   ├── Contact Limit: 5
│   ├── Allow Partial Award: true
│   ├── Success Path → ContactEmailSend (include coupon_count in message)
│   └── OfferLimitsExceeded Path → ContactEmailSend (limit notification)
```

### Specialized Integrations

| Action                  | Purpose                 | Required Data | Example Use               |
| ----------------------- | ----------------------- | ------------- | ------------------------- |
| **ContactThuziCheckIn** | Thuzi platform check-in | Event details | Event attendance tracking |

### LocalCard Gift Cards

Send digital gift cards to contacts through the [LocalCard](https://localcard.io) integration. Requires a LocalCard connected app to be configured in your workspace settings.

| Action                            | Purpose                                | Required Data                | Example Use                                   |
| --------------------------------- | -------------------------------------- | ---------------------------- | --------------------------------------------- |
| **LocalCardSendCardFromTemplate** | Send a gift card from a template       | Card template ID, card value | Reward winners, incentivize participation     |
| **LocalCardGenerateCampaignGift** | Issue a gift from an existing campaign | Campaign ID, gift value      | Bulk gift distribution, promotional campaigns |

**LocalCardSendCardFromTemplate** configuration:

| Field                     | Description                                                           | Required |
| ------------------------- | --------------------------------------------------------------------- | -------- |
| **Card template ID**      | The LocalCard card template to use                                    | Yes      |
| **Card value**            | Dollar value of the gift card (supports dynamic values)               | Yes      |
| **Delivery method**       | How the card is delivered: `Email`, `Sms`, or `Link` (default: Email) | No       |
| **Recipient message**     | Personalized message for the recipient (supports dynamic values)      | No       |
| **Communication message** | Notification message sent with the card                               | No       |
| **Deliver at**            | Schedule delivery for a future date/time                              | No       |

**LocalCardGenerateCampaignGift** configuration:

| Field                 | Description                                                          | Required |
| --------------------- | -------------------------------------------------------------------- | -------- |
| **Campaign ID**       | The LocalCard campaign to issue from                                 | Yes      |
| **Gift value**        | Dollar value of the gift (supports dynamic values)                   | Yes      |
| **Delivery method**   | How the gift is delivered: `Email`, `Sms`, or `Link` (default: Link) | No       |
| **Recipient message** | Personalized message for the recipient (supports dynamic values)     | No       |

**Example: Gift card reward workflow**

```yaml theme={null}
Trigger: Prize.Awarded
├── ContactFilter: Prize type = "Gift Card"
│   ├── Success: LocalCardSendCardFromTemplate
│   │   ├── Card template: "Reward Gift Card"
│   │   ├── Card value: $25
│   │   └── Delivery: Email
│   └── Failure: ContactEmailSend → "Standard prize notification"
```

<Note>
  Both LocalCard actions require a LocalCard connected app. Navigate to **Settings → Connected Apps** and connect your LocalCard account with your API key before using these actions.
</Note>

## Integration Actions

Connect with external platforms and services.

### Salesforce CRM

| Action                     | Purpose                | Required Data                | Example Use                            |
| -------------------------- | ---------------------- | ---------------------------- | -------------------------------------- |
| **SalesforceCreateObject** | Create new CRM record  | Object type, field mappings  | Add leads, opportunities, contacts     |
| **SalesforceUpdateObject** | Update existing record | Object ID, field updates     | Update lead status, add notes          |
| **SalesforceGetObject**    | Retrieve CRM data      | Object ID or search criteria | Validate existing records, get context |

**Example: Lead to CRM Flow**

```yaml theme={null}
Trigger: Gameplay.DataCapturedQualified
├── SalesforceCreateObject: Create Lead
│   ├── Success: ContactUpdate → Tag "CRM Synced"
│   └── Failure: Add to "CRM Sync Failed" list
└── ContactEmailSend: Confirmation to sales team
```

### Mailchimp Email Marketing

| Action                   | Purpose                | Required Data  | Example Use                      |
| ------------------------ | ---------------------- | -------------- | -------------------------------- |
| **MailchimpUpsert**      | Add/update subscriber  | Email, list ID | Sync contacts to email campaigns |
| **MailchimpAddTags**     | Apply subscriber tags  | Tag names      | Segment for targeted campaigns   |
| **MailchimpRemoveTags**  | Remove subscriber tags | Tag names      | Update segmentation              |
| **MailchimpUnsubscribe** | Unsubscribe contact    | Email address  | Honor unsubscribe requests       |
| **MailchimpArchive**     | Archive subscriber     | Email address  | Clean inactive subscribers       |
| **MailchimpDelete**      | Permanently delete     | Email address  | GDPR compliance, data removal    |

**Example: Email List Sync**

```yaml theme={null}
Trigger: Contact.ListAdded ("Newsletter Subscribers")
├── MailchimpUpsert: Add to Mailchimp list
├── MailchimpAddTags: ["Komo User", "Newsletter"]
└── ContactUpdate: Mark "mailchimp_synced" = true
```

### Braze Customer Engagement

| Action             | Purpose                  | Required Data          | Example Use                        |
| ------------------ | ------------------------ | ---------------------- | ---------------------------------- |
| **BrazeTrackUser** | Send user event to Braze | Event name, properties | Trigger Braze campaigns, analytics |

## Competition & Gameplay Actions

Actions specific to competitions, games, and user-generated content.

| Action                            | Purpose                 | Required Data        | Example Use                            |
| --------------------------------- | ----------------------- | -------------------- | -------------------------------------- |
| **AssignBonusCompetitionEntries** | Grant extra entries     | Entry count          | Reward engagement, boost participation |
| **CompetitionEntryAddTags**       | Tag competition entries | Tag names            | Categorize entries, track sources      |
| **CompetitionEntryRemoveTags**    | Remove entry tags       | Tag names            | Clean up categorization                |
| **GameplayFilter**                | Filter gameplay events  | Filter conditions    | Route based on scores, completion      |
| **AssignGameplayScore**           | Set custom scores       | Score value, context | Custom scoring beyond default          |

**Example: Engagement Bonus System**

```yaml theme={null}
Trigger: Gameplay.Action (social share)
├── AssignBonusCompetitionEntries: +3 entries
├── CompetitionEntryAddTags: ["Social Sharer"]
└── LoyaltyAwardPoints: 50 points
```

## Loyalty Actions

Manage loyalty programs, points, and tier memberships.

| Action                    | Purpose                      | Required Data             | Example Use                       |
| ------------------------- | ---------------------------- | ------------------------- | --------------------------------- |
| **LoyaltyAwardPoints**    | Credit points to account     | Points amount, reason     | Reward actions, milestone bonuses |
| **LoyaltyRedeemPoints**   | Deduct points for redemption | Points amount, redemption | Process point spending            |
| **LoyaltyAddToTier**      | Promote to higher tier       | Tier name                 | Recognize high-value users        |
| **LoyaltyRemoveFromTier** | Demote from tier             | Tier name                 | Handle tier downgrades            |

**Example: Tier Progression System**

```yaml theme={null}
Trigger: Loyalty.PointsAwarded
├── ContactFilter: Total points >= 1000
│   ├── Success: LoyaltyAddToTier ("Gold")
│   └── ContactUpdate: Next tier progress
└── ContactEmailSend: Points confirmation
```

## Utility & Flow Actions

Control workflow logic, timing, and external communication.

### Flow Control

| Action       | Purpose                  | Required Data       | Example Use                         |
| ------------ | ------------------------ | ------------------- | ----------------------------------- |
| **Decision** | Branch workflow logic    | Decision conditions | If/then logic, A/B routing          |
| **Split**    | Create parallel branches | Branch conditions   | Run multiple actions simultaneously |

### External Communication

| Action          | Purpose           | Required Data        | Example Use                |
| --------------- | ----------------- | -------------------- | -------------------------- |
| **HttpRequest** | Send HTTP request | URL, method, payload | Custom webhooks, API calls |

**Example: Custom Webhook Integration**

```yaml theme={null}
Trigger: Prize.Awarded
├── HttpRequest: POST to fulfillment API
│   ├── Success: ContactUpdate → "fulfillment_requested"
│   └── Failure: Add to "Fulfillment Failed" list
└── ContactEmailSend: Winner notification
```

## Action Best Practices

### ✅ Design for Success and Failure

Always handle both success and failure paths:

```yaml theme={null}
Action: SalesforceCreateObject
├── Success Path: 
│   ├── ContactUpdate: Tag "CRM Synced"
│   └── ContactEmailSend: Confirmation
└── Failure Path:
    ├── Add to "CRM Failed" list
    └── HttpRequest: Alert IT team
```

### ✅ Use Descriptive Names

Name your actions clearly for easy maintenance:

```yaml theme={null}
❌ ContactEmailSend: "Email Template 1"
✅ ContactEmailSend: "Welcome Email - New User Onboarding"
```

### ✅ Validate Data Before Actions

Use filters to ensure data quality:

```yaml theme={null}
Trigger: Data Captured
├── ContactFilter: Email format is valid
│   ├── Success: ContactEmailSend
│   └── Failure: Add to "Invalid Email" list
```

### ✅ Group Related Actions

Chain related actions for efficiency:

```yaml theme={null}
New Member Workflow:
├── ContactUpdate: Set member_status = "active"
├── ContactAddToList: "Active Members"
├── LoyaltyAwardPoints: 100 welcome points
└── ContactEmailSend: Welcome package
```

## Advanced Action Patterns

### 1. Progressive Data Collection

Build profiles over multiple interactions:

```yaml theme={null}
Trigger: Data Captured
├── ContactFilter: Profile completeness < 50%
│   ├── Success: ContactEmailSend ("Complete Your Profile")
│   └── ContactUpdate: profile_complete_date = now()
```

### 2. Smart List Management

Automatically manage list memberships:

```yaml theme={null}
Trigger: Loyalty.PointsAwarded
├── ContactFilter: Total points >= 500
│   ├── Success: 
│   │   ├── ContactAddToList: "VIP Members"
│   │   └── ContactRemoveFromList: "Standard Members"
```

### 3. Multi-Channel Notifications

Send notifications across multiple channels:

```yaml theme={null}
High-Value Prize Workflow:
├── Split: Create parallel branches
│   ├── Branch 1: ContactEmailSend (detailed email)
│   ├── Branch 2: ContactSmsSend (urgent SMS)
│   └── Branch 3: HttpRequest (Slack notification to team)
```

## Troubleshooting Actions

### Common Issues

| Problem                   | Likely Cause               | Solution                              |
| ------------------------- | -------------------------- | ------------------------------------- |
| **Action fails silently** | Missing required data      | Add data validation before action     |
| **Integration timeouts**  | External API is slow       | Add error handling, increase timeout  |
| **Duplicate actions**     | Action runs multiple times | Check for duplicate triggers or loops |
| **Wrong data passed**     | Previous action failed     | Verify success/failure paths          |

### Testing Actions

1. **Test with real data** - Use actual contact records and scenarios
2. **Verify external integrations** - Confirm data arrives in target systems
3. **Check error handling** - Intentionally break integrations to test failure paths
4. **Monitor execution time** - Ensure actions complete within reasonable timeframes

## Performance Tips

### Optimize Action Chains

* **Parallel processing** - Use Split actions for independent operations
* **Early filtering** - Place filters early to avoid unnecessary actions
* **Batch operations** - Group similar actions when possible

### External Integration Efficiency

* **Cache responses** - Store API responses to avoid duplicate calls
* **Use webhooks** - Let external systems push data instead of polling
* **Implement retries** - Handle temporary failures with retry logic

## What's Next?

* [**Monitoring guide →**](/integrations-automation/workflows/workflow-runs) - Track action performance and troubleshoot issues
* [**Workflow triggers →**](/integrations-automation/workflows/triggers) - Explore triggers to pair with these actions
* [**Back to workflows guide →**](/integrations-automation/workflows) - Return to main workflows documentation

Need help implementing a specific action? Contact support at [support@komo.tech](mailto:support@komo.tech)
