Developer hujjatlari

SMS Gateway REST API'si orqali har qanday tildagi dasturdan SMS yuborishingiz, qabul qilishingiz, kontaktlarni boshqarishingiz va yetkazish statusini real-time kuzatishingiz mumkin.

Base URL: https://smsgw.uz/api/v1/
Eski versiya: https://smsgw.uz/api/ (legacy, 12 oygacha saqlanadi)

1. Tezkor boshlash

  1. Hisob yarating: Ro'yxatdan o'tish
  2. Android ilovasini o'rnating va QR kod skan qiling
  3. /settings/api/ dan API key oling
  4. Quyidagi birinchi so'rovni yuboring:
curl -X POST https://smsgw.uz/api/v1/messages/send \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "+998901234567",
    "message": "Salom dunyo!"
  }'

2. Autentifikatsiya

Har so'rov API key bilan autentifikatsiya qilinishi kerak. Kalitni 3 xil joydan uzatish mumkin:

# Tavsiya — Authorization header
Authorization: Bearer YOUR_API_KEY

# Yoki
X-API-Key: YOUR_API_KEY

# Yoki query param (faqat GET uchun, loglarda qoladi — ehtiyot bo'ling)
?key=YOUR_API_KEY
⚠ Kalitni hech qachon frontend'da yoki public repository'da saqlamang. Agar kalit sizdan tashqari kimgadir ma'lum bo'lsa, profildan darhol aylantiring.

3. Endpointlar

POST/api/v1/messages/send
Bitta SMS yuborish
POST/api/v1/messages/send-bulk
Bir necha SMS bir so'rovda
GET/api/v1/messages
Xabarlar tarixi (filter bilan)
POST/api/v1/messages/resend
Xato xabarlarni qayta yuborish
GET/api/v1/devices
Ulangan qurilmalar ro'yxati
POST/api/v1/contacts
Kontakt qo'shish / o'chirish
POST/api/v1/ussd/send
USSD buyruq yuborish
GET/api/v1/billing/balance
Plan cheklovlari va balans

To'liq interaktiv hujjatlar uchun: Swagger UI yoki ReDoc.

4. SMS yuborish

POST /api/v1/messages/send

Request body

{
  "number":  "+998901234567",     // majburiy
  "message": "Xabar matni",        // majburiy (1-1600 belgi)
  "devices": "1",                  // qurilma id (ixtiyoriy)
  "sim_slot": 0,                   // 0 yoki 1 (ixtiyoriy)
  "schedule": 1800000000,          // unix timestamp (ixtiyoriy)
  "type": "sms"                    // "sms" yoki "mms"
}

Javob

{
  "success": true,
  "data": {
    "messages": [{
      "ID": 12345,
      "number": "+998901234567",
      "message": "Xabar matni",
      "deviceID": 1,
      "simSlot": "0",
      "status": "queued",
      "sentDate": "2026-04-13T10:30:00Z",
      "groupID": "abc123"
    }],
    "credits": null
  }
}

5. Xabarlarni o'qish

GET /api/v1/messages?status=Delivered&deviceID=1

Query parametrlari

6. Long-polling (qurilma uchun)

GET /api/v1/polling/pending?key=API_KEY&wait=30

Android qurilma wait soniya (0-30) kutadi — yangi SMS kelsa darhol oladi, aks holda bo'sh javob. FCM ga qo'shimcha fallback sifatida ishlatiladi.

7. Webhook'lar

SMS statusini pollaysizmi? Yaxshisi webhook qo'shing. SMS yuborilganda / yetkazilganda / xato bo'lganda bizga sizga POST HTTP so'rov yuborib turadi.

Webhook endpointni /webhooks/ sahifasidan qo'shing.

Event turlari

Payload format

POST https://your-server.com/webhook
Content-Type: application/json
X-Webhook-Id: 550e8400-e29b-41d4-a716-446655440000
X-Webhook-Event: sms.delivered
X-Webhook-Signature: sha256=abc123...
X-Webhook-Attempt: 1

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "event": "sms.delivered",
  "created_at": "2026-04-13T10:30:00Z",
  "data": {
    "message_id": 12345,
    "phone": "+998901234567",
    "delivered_at": "2026-04-13T10:30:05Z"
  }
}

Imzoni tekshirish (Python)

import hmac, hashlib

def verify(secret: str, body: bytes, signature_header: str) -> bool:
    expected = hmac.new(
        secret.encode(), body, hashlib.sha256
    ).hexdigest()
    provided = signature_header.removeprefix("sha256=")
    return hmac.compare_digest(expected, provided)
Retry logikasi: agar sizning endpoint 2xx qaytarmasa, biz 6 marta qayta urinib ko'ramiz — exponential backoff bilan: 1m → 5m → 15m → 1h → 6h → 24h. Keyin DLQ'ga tushadi — /webhooks/ dan qayta urinib ko'rishingiz mumkin.

8. Idempotency

Tarmoq xatosi tufayli so'rov ikki marta yuborilganda duplikat SMS'ni oldini olish uchun Idempotency-Key header yuboring:

POST /api/v1/messages/send
Idempotency-Key: order-1001-sms
{...}

Bir xil kalit bilan keyingi so'rovlar avvalgi javobni qaytaradi (24 soat davomida). Kalit sifatida UUID yoki sizning biznes ID'ngizni ishlating.

9. Rate limit

Har tarif uchun alohida chegara:

Har javobda limit headerlar bor:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 247
X-RateLimit-Reset: 1730000000

# Chegara oshsa:
HTTP/1.1 429 Too Many Requests
Retry-After: 30

10. Xatolik kodlari

HTTPCodeMa'no
400validation_errorNoto'g'ri parametr
401authentication_errorAPI key noto'g'ri
402quota_exceededPlan limiti tugagan
403permission_deniedRuxsat yo'q
404not_foundTopilmadi
429rate_limit_exceededKo'p so'rov
503device_unavailableOnline qurilma yo'q

Xato javob formati

{
  "success": false,
  "error": {
    "code": "quota_exceeded",
    "message": "Oylik SMS limiti tugadi.",
    "details": { "used": 5000, "limit": 5000 }
  }
}

11. SDK va integratsiyalar

Hozirda rasmiy SDK yo'q, lekin har til uchun ochiq misollar mavjud:

Savolingiz bormi? Telegram: @smsgw_support yoki support@smsgw.uz