Platform operations manual
How to run the SimpleText messaging platform from its administration panel, step by step. October 2026 edition.
The message path
- Clientsends traffic in
- Route planthe client's set of routes
- Routepicks a trunk
- Trunkone supplier link
- Suppliercarrier you pay
- Mobile networkdelivers to the handset
Every message travels this path. The client pays the sell rate, the supplier is paid the buy rate, and the difference is your margin. For example, a sell rate of €0.0300 and a buy rate of €0.0100 leaves €0.0200 per SMS (illustrative figures).
About this manual
This manual shows an administrator how to run the SimpleText messaging platform independently: adding suppliers and clients, setting rates, testing routes, and watching traffic and billing.
- Who it is for: platform administrators using the Super Admin role.
- What it covers: business and wholesale messaging over SMPP and HTTP, with notes on voice OTP where the panel shows it.
- Where it comes from: the administration panel as it stood in October 2026. Screens that are not documented yet are listed under Not covered in this edition, and nothing about them is guessed.
How to use it. Read How the platform works once, slowly. After that, follow each procedure step by step, in the order written, every time. Use the operating checklist every morning, even when nothing seems wrong.
Examples are illustrative. Prices, codes and company names in examples are placeholders. Never copy an example price into a live rate.
How the platform works
Every message a client sends follows one chain of records down to a mobile network. SimpleText earns the gap between the price it charges the client (the sell rate) and the price the supplier charges SimpleText (the buy rate).
| Record | What it is | Where you manage it |
|---|---|---|
| Supplier | A carrier or aggregator you send traffic to and pay. | Suppliers |
| Trunk | One connection to a supplier, with a priority, a traffic share and a list of allowed networks. | Routing → Trunks |
| Route | One or more trunks plus a method for choosing between them: Priority (fixed order) or LCR (cheapest first). | Routing → Routes |
| Route plan | A bundle of routes assigned to a client. | Routing → Route Plans |
| Client | An account that sends traffic to you and pays you. | Clients |
Build bottom-up. Create the supplier first, then its trunk, route and route plan, and the client last. Each record points to the one below it.
All accounts bill On Submit: the balance is charged when a message is accepted, not when it is delivered.
Dashboard and menu map
The dashboard answers one question each morning: is traffic flowing, and is it making money? Read it from top to bottom.
Top bar (on every page)
Today's SMS, Active Binds, Delivery Rate and Volume. Active Binds shows connected over configured, for example 3/3. If fewer are connected, a client or supplier link is down.
Do not quote the Delivery Rate to anyone. It counts test messages and rejected sends. Build delivery evidence from exported SMS Logs and your own per-network test sheet instead.
Summary cards
SMS Today, Delivered Today, Revenue Today, Profit Today and Active Binds.
Today's Profit Breakdown
One line per client and supplier pair, with billed, delivered and failed counts, then revenue, cost and profit.
Quick Setup Wizard
Two shortcuts. Quick Supplier Setup runs Supplier → Trunk → Route → Route Plan in one flow. Quick Client Setup runs Client → Rate → Route Plan. Use them only after you understand the manual steps in SOP 1 and SOP 2.
Health tiles and alerts
Consecutive Failures, Low Balance Alerts, Channel Disconnects and Pending Invoices. Any number above 0 needs action today; see Troubleshooting. The Alerts and Notifications list below the tiles gives the detail behind each one.
Charts
Hourly Traffic (sent, delivered and failed over the last 24 hours) and Revenue, Cost and Profit over the last 14 days.
Menu map
| Menu | What it is for | Used in |
|---|---|---|
| Clients → All Clients / Add Client | Accounts that send traffic to you and pay you. | SOP 2 |
| Clients → Client Rates | Your sell price per country and network. | SOP 2, SOP 3 |
| Suppliers → All Suppliers / Add Supplier | Carriers you send traffic to and pay. | SOP 1 |
| Suppliers → Supplier Rates | Your buy price per country and network. | SOP 1, SOP 3 |
| Suppliers → API Connectors | HTTP API suppliers, grouped by region. | SOP 1 |
| Suppliers → Voice OTP | Voice call OTP: languages per prefix, audio, SIP and call logs. | Not covered yet |
| Routing → Trunks / Routes / Route Plans | The chain that carries traffic from client to supplier. | SOP 1 |
| Rates → Rate Management / Bulk Upload | Client and supplier rates in one list, and spreadsheet upload. | SOP 3 |
| Rates → MCC/MNC Database | The country and network codes every rate uses. | SOP 3 |
| Billing → Overview / Invoices / Payments | Revenue, cost, invoices and payments received. | SOP 5 |
| SMS Logs, DLR Queue, Bind Status | Message history, delivery receipts waiting, and live connections. | Testing, Troubleshooting |
| Testing → Test SMS / Test SMPP Bind / Test HTTP API | Send test messages and check connections. | Testing a route |
| SMS Inbox (MO), Channels, Reports, Campaigns, Translations, Notifications, Users, System | Other administration areas. | Not covered yet |
SOP 1: Add a supplier
A supplier is ready for live traffic only when it shows bound, has rates loaded, sits in a route plan, and has delivered test messages to real handsets.
Before you open the panel
- Signed agreement, and KYC exchanged with the supplier
- Their rate deck: country, network, MCC/MNC and price in EUR
- Their interconnect details: SMPP host, port, system ID, password, bind type and maximum TPS
- Confirmation that they have allowlisted your platform's public IP address
- Any prepayment made, with the amount noted
Steps
- Suppliers → Add Supplier. Fill in Company Information:
- Supplier Code: follow the naming rule.
- Company Name, Contact Person, Email (required) and Phone.
- Connection Type. Choose SMPP for a carrier bind, or HTTP API if they only offer a REST API.
- SMPP Connection Settings. Enter the SMPP Host, SMPP Port (default 2775), Username, Password and System ID exactly as the supplier sent them. Leave Inbound Supplier Mode off. It is for gateways that connect to you, not for normal carriers.
- Complete any remaining fields from the supplier's interconnect form, then save.
- Suppliers → All Suppliers. Wait for Status bound and Failures 0/20. Enter the prepaid balance you hold with them. If it does not bind within 5 minutes, see Troubleshooting.
- Suppliers → Supplier Rates → Add Rate (or Bulk Update for many rows). Add one row per network: supplier, destination, MCC/MNC, rate in EUR and effective date. Check every row against their deck.
- Routing → Trunks → Add Trunk.
- Trunk Name and Trunk Type. Keep traffic types apart: an OTP trunk for OTP, a marketing trunk for marketing. For an SMPP carrier choose a Local Direct type. Avoid SIM OTP unless platform support says it is right: a carrier trunk left on SIM OTP failed tests with "No active supplier found".
- Supplier: the one you just added.
- Priority: 1 is tried first.
- Percentage: 100, unless you are splitting traffic across suppliers.
- MCCMNC Allowed:
*for every network, or a comma list such as47001,47002to limit it.
- Routing → Routes → Add Route. Name it, choose a Routing Method, tick the trunk or trunks, and keep Active ticked.
- Priority uses the first available trunk in priority order. Best when quality matters most.
- LCR (least cost routing) picks the cheapest supplier rate first. Best when price matters most.
- Routing → Route Plans → Add Plan. Name it, tick the route or routes, and keep Active ticked. Tick Default Plan only on the one plan every new client should get.
- Test before selling. Follow Testing a route. Do not quote a destination to any client until you have seen it deliver to a real handset.
SOP 2: Add a client
A client goes live only after the contract is signed, cleared funds are on the account, every sell rate sits above its buy rate, and a test message has delivered and billed correctly.
Before you open the panel
- Signed client agreement, with the payment terms completed
- KYC documents: company registration, director ID and proof of address
- Traffic declaration: OTP, transactional or marketing; destinations; expected monthly volume; Sender IDs
- The client's source IP addresses for SMPP
- Cleared prepayment in the bank. New clients are prepaid only, with no credit, until they have a payment history.
Steps
- Clients → Add Client. Fill in Company Information:
- Client Code: follow the naming rule.
- Company Name, Contact Person, Email (required), Phone, Country and Address.
- SMPP/HTTP Settings.
- SMPP Username: unique to this client.
- SMPP Password: press the refresh icon to generate one. Never type a simple password.
- Allowed IP: always fill this in with the client's addresses. Left empty, anyone on the internet holding these credentials can bind.
- SMPP Port 2775 and System Type SMPP.
- Max TPS: the agreed throughput. The default is 100. Start a new client lower and raise it once traffic looks clean.
- API Token: generated automatically. The client sends it as
x-api-keyfor the HTTP API. If the client will use HTTP, set API Enabled to Yes.
- Complete the rest of the form, including the Route Plan the client will use, the billing type and the credit limit, then save.
- Clients → Client Rates → Add Rate. One row per network the client will use: client, destination, MCC/MNC, rate in EUR and effective date.
- Check the margin on every row. The sell rate minus the buy rate of the supplier in that client's route plan must be positive. For example, sell €0.0300 minus buy €0.0100 leaves €0.0200 per SMS.
- Balance and limit. Enter the cleared prepayment as the balance. Keep Limit at €0 for prepaid clients.
- Send credentials safely. Email the host, port and username. Send the password by a separate channel, such as a phone call or an encrypted message. Never put both in one plain email.
- Clients → All Clients. Wait for Bind BOUND once the client connects.
- Test. Follow Testing a route, then ask the client to send a few messages to their own handsets. Check SMS Logs, the delivery receipts, and that a line appears in Today's Profit Breakdown with the right revenue and cost.
- Go live. Confirm in writing to the client that traffic is open, with the date.
Testing a route
Test every route on a real handset before you sell it. A delivery receipt alone is not proof.
Check a supplier connection
On a supplier's own page, the Test button checks that the connection opens and shows its latency. It does not send a message. A pass here only means your platform can reach the supplier.
Send a test message
Choose the client's own Route Plan. The plan you pick in Test SMS must match the one shown for that client in the Route Plan column of Clients → All Clients. A plan that does not match, or a plan whose chain is broken, fails with "No active supplier found".
- Open Clients → All Clients and read the Route Plan column for the client you will test. To test a particular supplier, first give that client the route plan that contains the supplier's route, and note the old plan so you can switch back.
- Open Testing → Test SMS. Choose the Client. Leave Supplier blank to test the way real traffic runs. Pick a supplier only to force one, and then confirm in step 8 that it really carried the message.
- Choose the Route Plan from step 1.
- Destination Number: your own mobile in international format, with no + and no 00.
- Sender ID and Message: replace the default sample text with your own brand wording and a short neutral message, such as "SimpleText test: your code is 482913". Never use prize or promotional wording in a test. Operators and suppliers filter it as fraud.
- Check the characters, parts and estimated cost line, then press Send Test SMS (Full Validation).
- Read Validation Steps. Each line should be ticked: client, supplier bound, route plan, network found, rate, balance, and send.
- Confirm the message arrives on the handset. Then open SMS Logs and check that the Supplier column shows the supplier you expected, Send Result shows Success, and Deliver Result shows Delivered.
- Check the balances. The client's balance should fall by the sell rate and the supplier's by the buy rate.
Check margin before you quote
Under the test form, Route Simulator shows every route for a client and number, with its rates and margin. Choose a client, enter a number for the country, and press Simulate. A red row means the supplier costs more than the client pays. Use it to check margin and viability before quoting any country.
What a test does not prove
- Client login and price. Test mode bypasses client authentication and rate checks, so a pass does not prove a client's credentials, API setting or price. Use the Send Test SMS button on the client's own page for that.
- HTTP clients. Testing → Test HTTP API is a general-purpose request sender with a placeholder address. It is for trying a supplier's HTTP API, and it cannot test a client.
- Delivery receipts. Some suppliers are set to Force DLR, where the platform creates the receipt itself after a fixed time. A "Delivered" that appears at exactly that time may not be real. Only the handset proves delivery.
- Network names. Check that the Operator column in SMS Logs shows the network the number really belongs to. If numbers from different networks all show the same operator, per-network rates and results cannot be trusted. Contact platform support.
- Sender ID. Note what the handset shows. Some routes replace an alphabetic sender ID with a number. Tell clients, and record it in your sales sheet.
SOP 3: Change rates
Every supplier price change must be checked against the client prices that depend on it the same day. Otherwise you can end up paying more per SMS than you charge.
The panel keeps rate history. An old rate shows struck through with its end date, and the new one shows its effective date and the percentage change. The clock icon on each row opens the full history.
When a supplier changes its price
- Back up first: Supplier Rates → Export CSV.
- Add the new rate with the supplier's effective date. For many rows, use Bulk Update or Rates → Bulk Upload.
- Check that the old rate's end date equals the new rate's effective date, so there is no overlap and no gap.
- Look at the percentage change. Anything above 50% up or down: stop and re-check against the supplier's email. It is usually a misplaced decimal.
- Compare the new buy rate with every client sell rate for that network.
- Margin still positive: nothing more to do.
- Margin negative: raise the client rate (below), or stop the destination by removing that MCC/MNC from the trunk's MCCMNC Allowed list, or move the route to a cheaper supplier.
When you change a client's price
- Back up first: Client Rates → Export CSV.
- A decrease can take effect immediately.
- An increase needs written notice to the client's rates contact. Check the rate-change clause in the client agreement for the notice period.
- Add the new rate with the effective date that notice allows, then email the notice. Keep a copy.
Network codes. Every rate hangs on an MCC/MNC code from Rates → MCC/MNC Database. When a supplier lists a network you cannot find, add the code there before adding the rate.
SOP 4: Balances, top-ups and suspension
Money moves in two directions: clients prepay you, and you prepay suppliers. Both balances must stay above zero, or traffic stops. All accounts bill On Submit.
Client top-up
- Wait until the money shows as cleared in your bank account. Never top up from a screenshot of a transfer.
- Check the payment came from an account in the client's own company name.
- Add the amount to the client's balance and record it under Billing → Payments.
- Email the client a short receipt.
Supplier top-up
- Pay the supplier by bank transfer only, to details you have confirmed by phone with a known contact.
- Add the amount to the supplier's balance in All Suppliers once they confirm receipt.
- Top up before the balance runs low. Traffic to a supplier with no balance fails, and the client is still charged on submit.
Credit limit
Each client row shows a Balance and a Limit. Before relying on Limit, confirm with platform support exactly what it does: credit allowed below zero, or only a low-balance warning level. Until then, keep every client at €0.
Suspend a client
Use All Clients → ⋮ (Actions) when any of these happens:
- An undisputed invoice is more than 5 business days late.
- Traffic looks like artificially inflated traffic or spam.
- The client asks you to, or the contract ends.
Email the client the reason the same day. Suspension does not cancel what they owe.
SOP 5: Billing, invoices and payments
Run billing on the first business day of every month, for the month just ended, and check every invoice against the message logs before it goes out.
Monthly run
- Billing → Invoices → Generate. Choose the client and the period (the previous calendar month), then generate. Repeat for each client.
- Check each invoice's SMS count and amount against SMS Logs for that client and month. If they differ, fix the cause before sending.
- Email the invoice to the client's billing contact. Payment terms are in their agreement.
- Generate a supplier statement the same way for each supplier. When the supplier's own invoice arrives, compare the two. Raise any difference with the supplier in writing straight away.
- Record every payment received or made under Billing → Payments.
- Any invoice unpaid past its due date: see SOP 4, suspension.
Invoice list columns: Invoice #, Entity, Period, SMS, Amount, Due Date and Status. Filter by type (client or supplier) and by status (paid, pending, overdue).
Check before you trust the figures. Billing Overview must show your real traffic only. If it shows revenue or cost you did not generate, such as sample data from installation, ask platform support to clear it before you use or share that screen.
VAT. Ask your accountant how to invoice prepaid top-ups for VAT, and how the reverse charge applies to clients outside the UK. Record the answers here.
Operating checklist
Ten minutes each morning catches almost every problem before a client notices it.
Daily, in the morning
- Top bar: Active Binds shows every link connected
- Health tiles: Consecutive Failures, Low Balance Alerts and Channel Disconnects are all 0
- Alerts and Notifications: read and clear each one, or act on it
- Today's Profit Breakdown: no line with negative profit
- Hourly Traffic: failures are not rising against sent
- Supplier balances: none close to running out
Weekly, on Monday
- SMS Logs: sample 10 messages per active client and check the delivery receipts arrived
- Each client's traffic still matches what they declared: category, destinations and volume
- Margin check: every client rate is still above its supplier rate
- Export Client Rates and Supplier Rates as CSV and save them in your company folder
Monthly, on the first business day
- SOP 5: generate, check and send invoices, and compare supplier invoices
- Review Users, and remove anyone who no longer needs access
- Change the Super Admin password if anyone else has seen it
- Review each client's Max TPS and Allowed IP list
Troubleshooting
When two screens disagree, trust SMS Logs. It records each message, while the dashboard figures are summaries that can include test and rejected messages.
| Symptom | Likely causes | What to do |
|---|---|---|
| Supplier not bound | Wrong host, port or credentials. Your IP address is not allowlisted by the supplier. Supplier outage. | Re-check every field against their interconnect form. Check Bind Status. Email their support with your public IP address, the time and the error. |
| Client cannot bind | Their IP address is not in Allowed IP. Wrong username or password. The SMPP port is blocked by the server firewall. | Ask the client for the address they connect from and compare. Regenerate and resend the password if unsure. |
| Test or live send rejected with "No active supplier found" | The Route Plan chosen does not match the client's own plan. The client's plan has a broken chain (a route, trunk or supplier is missing or inactive). The trunk type does not suit the connection. The supplier shows bound but has no live session. | Read the client's Route Plan in Clients → All Clients and use that plan. Check each link in turn: plan, route, trunk, supplier. All must be Active, and the supplier must be bound. Press Disconnect on the supplier, wait 30 seconds, reconnect and retest. If it still fails, rebuild the chain, then give platform support the time of the failed send and the plan that works. |
| Rejected with "Client rate not found" | The client has no active sell rate for that network. | Add or activate the rate under Clients → Client Rates, with an effective date of today or earlier. |
| Supplier page shows "Connection failed: Host unreachable" | A short network fault, a change on the supplier's side, or a supplier outage. | Press Test again twice. If it keeps failing, run nc -vz <supplier host> <port> on the server that runs the platform. If that fails too, email the supplier the time of each failure and your public IP address, and ask whether their allowed-IP list changed. Record each time it happens. |
| Consecutive Failures or DLR Failure alert | Supplier balance at zero. Supplier rejecting the network or sender ID. Network not in the trunk's MCCMNC Allowed list. | Open SMS Logs, filter to failed and read the error codes. Check the supplier's balance. Send a test to your own handset on that network. |
| Message sent, no delivery receipt | The supplier does not return receipts for that network, or there is a backlog in the DLR Queue. | Wait a few minutes, then check the DLR Queue. Ask the supplier whether that network returns receipts, and tell the client before they ask. |
| Low Balance Alert | A client or supplier prepayment is nearly used. | Client: send a top-up request. Supplier: top up today. See SOP 4. |
| A profit line is negative | A supplier price rose above the client price. | See SOP 3: raise the client rate with notice, block the network, or reroute. |
| Channel Disconnects | A bind dropped and may not have come back. | Check Bind Status. If it stays down for 15 minutes, contact that party's support. |
Rebuild a route that will not work
If a route keeps failing with "No active supplier found" although the supplier is bound and rated, build a fresh chain instead of editing the old records.
- Routing → Trunks → Add Trunk. Use a new name and a Local Direct trunk type. Choose the supplier, Priority 1, Percentage 100, MCCMNC Allowed
*, and keep Active ticked. - Routing → Routes → Add Route. Use a new name and the Priority method. Tick the new trunk only, not the old one.
- Routing → Route Plans → Add Plan. Use a new name, tick the new route, leave Default Plan unticked, and keep Active ticked.
- Clients → All Clients → Edit. Set the client's Route Plan to the new plan. Write down the old value first.
- Run a test as described in Testing a route. If it fails, set the client back to its old plan.
Keep the old trunk, route and plan for a week of clean traffic before you delete them.
Naming, data and security
Clear names prevent the most expensive mistake on this platform: attaching a client to the wrong route.
Naming rule
Use one pattern for every record, and rename existing records to match if the panel allows it. Never give a client and a supplier the same company name and similar codes, because they read as one thing.
| Record | Pattern | Example |
|---|---|---|
| Client | C-COMPANY-NN | C-EXAMPLE-01 |
| Supplier | S-COMPANY-NN | S-EXAMPLE-01 |
| Trunk | T-SUPPLIER-TYPE | T-EXAMPLE-OTP |
| Route | R-DESTINATION-TYPE-METHOD | R-BD-OTP-PRIORITY |
| Route plan | P-CLIENT or P-TIER | P-EXAMPLE |
Data hygiene
- Keep one active rate per network per date. A new rate's start date equals the old rate's end date.
- Put TEST in the company name of every test account. Delete sample and placeholder records before go-live.
- Never route a client to a route plan whose supplier is the same company. Their traffic would loop back to them.
- Test and rejected messages count in the dashboard statistics. Export SMS Logs when you need figures for a partner.
Security
- Give each person their own login under Users. Nobody shares the Super Admin login. Turn on two-factor sign-in if System offers it.
- Fill Allowed IP on every client. Generate every password. Never invent one.
- Never send a password in the same message as its username. Never share screenshots that show passwords, API tokens or QR codes. Regenerate a token if it has been shared by mistake.
- Switch off portal access on any account that is only for testing.
- Keep the server firewall tight. Allow the SMPP port only from client and supplier addresses, serve the web panel over HTTPS (port 443), and never expose management or phone-system ports to the internet. Review the open ports after every change.
Not covered in this edition
These areas exist in the panel but are not documented here yet:
- SMS Inbox (MO), Channels, Reports, Campaigns, Translations, Notifications, Users and System
- Voice OTP: audio, SIP configuration and call logs
- RCS and other rich-messaging supplier types
- HTTP API connectors and the client-facing HTTP API reference
- The client Actions menu (edit, suspend, top-up) in full detail
Glossary
| Term | Meaning |
|---|---|
| A2P | Application-to-person: messages sent by a business system, not by a person. |
| AIT | Artificially inflated traffic: fake messages generated to earn money. |
| Allowed IP | The network addresses a client may connect from. Anything else is refused. |
| Bind | A live SMPP connection between two systems. |
| DLR | Delivery receipt: the network's report of whether a message arrived. |
| Force DLR | A setting where the platform creates the delivery receipt itself after a fixed time instead of waiting for the supplier's. |
| KYC | Know Your Customer: the company documents each side exchanges to prove who they are, such as registration, director ID, proof of address and a bank letter. |
| LCR | Least cost routing: try the cheapest supplier first. |
| MCC/MNC | Mobile country code plus mobile network code. Together they identify one network in one country. |
| MO | Mobile-originated: a message a phone user sends in. |
| On Submit | Charged when the message is accepted, not when it is delivered. |
| OTP | One-time passcode. |
| Priority routing | Try trunks in a fixed order. |
| Route | One or more trunks plus a method for choosing between them. |
| Route plan | The bundle of routes a client's traffic follows. |
| Sender ID | The name or number shown to the recipient as the sender. |
| SMPP | The standard protocol carriers use to exchange SMS. |
| System ID | The SMPP username. |
| TPS | Messages per second a connection may send. |
| Trunk | One supplier connection, with its priority, traffic share and allowed networks. |