# CMP-LINK-DECL — embeddedLink must match whether samples actually contain links

> The embeddedLink attribute must be true when any sample contains a URL, and a sample must contain a URL when it is declared true.

- **Rule ID:** CMP-LINK-DECL
- **Layer:** Campaign (`CAMPAIGN`)
- **Checks:** `campaign.embedded_link + campaign.sample[]`
- **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, AWS, Bandwidth
- **Applies:** Applies to every 10DLC registration.
- **Canonical URL:** https://ekas.io/rules/10dlc/campaign/cmp-link-decl/

## Why this rule exists

The embedded-link attribute drives carrier filtering, so a mismatch between the declaration and the samples misroutes the campaign's traffic. It fails in both directions: undeclared links look like evasion, and a declared-but-absent link means the campaign was registered for treatment it does not need.

## How to fix it

Set the "messages contain links" flag to match your sample messages, in both directions.

## Example of a compliant value

```text
Samples contain https://acmecoffee.com/sale → set "messages contain links" to true.
```

## Notes

Bidirectional. The current contentFlags scanner only checks one direction, and does so with a stateful /g regex.
