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

# DND compliance (Nigeria)

> Send transactional SMS without getting blocked by the Do Not Disturb registry.

Nigeria's **Do Not Disturb** registry is a list of numbers that have opted out of unsolicited messaging — activated by dialing `2442` on any MTN/Airtel/Glo/9mobile SIM. Sends to DND'd numbers from unwhitelisted senders are blocked at the carrier level and return `dnd_blocked`.

Transactional SMS is allowed on DND'd numbers **if the sender ID is whitelisted for that use case**. This guide walks through compliance.

## Am I affected?

Yes, if:

* You're sending to Nigerian numbers (`+234…`).
* You're sending **marketing** messages (promos, campaigns, offers).
* You're sending **transactional** messages with a sender ID that hasn't been whitelisted.

If your DND block rate is above 5%, you need to act.

## Categories

NCC differentiates by use case:

| Category                    | What                                              | DND implications                                            |
| --------------------------- | ------------------------------------------------- | ----------------------------------------------------------- |
| **Full DND**                | User blocks all non-urgent SMS                    | Only emergency + regulated transactional (banks) go through |
| **Partial DND**             | User blocks specific categories                   | Category-level filtering                                    |
| **Transactional whitelist** | Your sender ID registered for a specific use case | Sends of that type bypass DND                               |

## Getting whitelisted

<Steps>
  <Step title="Register your sender ID">
    Via `POST /v1/sender-ids` with complete compliance metadata (see [Sender IDs](/sms/sender-ids)). The `use_case` field matters — be specific ("ride booking confirmations and status updates" beats "customer communications").
  </Step>

  <Step title="Submit a sample message">
    The regulator checks your `sample_message` against the declared use case. Mismatch = rejection.
  </Step>

  <Step title="We submit to NCC">
    Our compliance team packages your registration and files it. Typical turnaround: 5–7 business days.
  </Step>

  <Step title="Test post-approval">
    Once `status: "approved"`, send to a known DND'd test number and confirm `sms.delivered` fires.
  </Step>
</Steps>

## While you wait for approval

Your sender ID works for **non-DND** numbers immediately (while `pending`). The block only applies to DND'd numbers.

Handle the rejection gracefully:

```typescript theme={null}
try {
  await pm.sms.send({ to, from: 'MYAPP', body });
} catch (e) {
  if (e.type === 'dnd_blocked') {
    // Fallback to email + push.
    await notifyViaEmail(user.email, body);
    await sendPush(user.device_id, body);
  }
}
```

## What gets you rejected

<AccordionGroup>
  <Accordion title="Vague use cases">
    ❌ "Customer communications"
    ✅ "Transactional: booking confirmations, ride arrival ETAs, and payment receipts"
  </Accordion>

  <Accordion title="Marketing disguised as transactional">
    If your use case says "booking confirmations" but you send "50% off this weekend!", you'll be suspended and face fines.
  </Accordion>

  <Accordion title="Sender IDs that impersonate regulated entities">
    `CBN`, `GTBANK`, `MTN` — anything that looks like it's from a bank, regulator, or mobile operator will be auto-rejected.
  </Accordion>

  <Accordion title="Mismatched sample message">
    Sample shows `"Promo: 50% off!"` but use case says "transactional" — rejected.
  </Accordion>
</AccordionGroup>

## Monitoring

In the dashboard, **SMS → Analytics** breaks down rejections by reason. Track `dnd_blocked` rate over time:

```typescript theme={null}
const carriers = await pm.sms.analytics(7);
// Filter logs for dnd_blocked:
const blocked = await pm.sms.list({ limit: 100 });
const dnd = blocked.data.filter(m => m.status === 'rejected');
```

A spike in DND blocks usually means one of:

1. Your sender ID's whitelist was revoked (compliance team will email you).
2. A new batch landed on a list with a high DND density (audit how you sourced the list).
3. NCC tightened criteria (we'll notify affected customers).

## Fines & enforcement

NCC can fine bulk senders up to **₦2,000,000 per violation** for sending marketing messages to DND'd numbers. Keep a clear line between transactional and marketing; use separate sender IDs for each (e.g. `MYAPP` for transactional, `MYAPP-MK` for marketing) so one incident doesn't contaminate the other.

## Other countries

DND registries exist across the continent but enforcement varies:

| Country       | Registry                | Our sender-ID handling                |
| ------------- | ----------------------- | ------------------------------------- |
| Nigeria       | 2442                    | Per-use-case whitelist                |
| Ghana         | NCA DND                 | Sender registration covers most cases |
| Kenya         | Premium Rate block list | Less restrictive for transactional    |
| Côte d'Ivoire | No formal registry      | —                                     |

For marketing sends, **always** include a `STOP` instruction at the end:

```
Shuttlers: Weekend 20% off! Book: shut.ng/promo. STOP to opt out.
```
