Invoice FMPMHG-2026-09 · Australia · 1–30 Sep 2026

Use the phones you already have. Do not buy the SMSEagle yet.

A spare phone and an SMSEagle send through the same kind of SIM, so the Eagle does not make a text cheaper. It costs $1,426.80 before shipping to be a sturdier box. With phones already in hand, that purchase waits. What does not wait is the product: September’s outbound SMS alone is $714, and that cost repeats for every organization you sell Cyandex to if messages stay inside the license.

Your own site

Phones first, Twilio keeps the calls

Hardware is already paid for. Voice at $245 stays on Twilio. A phone still needs a SIM the carrier will allow to send about 460 texts a day.

The Eagle

Buy it for reliability, not for savings

Against a phone you already own, the NXS-9750 never pays for itself in message fees. Buy it when a drawer phone is too fragile to leave running.

Other organizations

Sell the software apart from the texts

One customer at this volume is $714 of outbound SMS. Ten customers are about $7,100 a month if you pay Twilio for them.

If Cyandex is the product

The SMS bill multiplies with every customer

Your unused phones solve your office. They do not travel with the product. An SMSEagle on each customer’s desk does not either, unless that customer wants a box on site and accepts one or two SIM numbers.

Your spare phones
Right for a pilot of your own traffic. Two-way replies come from the SIM. The app is still unwritten, so this is a trial on a handset, not a feature you hand to the next organization. Each phone is one number, one battery, and one carrier that can stop the line.
SMSEagle per customer
A clean on-prem option when an organization wants texts from its own SIM and will host a small box. At $1,426.80 it is cheaper than a year of this Twilio SMS line, and worse than a phone they already own. It is a poor default for every sale.
A message account per customer
The scalable sale. Cyandex connects to their Twilio account, or to an Australian provider with a virtual mobile number that can receive replies. One-way sender names are cheaper and cannot replace the 3,078 inbound texts on this bill. Published Australian rates often sit below Twilio’s US$0.0515. Take a current quote before you switch.
How to price it
Charge for Cyandex itself. Pass message and call costs through, or make the customer bring the provider. At this invoice, outbound SMS is $714.05, inbound SMS $23.09, MMS $33.95, and voice $245.05. Folding that into a flat subscription means one busy organization spends the margin. Keep Twilio for voice until a calling provider is chosen the same way.

Where the code lives

A separate phone app, and a thin connector inside Cyandex

The handset is its own install. Cyandex keeps a provider setting next to Twilio: Twilio, or this phone. The rest of Cyandex stays where it is.

On the phone
Its own app. It holds the SIM, the default texting role, and a queue. It asks Cyandex for texts to send, and posts arrivals back. It does not know customers, jobs, or invoices. Organizations that stay on Twilio never install it.
Inside Cyandex
One adapter beside the existing Twilio send and webhook. Outbound messages leave through whichever provider is selected. Inbound messages enter through the same door a Twilio webhook uses. Voice keeps calling Twilio. Putting the Android project in the Cyandex codebase would ship a handset app to every customer and tie their releases together.

The invoice

Where the $1,048.91 went

Amounts are US dollars, as printed. Australian outbound SMS is $0.0515 on Telstra, Optus, and Vodafone. Inbound SMS is $0.0075. Every MMS on the bill is $0.35. The invoice shows no payment due; the usage still happened.

LineQuantityUSD
AU outbound SMS

Yes, onto SIMs in the gateway

13,865$714.05
AU inbound SMS

Yes, same SIMs

3,078$23.09
Failed message fee

Goes away with the Twilio sends

101$0.10
MMS, mostly inbound

Eagle can do it. Too small to decide the buy.

97$33.95
Voice minutes

Stays on Twilio

10,819$245.05
Phone numbers

Keep the ones still used for calls

6$31.90
Studio and storage

Move any SMS Studio flow with the texts

