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

# Sending SMS

> POST /v1/sms/send — phone_number, message, optional metadata.

```bash theme={null}
curl -X POST https://api.robase.dev/v1/sms/send \
  -H "Authorization: Bearer robe_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "+2348012345678",
    "message": "Your order #12345 has shipped.",
    "metadata": { "order_id": "12345" }
  }'
```

| Field | Required | Notes |
| - | - | - |
| `phone_number` | yes | E.164 |
| `message` | yes | Max six SMS segments (see [segments](/sms/segments-encoding)) |
| `metadata` | no | Arbitrary JSON object, returned on GET |

## Response

`200` with `status: "pending"`. Delivery is asynchronous.

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "phone_number": "+2348012345678",
  "country_code": "NG",
  "credit_cost": 1,
  "segments": 1,
  "encoding": "gsm7",
  "sanitized": false,
  "status": "pending",
  "created_at": "2026-08-29T10:20:00Z"
}
```

Poll `GET /v1/sms/{id}` or wait for `sms.sent` / `sms.delivered` / `sms.failed` / `sms.blocked`.

Status path: `pending` → `sent` → `delivered`, or `failed`, or `blocked`. The GET response also carries a `timeline` of each hop with a reason and a refund flag; see [Delivery timeline](/sms/delivery-timeline).

## OTP bodies

OTP messages are composed by Robase (workspace language, or `language` on the send). You do not pass a `message` on `POST /v1/otp/send`.

## Not in this API

There is no `template_id`, no scheduled send, and no `/v1/sms/batch`. Loop with idempotency keys if you need many destinations.


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