API Integration

REST API v1 — Live

Integrate SMS Into
Any Application in Minutes

The Yoola SMS REST API lets you send bulk or individual SMS, receive inbound messages, check delivery reports, and manage contacts — all from your own application using simple HTTP requests.

  • RESTful JSON API — works with any language
  • API key included free with every account
  • Full code samples: PHP, Python, JS, Java, cURL
  • Webhooks for delivery reports & inbound SMS
  • Sandbox/test mode for development
Get Your Free API Key View Code Samples
https://yoolasms.com/api/v1/
Authorization: Bearer YOUR_API_KEY
{"status": "success", "message_id": "YL-20250115-001", "delivered": 500}

From Zero to First SMS in 4 Steps

1
Create Account

Sign up free at yoolasms.com. Takes under 2 minutes.

2
Copy Your API Key

Go to Dashboard → API Key. Copy your unique key.

3
Make Your First Call

Use our code sample below to send your first SMS via API.

4
Go Live

Top up with Mobile Money and start sending at scale.

Send SMS in Your Language

Copy and paste — replace YOUR_API_KEY_HERE with your actual key.
sender is optional: use your own approved sender ID (letters and numbers only). Leave it out, or use YoolaSMS, if you don't have one.

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://yoolasms.com/api/v1/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "phone": "256704487563,256712345678",
    "message":"Your Message",
    "sender": "YoolaSMS",
    "api_key": "YOUR_API_KEY_HERE"
  }',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json'
  ),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
                
# Yoola SMS API - Send SMS (cURL)
curl --location 'https://yoolasms.com/api/v1/send' \
--header 'Content-Type: application/json' \
--data '{
  "phone": "256704487563,256712345678",
  "message": "Your Message",
  "sender": "YoolaSMS",
  "api_key": "YOUR_API_KEY_HERE"
}'
# Yoola SMS API - Send SMS (Python)
import requests
import json

url = "https://yoolasms.com/api/v1/send"
payload = json.dumps({
  "phone": "256704487563,256712345678",
  "message": "Your Message",
  "sender": "YoolaSMS",
  "api_key": "YOUR_API_KEY_HERE"
})
headers = {'Content-Type': 'application/json'}

response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
// Yoola SMS API - Send SMS (Axios)
const axios = require('axios');

let data = JSON.stringify({
  "phone": "256704487563,256712345678",
  "message": "Your Message",
  "sender": "YoolaSMS",
  "api_key": "YOUR_API_KEY_HERE"
});

let config = {
  method: 'post',
  url: 'https://yoolasms.com/api/v1/send',
  headers: { 'Content-Type': 'application/json' },
  data : data
};

axios.request(config)
.then((response) => { console.log(JSON.stringify(response.data)); })
.catch((error) => { console.log(error); });
# Yoola SMS API - Send SMS (Ruby)
require "uri"
require "json"
require "net/http"

url = URI("https://yoolasms.com/api/v1/send")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request.body = JSON.dump({
  "phone" => "256704487563,256712345678",
  "message" => "Your Message",
  "sender" => "YoolaSMS",
  "api_key" => "YOUR_API_KEY_HERE"
})

response = https.request(request)
puts response.read_body
// Yoola SMS API - Send SMS (Java - OkHttp)
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, 
    "{\n  \"phone\": \"256704487563,256712345678\",\n  \"message\": \"Your Message\",\n  \"sender\": \"YoolaSMS\",\n  \"api_key\": \"YOUR_API_KEY_HERE\"\n}");
Request request = new Request.Builder()
    .url("https://yoolasms.com/api/v1/send")
    .method("POST", body)
    .addHeader("Content-Type", "application/json")
    .build();