1,309 runs$0.78
Android phone
One SIM, or two on a dual-SIM handset. Hardware is a few hundred dollars, then the app still has to be written. It can send and receive the texts. It does not take the 10,819 voice minutes. At 462 outbound messages a day it is the fragile option.
SMSEagle NXS-9750
Two 4G modems, 60 SMS a minute, SMS and MMS, webhook on incoming messages, modem failover. Store price $1,426.80 ex tax. LTE band 28 is in the radio list, which is the band Australian carriers use at 700 MHz. Shipping and import GST to Australia are extra. Voice on this box is an optional wake-up and text-to-speech add-on, not Twilio calling.
Stay on Twilio
Right for the $245.05 of calls, the US number, and any Australian mobile number that does not fit in the two SIM slots. Wrong as the long-term home for 13,865 outbound Australian texts at 5.15 cents each, if a local SIM is allowed to send them.

The contract

How the Twilio path actually works

The Cyandex source is not in this workspace, so this is the Messages contract those apps use. If a project also sends WhatsApp or one-time codes, that traffic is a different Twilio product and a phone will not absorb it.

01

Send

The app POSTs to /2010-04-01/Accounts/{Sid}/Messages.json with HTTP basic auth. The body carries From, To, and Body. A picture adds MediaUrl, which must be a public file Twilio can fetch. Twilio returns a MessageSid and status queued.

02

Receive

Twilio answers the carrier, then POSTs application/x-www-form-urlencoded to your webhook: MessageSid, From, To, Body, NumMedia, and MediaUrl0 when a picture is attached. Your server answers with an empty Response so Twilio does not try to reply on its own.

03

Status

If you set StatusCallback, Twilio later POSTs MessageStatus: queued, sent, delivered, undelivered, or failed, plus ErrorCode when the carrier rejects it. US long-code SMS is billed per 160-character segment. MMS is one price per message.

What the phone would sit behind
  1. 01CyandexKeeps calling the same send URL and the same inbound webhook.
  2. 02Your serverQueues outbound work and stores inbound pictures.
  3. 03Phone appHolds the default SMS role and the SIM.
  4. 04The other personSees a normal mobile number, the one in the phone.

Capability

Line by line, against a real handset

Rows marked Yes are a fit for the phone app. Partial is a later phase. Twilio means that job stays on the account you already have.

JobFit

Send a text from the product

The app calls SmsManager. Long texts are split into segments on the phone.

Yes

Receive a text into the product

Android delivers SMS_DELIVER only to the default SMS app. That app then POSTs the same fields onward.

Yes

Send a picture

The app must talk to that carrier’s MMSC. It works on many US SIMs and fails often enough to treat as a second phase.

Partial

Receive a picture

The phone gets a WAP push, downloads the file over the carrier data APN, and your server hosts a URL Cyandex can open.

Partial

Delivery status

SMS delivery reports are best-effort. Android does not report MMS as delivered.

Partial

Keep the current Twilio number

Customers see the SIM’s mobile number. A Twilio long code does not move onto a consumer SIM in any practical way.

Twilio

Several numbers, short codes, toll-free

One number per SIM. A dual-SIM phone gives you two.

Twilio

Volume and uptime

One radio, one battery, one app process. A few hundred messages a day is the honest planning range.

Twilio

Leave Cyandex’s send and receive code alone

A small server can accept the same Messages POST and emit the same inbound webhook.

Yes

WhatsApp, Verify, lookup, Studio

A handset SMS app does not cover those.

Twilio

The install

What the phone app has to be

This is a private app on a spare phone that stays plugged in. It is the default texting app on that phone, because Android gives incoming texts to nobody else.

On the phone

Ask for the SMS role with RoleManager, then hold RECEIVE_SMS, RECEIVE_MMS, RECEIVE_WAP_PUSH, and SEND_SMS. Register receivers for SMS_DELIVER and WAP_PUSH_DELIVER. Without that role, inbound messages never reach your code.

