cURL
curl --request POST \
--url https://api.belio.co.ke/data/{campaignId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "SendToEach",
"disbursements": [
{
"phone": "<string>",
"message": "<string>"
}
]
}
'import requests
url = "https://api.belio.co.ke/data/{campaignId}"
payload = {
"type": "SendToEach",
"disbursements": [
{
"phone": "<string>",
"message": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({type: 'SendToEach', disbursements: [{phone: '<string>', message: '<string>'}]})
};
fetch('https://api.belio.co.ke/data/{campaignId}', 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://api.belio.co.ke/data/{campaignId}",
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([
'type' => 'SendToEach',
'disbursements' => [
[
'phone' => '<string>',
'message' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api.belio.co.ke/data/{campaignId}"
payload := strings.NewReader("{\n \"type\": \"SendToEach\",\n \"disbursements\": [\n {\n \"phone\": \"<string>\",\n \"message\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.belio.co.ke/data/{campaignId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"SendToEach\",\n \"disbursements\": [\n {\n \"phone\": \"<string>\",\n \"message\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.belio.co.ke/data/{campaignId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"SendToEach\",\n \"disbursements\": [\n {\n \"phone\": \"<string>\",\n \"message\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"units": {
"Safaricom": {},
"Airtel": {}
},
"addresses": {
"Safaricom": 123,
"Airtel": 123
}
}{
"desc": "<string>",
"result": "<unknown>"
}{
"desc": "<string>",
"result": "<unknown>"
}{
"desc": "<string>",
"result": "<unknown>"
}{
"desc": "<string>",
"result": "<unknown>"
}{
"desc": "<string>",
"result": "<unknown>"
}Mobile Data
Disburse Data
Disburse mobile data bundles to one or multiple recipients.
POST
/
data
/
{campaignId}
cURL
curl --request POST \
--url https://api.belio.co.ke/data/{campaignId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "SendToEach",
"disbursements": [
{
"phone": "<string>",
"message": "<string>"
}
]
}
'import requests
url = "https://api.belio.co.ke/data/{campaignId}"
payload = {
"type": "SendToEach",
"disbursements": [
{
"phone": "<string>",
"message": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({type: 'SendToEach', disbursements: [{phone: '<string>', message: '<string>'}]})
};
fetch('https://api.belio.co.ke/data/{campaignId}', 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://api.belio.co.ke/data/{campaignId}",
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([
'type' => 'SendToEach',
'disbursements' => [
[
'phone' => '<string>',
'message' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api.belio.co.ke/data/{campaignId}"
payload := strings.NewReader("{\n \"type\": \"SendToEach\",\n \"disbursements\": [\n {\n \"phone\": \"<string>\",\n \"message\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.belio.co.ke/data/{campaignId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"SendToEach\",\n \"disbursements\": [\n {\n \"phone\": \"<string>\",\n \"message\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.belio.co.ke/data/{campaignId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"SendToEach\",\n \"disbursements\": [\n {\n \"phone\": \"<string>\",\n \"message\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"units": {
"Safaricom": {},
"Airtel": {}
},
"addresses": {
"Safaricom": 123,
"Airtel": 123
}
}{
"desc": "<string>",
"result": "<unknown>"
}{
"desc": "<string>",
"result": "<unknown>"
}{
"desc": "<string>",
"result": "<unknown>"
}{
"desc": "<string>",
"result": "<unknown>"
}{
"desc": "<string>",
"result": "<unknown>"
}Refer to Authentication for information on how to obtain a
Bearer token. This endpoint requires the
reward.mobile-data.disburse API
client authorization scope to disburse mobile data. You can set up scopes on
the API Clients
page.Rate Limit
This endpoint is rate limited to 400 disbursements per second.Request Modes
The API supports two request modes:SendToMany— same data amount (and optional SMS message) sent to multiple recipientsSendToEach— individual data amounts and optional messages per recipient
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Unique identifier that references the rules for the disbursement.
Body
application/json
Disbursement request payload
- SendToEach
- SendToMany
Send a custom denomination to each recipient
Indicates per-recipient bundle disbursement mode
Available options:
SendToEach List of recipients with individual denominations
Required array length:
1 - 100 elementsShow child attributes
Show child attributes
Messaging configuration used when sending optional SMS notifications.
Show child attributes
Show child attributes
Receipt callback configuration
Show child attributes
Show child attributes
Response
Request successfully queued for processing