Response response = client.newCall(request).execute();
// Yoola SMS API - Send SMS (Go)
package main
import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {
    url := "https://yoolasms.com/api/v1/send"
    payload := strings.NewReader(`{
        "phone": "256704487563,256712345678",
        "message": "Your Message",
        "sender": "YoolaSMS",
        "api_key": "YOUR_API_KEY_HERE"
    }`)

    req, _ := http.NewRequest("POST", url, payload)
    req.Header.Add("Content-Type", "application/json")

    res, _ := http.DefaultClient.Do(req)
    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)
    fmt.Println(string(body))
}
// Yoola SMS API - Send SMS (C#)
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://yoolasms.com/api/v1/send");
var content = new StringContent("{\r\n  \"phone\": \"256704487563,256712345678\",\r\n  \"message\": \"Your Message\",\r\n  \"sender\": \"YoolaSMS\",\r\n  \"api_key\": \"YOUR_API_KEY_HERE\"\r\n}", null, "application/json");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
// Yoola SMS API - Send SMS (Dart)
var headers = {'Content-Type': 'application/json'};
var request = http.Request('POST', Uri.parse('https://yoolasms.com/api/v1/send'));
request.body = json.encode({
  "phone": "256704487563,256712345678",
  "message": "Your Message",
  "sender": "YoolaSMS",
  "api_key": "YOUR_API_KEY_HERE"
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
# Raw HTTP Request
POST /api/v1/send HTTP/1.1
Host: yoolasms.com
Content-Type: application/json

{
  "phone": "256704487563,256712345678",
  "message": "Your Message",
  "sender": "YoolaSMS",
  "api_key": "YOUR_API_KEY_HERE"
}

Available API Endpoints

All endpoints use POST requests and return JSON. Base URL: https://yoolasms.com/api/v1/

POSTsend
Send single or bulk SMS to one or multiple Uganda numbers. Parameters: api_key, sender, message, phone.
POSTbalance
Check your current SMS credit balance. Parameters: api_key.
POSTdelivery_report
Get the delivery status of a sent message by message_id. Parameters: api_key, message_id.
POSTschedule_sms
Schedule an SMS for future delivery. Parameters: api_key, sender, message, phone, schedule_time (YYYY-MM-DD HH:MM:SS).
GETinbox
Retrieve inbound SMS messages received on your virtual number. Parameters: api_key.
POSTadd_contact
Add a contact to your phonebook. Parameters: api_key, mobile, name, group_name.
POSTsend_to_group
Send SMS to an entire contact group. Parameters: api_key, sender, message, group_name.
POSTverify-send
Send a one-time verification code by SMS or WhatsApp. Parameters: api_key, phone, sender (optional), brand_name (optional), channel (optional: sms or whatsapp), purpose (optional).
POSTverify-check
Check the code your customer typed back. A code works once. Parameters: api_key, request_id, code.
Verifying phone numbers?
Yoola Verify generates, sends and checks one-time codes for you — expiry, retry limits and rate limiting included.
Yoola Verify Docs →
Also integrating WhatsApp?
A separate API — different model (approved templates, required consent). Full docs, endpoint, and template list here.
WhatsApp API Docs →

Ready-Made Integrations

Plug Yoola SMS directly into your existing platform with our official plugins — no coding required.

PHP SDK
PHP SDK

PHP Library

Python SDK
Python SDK

Python Package

WordPress Plugin
WordPress Plugin

WordPress

WooCommerce
WooCommerce

e-Commerce Plugin

Android SDK
Android SDK

Android / Java

iOS SDK
iOS SDK

Swift / Obj-C

Magento
Magento

Magento Plugin

Shopify
Shopify

Shopify App

Built for Developers

Sub-15s Delivery for OTPs

Priority transactional route for time-sensitive messages like OTPs and payment alerts.

Delivery Webhooks

Get real-time delivery callbacks to your server URL for every message sent.

Two-Way Messaging

Receive inbound SMS replies via webhook or API polling on your virtual number.

Bulk Send in One Call

Pass a comma-separated list of thousands of numbers in a single API request.

Secure API Keys

Each account gets a unique API key. Regenerate anytime from your dashboard.

Delivery Report API

Query the status of any message — delivered, pending, or failed — via API call.

🔑

Ready to Integrate?

Create your free account in 2 minutes. Your API key is generated instantly — no waiting, no approval process needed.

Get My Free API Key Integration Support