Get started
Introduction
Create a TEST key, POST to a simulated Ghana number, then GET the message id. LIVE uses the same states. HTTP 200 means we accepted the request. Delivery is a later report.
TEST keys
Shown once. They cannot send LIVE.
Ghana routes
Network from the prefix: MTN, Telecel, AT.
Idempotency
Same key and body returns the first response.
Message id
Poll GET /v1/messages/:id for the DLR.
Quick start
- 1
Get API key
Register, then mint sms_test_ in the console.
- 2
Send a request
POST /v1/messages with an Idempotency-Key.
- 3
Check status
GET /v1/messages/:id. QUEUED is not DELIVERED.
export API_URL=https://api.taysend.com
export KEY=sms_test_your_key
curl -X POST "$API_URL/v1/messages" \
-H "Authorization: Bearer $KEY" \
-H "Idempotency-Key: 11111111-1111-1111-1111-111111111111" \
-H "Content-Type: application/json" \
-d '{
"to": "+233200000001",
"sender_id": "TAYSEND",
"message": "Hello from Taysend",
"type": "transactional"
}'Sample response
Accepted{
"id": "msg_01hx...",
"status": "QUEUED",
"environment": "TEST",
"to": "+233200000001"
}200 here is acceptance. Delivery waits on a DLR.
Try the sandbox
Send a TEST message from this page. Same reserve and inspect path as LIVE — the last hop is simulated, so you can force each outcome. No API key required.
Sandbox
Simulated TEST send. No API key. No real SMS.
Response
{
"id": "msg_…",
"status": "QUEUED",
"environment": "TEST"
}Simulated numbers
| Number | Outcome |
|---|---|
| +233200000001 | delivered |
| +233200000002 | failed |
| +233200000003 | expired |
| +233200000004 | rejected |
| +233200000005 | delayed (delivered after ~3s) |
| +233200000006 | timeout (UNSAFE_TO_RETRY — no failover) |