SMPP

Bind directly over SMPP v3.4 for high-throughput, low-latency SMS delivery.

Timisha Solutions exposes an SMPP v3.4 interface for high-throughput and low-latency integrations. It is the right choice for OTP delivery, real-time transactional messages, and any system that needs guaranteed sub-500 ms delivery. If you only need occasional or bulk sends, the REST messages API is simpler to integrate.

Connection details

Point your SMPP client (client library or ESME) at the host below and bind with your team credentials. The port depends on whether you want a plain TCP or TLS-encrypted session.

Connection parameters
Host               timisha-solutions-api.salamu.co.ke
Port               2775 (plain)  /  2776 (TLS)
System ID          Your team code (e.g. ACME2024)
Password           Your API token (mbs_…)
System type        TRANSCEIVER
Interface version  0x34 (SMPP 3.4)

Where credentials come from

The system_id is your team code and the password is an API token (prefixed mbs_). Both come from your Timisha Solutions dashboard, the same token you would use for REST requests.

Binding

Use bind_transceiver to send and receive in a single session. A bind_transmitter bind is also accepted if you only need to submit messages and do not want to receive delivery receipts or inbound traffic on the same session.

Bind parameters
system_idreq
string

Your team code, e.g. ACME2024.

passwordreq
string

Your API token (mbs_…).

system_type
string

Leave empty.

interface_verreq
0x34

SMPP protocol version 3.4.

addr_ton
0x01

Type of number: International.

addr_npi
0x01

Numbering plan indicator: ISDN / E.164.

address_range
string

Leave empty.

bind_transceiver
bind_transceiver:
  system_id:     ACME2024
  password:      mbs_your_token_here
  system_type:   (leave empty)
  interface_ver: 0x34
  addr_ton:      0x01  (International)
  addr_npi:      0x01  (ISDN / E.164)
  address_range: (leave empty)

Sending messages

Submit each message with a submit_sm PDU. The source address is your approved sender ID (encoded as alphanumeric), and the destination is an E.164 number without the leading +. Set data_coding to 0x00 for GSM7 or 0x08 for UCS-2 (Unicode).

submit_sm
submit_sm:
  source_addr_ton:   0x05  (Alphanumeric)
  source_addr_npi:   0x00
  source_addr:       MYAPP              # your approved sender ID
  dest_addr_ton:     0x01  (International)
  dest_addr_npi:     0x01  (ISDN)
  destination_addr:  254712345678       # E.164 without leading +
  esm_class:         0x00
  data_coding:       0x00  (GSM7)  or  0x08  (UCS-2)
  registered_delivery: 0x01             # request DLR
  short_message:     Your OTP is 483920

Approved sender IDs only

The source_addr must be a sender ID that has already been approved for your team. Request one under Sender IDs before you start sending.

Delivery receipts

Set registered_delivery = 0x01 on the submit_sm to request a delivery receipt. The server sends a deliver_sm DLR with the status string in the short_message field.

# DLR short_message format
id:MSG123 sub:001 dlvrd:001 submit date:2605110900 done date:2605110900 stat:DELIVRD err:000

# stat values
DELIVRD — delivered to handset
UNDELIV — undeliverable (inactive number or network error)
REJECTD — rejected by carrier
EXPIRED — message TTL elapsed

Unicode and long messages

For Unicode content, set data_coding = 0x08 (UCS-2). Messages longer than a single segment are split into concatenated parts using SAR TLVs. Keep sar_msg_ref_num the same across all parts and increment sar_segment_seqnum per part. A single segment holds up to 153 GSM7 or 67 UCS-2 characters.

# UCS-2 (Unicode): data_coding = 0x08
# Concatenated long message (3 parts, SAR TLVs)
submit_sm[1]:
  esm_class:          0x40  (UDH present)
  sar_msg_ref_num:    42    (same for all parts)
  sar_total_segments: 3
  sar_segment_seqnum: 1
  short_message: <part 1 — max 153 GSM7 / 67 UCS-2 chars>

Session limits

Each team is subject to the following session and throughput limits. Keep the session alive with periodic enquire_link PDUs so it is not closed on idle timeout.

Session limits
Concurrent sessions
5

Maximum concurrent bound sessions per team.

Submit rate
50 TPS

Maximum submit_sm per second, per session.

Enquire link
30 s

Recommended enquire_link keepalive interval.

Idle timeout
60 s

Session is closed after this period of inactivity.

Validity (TTL)
24 h

Message validity period before it expires undelivered.