> ## Documentation Index
> Fetch the complete documentation index at: https://docs.senderz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# SMS

> Wallet-gated SMS through Israeli carriers, with approved sender IDs, segment counting and STOP handling.

SMS in Senderz is platform-managed: you send through Senderz's own Israeli carrier accounts (019 primary, CommPeak failover) and the credit wallet pays the carrier. You don't plug in your own carrier API.

## The SMS credit wallet

Every tenant SMS — campaign, flow, test or transactional — is authorised against your **SMS credit wallet** before it reaches a carrier. This is a hard, non-negotiable gate.

<CardGroup cols={2}>
  <Card title="Top up" icon="wallet">
    Buy credit packs (500, 2,500, 10,000, 50,000). The balance is the source
    of truth; the transaction log is append-only.
  </Card>

  <Card title="Never negative" icon="shield">
    The wallet refuses to go negative under any race. A hold is placed at
    authorise time and settled on carrier acknowledgement.
  </Card>

  <Card title="Auto-refund" icon="rotate-left">
    On hard provider failure (rejected, invalid number, blacklist) the hold
    is refunded. Holds expire automatically after 5 minutes if a worker
    crashes.
  </Card>

  <Card title="Segment counting" icon="ruler">
    1 GSM segment = 160 chars, 1 Unicode segment = 67 chars. The wallet and
    the send worker count with the same library.
  </Card>
</CardGroup>

<Warning>
  The **only** exception is platform-paid auth OTP (2FA login codes), which
  Senderz covers. Every merchant-billed SMS goes through the wallet.
</Warning>

## Sender IDs

The From name on an SMS is a **Sender ID**. Because every tenant shares one carrier account, sender IDs are gated to prevent impersonation.

<Steps>
  <Step title="Use the platform pool">
    `SENDER`, `INFO` and `SHOP` are pre-registered and available to everyone
    with no request.
  </Step>

  <Step title="Request a branded ID">
    Request your brand as a sender ID (3–11 chars, `A-Za-z0-9-`). Clean names
    auto-approve instantly; names that look like a bank, government body,
    carrier or another tenant's active ID are held for operator review.
  </Step>

  <Step title="Send from it">
    Once active, pick it in the SMS composer. An unapproved branded From is
    rejected at send time — it never silently falls back.
  </Step>
</Steps>

See [Sender IDs](/en/deliverability/sender-ids) for the full request flow.

## Compliance

Marketing SMS to Israeli numbers is regulated. Senderz enforces it at the worker:

<AccordionGroup>
  <Accordion title="Explicit opt-in" icon="hand">
    An SMS to a number without recorded SMS opt-in
    (`smsConsent = subscribed`) is rejected. Transactional and OTP are
    exempt.
  </Accordion>

  <Accordion title="STOP handling" icon="ban">
    Inbound STOP from the carrier DLR webhook suppresses the number within
    seconds and appends to the consent log.
  </Accordion>

  <Accordion title="Quiet hours & Shabbat" icon="moon">
    Marketing SMS is blocked 20:00–08:00 local and during Shabbat (real
    Jerusalem sunset, with candle-lighting and havdalah offsets).
  </Accordion>
</AccordionGroup>

## Transactional & OTP SMS

Send transactional SMS via the [Public API](/en/api-reference/messages) (`POST /public/messages/sms`), or send one-time codes via the [OTP API](/en/api-reference/otp). Transactional SMS still goes through the wallet and the sender-ID gate, but skips consent, quiet hours and frequency caps because the recipient requested it.
