SMS, MMS and email
One contact list, three channels. Send now or schedule it, with consent checked per channel at the moment of sending.
SMS, MMS and email, billed per segment at the carrier's own count. If a message doesn't arrive, the charge comes back. Every credit and every charge sits on a ledger you can read line by line.
Get started See pricing$10 minimum to add credit. Credits never expire.
| Estimate held2,400 recipients, reserved before sending | −$36.00 |
| Hold releasedat completion, in full | +$36.00 |
| Sent2,317 messages, priced at the segments the carrier reported | −$34.76 |
| Suppressed83 recipients had opted out. Never sent, never billed | $0.00 |
| Refunded11 messages the carrier could not deliver | +$0.17 |
| Charged | −$34.59 |
That's the shape of a real bill. Most platforms charge the estimate and keep the difference. We charge what the carrier charged for, and give back what didn't land.
One rate per channel. No tiers, no feature gates, no monthly floor. SMS is billed per segment, so a long message costs more than a short one, and the composer tells you before you send rather than after.
| Channel | Billed | Rate |
|---|---|---|
| SMS | per segment | $0.0150 |
| MMS | per message | $0.0450 |
| per message | $0.0030 |
Sending more than 100,000 a month? Rates come down. Tell us your volume.
Listed honestly, and everything here works today and isn't in your account yet.
One contact list, three channels. Send now or schedule it, with consent checked per channel at the moment of sending.
Import by CSV. Numbers are normalized and validated on the way in, so a malformed number is caught at import rather than at send.
Carrier-level delivery status per message, not just "we handed it off". Failures are recorded with the carrier's own reason code.
An append-only ledger. Every credit, hold, charge and refund is a permanent line item, and your balance is the sum of them.
Links on our own domain, not a shared public shortener. Shorter links mean fewer segments, which means a cheaper send.
Set a window per account. A campaign scheduled inside it waits until the window opens, in your recipients' local time.
Target by tag, by list, by whether somebody has been messaged or clicked recently. A segment is a question, answered fresh every time you use it, so it stays right without anybody maintaining it.
Per-recipient attribution on shortened links, reported against messages actually delivered rather than messages sent.
Save the messages you send repeatedly, with merge fields where the names go. Editing a template never changes a campaign already sent.
Everything people text back, threaded, with the whole conversation in one place. Reply from the same screen.
Upload a photo and it is resized to fit what carriers accept, which is smaller than most people expect.
Delivery, spend and clicks by date range, exportable. And a calculator that tells you what a message costs before you build a campaign around it.
A month view of what is going out and when, which warns you when two campaigns are aimed at the same people on the same day.
Send this, wait three days, then send that to whoever didn't reply. Starts itself when somebody joins a list, gets a tag, or texts a word. Anybody who opts out part way through simply stops receiving the rest.
The expensive mistake in messaging is sending to someone who asked you to stop. Wally is built so that's hard to do by accident.
STOP, END, CANCEL and the rest are matched exactly against the message. Someone who writes "please don't stop sending these" stays subscribed.
An opt-out is recorded against the phone number or email address, and every send path checks the same list. There's no second place for it to be missed.
A hard bounce or a spam complaint adds the address to the suppression list without anyone having to notice.
Each record stores when consent was given, through what, and what the proof was. That's what you need when someone asks.
These are tools, not legal advice. Messaging rules vary by state and change often; review your program with your own counsel. Our messaging compliance page covers what we do and don't do.
Connect Claude, or anything else that speaks MCP, and let it send messages for you. Why that isn't reckless is worth saying plainly.
Consent, opt-outs, quiet hours and credit are enforced in our database, on every send, from every source. An agent told to message everyone about a sale gets refused for everyone who opted out. It can't be talked around them, because it isn't being asked.
One tool exists only to answer "would this send be allowed, and if not why". It's free and instant, so a well behaved agent asks first rather than finding out by failing.
Give it permission to send and nothing else, or to read your contacts and never write. Revoke it in one click. Every call it makes is logged against the key that made it.
Automated callers time out and try again. Send an idempotency key and the retry returns the original result instead of a second text your customer receives and you pay for.
{
"mcpServers": {
"wally": {
"url": "https://api.wallysolutions.com/mcp",
"headers": { "Authorization": "Bearer wly_live_..." }
}
}
}
Rather write the code yourself? The REST API is described at openapi.json, and a key takes about a minute to create.
Including the ones with awkward answers.
Open an account, add credit when you're ready to send, and stop whenever you like. There's nothing to cancel.
Get started