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

# Profile Blacklist and Opt-Out

> Using tags, statuses, and comms opt-out fields to suppress a profile from communications and operations.

There are two distinct approaches to suppressing a profile in Omneo, depending on what you want to suppress: **communications opt-out** (stop sending to this profile) and **operational suppression** (exclude this profile from processing, imports, or incentive logic).

## Suppressing a profile from communications

The recommended approach is to set the relevant opt-out flags on the profile's comms attributes. These are read by connected comms platforms (Klaviyo, Emarsys, etc.) and respected by Omneo's own notification logic.

```shell theme={null}
curl -X PUT https://api.[tenant].getomneo.com/api/v3/profiles/{profileId} \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "comms_attributes": {
      "email_optout": true,
      "sms_optout": true,
      "push_optout": true
    }
  }'
```

Set only the channels that apply. Opt-out flags are synced in real time to connected comms platforms.

See [Comms Preferences](/concepts/profiles/comms-preferences) for the full list of opt-out and opt-in fields.

## Using tags for operational suppression

Tags are the simplest way to flag a profile for exclusion in integrations, bulk operations, or reaction conditions. Apply a dedicated tag and then filter on it wherever suppression should be enforced.

```shell theme={null}
curl -X PUT https://api.[tenant].getomneo.com/api/v3/profiles/{profileId} \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "tags": ["suppressed"]
  }'
```

<Warning>Updating `tags` replaces the entire tag array. Read the current tags first and include them in the update to avoid losing existing values.</Warning>

To add a tag without replacing existing ones:

```shell theme={null}
# 1. Read current tags
curl -X GET https://api.[tenant].getomneo.com/api/v3/profiles/{profileId} \
  -H "Authorization: Bearer ${TOKEN}"

# 2. Append your tag and send the full array
curl -X PUT https://api.[tenant].getomneo.com/api/v3/profiles/{profileId} \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "tags": ["existing-tag", "suppressed"]
  }'
```

You can then use the `suppressed` tag as a filter in reaction conditions to exclude these profiles from automation, or as a query parameter when browsing profiles.

## Using statuses for structured suppression

For more formal suppression, for example, flagging a profile as a known fraudster or a test account, create a dedicated Status definition in CX Manager and apply it via the API. Statuses carry metadata, can be time-limited, and are available in reaction conditions via `flattened_statuses`.

```shell theme={null}
curl -X POST https://api.[tenant].getomneo.com/api/v3/profiles/{profileId}/statuses \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "status_id": 14
  }'
```

Use a reaction condition of `flattened_statuses does not contain "suppressed"` to exclude these profiles from incentive automations.

## Blocking values at creation

If you want to prevent certain email addresses, phone numbers, or names from ever being created as profiles (for example, known spam addresses or internal test values), use the profile validation rules API.

Validation rules define matching criteria (exact, domain, prefix, or regex) and the operations they block (create, update, import, or all). A `422` error is returned when a blocked value is submitted.

```shell theme={null}
# Create a validation rule blocking a specific email domain
curl -X POST https://api.[tenant].getomneo.com/api/v3/profiles/validation-rules \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "email",
    "rule_type": "domain",
    "applies_to": "all",
    "is_active": true
  }'
```

Then add the blocked domain as a value on the rule:

```shell theme={null}
curl -X POST https://api.[tenant].getomneo.com/api/v3/profiles/validation-rules/{ruleId}/values \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "value": "example-spam-domain.com",
    "is_active": true
  }'
```

## Related

* [Tags](/dev-guides/profiles/tags)
* [Tags and statuses concept](/concepts/profiles/tags-and-statuses)
* [Comms Preferences](/concepts/profiles/comms-preferences)
* [Filtering profiles](/dev-guides/profiles/filtering-profiles)
