SMPP 3.4 Live at sim.smppsimulator.com:2775

Test your SMS code against a real SMSC. Not real phones.

Bind your SMPP client to our simulator and send messages like you would to a carrier. Every submit_sm lands in a shared inbox with the decoded text, raw bytes and every PDU field, and delivery receipts come back a second later.

Free for 7 days on any plan. Functional tests and load tests. Bound and sending in under two minutes. No carrier contract, no SIM cards, no per-message fees.

app.smppsimulator.com/inbox
SMPP Simulator Inbox
JD

Acme Mobile

Inbox

Clear inbox

SMPP connection

Host
sim.smppsimulator.com Copy
Port
2775 Copy
System ID
acme4821 Copy
Password
•••••••• Copy
2 new messages
  • ACME → +447700900123

    14:02:51

    Your verification code is 482913. It expires in 10 minutes.

  • ACME → +15555550100

    14:02:49

    Привет! Ваш заказ №10482 отправлен

  • Shop → +4915112345678

    14:02:47

    Your order #10482 has shipped and should arrive on Thursday. Track it at…

  • 40404 → +33612345678

    14:01:30

    Rappel : votre rendez-vous est demain à 9h30.

  • Bank → +15555550199

    14:00:12

    A payment of $42.00 to Coffee Co was approved […]

Why a simulator

Testing SMS against real carriers is slow, opaque and expensive

Every test costs money
Real carriers charge per message, so every CI run, retry loop and load test shows up on an invoice.
You can’t see what you sent
The phone shows the text. It doesn’t show the data_coding you picked, the UDH, or why the emoji turned into question marks.
Carrier sandboxes are slow
Weeks of paperwork for a test bind, shared credentials, and a support ticket every time you need a receipt.
You can’t load test a carrier
Send ten thousand messages to find your limits and you get a huge bill, throttled, or blocked. So most teams find their limits in production.

SMPP Simulator is an SMSC that behaves like a carrier on the wire and shows you everything it received. Nothing ever reaches a real phone.

How it works

From sign-up to first message in three steps

Swap a hostname and a password. Your code doesn’t know it’s talking to a simulator.

  1. 1

    Sign up with your email

    We email you a sign-in link. Your account gets its own SMPP system_id and password straight away.

  2. 2

    Point your client at us

    Bind as a transmitter, receiver or transceiver to sim.smppsimulator.com:2775. Any SMPP 3.4 library works, unchanged.

  3. 3

    Send, and watch it land

    Messages show up in the inbox within seconds. Ask for a receipt and a deliver_sm with stat:DELIVRD comes back.

send.*
import smpplib.client

client = smpplib.client.Client('sim.smppsimulator.com', 2775)
client.connect()
client.bind_transceiver(system_id='acme4821', password='••••••••')

client.send_message(
    source_addr='ACME',
    destination_addr='+447700900123',
    short_message=b'Your code is 482913',
    registered_delivery=True,  # receipt in ~1s
)
submit_sm_resp · message_id 8f1c2a9e · then deliver_sm stat:DELIVRD

The PDU inspector

See exactly what your client put on the wire

Encoding bugs hide on real phones. Here, each message opens to everything the SMSC received, so a wrong data_coding or a broken UDH is obvious in seconds.

Decoded text, the way the handset would show it
GSM 7-bit with the extension table, UCS-2, Latin-1, Cyrillic, Hebrew and the GSM data coding groups.
Raw bytes, UDH included
Copy the exact hex your client put on the wire, so you can diff it against what you meant to send.
Every submit_sm field
data_coding, esm_class, registered_delivery, TON/NPI, protocol_id, priority_flag and service_type, all labelled.
Long messages, put back together
Parts are joined from the UDH (8 or 16-bit reference) or SAR TLVs. A missing part is flagged, not hidden.

Inbox

Shop → +4915112345678

Received 3 Oct 2026 at 14:02:47 · 3 parts

Message

372 characters · GSM 7-bit

