A 10DLC compliance platform should do five things without you building them: file carrier registration for every brand you send for, enforce opt-outs across every number, hold texts outside the recipient's quiet hours, screen DNC and known TCPA-litigator numbers before a send, and record a consent attestation on every API and bulk send. It cannot collect consent for you, and any vendor that implies otherwise is selling you a liability.

This post is a buyer's checklist. It is written for the CTO or head of product at a platform that texts on behalf of its own customers, but it applies to anyone who sends business SMS: a SaaS product, a clinic, an ecommerce brand or a GoHighLevel agency. We make Ready, so we use our own stack as the worked example. We also say where it costs more than a raw carrier API, and where you might not need us at all.

The 10DLC compliance platform checklist

Here is the short version. Use the right-hand column on any vendor call, including ours.

RequirementWhat "done for you" looks likeWhat to ask the vendor
10DLC registrationBrand and campaign filed per customer, status visible via API"Who files it, and can I read status programmatically?"
Opt-out handlingSTOP/UNSUBSCRIBE honored automatically and blocked on every later send"If a contact opts out on one number, can another number still text them?"
Quiet hoursSends held based on the recipient's location, not your server's time zone"Is a held text charged when it's held or when it sends?"
DNC and litigator scrubNumbers checked before send, matches suppressed"Is it per contact or per segment, and is it on by default?"
Consent attestationEvery API and bulk send that carries one records who sent it, to how many, and when"What exactly is stored, and what isn't?"
Landline validationKnown landlines refused before you pay for a failed text (the number check itself is billed)"Am I charged for refused sends?"

The rest of this post takes each row in turn.

Registration filed for you, per customer

Unregistered A2P traffic gets filtered by carriers. If you text on behalf of 50 customers, you need 50 brands registered, each with its own campaign. Our 10DLC for SaaS platforms post covers who the brand of record should be.

A platform should model this as sub-accounts. On Ready, each customer gets a sub-account (POST /v1/sub-accounts) with its own numbers and its own registration. You read where a registration stands with GET /v1/registration instead of emailing support. Most approvals take 2 to 7 days.

What registration costs at platform scale

There is no setup fee. The charge at submit is the first month, $25. After that, the monthly is $25 for registration and $2 per number.

Worked example (assumptions: 50 customer sub-accounts, one brand, one campaign and one number each):

  • Per sub-account: $25/mo for registration and $2/mo per number
  • 50 sub-accounts: those fees repeat for each one, every month, before any messages are sent

Brand vetting is optional: $79 Standard or $179 Enhanced, one-time. It raises trust score and daily throughput limits. Most senders don't need it. It only makes sense for customers sending enough volume to hit a carrier cap.

What a platform can't file for you

Registration is approved or rejected on what the customer actually sends and on how they collect opt-in. A platform can give you clean forms and sensible defaults. It cannot invent a compliant opt-in flow your customer doesn't have. The opt-in wording that clears registration is the part most first-time rejections trace back to.

Sending while a registration is in review

An account can send up to 500 texts a month before it registers, at its normal per-text rate. After that it has to register. An account that bought its number before registering sends on Ready's shared registration, at the same per-text rate, while its own registration is in review.

Opt-outs that follow the contact everywhere

This is the row where DIY builds most often fail. On a raw carrier API, each number sees its own STOP. Your code has to notice it, write it somewhere central, and check that list before every send from every number. Miss one code path, such as a retry worker or a new drip campaign someone built last week, and you text someone who told you to stop.

What to expect from a platform:

  • Inbound STOP and UNSUBSCRIBE are honored automatically.
  • The opt-out propagates, so no campaign on that account can message the contact again.
  • Sends to opted-out numbers are refused up front, not quietly delivered.

On Ready, opt-outs, numbers on your Ban list and known landlines are refused before sending and not charged. GET /v1/opt-outs lists the opted-out contacts on this account. It leaves out a STOP from a deleted contact, a dialer do-not-call entry and a STOP held on another account of the same family, so before a send from another tool, check the number with GET /v1/opt-outs/:phone. One caution: opt-out across channels is a separate problem. A contact who texts STOP may still be in your calling list, and that sync is yours to build.

Quiet hours based on where the recipient is

A campaign scheduled for 9 AM Eastern lands at 6 AM in California. TCPA exposure for texts sent outside permitted hours is real. The fix is not "send slower." The fix is holding each text until it's permitted where the recipient is. We walk through the multi-time-zone version in the quiet-hours post.

On Ready, quiet hours follow the recipient's area. Campaigns, drip campaigns and automations wait up to 24 hours for the recipient's permitted window. A one-to-one, inbox or API text (bulk API included) is held only if the window opens within 6 hours; otherwise it is refused with 409 QUIET_HOURS_BLOCK and has to be sent again later. A held text is charged only when it sends. Ask any vendor that last question directly. Some bill at queue time, which means you pay for texts that get cancelled.

DNC and litigator scrubbing before the send

There are three lists people confuse: the national DNC registry, DNC complainers, and known TCPA litigators. Scrubbing against one does not cover the others. Our three-lists breakdown explains the difference. A platform should let you screen against litigator and DNC lists before a message leaves.

Ready offers two ways to do it, and the pricing differs:

  1. Per-segment surcharge. Switch scrubbing on for an account and every send is checked, at $0.003 extra per segment. Landline validation is a separate $0.003 per segment. Both are off by default.
  2. Standalone scrub. $0.005 per contact. One scrub checks each number against known TCPA-litigator lists and DNC-complainer lists, and flags matches before send. You can also scrub a single number with GET /v1/scrub/:phone.

