BroadNet
Documentation·/troubleshooting-saudi-delivery

Why are my SMS failing in Saudi Arabia?.

SMS to Saudi Arabia (KSA) usually fails because the sender ID is not registered with the CST (formerly CITC), the message reads as marketing sent outside permitted hours, or the number or encoding is wrong. KSA enforces strict sender-ID registration and content rules — unregistered or non-compliant traffic is blocked. Register the sender ID through a licensed route, respect marketing quiet hours, and format numbers as 9665XXXXXXXX.

5 min read·Updated May 2026Developer Hub

Overview

SMS to Saudi Arabia (KSA) usually fails because the sender ID is not registered with the CST (formerly CITC), the message reads as marketing sent outside permitted hours, or the number or encoding is wrong. KSA enforces strict sender-ID registration and content rules — unregistered or non-compliant traffic is blocked. Register the sender ID through a licensed route, respect marketing quiet hours, and format numbers as 9665XXXXXXXX.

Sender ID not registered with the CST

Saudi Arabia's regulator, the Communications, Space & Technology Commission (CST, formerly CITC), mandates that every A2P sender ID be registered, and STC, Mobily, and Zain KSA only deliver on that basis. An unregistered sender ID returns HTTP06 (Invalid Sender ID) or is dropped by the network. BroadNet handles CST registration — send only with the approved sender ID in sid. The parameter names (sid, mno, type) and HTTPxx error codes on this page are those of the legacy HTTP API (/websmpp); on the Bearer REST API (POST /sms/sendSms) the equivalents are senderId, destinationNumber and messageType (UNICODE for Arabic).

  • CST (ex-CITC) requires registered A2P sender IDs.
  • STC, Mobily, Zain KSA deliver on registered routes only.
  • Unregistered → HTTP06 or a network drop.
  • Send with the CST-approved sender ID in sid.

Marketing content and quiet hours

KSA separates transactional and promotional traffic and restricts marketing to permitted daytime hours, with promotional messages typically requiring a distinct registered sender ID and honoured opt-out. A promotional message sent under a transactional sender ID, or outside permitted hours, can be filtered. Keep transactional strictly informational, run marketing on an opted-in list, and use the correct sender ID for each stream.

  • Transactional and marketing are treated separately.
  • Marketing is limited to permitted daytime hours.
  • Promotional traffic needs a distinct sender ID + opt-out.
  • Don't send promo content under a transactional sender ID.

Number format and Arabic encoding

Put destination numbers in mno as country code 966 plus the national number, digits only, dropping any leading 0, +, or 00 — otherwise you get HTTP09 (Invalid Destination Address). For Arabic content use type=4 (70 characters per segment) or type=2 for Unicode; type=1 corrupts Arabic. Send UTF-8 and URL-encoded.

  • Format: 966 + national number, digits only (e.g. 9665XXXXXXXX).
  • Malformed numbers → HTTP09.
  • Arabic: type=4 (70 chars); Unicode: type=2; never type=1 for Arabic.
  • Body must be UTF-8 and URL-encoded.

Confirm delivery and balance

Check the DLR before assuming success: DELIVRD vs UNDELIV, matched by MessageId or BatchId, via your webhook or a status pull (legacy HTTP API: /websmpp/websmsstatus). If an entire batch fails to move, verify credits — HTTP18 is insufficient balance — and confirm the route and sender ID are approved for KSA.

  • Read the DLR Status (DELIVRD / UNDELIV).
  • Pull status on demand (legacy HTTP API: /websmpp/websmsstatus) if webhooks aren't set.
  • Whole-batch failure can be HTTP18 (insufficient credits).
  • Re-confirm the sender ID is CST-approved for KSA.
Test access · reply within one business day

Request test access and build with confidence.

We reply within one business day with test credentials. Then install the TypeScript SDK or call the REST API from any language, and send your first test message to your own number.

$npm install @broadnet/cpaas-sdk axiosready