curl --request POST \
--url https://ugatext.com/api/v1/sms/schedule \
--header 'Client-ID: <api-key>' \
--header 'Client-Secret: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "+256700000000",
"message": "Reminder: Scheduled appointment tomorrow at 10:00 AM.",
"scheduled_at": "2026-12-01T09:00:00.000Z",
"sender_id": "UGATEXT",
"recurrence": "none"
}
'import requests
url = "https://ugatext.com/api/v1/sms/schedule"
payload = {
"to": "+256700000000",
"message": "Reminder: Scheduled appointment tomorrow at 10:00 AM.",
"scheduled_at": "2026-12-01T09:00:00.000Z",
"sender_id": "UGATEXT",
"recurrence": "none"
}
headers = {
"Client-ID": "<api-key>",
"Client-Secret": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Client-ID': '<api-key>',
'Client-Secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '+256700000000',
message: 'Reminder: Scheduled appointment tomorrow at 10:00 AM.',
scheduled_at: '2026-12-01T09:00:00.000Z',
sender_id: 'UGATEXT',
recurrence: 'none'
})
};
fetch('https://ugatext.com/api/v1/sms/schedule', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://ugatext.com/api/v1/sms/schedule",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => '+256700000000',
'message' => 'Reminder: Scheduled appointment tomorrow at 10:00 AM.',
'scheduled_at' => '2026-12-01T09:00:00.000Z',
'sender_id' => 'UGATEXT',
'recurrence' => 'none'
]),
CURLOPT_HTTPHEADER => [
"Client-ID: <api-key>",
"Client-Secret: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://ugatext.com/api/v1/sms/schedule"
payload := strings.NewReader("{\n \"to\": \"+256700000000\",\n \"message\": \"Reminder: Scheduled appointment tomorrow at 10:00 AM.\",\n \"scheduled_at\": \"2026-12-01T09:00:00.000Z\",\n \"sender_id\": \"UGATEXT\",\n \"recurrence\": \"none\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Client-ID", "<api-key>")
req.Header.Add("Client-Secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://ugatext.com/api/v1/sms/schedule")
.header("Client-ID", "<api-key>")
.header("Client-Secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"+256700000000\",\n \"message\": \"Reminder: Scheduled appointment tomorrow at 10:00 AM.\",\n \"scheduled_at\": \"2026-12-01T09:00:00.000Z\",\n \"sender_id\": \"UGATEXT\",\n \"recurrence\": \"none\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://ugatext.com/api/v1/sms/schedule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Client-ID"] = '<api-key>'
request["Client-Secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": \"+256700000000\",\n \"message\": \"Reminder: Scheduled appointment tomorrow at 10:00 AM.\",\n \"scheduled_at\": \"2026-12-01T09:00:00.000Z\",\n \"sender_id\": \"UGATEXT\",\n \"recurrence\": \"none\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message_id": "sched_1760425200000_1a2b3c4d",
"status": "scheduled",
"recipient": "+256700000000",
"sender_id": "UGATEXT",
"scheduled_at": "2023-11-07T05:31:56Z",
"recurrence": "none",
"segments": 1,
"cost_units": 0,
"estimated_cost_ugx": 0,
"cost_ugx": 0,
"currency": "UGX",
"mode": "sandbox"
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}Schedule an SMS Broadcast for Future Delivery
curl --request POST \
--url https://ugatext.com/api/v1/sms/schedule \
--header 'Client-ID: <api-key>' \
--header 'Client-Secret: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "+256700000000",
"message": "Reminder: Scheduled appointment tomorrow at 10:00 AM.",
"scheduled_at": "2026-12-01T09:00:00.000Z",
"sender_id": "UGATEXT",
"recurrence": "none"
}
'import requests
url = "https://ugatext.com/api/v1/sms/schedule"
payload = {
"to": "+256700000000",
"message": "Reminder: Scheduled appointment tomorrow at 10:00 AM.",
"scheduled_at": "2026-12-01T09:00:00.000Z",
"sender_id": "UGATEXT",
"recurrence": "none"
}
headers = {
"Client-ID": "<api-key>",
"Client-Secret": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Client-ID': '<api-key>',
'Client-Secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '+256700000000',
message: 'Reminder: Scheduled appointment tomorrow at 10:00 AM.',
scheduled_at: '2026-12-01T09:00:00.000Z',
sender_id: 'UGATEXT',
recurrence: 'none'
})
};
fetch('https://ugatext.com/api/v1/sms/schedule', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://ugatext.com/api/v1/sms/schedule",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => '+256700000000',
'message' => 'Reminder: Scheduled appointment tomorrow at 10:00 AM.',
'scheduled_at' => '2026-12-01T09:00:00.000Z',
'sender_id' => 'UGATEXT',
'recurrence' => 'none'
]),
CURLOPT_HTTPHEADER => [
"Client-ID: <api-key>",
"Client-Secret: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://ugatext.com/api/v1/sms/schedule"
payload := strings.NewReader("{\n \"to\": \"+256700000000\",\n \"message\": \"Reminder: Scheduled appointment tomorrow at 10:00 AM.\",\n \"scheduled_at\": \"2026-12-01T09:00:00.000Z\",\n \"sender_id\": \"UGATEXT\",\n \"recurrence\": \"none\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Client-ID", "<api-key>")
req.Header.Add("Client-Secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://ugatext.com/api/v1/sms/schedule")
.header("Client-ID", "<api-key>")
.header("Client-Secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"+256700000000\",\n \"message\": \"Reminder: Scheduled appointment tomorrow at 10:00 AM.\",\n \"scheduled_at\": \"2026-12-01T09:00:00.000Z\",\n \"sender_id\": \"UGATEXT\",\n \"recurrence\": \"none\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://ugatext.com/api/v1/sms/schedule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Client-ID"] = '<api-key>'
request["Client-Secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": \"+256700000000\",\n \"message\": \"Reminder: Scheduled appointment tomorrow at 10:00 AM.\",\n \"scheduled_at\": \"2026-12-01T09:00:00.000Z\",\n \"sender_id\": \"UGATEXT\",\n \"recurrence\": \"none\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message_id": "sched_1760425200000_1a2b3c4d",
"status": "scheduled",
"recipient": "+256700000000",
"sender_id": "UGATEXT",
"scheduled_at": "2023-11-07T05:31:56Z",
"recurrence": "none",
"segments": 1,
"cost_units": 0,
"estimated_cost_ugx": 0,
"cost_ugx": 0,
"currency": "UGX",
"mode": "sandbox"
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}{
"success": false,
"error": {
"code": "INVALID_REQUEST",
"message": "Authentication failed. Provide a valid 'Client-ID' and 'Client-Secret' in the request headers."
}
}Authorizations
Your UgaText Client-ID (e.g. uga_...). Accepted header aliases: X-Client-ID, or combined in Authorization: Bearer : / X-API-Key: :.
Your UgaText Client-Secret (e.g. sk_live_...). Accepted header alias: X-Client-Secret.
Body
Recipient phone number in E.164 format (accepted aliases: "phone", "recipient", "recipients").
"+256700000000"
SMS text body (accepted aliases: "text", "body").
"Reminder: Scheduled appointment tomorrow at 10:00 AM."
Future ISO-8601 timestamp for delivery (accepted aliases: "send_at", "scheduledFor", "scheduledAt").
"2026-12-01T09:00:00.000Z"
Approved alphanumeric Sender ID (defaults to "UGATEXT").
"UGATEXT"
Repeat interval for the scheduled message. Only "none", "daily", "weekly", and "monthly" are supported.
none, daily, weekly, monthly Response
Message scheduled successfully
true
"sched_1760425200000_1a2b3c4d"
"scheduled"
"+256700000000"
"UGATEXT"
none, daily, weekly, monthly "none"
1
0
0
0
"UGX"
live, sandbox "sandbox"

