Apply for an account Skip to the summary Dashboard

Follow one message.

A wholesale SMS platform for carriers and aggregators. From submission to invoice, one message shows you how it works.

data_coding

Stays in your browser. Nothing is sent.

WIREsubmit_sm, byte for byte as Murasil's codec writes it

Three ways in.

It comes in over SMPP 3.4 on TCP or TLS, a REST API with an OpenAPI 3.1 spec, or the compose screen in the customer portal.

A submit_sm over the account's TPS limit gets ESME_RTHROTTLED, not a silent queue.

wired

WIREYour message as Murasil encodes it.

  1. command_length00 00 00 4165
  2. command_id00 00 00 04submit_sm
  3. sequence_number00 00 00 022
  4. source_addr4d 55 52 41 53 49 4c 00MURASIL
  5. destination_addr39 39 39 30 30 30 30 30 30 30 34 32 00999•••••042
  6. esm_class000x00
  7. data_coding000x00 GSM-7
  8. sm_length0d13
  9. short_messagec4 34 19 94 a6 83 c2 72 79 da 5e fe 01Did it arrive?

Seventy characters.

An Arabic SMS holds 70 characters. One more and it splits into parts of up to 67. Murasil detects the encoding, cuts the message and seals each part with its number.

05 00 03 A7 02 01

05 00 03 A7 02 02

عزيزي العميل، استلمنا طلبك رقم 4821 وسنرد خلال يوم عمل. شكراً لمراسلتنا، ويمكنك متابعة الطلب من حسابك في أي وقت.

Arabic is cursive, so the cut shows. The handset puts it back together.

WIREEach part's header. A7 is a sample: the real reference is random.A7 is a sample.

Yours fits in one. GSM-7 14/160

Accepted. Not yet arrived.

The session answers before any routing happens. Each submit_sm gets one message id back, and everything after hangs off that id.

WIREThe session's reply, in its real format. The id is a sample.

submit_sm_resp

command_status0x00000000ESME_ROK

message_id7f3a91c2e04b6d18

The prefix can lie.

The subscriber moved networks and kept the number. So Murasil asks before it routes: its cache first, then the lookup providers you configure. When one answers, routing and price can follow that network, not the prefix.

SIMA sample lookup on test network 001.

destination_addr999•••••042

portedtrue

mccmnc00102

001-01by prefix
001-02by lookup
  • wiredThe cache, plus routing and price on the result.
  • ENROUTELive lookups need your provider account. SS7 lookups need your gateway and a carrier link.

Thirteen gates, then a verdict.

Fixed checks run in order and the first block ends it. What passes is scored on weighted signals for SIM boxes, artificial traffic and templated spam. Then it passes, gets flagged, goes to review, or stops.

  1. 50 flag
  2. 75 quarantine
  3. 90 block
SIMscore 6 · allow

SIMallow

  1. account_active
  2. sender_registry
  3. sender_blacklist
  4. destination_block
  5. dnd
  6. country_block
  7. high_risk_number
  8. custom_rule
  9. content_filter
  10. anti_smishing
  11. velocity_capMT
  12. rate_limitMT
  13. daily_capMT

The gates are on. Your lists start empty.

  • wired The engine.
  • ENROUTE Threat feeds need sources you configure. External sender registries are supported and need your API keys.

64-bit SimHash groups near-duplicates when only the digits change. Inbound messages pass the same engine, minus the 3 rate gates. Default score thresholds are 50 flag, 75 quarantine, 90 block.

firewall_action is empty: nothing to report.

Seven ways to choose. One question: does it pay?

Rules rank suppliers by cost, delivery rate or share. Then the margin guard sends any route that would lose money to the back of the queue and logs the breach. Repeated breaches raise a fraud alert.

Priority order, huntstop, block rules and a default route. A grey-route guard can flag, block or reroute A2P traffic that takes an unauthorised path.

Dry-run any destination in the simulator first. Nothing is sent.

strategy highest_asr

Best delivery rate from the health snapshot.

ordered C A B D guarded A B D C

SIMSample suppliers and rates, per segment

Sample suppliers in the order the margin guard leaves them.
Supplier asr cost sell margin
Supplier A 94 0.0062 0.0100 +0.0038
Supplier B 91 0.0071 0.0100 +0.0029
Supplier D 88 0.0084 0.0100 +0.0016
Supplier C 97 0.0112 0.0100 margin_breach-0.0012

Pick a strategy

Did it arrive?

The money moves before the message.

balance 100.0000 · available 99.9900

reserved · 0.0100 × 1 segment · USD

0.0100

  • sent
  • delivered
  • attempts
  • any_dlr

Before it leaves, its price is held against the balance: sell rate times segments, in the account's currency. A hold is not a charge. Your billing option decides when it commits and whether it comes back: Sent, Delivered, Attempts or Any DLR.

SIMSample rate and balance

wired

The line dropped.

The message moved to the next route.

SIM

