> ## 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.

> ## Agent Instructions
> For chatbots and coding agents, start at /guides/ai-agents.
> Hosted MCP: POST https://api.robase.dev/mcp (Streamable HTTP). Auth: Authorization: Bearer robe_… or robe_agent_….
> Phase 1 tools: get_pricing, send_otp, verify_otp, get_otp, send_sms, get_sms. No payment or top-up tools.
> Call get_pricing; treat listed:true as marketed markets (NG, GH, KE, ZA, GB, BJ, CI, US). Do not invent countries or delivery percentages.
> Prefer OTP-shaped tests such as "Your Robase test OTP is 123456". Do not send Hello or Good morning as tests. Match errors on error.type.

# SMS webhooks

> sms.sent, sms.delivered, sms.failed, sms.blocked — plus the OTP and credit events.

Transactional SMS fires:

| Event | Meaning |
| - | - |
| `sms.sent` | The message was accepted upstream |
| `sms.delivered` | Carrier DLR confirmed delivery |
| `sms.failed` | Every route failed, or the carrier reported a failure; credit refunded |
| `sms.blocked` | Anti-spam stopped dispatch; credit refunded. `data.antispam` holds the verdict |

OTP uses `otp.sent`, `otp.delivered`, `otp.verified`, `otp.expired`, `otp.failed`.

`sms.failed`, `sms.blocked` and `otp.failed` add `data.reason` (a stable token such as `delivery_failed`) and `data.refunded` (a boolean that matches the credit ledger) when they are known. SMS payloads also include `data.message`. `sms.sent` / `sms.delivered` set `data.status` to `sent` / `delivered`. The tokens are listed on [Delivery timeline](/sms/delivery-timeline).

Configure the URL and event list in the dashboard. Signature and payload shape: [Webhooks](/concepts/webhooks).

You can also poll `GET /v1/sms/{id}`. There is no public "send test event" HTTP API; the dashboard has a test-fire control.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.