🔐 Аутентификация
В каждом запросе необходимо отправлять следующий заголовок:
Authorization: Bearer your_token_here
1. Отправка SMS
https://devsms.uz/api/send_sms.php
Тело запроса:
{
"phone": "998901234567",
"message": "Test SMS xabari",
"from": "4546",
"callback_url": "https://your-domain.com/sms-callback"
}
Параметры:
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| phone | string | Да | Номер телефона (998901234567 или международный: 12025551234) |
| message | string | Да | Текст SMS |
| from | string | Нет | От кого (по умолчанию: 4546) |
| callback_url | string | Нет | URL для отправки результата при изменении статуса SMS (http:// или https://) |
| type | string | Нет | Тип SMS: eskiz (default), simple, universal_otp |
Ответ:
// На узбекский номер
{
"success": true,
"message": "SMS muvaffaqiyatli yuborildi",
"data": {
"sms_id": 123,
"request_id": "uuid-here",
"status": "sent",
"parts_count": 1,
"total_cost": "$0.005",
"balance": "$0.079",
"type": "eskiz"
}
}
// На международный номер
{
"success": true,
"message": "SMS muvaffaqiyatli yuborildi",
"data": {
"sms_id": 124,
"request_id": "uuid-here",
"status": "sent",
"parts_count": 1,
"total_cost": "$0.010",
"balance": "$0.070",
"type": "eskiz",
"country": "United States",
"country_code": "us"
}
}
1.1 Universal OTP SMS
https://devsms.uz/api/send_sms.php
Отправка кода подтверждения через универсальные OTP шаблоны Eskiz. Название компании проверяется AI модерацией.
Универсальные шаблоны одобрены Eskiz. Вы указываете только название компании и OTP код. Если название компании неприемлемо, SMS не отправляется, но баланс списывается!
Тело запроса:
{
"phone": "998901234567",
"type": "universal_otp",
"template_type": 1,
"service_name": "TechShop",
"otp_code": "5678"
}
Параметры:
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| phone | string | Да | Номер телефона (998901234567 или международный: 12025551234) |
| type | string | Да | "universal_otp" |
| template_type | integer | Да | Тип шаблона: 1=Подтверждение операции, 2=Сброс пароля, 3=Регистрация, 4=Вход в систему |
| service_name | string | Да | Название компании/сервиса (2-50 символов, только буквы, цифры, пробелы, точка, тире) |
| otp_code | string | Да | OTP код подтверждения (4-8 цифр) |
Доступные шаблоны:
MyService tizimi: {service_name} xizmatida amaliyotni tasdiqlash kodi: {otp_code}
MyService tizimi: {service_name} xizmatida parolni tiklash uchun tasdiqlash kodi: {otp_code}
MyService tizimi: {service_name} xizmatiga ro'yxatdan o'tish uchun tasdiqlash kodi: {otp_code}
MyService tizimi: {service_name} xizmatiga kirish uchun tasdiqlash kodi: {otp_code}
Ответ:
{
"success": true,
"message": "SMS muvaffaqiyatli yuborildi",
"data": {
"sms_id": 456,
"request_id": "uuid-here",
"status": "sent",
"parts_count": 1,
"total_cost": "$0.005",
"balance": "$0.079",
"type": "universal_otp"
}
}
Ответ для заблокированного SMS:
{
"success": false,
"error": "Korxona nomi nomaqbul deb topildi: ... SMS yuborilmadi, lekin to'lov yechildi."
}
2. Получить Историю SMS
https://devsms.uz/api/get_history.php
Query параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| limit | integer | 50 | Количество SMS (макс: 200) |
| offset | integer | 0 | Смещение |
| status | string | null | Фильтр по статусу (sent, delivered, failed) |
Пример:
GET https://devsms.uz/api/get_history.php?limit=10&offset=0&status=delivered
Ответ:
{
"success": true,
"data": {
"history": [
{
"id": 123,
"phone_number": "998901234567",
"message": "Salom!",
"status": "delivered",
"parts_count": 1,
"total_cost": "$0.005",
"from_number": "4546",
"eskiz_request_id": "uuid-here",
"eskiz_message_id": "msg-id",
"sent_at": "2026-03-09 10:30:00",
"delivered_at": "2026-03-09 10:30:05",
"failed_at": null,
"created_at": "2026-03-09 10:29:58"
}
],
"count": 1,
"limit": 10,
"offset": 0
}
}
Временные метки статуса
| Параметр | Описание |
|---|---|
| created_at | Время создания SMS |
| sent_at | Время отправки SMS |
| delivered_at | Время доставки SMS |
| failed_at | Время неудачной отправки SMS |
3. Получить Баланс
https://devsms.uz/api/get_balance.php
Ответ:
{
"success": true,
"data": {
"balance": "$0.083",
"sms_price": "$0.005",
"statistics": {
"total_sms": 100,
"total_spent": "$0.414",
"today_sms": 10,
"today_spent": "$0.042",
"month_sms": 50,
"month_spent": "$0.207" }
}
}
4. Получить Статус SMS
https://devsms.uz/api/get_status.php
Query параметры:
| Параметр | Тип | Описание |
|---|---|---|
| sms_id | integer | SMS ID (ID в базе данных) |
| request_id | string | Eskiz request ID |
Пример:
GET https://devsms.uz/api/get_status.php?sms_id=123
или
GET https://devsms.uz/api/get_status.php?request_id=uuid-here
Ответ:
{
"success": true,
"data": {
"id": 123,
"phone_number": "998901234567",
"message": "Salom!",
"status": "delivered",
"parts_count": 1,
"total_cost": "$0.005",
"from_number": "4546",
"eskiz_request_id": "uuid-here",
"eskiz_message_id": "msg-id",
"sent_at": "2026-03-09 10:30:00",
"delivered_at": "2026-03-09 10:30:05",
"failed_at": null,
"created_at": "2026-03-09 10:29:58",
"updated_at": "2026-03-09 10:30:05"
}
}
🔔 Callback URL
При добавлении параметра callback_url при отправке SMS, при изменении статуса (отправлено, доставлено, не доставлено) на ваш URL будет отправлен POST запрос.
Когда отправляется callback:
Данные, отправляемые на ваш URL:
{
"sms_id": 123,
"request_id": "uuid-here",
"phone": "998901234567",
"status": "delivered",
"sent_at": "2026-03-09 10:30:00",
"delivered_at": "2026-03-09 10:30:05",
"failed_at": null,
"timestamp": "2026-03-09 10:30:05"
}
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
| sms_id | integer | SMS ID (ID в базе данных) |
| request_id | string | Eskiz request ID |
| phone | string | Номер телефона (998901234567 или международный: 12025551234) |
| status | string | Фильтр по статусу (sent, delivered, failed) |
| sent_at | string|null | Время отправки SMS |
| delivered_at | string|null | Время доставки SMS |
| failed_at | string|null | Время неудачной отправки SMS |
| timestamp | string | Время создания SMS |
Примечание: Callback отправляется с таймаутом 5 секунд. Если ваш сервер не ответит, повторная попытка не выполняется.
📝 Статусы SMS
| Статус | Описание |
|---|---|
| pending | SMS ещё не отправлено (в ожидании) |
| sent | SMS отправлено (Eskiz принял) |
| delivered | SMS доставлено получателю |
| failed | SMS не доставлено (отклонено или не доставлено) |
❌ Ошибки
При возникновении ошибки возвращается следующий формат:
{
"success": false,
"error": "Xatolik xabari"
}
HTTP коды статуса:
| Код | Описание |
|---|---|
| 200 | Успешно |
| 400 | Неверный запрос |
| 401 | Ошибка аутентификации |
| 403 | Доступ запрещен |
| 404 | Не найдено |
| 500 | Ошибка сервера |
Совет:
Для тестирования API можно использовать Postman или cURL.
🌍 Международные SMS Цены
Для отправки SMS на международный номер укажите номер в международном формате в параметре phone (например: 12025551234). Страна и цена определяются автоматически. Simple SMS доступен только для номеров Узбекистана.
| Страна | Телефонный код | Местный пользователь ($) | Иностранный пользователь ($) |
|---|---|---|---|
| Afghanistan (AF) | +93 | $0.542 | $0.629 |
| Aland Islands (AX) | +35818 | $0.127 | $0.147 |
| Albania (AL) | +355 | $0.137 | $0.159 |
| Angola (AO) | +244 | $0.170 | $0.197 |
| Argentina (AR) | +54 | $0.107 | $0.124 |
| Armenia (AM) | +374 | $0.256 | $0.297 |
| Aruba (AW) | +297 | $0.151 | $0.175 |
| Australia (AU) | +61 | $0.090 | $0.105 |
| Austria (AT) | +43 | $0.144 | $0.167 |
| Azerbaijan (AZ) | +994 | $0.612 | $0.710 |
| Bahamas (BS) | +1242 | $0.012 | $0.014 |
| Bahrain (BH) | +973 | $0.070 | $0.081 |
| Bangladesh (BD) | +880 | $0.424 | $0.491 |
| Barbados (BB) | +1246 | $0.012 | $0.014 |
| Belarus (BY) | +375 | $0.398 | $0.462 |
| Belgium (BE) | +32 | $0.154 | $0.179 |
| Belize (BZ) | +501 | $0.508 | $0.589 |
| Bosnia and Herzegovina (BA) | +387 | $0.011 | $0.013 |
| Brazil (BR) | +55 | $0.092 | $0.106 |
| Bulgaria (BG) | +359 | $0.228 | $0.264 |
| Cambodia (KH) | +855 | $0.242 | $0.280 |
| Canada (CA) | +1 | $0.012 | $0.014 |
| Central African Republic (CF) | +236 | $0.061 | $0.071 |
| China (CN) | +86 | $0.064 | $0.074 |
| Colombia (CO) | +57 | $0.074 | $0.086 |
| Croatia (HR) | +385 | $0.137 | $0.159 |
| Cuba (CU) | +53 | $0.124 | $0.144 |
| Cyprus (CY) | +357 | $0.129 | $0.150 |
| Czech Republic (CZ) | +420 | $0.098 | $0.113 |
| Denmark (DK) | +45 | $0.095 | $0.110 |
| Egypt (EG) | +20 | $0.304 | $0.353 |
| Estonia (EE) | +372 | $0.140 | $0.163 |
| Finland (FI) | +358 | $0.131 | $0.152 |
| France (FR) | +33 | $0.118 | $0.137 |
| Georgia (GE) | +995 | $0.320 | $0.371 |
| Germany (DE) | +49 | $0.167 | $0.194 |
| Greece (GR) | +30 | $0.093 | $0.107 |
| Guernsey (GG) | +441481 | $0.075 | $0.087 |
| Hong Kong (HK) | +852 | $0.119 | $0.138 |
| Hungary (HU) | +36 | $0.129 | $0.150 |
| Iceland (IS) | +354 | $0.119 | $0.138 |
| India (IN) | +91 | $0.127 | $0.147 |
| Indonesia (ID) | +62 | $0.639 | $0.742 |
| Iran (IR) | +98 | $0.334 | $0.388 |
| Iraq (IQ) | +964 | $0.447 | $0.518 |
| Ireland (IE) | +353 | $0.110 | $0.127 |
| Israel (IL) | +972 | $0.290 | $0.337 |
| Italy (IT) | +39 | $0.139 | $0.161 |
| Japan (JP) | +81 | $0.131 | $0.152 |
| Kazakhstan (KZ) | +77 | $0.860 | $0.997 |
| Kuwait (KW) | +965 | $0.412 | $0.477 |
| Kyrgyzstan (KG) | +996 | $0.523 | $0.607 |
| Latvia (LV) | +371 | $0.111 | $0.129 |
| Liechtenstein (LI) | +423 | $0.091 | $0.105 |
| Lithuania (LT) | +370 | $0.100 | $0.116 |
| Luxembourg (LU) | +352 | $0.121 | $0.140 |
| Macedonia (MK) | +389 | $0.106 | $0.123 |
| Madagascar (MG) | +261 | $0.684 | $0.794 |
| Malaysia (MY) | +60 | $0.116 | $0.135 |
| Maldives (MV) | +960 | $0.050 | $0.058 |
| Malta (MT) | +356 | $0.133 | $0.154 |
| Mexico (MX) | +52 | $0.077 | $0.089 |
| Moldova (MD) | +373 | $0.117 | $0.135 |
| Monaco (MC) | +377 | $0.238 | $0.276 |
| Mongolia (MN) | +976 | $0.300 | $0.347 |
| Morocco (MA) | +212 | $0.298 | $0.345 |
| Myanmar (MM) | +95 | $0.359 | $0.417 |
| Netherlands (NL) | +31 | $0.149 | $0.173 |
| New Zealand (NZ) | +64 | $0.154 | $0.179 |
| Norway (NO) | +47 | $0.109 | $0.126 |
| Oman (OM) | +968 | $0.229 | $0.266 |
| Pakistan (PK) | +92 | $0.608 | $0.705 |
| Philippines (PH) | +63 | $0.325 | $0.377 |
| Poland (PL) | +48 | $0.065 | $0.075 |
| Portugal (PT) | +351 | $0.080 | $0.093 |
| Qatar (QA) | +974 | $0.095 | $0.110 |
| Romania (RO) | +40 | $0.113 | $0.131 |
| Russia (RU) | +7 | $0.860 | $0.997 |
| Saudi Arabia (SA) | +966 | $0.174 | $0.202 |
| Serbia (RS) | +381 | $0.324 | $0.375 |
| Singapore (SG) | +65 | $0.082 | $0.095 |
| Slovakia (SK) | +421 | $0.138 | $0.160 |
| Slovenia (SI) | +386 | $0.300 | $0.347 |
| South Korea (KR) | +82 | $0.075 | $0.087 |
| Spain (ES) | +34 | $0.057 | $0.066 |
| Sri Lanka (LK) | +94 | $0.428 | $0.496 |
| Sweden (SE) | +46 | $0.098 | $0.114 |
| Switzerland (CH) | +41 | $0.109 | $0.126 |
| Taiwan (TW) | +886 | $0.084 | $0.097 |
| Tajikistan (TJ) | +992 | $0.885 | $1.027 |
| Thailand (TH) | +66 | $0.045 | $0.052 |
| Tunisia (TN) | +216 | $0.395 | $0.458 |
| Turkey (TR) | +90 | $0.045 | $0.052 |
| Turkmenistan (TM) | +993 | $0.282 | $0.327 |
| Ukraine (UA) | +380 | $0.262 | $0.304 |
| United Arab Emirates (AE) | +971 | $0.197 | $0.229 |
| United Kingdom (GB) | +44 | $0.078 | $0.090 |
| United States (US) | +1 | $0.012 | $0.014 |
| Uruguay (UY) | +598 | $0.142 | $0.164 |
| Vietnam (VI) | +1340 | $0.012 | $0.014 |
Цены указаны за 1 часть SMS. Длинные SMS могут состоять из нескольких частей.
Пример международного SMS:
// USA
{
"phone": "12025551234",
"message": "Hello from Uzbekistan!"
}
// Russia
{
"phone": "79161234567",
"message": "Privet iz Uzbekistana!"
}
// Kazakhstan
{
"phone": "77011234567",
"message": "Salom Qozog'istondan!"
}
🔧 Примеры cURL
Отправка SMS:
curl -X POST https://devsms.uz/api/send_sms.php \
-H "Authorization: Bearer your_token" \
-H "Content-Type: application/json" \
-d '{
"phone": "998901234567",
"message": "Test SMS"
}'
Получить Баланс:
curl -X GET https://devsms.uz/api/get_balance.php \
-H "Authorization: Bearer your_token"
💻 Примеры Кода
Выберите язык программирования:
<?php
// DevSMS API - PHP Example
$token = "your_api_token_here";
$baseUrl = "https://devsms.uz/api";
// SMS Yuborish
function sendSMS($token, $baseUrl, $phone, $message) {
$ch = curl_init("$baseUrl/send_sms.php");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $token",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode([
"phone" => $phone,
"message" => $message
])
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Balansni olish
function getBalance($token, $baseUrl) {
$ch = curl_init("$baseUrl/get_balance.php");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $token"
]
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Ishlatish
$result = sendSMS($token, $baseUrl, "998901234567", "Salom!");
print_r($result);
$balance = getBalance($token, $baseUrl);
print_r($balance);
?>