attempt=1 supplier=Supplier A result=failed error={:egress, :disconnected}

attempt=2 supplier=Supplier B result=ok

Murasil moves to the next candidate, writes a row for each attempt and re-costs the message against the supplier that actually carried it. With Delivered billing, if every candidate fails, the hold comes back in full and no charge is recorded.

Repeated failures open that supplier's circuit breaker.

wired

It arrived.

DELIVRD

Murasil means correspondent. It does not stop at arriving. It comes back with the report.

The receipt comes back from the supplier, is matched to the original message and returns to the customer over the SMPP session or an HMAC-SHA256 signed webhook. With Delivered billing, only now does the hold commit.

held → committed

WIREDelivery receipt, as sent on the SMPP session

DELIVRD

id:7f3a91c2e04b6d18 sub:001 dlvrd:001 submit date:261102000000 done date:261102000000 stat:DELIVRD err:000 text:

One row. One line. A number that holds up.

Rows group by country, network and currency. The number is sequential per company, and FX comes from your rate table. Rejected messages never reach the invoice. Then your partner's EDR file is matched against yours, and from a difference you open a dispute in one step.

  • DELIVRDInvoices, PDF, numbering and EDR reconciliation.
  • ENROUTEOnline payment and crypto payout integrations need your keys.

ref_number

MUR-2026-0004

SIMSample invoice

period 2026-10 · status draft

WHERE final_status != 'rejected' AND … GROUP BY country, mccmnc, currency

One sample invoice line, grouped by country, network and currency.
countrymccmncmessagessegmentssubtotal
XX 00102 1,205 1,311 13.1100
tax_amount0.0000

total_amountUSD

13.1100

TESTEnd-to-end test, 23 Oct 2026, simulated suppliers: 9,996 of 9,996 messages matched the expected route, rate and cost. Ledger difference per customer: 0.0000. Routable traffic only. It checks accounting, not capacity.

source_file

partner_edr_2026-10.csv

SIMSample rows

match_digits 7 · time_window_s 3600

Sample reconciliation against a partner EDR file.
our_destpartner_destmatch_statuscharge_deltaAction
999•••••017999•••••017matched
999•••••023999•••••023matched
999•••••026—only_ours
999•••••031999•••••031matched
—999•••••034only_partner
999•••••038999•••••038matched
999•••••039999•••••039matched
999•••••042999•••••042matched0.0100dispute

our_charge 0.0100partner_charge 0.0200charge_delta 0.0100category rate_mismatch

You open it, in one step, from the reconciliation.

Every step has a screen.

Fraud Review Queue: held messages, newest first, each with its destination (masked in this still), score and text, from fake parcel fees to account-lock scares, and Release, False positive and Reject actions on each.

status = 'pending'+0

Quarantine review

What the score holds back waits here for a person to decide.

SIMSample dataThe dashboard is in English for now.

Routing Rules screen: rules in priority order, each with its name, strategy, prefix filter and suppliers, from a block on premium-rate numbers to least cost, highest ASR, weighted, failover and round robin rules.

supplier_idSupplier B

Routing rules

Rules in priority order, with their strategies and suppliers.

SIMSample dataThe dashboard is in English for now.

Analytics screen: tiles for messages, delivery rate, revenue, cost and margin over seven days, then volume by channel, from SMS to email, as a bar chart and as a table with revenue and delivery rate per channel.

countIf(eff_status = 'delivered')+1

Analytics

Daily volume, delivery, revenue, cost and margin. Channel mix.

SIMSample dataThe dashboard is in English for now.

Profitability screen: totals for messages, revenue, cost and margin, then a margin tree from each customer down to its suppliers, with revenue, cost, margin and margin percent on every row.

client_charge - supplier_charge+0.0029

Profitability

Margin from customer to supplier, with roll-ups.

SIMSample dataThe dashboard is in English for now.

Every message leaves a trace.

The Trace Analyzer puts submit, route, supplier attempts and receipts on one timeline. Customer SMPP sessions export as PCAP for Wireshark.

WIREThis message in Arabic (.pcap, 961 bytes)

A synthetic session built with Murasil's own codec.

DELIVRDwired today

  • SMPP 3.4 in and out
  • REST API with OpenAPI 3.1
  • Customer portal
  • Number lookup cache
  • Firewall and scoring
  • Routing, failover and the simulator
  • Hold, commit and refund
  • Invoices and PDF
  • EDR reconciliation
  • Trace Analyzer and PCAP

ENROUTEsupported integrations and what each one needs

  • HLR and MNP lookups: a lookup provider account
  • SS7 lookup: your MAP gateway and a carrier link
  • WhatsApp, Viber and RCS: each network's business credentials
  • Online payments (Stripe, PayPal, Authorize.Net): a merchant account
  • USDT supplier payouts: an exchange API key
  • Sender-ID registries (TCR, DLT, iconectiv): registry API keys
  • Threat feeds: sources you configure