# POL-002 — A terms and conditions URL is required on the campaign

> Every campaign registration must carry a non-empty terms and conditions URL.

- **Rule ID:** POL-002
- **Layer:** Policy pages (`POLICY_PAGE`)
- **Checks:** `campaign.termsOfServiceUrl`
- **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, Sinch, AT&T, T-Mobile
- **Applies:** Applies to every 10DLC registration.
- **Canonical URL:** https://ekas.io/rules/10dlc/policy-page/pol-002/

## Why this rule exists

The terms are where the messaging programme is documented for the person receiving it — what it sends, how often, how to leave — so an empty field leaves the consumer with nothing to consult and the reviewer with nothing to check the samples against. TCR calls the field optional while its own guide says compliant terms are required, which is how a registration ends up submitted without one and rejected for not having one.

## How to fix it

Set the terms URL on the campaign to the https address of the SMS terms page. Done when the field holds a URL that opens the messaging terms rather than the general site terms.

## Example of a compliant value

```text
terms_and_conditions_url: https://acmecoffee.com/sms-terms
```

## Provider rejection codes

| Provider | Code | Resubmission allowed |
| --- | --- | --- |
| Twilio (gen2) | `30934` | yes |
| Twilio (gen1) | `30882` | yes |

## Notes

TCR marks the field optional in its schema and requires compliant terms in its CSP guide. Treated as required here, per the strict-superset model: supplying it costs nothing at the destinations that do not demand it.