Your order #10482 has shipped and should arrive on Thursday. Track it at shop.example/t/10482 or reply STOP to opt out of updates…

Parts

Reference 0x2A

  1. Part 1 of 3

    delivered

    05 00 03 2A 03 01 D9 77 5D 0E 7A BF DD 65 50 3E 4D 07

  2. Part 2 of 3

    delivered

    05 00 03 2A 03 02 E8 E5 39 1D 06 B5 CB F3 79 F8 5C 06

  3. + 1 more part

submit_sm (part 1)

source_addr
Shop TON 5 · NPI 0
destination_addr
+4915112345678 TON 1 · NPI 1
data_coding
0x00 GSM 7-bit
esm_class
0x40 Starts with a user data header
registered_delivery
0x01 Receipt requested

Real delivery receipts

A standard deliver_sm with stat:DELIVRD, receipted_message_id and message_state, about a second after submit.

Live inbox

New messages appear while the page is open. Search by number, text or message ID.

One inbox for the whole team

Invite people by email as owners, admins or members. Everyone sees the same messages.

Realistic error codes

Wrong system_id, wrong password, too many binds: you get the same ESME_ status a carrier would send.

Credentials you control

Reset the SMPP password from the dashboard and clients on the old one are unbound within 30 seconds.

No passwords to forget

Sign in with a link we email you. Nothing to rotate, nothing to leak.

Protocol coverage

Behaves like a carrier on the wire

SMPP 3.4 over plain TCP. Here’s what happens to each PDU your client sends.

  • bind_transmitter · bind_receiver · bind_transceiver Supported

    Checked against your system_id and password. ESME_RINVSYSID, ESME_RINVPASWD or ESME_RBINDFAIL when they should be.

  • submit_sm Supported

    Stored in your inbox and answered with a message_id. Text from short_message or message_payload.

  • submit_multi Supported

    One inbox row per destination, all sharing a message_id.

  • data_sm Supported

    Same as submit_sm, with the text taken from message_payload.

  • deliver_sm (receipt) Supported

    Sent when registered_delivery asks for one: stat:DELIVRD plus receipted_message_id and message_state TLVs.

  • query_sm Supported

    Answered from the stored status.

  • enquire_link · unbind Supported

    Handled, so long-lived sessions stay up the way they would with a carrier.

  • cancel_sm · replace_sm Refused

    Refused with ESME_RCANCELFAIL / ESME_RREPLACEFAIL, because messages are delivered at once. Good for testing your error paths.

Performance testing

Load test your SMS application against an SMSC that answers like a carrier

You can’t fire ten thousand test messages at a real carrier. You can at ours. Find out how your application behaves under load before your customers do.

Find your sender’s real ceiling
Push your queue, workers and SMPP sessions as hard as they go. Every submit_sm gets a real submit_sm_resp, so you measure your whole pipeline, not a mock that returns instantly.
Concurrent sessions
Bind up to 10 sessions per login, as transmitters, receivers or transceivers, to test connection pools, windowing and how work is spread across binds.
Receipts at the same volume
Ask for receipts and every message sends a deliver_sm back about a second later. Your receipt consumer gets the same load as your sender.
Soak tests and reconnects
Keep sessions bound for hours with enquire_link. Reset the SMPP password mid-run and clients are unbound within 30 seconds, a real test of your reconnect logic.
Prove nothing was lost
When the run ends, compare what you sent with what arrived. Every message is in the inbox with its message_id, and long messages are checked part by part.
A flat price, however hard you push
No per-message fees. A load test that would cost hundreds on a carrier uses your plan’s monthly allowance instead.
load-test.log your client
$ ./load-test --binds 10 --messages 10000
connecting to sim.smppsimulator.com:2775
✓ 10 sessions bound (bind_transceiver)
✓ 10,000 submit_sm sent
✓ 10,000 submit_sm_resp   0 errors
✓ 10,000 deliver_sm        stat:DELIVRD
✓ inbox count matches     10,000 / 10,000

