Skip to contentSkip to navigationSkip to topbar
Page toolsOn this pageProducts used
Looking for more inspiration?Visit the
Error
Application error

30924: Campaign rejected: Missing or non-compliant consent agreement language in opt-in flow

Twilio Messaging DocumentationMessaging
Twilio Phone Numbers DocumentationPhone Numbers

Description

description page anchor

Your A2P 10DLC campaign was rejected because the opt-in flow you provided doesn't contain compliant consent agreement language. Carriers require that consumers are clearly informed about what types of messages they will receive, the frequency of messages, and how to opt out before they provide consent. Your submitted opt-in evidence is either missing this language entirely or the language present does not meet TCPA and CTIA compliance requirements.

Possible causes

possible-causes page anchor
  • Missing consent disclosure: The opt-in flow does not include language informing the consumer about the nature of the messages they will receive.
  • No frequency disclosure: The opt-in does not state the expected message frequency (for example, "Up to 5 messages per month").
  • Missing opt-out instructions: The consent language does not include instructions on how to stop receiving messages (for example, "Reply STOP to unsubscribe").
  • No "message and data rates may apply" disclosure: The opt-in is missing the standard rate disclosure language.

Pre-submission checklist

pre-submission-checklist page anchor

Run through this list before submitting or resubmitting your campaign:

  • message_flow names every opt-in method used for this campaign (website, keyword, paper form, verbal, QR code, or other mechanism).
  • message_flow includes a link to your privacy policy and a link to your terms and conditions.
  • Your privacy policy states that mobile numbers are not shared with third parties, includes message frequency, and includes a "message and data rates may apply" disclosure.
  • If opt-in happens on a website, the URL is publicly accessible. If it is not public, you have provided a URL with hosted screenshots of the full consent flow.
  • If end users opt in by texting a keyword, opt_in_keywords and opt_in_message are populated. The opt_in_message includes the brand name, confirmation of enrollment, message frequency, and opt-out instructions.
  • If the campaign uses multiple opt-in paths, all paths are described in the same message_flow field.
  • Sample messages match the declared use case, identify the brand by name, and include opt-out language.
  • The consent language appears at or immediately adjacent to the consent control (checkbox, button) — not buried in a linked document.
  • You have provided a public URL or hosted screenshot showing the complete consent language as it appears to the consumer.

Frequency or rates disclosure missing

frequency-or-rates-disclosure-missing page anchor
(warning)

Warning

The following consent language would be rejected:

By checking this box you agree to receive text messages from Acme Co. Reply STOP to cancel.

Has opt-out instructions but is missing message frequency and the "message and data rates may apply" disclosure.

(information)

Info

The following consent language would pass review:

By checking this box you agree to receive recurring text messages from Acme Co. Message frequency varies. Message and data rates may apply. Reply STOP to cancel.

Passes because it includes all four required elements: message type (recurring text messages), frequency, rates, and opt-out.

Edit the rejected campaign rather than deleting and recreating it. Resubmitting triggers a fresh review by The Campaign Registry (TCR).

  • Vetting fee: A vetting fee is assessed only once per campaign. Resubmitting the same campaign does not incur a new fee.
  • Timeline: Sole Proprietor campaigns are typically approved or rejected within hours to days. Standard campaigns go through several layers of vetting and can take up to several weeks.
  • Check status: Monitor your campaign status in Console > Messaging > Regulatory Compliance > Campaigns, or fetch the UsAppToPerson resource and check the campaign_status field.

To resubmit in Console, go to Messaging > Regulatory Compliance > Campaigns, click the failed campaign, then click Edit Campaign to correct the fields and resubmit. To resubmit via API, update the campaign resource with corrected field values. See Troubleshooting and rectifying A2P Campaigns for detailed instructions.