# CON-FLOW-SPECIFIC — The message flow must describe a real, specific opt-in

> The message flow must name where consent happens concretely enough for a reviewer to find and verify it.

- **Rule ID:** CON-FLOW-SPECIFIC
- **Layer:** Consent flow (`CONSENT_FLOW`)
- **Checks:** `campaign.message_flow`
- **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:** AI judgement over the submitted form
- **Fix type:** Fix the field — a better value in the form clears it
- **Required by:** TCR, Twilio, Bandwidth, AWS
- **Applies:** Applies to every 10DLC registration.
- **Canonical URL:** https://ekas.io/rules/10dlc/consent-flow/con-flow-specific/

## Why this rule exists

Reviewers verify by going and looking. A flow that says "customers opt in on our website" gives them nowhere to go, so they reject rather than hunt — this is the single most common campaign-level rejection reason across every provider.

## How to fix it

Name the exact surface — the page URL, the form, the physical location, or the script — and quote the consent wording the consumer agrees to. Add the link to your hosted evidence.

## Example of a compliant value

```text
Customers opt in at https://acmecoffee.com/signup by ticking an unchecked box reading: "By checking this box, you agree to receive recurring automated marketing text messages from Acme Coffee at the number provided. Consent is not a condition of any purchase. Message frequency varies. Message and data rates may apply. Reply STOP to unsubscribe or HELP for help." Screenshot: https://cdn.acmecoffee.com/compliance/optin.png
```

## Provider rejection codes

| Provider | Code | Resubmission allowed |
| --- | --- | --- |
| Twilio (gen1) | `30896` | yes |
