Tezkor start
5 daqiqada: test kalit oling, davlatlar ro'yxatini ko'ring, birinchi virtual raqamni oling va SMS kodni qabul qiling.
1. Test kalit oling#
Kabinet → API kalitlar sahifasida Test rejimidagi kalit yarating. Kalit ms_test_ bilan boshlanadi va faqat bir marta ko'rsatiladi. Uni muhit o'zgaruvchisiga saqlang:
export MILLIYSAVDO_API_KEY="ms_test_…"Maslahat
2. Kalitni tekshiring#
GET /v1/me kalit qaysi rejimda ekani, ruxsatlari va limitlarini qaytaradi.
curl 'https://api.milliysavdo.uz/v1/me' \
-H "Authorization: Bearer $MILLIYSAVDO_API_KEY"{
"object": "api_key_info",
"mode": "test",
"key": {
"name": "Backend server",
"prefix": "ms_test_TeqriX…nZa9",
"mode": "test",
"scopes": [
"catalog:read",
"balance:read",
"orders:read",
"orders:write"
],
"expires_at": "2027-10-16T02:13:52.090617Z"
},
"account": {
"tier": "production",
"company_name": "Acme LLC"
},
"limits": {
"rate_limit_per_minute": 600,
"daily_request_quota": 500000,
"monthly_request_quota": 10000000,
"daily_order_limit": 5000,
"max_active_orders": 100,
"discount_percent": "10.00"
}
}3. Davlat va xizmatni tanlang#
Davlatlar ro'yxatidan id ni, keyin narxlardan kerakli xizmat code ini oling. Masalan, Telegram uchun service_code=907:
curl 'https://api.milliysavdo.uz/v1/prices?service_code=907&limit=3' \
-H "Authorization: Bearer $MILLIYSAVDO_API_KEY"{
"object": "list",
"data": [
{
"country": {
"id": 6,
"name": "United States",
"iso_code": "US"
},
"service": {
"code": "907",
"title": "Telegram"
},
"in_stock": 1239,
"available": true,
"price": {
"amount": "3842.44",
"amount_cents": 384244,
"retail_amount": "4269.38",
"retail_amount_cents": 426938,
"discount_percent": "10.00",
"currency": "UZS"
}
}
],
"has_more": false,
"next_cursor": null
}4. Raqam oling#
POST /v1/orders raqam ajratadi. Idempotency-Key yuboring — tarmoq uzilib qayta yuborsangiz, ikkinchi raqam olinmaydi (batafsil).
curl -X POST 'https://api.milliysavdo.uz/v1/orders' \
-H "Authorization: Bearer $MILLIYSAVDO_API_KEY" \
-H 'Idempotency-Key: 8f14e45f-ceea-4e1a-9b2c-0d3c5e7a1b20' \
-H "Content-Type: application/json" \
-d '{"country_id":6,"service_code":"907"}'{
"id": "ord_test_14",
"object": "order",
"mode": "test",
"status": "waiting_sms",
"phone": "+1888582997",
"sms_code": null,
"country": {
"id": 6,
"name": "United States",
"iso_code": null
},
"service": {
"code": "907",
"title": "Telegram"
},
"price": {
"amount": "3842.44",
"amount_cents": 384244,
"retail_amount": "4269.38",
"retail_amount_cents": 426938,
"discount_percent": "10.00",
"currency": "UZS"
},
"created_at": "2026-10-16T02:13:52.251868Z",
"expires_at": "2026-10-16T02:33:52.251868Z",
"completed_at": null
}5. SMS kodni oling#
Ikki usul bor:
- Webhook (tavsiya):
order.sms_receivedhodisasi serveringizga keladi — sozlash. - Polling: har 3–5 soniyada
GET /v1/orders/{id}ni chaqiring,statuswaiting_smsdan o'zgarguncha.
curl 'https://api.milliysavdo.uz/v1/orders/ord_test_14' \
-H "Authorization: Bearer $MILLIYSAVDO_API_KEY"{
"id": "ord_test_14",
"object": "order",
"mode": "test",
"status": "sms_received",
"phone": "+1888582997",
"sms_code": "636841",
"country": {
"id": 6,
"name": "United States",
"iso_code": null
},
"service": {
"code": "907",
"title": "Telegram"
},
"price": {
"amount": "3842.44",
"amount_cents": 384244,
"retail_amount": "4269.38",
"retail_amount_cents": 426938,
"discount_percent": "10.00",
"currency": "UZS"
},
"created_at": "2026-10-16T02:13:52.251868Z",
"expires_at": "2026-10-16T02:33:52.251868Z",
"completed_at": "2026-10-16T02:13:52.301158Z"
}Polling misoli (Python):
import os, time, requests
API = "https://api.milliysavdo.uz/v1"
H = {"Authorization": f"Bearer {os.environ['MILLIYSAVDO_API_KEY']}"}
def wait_for_sms(order_id: str, timeout: int = 20 * 60) -> str | None:
deadline = time.time() + timeout
while time.time() < deadline:
order = requests.get(f"{API}/orders/{order_id}", headers=H, timeout=30).json()
if order["status"] == "sms_received":
return order["sms_code"]
if order["status"] in ("cancelled", "expired", "failed"):
return None # pul avtomatik qaytarilgan
time.sleep(4)
return None6. Live ga o'ting#
Integratsiya tayyor bo'lgach, production ruxsatiga ariza bering. Tasdiqlangach, ms_live_ kalit yarating va faqat kalitni almashtiring — so'rov va javob formatlari bir xil. Live buyurtmalar MilliySavdo balansingizdan yechiladi; SMS 20 daqiqada kelmasa pul avtomatik qaytadi.