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

# Test send

> The overview test uses real credits and sends to a real phone.

The overview at [robase.dev/app](https://robase.dev/app) is where you send a test. It is a real send. It uses credits from the workspace balance and it goes to the phone number you type. There is no sandbox send and no free test credit.

A new account starts at **0 credits**. There is no free trial. Top up before the first test. The first successful top-up adds **10 bonus credits**, once per account. What a test costs is the live rate on `GET /v1/pricing` for that destination. The overview reads that list. Do not quote a fixed price.

Marketing content is blocked with **403** `content_blocked`. The OTP test is a one-time code. A transactional SMS test has to read as a transactional message.

## Two controls on the overview

**Send yourself a test message** is the last setup step. It is shown until that test is delivered. You type a local number, the page builds E.164, and it sends.

* The usual test is an OTP. The SMS text is the same production OTP text, in the workspace language, using the app name on the workspace's first API key (or Robase when no key has a name).
* It becomes an SMS test when the workspace's onboarding intent is SMS and the workspace is not on the own-sender rule. New workspaces are on that rule, so their test stays an OTP until they have an approved sender ID.
* If you choose SMS and the workspace needs its own sender ID, the screen says SMS needs your own sender ID and offers **Send a test code instead**.
* The step is done when the message is **delivered**, not when it is merely queued. The card then leaves the overview.

**Send test OTP** is the smaller card under that. It stays on the overview. You type a full E.164 number and send. The hint on the page says it uses the workspace's first API key, and that the send is charged, logged, and webhook-fired. A 6 digit code and a 10 minute TTL are what that card sends unless the delivery mode asks you to pick a channel.

Both paths call the same send pipeline as the API. A refused test returns the same `error.type` a direct API call would, including `insufficient_credits`, `sender_id_required`, `content_blocked`, and `kyc_required`.

## Before you press send

* The number is a real handset, in E.164 (`+` and country code, no spaces).
* The balance covers the destination. If it does not, the test is refused and you top up on [Billing](https://robase.dev/app/billing).
* Transactional SMS needs the workspace's own approved sender ID. OTP uses Robase sender names.
* OTP and transactional SMS only.

## After you press send

The card shows the message id and the credit cost from the response. The row is in [OTP logs](https://robase.dev/app/otp-logs) or [SMS logs](https://robase.dev/app/sms-logs). Webhooks fire the same way they do for API traffic.

A failed first test is debugged from those logs. See [SMS logs and OTP logs](https://docs.robase.dev/dashboard/logs.md).


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