# CMP-014 — Keyword entries must carry no surrounding whitespace

> Keyword lists must be comma-separated with no space around the individual entries.

- **Rule ID:** CMP-014
- **Layer:** Campaign (`CAMPAIGN`)
- **Checks:** `campaign.optin_keywords + optout_keywords + help_keywords`
- **Severity:** MEDIUM — Usually survives review, but lowers your trust score or invites manual review.
- **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:** Plivo, Bandwidth, TCR, Telnyx
- **Applies:** Applies to every 10DLC registration.
- **Canonical URL:** https://ekas.io/rules/10dlc/campaign/cmp-014/

## Why this rule exists

Keyword lists are stored as one comma-delimited string and split back apart without trimming, so a space typed after a comma becomes part of the next keyword — and " STOP" is not STOP. The consumer texts the word on your signage, the match fails, and the opt-out that everyone believes is configured never fires.

## How to fix it

Retype the lists with commas and no spaces, or trim each entry if you are building the string in code. Done when no keyword begins or ends with a space — which you can only see by selecting the text, so check it in code rather than by eye.

## Example of a compliant value

```text
optout_keywords: STOP,QUIT,END,REVOKE,OPTOUT,CANCEL,UNSUBSCRIBE
```

## Provider rejection codes

| Provider | Code | Resubmission allowed |
| --- | --- | --- |
| TCR | `501` | yes |

## Notes

A space INSIDE a keyword is a different defect with a different fix and belongs to CMP-KEYWORD-FMT, which rejects the whole token as non-alphanumeric. This rule is only about padding introduced by splitting the delimited string, so the two do not report the same list twice.
