# CMP-096 — Keyword opt-in requires both the keywords and the confirmation text

> A keyword-based opt-in must populate both the opt-in keywords and the opt-in confirmation message.

- **Rule ID:** CMP-096
- **Layer:** Campaign (`CAMPAIGN`)
- **Checks:** `campaign.optin_keywords + campaign.optin_message`
- **Severity:** BLOCKING — Breaking this rule gets the submission rejected outright.
- **When it bites:** Gates approval — get this wrong and registration is refused
- **How it is detected:** Deterministic (settled in code from the submitted values)
- **Fix type:** Fix the field — a better value in the form clears it
- **Required by:** TCR, Twilio, Bandwidth, AWS
- **Applies:** Applies when consent was collected by text-to-join keyword.
- **Canonical URL:** https://ekas.io/rules/10dlc/campaign/cmp-096/

## Why this rule exists

The keyword is how the consumer joins and the confirmation is what tells them they succeeded; a keyword programme with no confirmation leaves them texting into silence, then texting again. Providers check the pair together because either alone is an incomplete programme.

## How to fix it

Populate campaign.optin_keywords with the keyword your signage advertises, and write the confirmation message carrying brand, frequency, rates, HELP and STOP. Done when texting the keyword would produce that exact reply.

## Example of a compliant value

```text
optin_keywords: JOIN, START · optin_message: "Acme Coffee: you're subscribed to offers. Msg frequency varies. Msg & data rates may apply. Reply HELP for help, STOP to cancel."
```

## Common mistakes

- The keyword in the campaign must match the keyword on the signage exactly — JOIN and JOINUS are different programmes to a reviewer comparing the two.
