A white label SMS API lets your platform or agency send texts for your customers under your own brand. Each customer gets an isolated sub-account with its own numbers and its own 10DLC registration, and you set each customer's price. The rest of this post covers how that works in practice: the sub-account model, setting and raising each customer's price, per-customer registration, and the support work most teams underestimate.
Reselling texting has two jobs. One is technical: send messages, receive replies, handle opt-outs. The other is operational: register every customer with the carriers, price each one, and answer their questions when a message gets filtered or a bill looks wrong. A good white label setup covers most of the first job and makes the second one manageable. No setup makes the second one disappear.
What a white label SMS API actually gives you
The term gets used loosely, so here is what we mean by it at Ready. The underlying stack is carrier infrastructure, and your customers' recipients never see our name in their texts. What you get:
- Sub-accounts. One per customer, each with its own phone numbers, contacts, conversations and registration. Create and list them with
POST /v1/sub-accountsandGET /v1/sub-accounts(sub-accounts docs). - One REST API for sending. SMS, MMS and, if you add it, iMessage through a blue line.
- Compliance plumbing built in. STOP handling that applies across every campaign, quiet-hours holds based on the recipient's area, an optional TCPA litigator and DNC scrub, and landline validation.
- Registration handled in-app. Brand and campaign registration per customer, without you building a carrier-registry integration.
- Your own pricing layer. A partner fee per sub-account on top of our rate.
A basic send looks like this:
POST https://api.tryready.com/v1/messages
X-API-Key: <key>
Idempotency-Key: <a new UUID for each text>
Content-Type: application/json
{"to": "+12125550199", "body": "Your order #1042 has shipped.", "consent_attested": true} The Idempotency-Key matters more on a multi-tenant platform than people expect. If your job runner retries a request after a timeout, that header stops a customer's contact from getting the same text twice. Opt-outs, numbers on your Ban list and numbers Ready has already seen as landlines are refused up front and not charged. With landline validation switched on ($0.003 per segment, off by default), numbers a lookup marks as landlines are refused too. An API text sent during the recipient's quiet hours is held if the window opens within 6 hours (charged only when it goes out); otherwise it is refused with 409 QUIET_HOURS_BLOCK and must be resent. For the full build-out, see our SMS API integration walk-through.
Sub-accounts: one customer, one isolated box
Isolation is the main reason to use sub-accounts. When customer A's list produces a wave of complaints, the reputation damage should stay with customer A's brand and numbers, and customer B's appointment reminders should keep delivering.
In practice, each sub-account holds:
- Its own numbers. These are bought into the sub-account and sit on that customer's registered campaign.
- Its own registration. The brand is the customer's legal business, not yours. More on this below.
- Its own contacts. Opt-outs are the exception: a STOP sent to any of your customers blocks that number for your parent account and every sub-account, because Ready treats the whole account family as one opt-out unit. Check
GET /v1/opt-outs/:phonefor Ready's answer on one number;GET /v1/opt-outslists only the sub-account's own opted-out contacts. - Its own conversation history. Replies thread in that customer's inbox.
If you run on GoHighLevel, the native integration maps each GHL location to its own Ready sub-account over OAuth, with two-way sync of inbound and outbound messages. Each sub-account stays isolated on the GHL side as well. GHL is one of the ways teams connect, not a requirement. Vertical SaaS products, CRMs and agencies with their own stack use the same API directly.
The agency onboarding guide walks through creating sub-accounts in bulk and connecting them.
Setting each customer's price: partner fees and raises
You don't resell texting to break even. With Ready, you set a partner fee for each customer: the per-segment price that customer pays, up to twice our Standard rate, and below it down to your lowest price for that customer. You earn a share of Ready's profit on what they send, so each customer can carry a different price. A high-touch customer who needs hand-holding can pay more than a self-serve one.
Two rules are worth knowing before you build pricing pages around this:
- Fees are per sub-account. You don't have to apply one markup to every customer.
- Raising an existing customer's fee needs that customer's consent before it applies. You can't quietly increase a customer's rate mid-contract. This protects you from a support ticket and possibly a chargeback, and it protects the customer from a surprise. Plan your price changes with a notice period. The onboarding guide explains how consent is collected.
Worked example: one customer's month
Assumptions for this example: a home-services customer sends 3,000 one-segment appointment reminders in a month and gets 600 one-segment replies back. Replies are billed like sent texts, so that is 3,600 billed segments. They have one number on one registered campaign. You set an example price of $0.035/segment.
| Line item | Math | Amount |
|---|---|---|
| Your customer's price (example) | 3,600 × $0.035 | $126.00, paid by the customer to Ready |
| Carrier fee | 3,600 × $0.0045 | itemized, at cost, paid by the customer |
| Registration monthly | $25 for registration + $2 number | $27/mo, paid by the customer |
| What you earn | your share of Ready's margin on the $126, up to half of it | shown on your Partner page |
The $0.0075/segment plus the carrier fee is the all-in send cost, excluding the compliance surcharge. If you switch on scrubbing or landline validation for that sub-account, each adds $0.003 per segment. Scrubbing alone on the 3,000 outbound segments would add 3,000 × $0.003 = $9. Both are off by default.
Segment counts are where margin goes missing. Suppose the same customer edits their reminder template to 175 characters and adds a 🔧 emoji. The emoji switches the message to unicode, which allows 70 characters per segment, or 67 per segment once the text is split. At 175 characters, the reminder now bills as 3 segments. The 3,000 reminders become 9,000 segments, and the Standard rate portion on those alone goes from 3,000 × $0.0075 = $23 to 9,000 × $0.0075 = $68. Because your fee is per segment, your earnings rise with it.
For more on which billing model holds up in a heavy month, see per-message rebill vs flat monthly fee.
Where cheaper per-segment options exist
Twilio's per-segment price, around $0.0083, is lower than our $0.0075/segment Standard rate. GoHighLevel's LeadConnector, at roughly $0.0083 per message (about $0.0128 all-in), is also lower per segment. If your only requirement is the lowest raw send cost and you have engineers to build registration, sub-account isolation, opt-out propagation, quiet hours and billing yourself, a raw CPaaS can make sense. The case for Ready is what comes included: self-serve registration per customer, a CRM, pipeline, automations and a unified inbox, without a carrier-integration project. Enterprise pricing is custom, so talk to us if your volume needs a different conversation.
Registration happens per customer, not once for you
This is the part new resellers most often get wrong. A2P 10DLC registration is tied to the business whose name the recipient sees. When you text for 40 customers, you need 40 brands, and each brand needs at least one campaign that matches what that customer actually sends.
Here is what each customer's registration involves on Ready:
- Cost: $25/mo for registration, plus $2/mo per number. There is no setup fee. The charge at submit is the first month, $25.
- Timing: most approvals take 2 to 7 days.
- Before approval: an account can send up to 500 texts a month before it registers, at its normal per-text rate, and then it has to register. An account that bought its number before registering sends on our shared registration at the same rate while its own registration is in review. The first 20 texts are free one-to-one sends, so use them before registering, because they end the moment a registration is paid for. To send, you add a card and get a number, which is $2 a month with the first month charged when you get it.
- Optional vetting: brand vetting at $79 Standard or $179 Enhanced (one-time) raises the trust score and daily throughput limits. Most customers don't need it. A high-volume ecommerce customer near the T-Mobile daily cap for a low trust score (roughly 2,000 messages a day) might.
Whether to consolidate many small customers under fewer registrations is a real tradeoff, and we cover it in A2P 10DLC for agencies. The short version: separate brands keep one customer's problems from spreading to others, which is the point of white labeling.
The support load nobody prices in
Your customers will send you questions, not us. These are the tickets to expect, roughly in order of how often they come up:
- "Why is my registration still pending?" Point to the 2 to 7 day window and check status with
GET /v1/registration. - "Why was my campaign rejected?" Usually the sample messages or use case don't match what the customer sends, or the opt-in description is weak.
- "Why aren't my texts arriving?" Approved campaigns can still be filtered by content, such as public link shorteners or spammy wording. The AI message writer's spam-filter check catches some of this before send.
- "Why did my bill jump?" Segment counts. Emoji, long templates and reply volume.
- "Can I text this list I bought?" No. Cold contact goes by phone and mail; SMS goes to consented or replied leads.
Two compliance points belong in your customer onboarding, not in a ticket after the fact:
- Consent records belong to the customer. Ready records the sender's opt-in attestation for each bulk send and each API send that sets
consent_attested: who sent, to how many, and when. That is not a per-contact consent record. Each customer's own signup form or store keeps the opt-in time, wording and page URL for every contact. Compliance remains the sender's responsibility. Our tools reduce risk; they don't make anyone lawsuit-proof. Who carries liability between agency and customer is worth reading before you sign your first contract. - Fundraising and political texting need our written OK first. If a nonprofit customer plans to text donation appeals, or a campaign plans to text voters, email support@tryready.com before the first appeal and wait for our reply. Signing up and registering is not enough on its own for these.
A rollout checklist for your first ten customers
- Decide your partner fee per customer tier, and write the consent step for future raises into your contract.
- Create one sub-account per customer, and connect GHL locations if you use GoHighLevel.
- Collect each customer's legal business details and a real description of their opt-in flow before submitting registration.
- Pick the campaign use case that matches what they send. Reminders are not marketing.
- Review templates for segment count before the first campaign goes out.
- Decide whether to switch on scrubbing and landline validation, at $0.003 per segment each, and price it into the fee.
- Turn on local presence only where it fits. Its listed price is $0.0015 for each segment of a delivered text, and every number still sits on the registered campaign.
- Write a one-page help doc that answers the five tickets above.
The practical takeaway
White labeling texting is mostly an operations decision. The API calls are simple. The work is in per-customer registration, pricing each customer so heavy months don't eat your margin, and handling questions your customers will bring to you. If you'd rather build carrier plumbing yourself to get the lowest per-segment price, a raw CPaaS is a reasonable choice. If you'd rather ship this week with registration, opt-outs and quiet hours already handled, check pricing, read the agency onboarding guide, and create an account to set up your first sub-account.
FAQ
What is a white label SMS API?
A white label SMS API is a messaging API you resell to your own customers under your brand, with the provider hidden. Each customer typically gets a sub-account with its own numbers and carrier registration. You handle the customer relationship and pricing, and the provider handles carrier delivery.
Do I need a separate 10DLC registration for each customer?
Yes, in most cases each customer needs its own brand registration, because the brand is the business the recipient is hearing from. On Ready that is $25/mo for registration and $2/mo per number. Most approvals take 2 to 7 days.
How do I make money reselling SMS?
You set what each customer pays per segment. On Ready you set that fee per customer, up to twice our Standard rate ($0.0075/segment), and below it down to your lowest price for that customer, with the carrier fee added on top. Raising an existing customer's fee requires that customer's consent before it takes effect.
Can my customers see that Ready is the provider?
Recipients see the customer's business name and numbers, not Ready. A customer who signs in to Ready sees you as their Ready partner, with a note that you set their fees. A sub-account you rebill yourself never signs in to Ready, so it never sees us.
Is a white label SMS API cheaper than using Twilio directly?
Not per segment: Twilio's rate is around $0.0083 per segment, lower than our $0.0075/segment Standard rate. What you skip is building registration, sub-account isolation, opt-out handling, quiet hours and an inbox yourself. Whether that is worth the difference depends on your engineering time and how fast you need to launch.