
HTTP API
Send SMS from your app
POST /v1/messages with a TEST key. The dashboard uses that same path. Open the message id when you need the delivery report — a 200 is only acceptance.
POST /v1/messages
{
"to": "+233200000001",
"sender_id": "TAYSEND",
"message": "Hello from Taysend",
"type": "transactional"
}QUEUED — poll the message id for the DLR
One send path
The console and POST /v1/messages reserve, queue, and settle the same way.
Ghana prefixes
MTN, Telecel, and AT from the number. Other countries only after we add the route.
Bearer keys
sms_test_ and sms_live_. Shown once. Stored as SHA-256.
Delivery reports
HTTP 200 means we accepted the send. Delivered, failed, or expired comes later on the DLR.
TEST first
Mint a key and send to a simulated number
- RESTful JSON under /v1
- Authorization: Bearer sms_test_…
- Idempotency-Key on send
- Sandbox numbers with known outcomes
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"
}'cURL, Node, Python, PHP
No official SDK. Call the API with a Bearer key and JSON.
cURL
Quickstart
Node
fetch
Python
HTTP
PHP
HTTP