# throughput and latency: your numbers,
# measured on your side of the wire

SMSC stress-testing tools

Fire thousands of messages at an SMSC to measure the SMSC’s capacity. Useful if you run an SMSC. They don’t tell you how your own application copes.

SMPP Simulator

The SMSC on the other end of the wire. Your application, or any load generator you already use, sends to us, so you measure your throughput, sessions and receipt handling. The two work well together.

Messages from load tests count towards your plan’s monthly allowance. Planning a bigger run? Talk to us (hello@smppsimulator.com).

Pricing

Cheaper than one afternoon of carrier test traffic

Try either plan free for 7 days. After that it’s a flat price: no per-message fees, no setup, cancel any time.

Dev

For a developer wiring up an SMPP client.

$29 /month

Billed monthly

Start your free trial

7 days free, then $29/month

  • 5 numbers
  • 10,000 messages a month
  • Webhooks for every message and receipt
  • Delivery receipts and query_sm
  • Full PDU inspector: text, raw bytes, every field
  • Long messages joined automatically
Most popular

Team

For teams shipping SMS to production.

$99 /month

Billed monthly

Start your free trial

7 days free, then $99/month

  • 20 numbers
  • 100,000 messages a month
  • Scenario builder
  • Everything in Dev
  • Shared inbox with owners, admins and members
  • Invite your whole team by email

Prices in USD; applicable taxes are added at checkout. 7-day free trial and a 14-day money-back guarantee. Payments are handled by Paddle, our Merchant of Record. See the Terms of Service.

Need more numbers, higher volume or an on-premise SMSC? Talk to us (hello@smppsimulator.com).

FAQ

Questions, answered

How does the free trial work?

Every plan starts with 7 days free, with the full feature set. Sign up, bind your client and send as much as the plan allows. If it isn’t for you, cancel before the trial ends.

Do messages reach real phones?

Never. The simulator accepts every message, files it in your inbox and sends back a receipt. Nothing is forwarded to a carrier, so you can test with real-looking numbers safely.

Do I need to change my code?

No. Point your existing SMPP client at sim.smppsimulator.com:2775 with the system_id and password from your dashboard. If it can bind to a carrier, it can bind to us.

Which SMPP version and libraries are supported?

SMPP 3.4 over TCP. It works with any compliant client, including jSMPP, Cloudhopper, python-smpplib, node-smpp, Kannel and Jasmin.

Will my client get delivery receipts?

Yes, when registered_delivery asks for one. A deliver_sm with stat:DELIVRD arrives about a second later on the submitting session if it is a transceiver, or on any receiver bound with the same login.

How are long and Unicode messages handled?

Each part is stored with its own message_id and receipt, then shown as one message. Concatenation is read from the UDH (8 or 16-bit reference) or SAR TLVs. Text is decoded from data_coding: GSM 7-bit, UCS-2, Latin-1, Cyrillic, Hebrew and more.

Can I use it for load and performance testing?

Yes. Bind up to 10 sessions per login and send as fast as your application can. Every message gets a submit_sm_resp and, if you ask, a receipt, so you can measure your throughput, session handling and receipt processing under load. The simulator doesn’t throttle like a carrier, so what you measure is your application’s ceiling. Load-test messages count towards your monthly allowance. Contact us if you are planning a bigger run.

How is this different from an SMSC stress-testing tool?

A stress tester fires messages at an SMSC to measure the SMSC. SMPP Simulator is the SMSC, so it measures the application sending to it. They work together: point your existing load generator at us.

Can my whole team use one account?

Yes. Invite people by email as owners, admins or members. Everyone shares the same inbox and SMPP credentials, and only owners and admins can reset the password or clear the inbox.

Can I switch plans or cancel?

Any time, from your account settings. Yearly plans are 20% cheaper than paying monthly.

Your first test message is two minutes away

Try any plan free for 7 days. Sign up, copy your system_id, bind to sim.smppsimulator.com:2775, send.