# CMP-095 — A web opt-in must supply the form itself, not just describe it

> A web-form or checkout opt-in must supply the link to the opt-in page, or a screenshot of the form.

- **Rule ID:** CMP-095
- **Layer:** Campaign (`CAMPAIGN`)
- **Checks:** `campaign.message_flow + opt-in evidence`
- **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:** Supply evidence only you hold
- **Required by:** Bandwidth, Twilio
- **Applies:** Applies when consent was collected by web form and checkout.
- **Canonical URL:** https://ekas.io/rules/10dlc/campaign/cmp-095/

## Why this rule exists

A reviewer confirms a web opt-in by looking at it, and a description with nothing to look at is an assertion rather than evidence. This is the most common shape of an incomplete submission because the flow text reads as complete — every element is described, and there is simply no way to check that any of it is on the page.

## How to fix it

Put the deep link to the page carrying the consent control in the message flow, and attach a screenshot of that control taken on a fresh page load. Done when someone with no account can open the link and see the box you described.

## Common mistakes

- A link to the homepage is not a link to the opt-in form. If the control is three clicks in, the screenshot is doing the work and the link is not enough on its own.

## Provider rejection codes

| Provider | Code | Resubmission allowed |
| --- | --- | --- |
| Twilio | `30896` | yes |
