Skip to content

Send SMS

Send a single SMS message to a mobile number.

Endpoint

POST https://api.galatext.com/api/sms/send

Headers

HeaderValueRequired
Content-Typeapplication/jsonYes
x-api-keyYour API keyYes

Request Body

ParameterTypeRequiredDescription
phoneNumberstringYesRecipient phone number in E.164 format (e.g., +254712345678)
messagestringYesMessage content (up to 1600 characters, split into segments)
senderIdstringNoSender ID (default: GALATEX, max 11 characters)
referencestringNoOptional client reference for reconciliation
webhookUrlstringNoCustom webhook URL for delivery report (overrides account default)

E.164 Phone Number Format

Country code + number, no leading zero or special characters:

CountryExample
Kenya+254712345678
Nigeria+2348012345678
Uganda+256701234567
Tanzania+255712345678
Rwanda+250781234567
Ghana+233501234567

Example Request

bash
curl -X POST https://api.galatext.com/api/sms/send \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "phoneNumber": "+254712345678",
    "message": "Your OTP is 482916. Valid for 10 minutes.",
    "senderId": "YOURBRAND"
  }'

JavaScript (fetch)

js
const response = await fetch('https://api.galatext.com/api/sms/send', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': process.env.GALATEXT_API_KEY
  },
  body: JSON.stringify({
    phoneNumber: '+254712345678',
    message: 'Your OTP is 482916. Valid for 10 minutes.',
    senderId: 'YOURBRAND'
  })
});

const data = await response.json();
console.log(data);

Python

python
import requests

response = requests.post(
    'https://api.galatext.com/api/sms/send',
    headers={
        'Content-Type': 'application/json',
        'x-api-key': 'YOUR_API_KEY'
    },
    json={
        'phoneNumber': '+254712345678',
        'message': 'Your OTP is 482916. Valid for 10 minutes.',
        'senderId': 'YOURBRAND'
    }
)

data = response.json()
print(data)

Response

Success (202 Accepted)

json
{
  "success": true,
  "data": {
    "messageId": "msg_abc123def456",
    "status": "PENDING",
    "phoneNumber": "+254712345678",
    "senderId": "YOURBRAND",
    "messageLength": 49,
    "segments": 1,
    "creditsUsed": 1,
    "creditsRemaining": 1499
  }
}
FieldDescription
messageIdUnique identifier for the message
statusCurrent status: PENDING, SENT, DELIVERED, FAILED
segmentsNumber of SMS segments (1 segment = 160 characters)
creditsUsedCredits deducted for this message
creditsRemainingRemaining credits in your account

Error Responses

json
{
  "success": false,
  "error": {
    "code": "INVALID_PHONE_NUMBER",
    "message": "The phone number provided is not valid. Use E.164 format.",
    "statusCode": 422
  }
}

Error Codes

StatusError CodeDescription
400BAD_REQUESTMalformed request body
401UNAUTHORIZEDMissing or invalid API key
402INSUFFICIENT_CREDITSAccount balance too low
422INVALID_PHONE_NUMBERPhone number not in E.164 format
422MESSAGE_TOO_LONGMessage exceeds 1600 characters
422INVALID_SENDER_IDSender ID not approved or invalid format
429RATE_LIMIT_EXCEEDEDToo many requests, slow down

Message Segments

CharactersSegmentsCredits
1–16011
161–32022
321–48033
481–1600Up to 10Up to 10

Using Unicode/emoji characters reduces per-segment capacity to 70 characters.

Best Practices

  • Always validate phone numbers before sending
  • Store the messageId for delivery tracking
  • Set up webhooks for automatic delivery report callbacks
  • Use a custom sender ID for brand recognition
  • Keep messages under 160 characters to minimize costs

Powered by Galatex Softwares