Run a foreground service with a lasting notification, start again on boot, and ask the user to ignore battery optimization. Keep an on-device queue so a Wi-Fi drop does not lose a send.

Show a plain inbox and a pause switch. The person watching the phone needs to see the queue, signal, battery, and the last message that failed.

Sideload the APK. Google Play allows SMS permissions for a real default texting app, and a headless relay is a weak fit for that review. One dedicated phone does not need the store.

On your server

Speak the slice of the Messages API Cyandex already calls: create a message, and accept a status callback URL. When the phone confirms a send, POST the status Twilio would have posted.

When a text arrives, POST From, To, Body, MessageSid, and NumMedia to the webhook Cyandex already hosts. For a picture, store the file and put its address in MediaUrl0.

Pair the phone with a device token. Publish a heartbeat: SIM present, signal, battery, queue depth, last success. If the heartbeat stops, fall back to Twilio.

Honor STOP, STOPALL, UNSUBSCRIBE, CANCEL, END, and QUIT, and allow START to opt back in. Twilio does that on US long codes. A raw SIM does not.

Order of work, if you build it
  1. 1Spare phone, real SIM, texts included, mobile data on. MMS often fails on Wi-Fi alone.
  2. 2App sends and receives SMS and shows them on screen. Set it as the default texting app.
  3. 3Server mirrors the Twilio send call and the inbound webhook. Point a staging path in Cyandex at it.
  4. 4Run a week beside Twilio. Compare failures, delay, and STOP handling.
  5. 5Add pictures only after text is boringly reliable on that carrier.

Money

US list prices, for contrast only

This calculator is United States long-code pricing. It does not describe your September invoice. Australian outbound SMS on that invoice is about six times the US list price, which is why a local SIM changes the decision.

Your month
US long-code prices from Twilio's October 2026 rate card. The phone side is whatever the line already costs, with texts included in the plan.

Each message, before length splits it

Replies and inbound texts

Pictures or long media messages

Photos customers send you

1

A plain GSM text holds 160 characters. Unicode, including many non-English letters, holds 70. Twilio bills each segment. A phone plan usually does not.

Use the real bill for the spare line. Leave it at the full plan price even if you already pay it for calls.

The savings are thin
The phone is cheaper, by a small margin. Build it when SMS cost is already a real line item, and keep the first version limited to text.
Twilio$43.57
Phone plan$35.00

$8.57 less on the phone

SMS sent
$31.58
SMS received
$9.27
MMS sent
$1.23
MMS received
$0.34
Twilio number
$1.15
Outbound SMS segments
2500

Keep these

Limits that survive a clever app

The app can be written. These constraints are the carrier, the operating system, and the law, and they stay after the code is finished.

The line can be cut

US carriers treat steady automated traffic on a consumer SIM as spam. T-Mobile in particular filters application-style texts. A quiet transactional thread to people who opted in is the use that survives. Blasts will burn the number.

Consent still applies

Leaving Twilio does not change TCPA duties in the US. You still need consent, identification, and a working STOP. The gateway has to implement opt-out, because the SIM will not.

RCS steps aside on that phone

Google Messages and RCS stay on your personal phone. The gateway handset uses your app as the texting app, so that phone sends classic SMS and MMS. That is the correct setup for a spare device.

One phone is one outage

A dead battery, a lost signal, an Android update, or a force-stop ends delivery. Watch the heartbeat and keep Twilio ready for the messages the phone refuses.

Rates: Twilio US SMS pricing, current as of October 2026, including the carrier fee table for AT&T, T-Mobile, and Verizon. Phone behavior: Android’s Telephony docs. Only the default SMS app receives SMS_DELIVER and WAP_PUSH_DELIVER, and only that app writes the SMS provider. Play policy: SMS permissions are for the default SMS handler. Existing open-source gateways such as SMSGate already prove the SMS and MMS device path; a Cyandex-shaped shim is the part worth writing yourself, so the product keeps its current webhook.