curl --request GET \
--url https://{subdomain}.mihu.ai/api/v1/sms/rates \
--header 'Authorization: Bearer <token>'import requests
url = "https://{subdomain}.mihu.ai/api/v1/sms/rates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{subdomain}.mihu.ai/api/v1/sms/rates', 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://{subdomain}.mihu.ai/api/v1/sms/rates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{subdomain}.mihu.ai/api/v1/sms/rates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{subdomain}.mihu.ai/api/v1/sms/rates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/sms/rates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"items": [
{
"country_code": "TR",
"country_name": "Türkiye",
"description": "<string>",
"direction": "outbound",
"message_type": "sms",
"price": {
"amount": 0.012,
"currency": "USD",
"unit": "part"
}
}
],
"pagination": {
"current_page": 1,
"per_page": 25,
"total": 137,
"last_page": 6,
"from": 1,
"to": 25,
"has_more": true
}
}
}What sending a message costs, by country
The price list for outbound SMS, per destination country.
Prices are per message part, not per message. A message longer than a single SMS is split by the network into several parts and every part is charged, so a three-part message to Germany costs three times the German rate. The number of parts is decided by the network, not something you set.
One price per country. Mobile networks within a country are priced the same, and in any case the sending side cannot know which network a number belongs to beforehand.
These rates apply to traffic that goes through our numbers. If you connect your own messaging provider, that provider bills you directly and nothing here applies.
The amounts shown cover standard mobile destinations. Messages to other number types can be charged differently, so treat this list as the price for ordinary traffic rather than a guarantee for every destination — the wallet transaction for a message always carries the exact amount.
Inbound messages and MMS are charged but are not published here yet, so filtering by direction=inbound or message_type=mms returns an empty list rather than an error.
curl --request GET \
--url https://{subdomain}.mihu.ai/api/v1/sms/rates \
--header 'Authorization: Bearer <token>'import requests
url = "https://{subdomain}.mihu.ai/api/v1/sms/rates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{subdomain}.mihu.ai/api/v1/sms/rates', 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://{subdomain}.mihu.ai/api/v1/sms/rates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{subdomain}.mihu.ai/api/v1/sms/rates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{subdomain}.mihu.ai/api/v1/sms/rates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/sms/rates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"items": [
{
"country_code": "TR",
"country_name": "Türkiye",
"description": "<string>",
"direction": "outbound",
"message_type": "sms",
"price": {
"amount": 0.012,
"currency": "USD",
"unit": "part"
}
}
],
"pagination": {
"current_page": 1,
"per_page": 25,
"total": 137,
"last_page": 6,
"from": 1,
"to": 25,
"has_more": true
}
}
}Authorizations
Use a Bearer token to access these API endpoints. Example: "Bearer {your-token}"
Query Parameters
Two-letter country code
"TR"
Only outbound is published today; inbound returns an empty list.
outbound, inbound Only sms is published today; mms returns an empty list.
sms, mms Match against country name or product description
x <= 200