Worked example: which scrub model costs less

Assumptions: one customer with 10,000 consented contacts, a 1-segment message, and 4 campaigns a month.

  • Messaging: 40,000 segments × $0.0075/segment = $800, plus 40,000 × $0.0045 carrier fee
  • Per-segment scrub surcharge: 40,000 × $0.003 = $120/month
  • Standalone scrub once a month: 10,000 × $0.005 = $50/month

If the list barely changes, the standalone monthly scrub costs a quarter as much. The per-segment surcharge earns its cost when contacts are added continuously, through API signups or form fills, and a monthly batch would miss them.

Segment count matters here too. A 140-character text with one emoji is 3 segments instead of 1. That triples both the message cost and the per-segment surcharge.

Set either figure against the exposure it reduces. TCPA statutory damages run $500 to $1,500 per text. Scrubbing is risk reduction, not immunity, but $50 against a single claim is easy math.

Consent attestation on API and bulk sends

Send a consent attestation with every API and bulk send. On the API it is the consent_attested field. Ready does not refuse a send without it yet; the response carries a warning instead:

POST https://api.tryready.com/v1/messages
X-API-Key: <key>
Idempotency-Key: <any UUID>

{"to": "+12125550199", "body": "Your order #1042 has shipped.", "consent_attested": true}

consent_attested is your promise that the recipient agreed to texts. Ready records that attestation per bulk send and per API send that sets consent_attested: who sent it, to how many recipients, and when. Over time that builds an audit trail showing your system asserted consent on every send that set it. A send without it is not in that trail. The Idempotency-Key makes sure a retried request never sends twice, which matters for compliance as well as cost. Full request options are in the messages docs and the bulk messages docs.

What attestation is not

It is not a per-contact consent record. Ready does not store when a recipient opted in, the wording they saw, or the page URL. A keyword reply does not create one either. That evidence has to live in your system, or your customer's. See how to document SMS consent so it holds up. (A contact who signs up on a Ready-hosted opt-in page is the exception: Ready stores that sign-up, with the time, the exact wording shown, the name, phone and email entered, and the IP address and browser, and support@tryready.com can send you a copy.)

What your business still owns

A 10DLC compliance platform reduces risk. It does not transfer responsibility. Compliance remains the sender's job. These stay with you, or with your customer:

  • Collecting consent. That means a clear opt-in at the point of capture: what they'll receive, roughly how often, that message and data rates may apply, and how to opt out.
  • Storing proof of consent per contact. Keep the timestamp, the wording and the source for each contact.
  • Not texting cold lists. Cold outreach goes by phone and mail. SMS goes to people who opted in or replied to you. No scrub turns a purchased list into a consented one.
  • Message content. What you say is your call. An approved campaign can still get filtered for content, and healthcare senders still have to keep PHI out of the message body.
  • Cross-channel opt-out sync. If someone opts out by text, your dialer and email tools need to know.
  • Your own terms with your customers, if you're a platform. Spell out who is responsible for their lists.

The practical takeaway, and when you don't need us

Build the checklist into your vendor evaluation. The expensive failures are not slow approvals. They are an opt-out that one code path forgot, a 6 AM text to a litigator, and having no record of what your system claimed at send time.

Be honest about the alternative, too. Twilio lists about $0.0083/segment. GoHighLevel's LC Phone is about $0.0083/message, roughly $0.0128 all-in. Both are below our $0.0075/segment plus the $0.0045 carrier fee (that all-in figure excludes the optional compliance surcharge). A raw CPaaS is a sound choice if you have the engineering time to build registration flows, central opt-out storage, quiet-hours scheduling and scrubbing yourself, and to maintain them. What you pay us for is the compliance layer above, already built, plus sub-accounts, the inbox, campaigns and native GoHighLevel sync.

To try it, the quickstart gets a first API send working. Your first 20 texts are free one-to-one sends, and to send any text you need a card and a number ($2 a month, the first month charged when you get it). Use them before you register, because they end when a registration is paid for. Pricing is on our pricing page, and you can sign up here.

Frequently asked questions

What does a 10DLC compliance platform actually do?

It handles the carrier-facing compliance work for business texting: brand and campaign registration, opt-out enforcement, quiet hours, DNC and litigator screening, and a record of consent attestations. The goal is that no single send can skip the opt-out check or quiet hours. It does not collect consent from your contacts. That stays with you.

Does using a compliance platform protect me from TCPA lawsuits?

No. It reduces the risk but doesn't remove it. Scrubbing, quiet hours and automatic opt-outs cut off the most common ways businesses end up in a claim. Liability still rests with the sender, especially if consent was never properly collected.

How long does 10DLC registration take through a platform?

Most approvals take 2 to 7 days. On Ready, an account can send up to 500 texts a month before registering. An account that already bought a number sends on Ready's shared registration while its own is in review.

Is DNC scrubbing included in the per-message price?

Not by default on Ready. Scrubbing and landline validation are each $0.003 extra per segment when switched on for an account, and both are off unless you enable them. You can also run a standalone scrub at $0.005 per contact.

Do I still need to store consent records if my platform records attestations?

Yes. An attestation records that your system asserted consent on a send: who sent it, to how many, and when. It does not record when or how each person opted in. Keep the opt-in timestamp, the wording and the source in your own system.