# Robase > SMS and WhatsApp OTP plus transactional SMS API for Africa. Prepaid credits, multi-provider failover, Node/Go/PHP SDKs. > ## 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. - [Robase](https://docs.robase.dev/introduction.md): SMS OTP and transactional SMS for Africa. Ship a working integration in minutes. - [Quickstart](https://docs.robase.dev/quickstart.md): Send your first OTP or transactional SMS in a few minutes. - [Authentication](https://docs.robase.dev/concepts/authentication.md): API keys are Bearer tokens. Live keys start with robe_ plus 64 hex characters. - [Idempotency](https://docs.robase.dev/concepts/idempotency.md): Retry a POST safely. The same Idempotency-Key returns the original response for 24 hours. - [Rate limits](https://docs.robase.dev/concepts/rate-limits.md): Limits per API key, per workspace, per destination phone and prefix, plus a per-IP flood net. 429 includes Retry-After. - [Errors](https://docs.robase.dev/concepts/errors.md): A stable error.type plus prose in error.message. Match on type, never on message. - [Webhooks](https://docs.robase.dev/concepts/webhooks.md): Dashboard-configured HTTPS callbacks. HMAC-SHA256 over the raw body. - [SMS overview](https://docs.robase.dev/sms/overview.md): OTP and transactional SMS on one API, with per-country routing and prepaid credits. - [Sending SMS](https://docs.robase.dev/sms/sending.md): POST /v1/sms/send — phone_number, message, optional metadata. - [Delivery timeline](https://docs.robase.dev/sms/delivery-timeline.md): How to read the timeline on GET /v1/sms/{id} and GET /v1/otp/{id}: each hop, why it ended, and whether credits came back. - [Pricing](https://docs.robase.dev/sms/pricing.md): GET /v1/pricing — what a credit costs and how many credits each destination charges. No key required. - [Segments and encoding](https://docs.robase.dev/sms/segments-encoding.md): Transactional SMS is billed per SMS part. GSM-7 vs UCS-2 decides how many characters fit. - [Sender IDs](https://docs.robase.dev/sms/sender-ids.md): Send today as Robase or RAlerts. Request your own Sender ID from the dashboard for the countries we have opened; we file it with the carriers. - [Multi-country](https://docs.robase.dev/sms/multi-country.md): Eight priced markets. Country from the E.164 number. Canada is operational +1, not marketed. - [Routing and failover](https://docs.robase.dev/sms/providers.md): Per-country routes with a fallback on NG/KE/GH/ZA. GB/US/CA are single-route. - [SMS webhooks](https://docs.robase.dev/sms/webhooks.md): sms.sent, sms.delivered, sms.failed, sms.blocked — plus the OTP and credit events. - [OTP verification](https://docs.robase.dev/guides/otp-verification.md): Generate, deliver, and verify a one-time passcode over SMS or WhatsApp. - [WhatsApp OTP](https://docs.robase.dev/guides/whatsapp-otp.md): Deliver one-time codes over WhatsApp Authentication (copy-code) with workspace delivery modes and live credit pricing. - [Transactional SMS](https://docs.robase.dev/guides/transactional-sms.md): Receipts, alerts, and order updates on POST /v1/sms/send. - [AI agents](https://docs.robase.dev/guides/ai-agents.md): Connect Cursor, Claude, ChatGPT, or your own bot to Robase over hosted MCP. Same prepaid API, claim-safe instructions. - [DND compliance (Nigeria)](https://docs.robase.dev/guides/dnd-compliance.md): Transactional OTP and alerts are routed so Nigeria's NCC DND registry is not treated as a promo filter. - [Webhook security](https://docs.robase.dev/guides/webhook-security.md): Verify X-Robase-Signature as HMAC-SHA256 of the raw body. Prevent replays by checking event ids. - [SDKs](https://docs.robase.dev/sdks/overview.md): First-party Node.js, Go, and PHP clients. Same REST API underneath. - [JavaScript / TypeScript SDK](https://docs.robase.dev/sdks/javascript.md): @robasedev/sdk — Node 20+, Deno, Bun, and edge runtimes. Zero dependencies. - [Go SDK](https://docs.robase.dev/sdks/go.md): github.com/mantissatech/robase-sdk-go — standard library only, safe for concurrent use. - [PHP SDK](https://docs.robase.dev/sdks/php.md): robase/sdk — PHP 8.1+, ext-curl and ext-json. No framework dependency. - [API reference](https://docs.robase.dev/api-reference/introduction.md): REST API for SMS OTP and transactional SMS. Base URL https://api.robase.dev. - [API authentication](https://docs.robase.dev/api-reference/authentication.md): Authorization: Bearer robe_… on every /v1 request. - [API errors](https://docs.robase.dev/api-reference/errors.md): Error envelope and type reference for the REST API. - [Send an OTP](https://docs.robase.dev/api-reference/otp/send.md): POST /v1/otp/send — generate a code, charge credits, queue SMS and/or WhatsApp OTP delivery. - [Verify an OTP](https://docs.robase.dev/api-reference/otp/verify.md): POST /v1/otp/verify — constant-time check. Wrong codes with attempts left are 200 valid:false. - [Get an OTP](https://docs.robase.dev/api-reference/otp/get.md): GET /v1/otp/{id} — status and metadata. The code is never returned. - [Send an SMS](https://docs.robase.dev/api-reference/sms/send.md): POST /v1/sms/send — transactional message, same routing and credits as OTP. - [Get an SMS](https://docs.robase.dev/api-reference/sms/get.md): GET /v1/sms/{id} — delivery status for a transactional message. - [Changelog](https://docs.robase.dev/changelog.md): What shipped, dated from this repo's git history. Never invented. ## OpenAPI Specs - [openapi](/openapi.yaml) ## Optional - [Status](https://robase.dev/status) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.