Документация API
Доступны две версии: v2 — отраслевой стандарт (ваши скрипты работают без изменений), v3 — современный REST (JSON, идемпотентность, курсорная пагинация, 5 языков).
Адреса
Нажмите на адрес, чтобы скопировать.
https://smmbilan.uz/api/v2
Аутентификация: поле `key` в теле запроса
https://smmbilan.uz/api/v3
Аутентификация: `Authorization: Bearer <ключ>`
Лимит запросов: 600 запросов в минуту на ключ. Ключ идемпотентности хранится 24 ч.
Быстрый старт
Четыре шага — несколько минут до первого запроса.
- Зарегистрируйтесь и войдите в панель.
- Создайте новый ключ в разделе «API-ключи». Ключ показывается ОДИН РАЗ — сразу сохраните его.
- Запросите каталог и возьмите нужный ID услуги.
- Отправьте заказ. Следите за статусом опросом или через webhook.
curl https://smmbilan.uz/api/v3/services \
-H "Authorization: Bearer <KALITINGIZ>"
v2 — отраслевой стандарт
Рекомендуется POST. Устаревший GET/query принимается для совместимости, но deprecated. Бизнес-ошибка приходит с HTTP 200 и `{"error":"..."}` — это часть стандарта, и существующие скрипты на неё опираются.
curl -X POST https://smmbilan.uz/api/v2 \
-d "key=<KALITINGIZ>" \
-d "action=add" \
-d "service=<XIZMAT_ID>" \
-d "link=https://t.me/kanalim" \
-d "quantity=1000"
# Javob: {"order": 100123}
POST
action=balance
—
200
Баланс счёта. Реселлеры обычно вызывают его перед каждым заказом.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=balance'
{
"balance": "125.4000",
"currency": "USD"
}
POST
action=services
—
200
Весь каталог. Постраничности НЕТ, поэтому ответ большой — кэшируйте его.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=services'
[
{
"service": "<XIZMAT_ID>",
"name": "Telegram kanal a'zolari",
"type": "Default",
"category": "Telegram",
"rate": "1.20000000",
"min": "100",
"max": "100000",
"refill": true,
"cancel": true,
"dripfeed": true
}
]
POST
action=add
service, link, quantity
200
Создание заказа. Значение `order` в ответе — это номер для последующих запросов.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=add' \
-d 'service=<XIZMAT_ID>' \
-d 'link=https://t.me/kanalim' \
-d 'quantity=100'
{
"order": 100123,
"charge": "1.2000",
"currency": "USD"
}
POST
action=status
order
200
Статус одного заказа. Все значения — СТРОКИ, включая `remains`.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=status' \
-d 'order=100123'
{
"charge": "1.2000",
"start_count": "3572",
"status": "In progress",
"remains": "157",
"currency": "USD"
}
POST
action=status
orders
200
Массовый статус: до 100 за запрос. Ключи — это ЗАПРОШЕННЫЕ вами ID.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=status' \
-d 'orders=100123,100124'
{
"100123": {
"charge": "1.2000",
"start_count": "3572",
"status": "Completed",
"remains": "0",
"currency": "USD"
},
"100124": {
"error": "Incorrect order ID"
}
}
POST
action=refill
order
200
Запрос гарантии. Следите за состоянием через `refill_status`, используя ID из ответа.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=refill' \
-d 'order=100123'
{
"refill": 5
}
POST
action=refill_status
refill
200
Состояние гарантии. Состояние `Error` тоже отображается как `Pending` — повторы продолжаются.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=refill_status' \
-d 'refill=5'
{
"status": "Completed"
}
POST
action=cancel
orders
200
ЗАПРОС на отмену. `cancel: 1` означает, что запрос принят, а НЕ что заказ отменён.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=cancel' \
-d 'orders=100123,100124'
[
{
"order": 100123,
"cancel": 1
},
{
"order": 100124,
"cancel": {
"error": "Incorrect order status"
}
}
]
POST
action=special_services
—
200
Каталог специальных услуг: номера Telegram, Stars, Premium. Цена указана за ОДНУ единицу, а `rate` в `services` — за 1000.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=special_services'
[
{
"variant": "12",
"kind": "number",
"slug": "UZ",
"name": "O'zbekiston",
"price": "1.2000",
"currency": "USD",
"dial_code": "+998",
"stock": "35",
"stars": null,
"months": null,
"recipient": false,
"max_quantity": "10"
}
]
POST
action=special_add
kind, variant, quantity, recipient
200
Специальный заказ. `kind` и `variant` обязательны; для Stars и Premium нужен ещё `recipient`. Обратите внимание на `status` в ответе: Stars и Premium могут ожидать пополнения.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=special_add' \
-d 'kind=stars' \
-d 'variant=31' \
-d 'recipient=@mijoz_nomi'
{
"order": 900123,
"charge": "0.9900",
"currency": "USD",
"status": "Pending"
}
POST
action=special_status
order (yoki orders)
200
Один специальный заказ — С SMS-кодом и паролем 2FA. При массовом запросе (`orders=`) эти поля равны `null`.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=special_status' \
-d 'order=900123'
{
"charge": "1.2000",
"status": "Completed",
"currency": "USD",
"kind": "number",
"variant": "O'zbekiston",
"quantity": "1",
"recipient": null,
"phone_number": "+998901234567",
"refunded": "0.0000",
"sms_code": "84921",
"two_fa_password": null,
"has_code": true
}
POST
action=special_code
order
200
SMS-код для купленного номера. Вызывайте его ТОЛЬКО ПОСЛЕ того, как клиент введёт номер в Telegram — код действует несколько минут.
curl -X POST https://smmbilan.uz/api/v2 \
-d 'key=<KALITINGIZ>' \
-d 'action=special_code' \
-d 'order=900123'
{
"sms_code": "84921",
"two_fa_password": null,
"phone_number": "+998901234567",
"attempts_left": "4"
}
{
"error": "Not enough funds"
}
v3 — REST
Настоящие HTTP-коды, структурированный ответ об ошибке, заголовок `X-Request-Id` и текст ошибки на 5 языках (`Accept-Language`).
curl -X POST https://smmbilan.uz/api/v3/orders \
-H "Authorization: Bearer <KALITINGIZ>" \
-H "Idempotency-Key: 3f9c1e40-…" \
-H "Content-Type: application/json" \
-d '{"service_id": <XIZMAT_ID>, "link": "https://t.me/kanalim", "quantity": 1000}'
{
"error": {
"code": "insufficient_balance",
"message": "Balansingizda yetarli mablag' yo'q.",
"details": {
"required": "1.2000",
"available": "0.3000"
}
},
"request_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB"
}
Эндпоинты
GET
/api/v3/me
—
200
Сведения о ключе и счёте. Вызывается ОДИН РАЗ при настройке интеграции.
curl -X GET 'https://smmbilan.uz/api/v3/me' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"user": {
"username": "reseller1",
"balance": "125.4000",
"currency": "USD",
"status": "active",
"discount_percent": "5.00"
},
"api_key": {
"name": "Ishlab chiqarish",
"prefix": "smb_live_a1b2c3",
"version": "v3",
"sandbox": false,
"scopes": [
"balance:read",
"services:read",
"orders:read",
"orders:write"
],
"rate_limit_per_minute": 600,
"expires_at": null
},
"capabilities": {
"idempotency": true,
"webhooks": true,
"localization": true
}
}
}
GET
/api/v3/balance
balance:read
200
Лёгкий эндпоинт: один запрос, связи не загружаются.
curl -X GET 'https://smmbilan.uz/api/v3/balance' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"balance": "125.4000",
"currency": "USD",
"total_spent": "874.2000",
"total_deposited": "1000.0000"
}
}
GET
/api/v3/services
services:read
200
Каталог с курсором. Передайте `next_cursor` как `after=` в следующем запросе.
curl -X GET 'https://smmbilan.uz/api/v3/services?limit=100&after=0' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": [
{
"id": "<XIZMAT_ID>",
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"name": "Telegram kanal a'zolari",
"description": null,
"type": "default",
"category": {
"id": 3,
"name": "Telegram"
},
"pricing": {
"rate_per_1000": "1.20000000",
"currency": "USD",
"discount_percent": "5.00"
},
"quantity": {
"min": 100,
"max": 100000,
"increment": 1,
"from_input": false,
"fixed": false
},
"features": {
"refill": true,
"refill_days": 30,
"cancel": true,
"dripfeed": true
},
"link_type": "link",
"required_fields": [],
"avg_time_seconds": 3600
}
],
"pagination": {
"limit": 100,
"has_more": true,
"next_cursor": 148
}
}
GET
/api/v3/services/{id}
services:read
200
Одна услуга. Принимается либо `id`, либо `public_id` (ULID).
curl -X GET 'https://smmbilan.uz/api/v3/services/<XIZMAT_ID>' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"id": "<XIZMAT_ID>",
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"name": "Telegram kanal a'zolari",
"description": null,
"type": "default",
"category": {
"id": 3,
"name": "Telegram"
},
"pricing": {
"rate_per_1000": "1.20000000",
"currency": "USD",
"discount_percent": "5.00"
},
"quantity": {
"min": 100,
"max": 100000,
"increment": 1,
"from_input": false,
"fixed": false
},
"features": {
"refill": true,
"refill_days": 30,
"cancel": true,
"dripfeed": true
},
"link_type": "link",
"required_fields": [],
"avg_time_seconds": 3600
}
}
POST
/api/v3/orders
orders:write
201
Создание заказа. Заголовок `Idempotency-Key` ОБЯЗАТЕЛЕН.
curl -X POST 'https://smmbilan.uz/api/v3/orders' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json' \
-H 'Idempotency-Key: 8f14e45fceea167a5a36dedd4bea2543' \
-H 'Content-Type: application/json' \
-d '{"service_id":"<XIZMAT_ID>","link":"https://t.me/kanalim","quantity":100}'
{
"data": {
"id": 100123,
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"service": {
"id": "<XIZMAT_ID>",
"name": "Telegram kanal a'zolari",
"type": "default"
},
"link": "https://t.me/kanalim",
"quantity": 100,
"status": "pending",
"charge": "1.2000",
"currency": "USD",
"start_count": null,
"remains": null,
"delivered": 0,
"progress_percent": 0,
"refunded": "0.0000",
"dripfeed": null,
"refill_available": false,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": null
}
}
GET
/api/v3/orders
orders:read
200
Заказы с ОБРАТНЫМ курсором (`before=`) — сначала новые. Дочерние заказы, созданные системой, исключены.
curl -X GET 'https://smmbilan.uz/api/v3/orders?limit=50' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": [
{
"id": 100123,
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"service": {
"id": "<XIZMAT_ID>",
"name": "Telegram kanal a'zolari",
"type": "default"
},
"link": "https://t.me/kanalim",
"quantity": 100,
"status": "pending",
"charge": "1.2000",
"currency": "USD",
"start_count": null,
"remains": null,
"delivered": 0,
"progress_percent": 0,
"refunded": "0.0000",
"dripfeed": null,
"refill_available": false,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": null
}
],
"pagination": {
"limit": 50,
"has_more": false,
"next_cursor": null
}
}
GET
/api/v3/orders/{id}
orders:read
200
Один заказ. Принимается либо `number`, либо `public_id`.
curl -X GET 'https://smmbilan.uz/api/v3/orders/100123' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"id": 100123,
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"service": {
"id": "<XIZMAT_ID>",
"name": "Telegram kanal a'zolari",
"type": "default"
},
"link": "https://t.me/kanalim",
"quantity": 100,
"status": "pending",
"charge": "1.2000",
"currency": "USD",
"start_count": null,
"remains": null,
"delivered": 0,
"progress_percent": 0,
"refunded": "0.0000",
"dripfeed": null,
"refill_available": false,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": null
}
}
POST
/api/v3/orders/{id}/refill
orders:write
202
Запрос гарантии. 202 значит принято, но ещё не завершено.
curl -X POST 'https://smmbilan.uz/api/v3/orders/100123/refill' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"id": 5,
"order_id": 100123,
"status": "pending",
"quantity": null,
"charge": "0.0000",
"is_paid": false,
"reason": null,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": null
}
}
POST
/api/v3/orders/{id}/cancel
orders:write
202
Запрос на отмену. В ответе приходит и ОБНОВЛЁННОЕ состояние заказа.
curl -X POST 'https://smmbilan.uz/api/v3/orders/100123/cancel' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"accepted": true,
"approval_status": "pending",
"order": {
"id": 100123,
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"service": {
"id": "<XIZMAT_ID>",
"name": "Telegram kanal a'zolari",
"type": "default"
},
"link": "https://t.me/kanalim",
"quantity": 100,
"status": "pending",
"charge": "1.2000",
"currency": "USD",
"start_count": null,
"remains": null,
"delivered": 0,
"progress_percent": 0,
"refunded": "0.0000",
"dripfeed": null,
"refill_available": false,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": null
}
}
}
GET
/api/v3/refills/{id}
orders:read
200
Состояние гарантии.
curl -X GET 'https://smmbilan.uz/api/v3/refills/5' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"id": 5,
"order_id": 100123,
"status": "pending",
"quantity": null,
"charge": "0.0000",
"is_paid": false,
"reason": null,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": null
}
}
GET
/api/v3/special/services
services:read
200
Каталог специальных услуг. Постраничности НЕТ — разделов всего три. `price` указана за ОДНУ единицу.
curl -X GET 'https://smmbilan.uz/api/v3/special/services' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": [
{
"kind": "stars",
"label": "Telegram Stars",
"description": "Telegram Stars paketlari",
"accepting_orders": true,
"freeze_reason": null,
"requires_recipient": true,
"supports_quantity": false,
"max_quantity": 1,
"delivers_sms_code": false,
"variants": [
{
"id": 31,
"slug": "50",
"label": "50 Stars",
"price": "0.9900",
"currency": "USD",
"dial_code": null,
"stock": null,
"stars": 50,
"months": null
}
]
}
]
}
POST
/api/v3/special/orders
orders:write
201
Специальный заказ. `Idempotency-Key` ОБЯЗАТЕЛЕН. Для Stars и Premium требуется `recipient`.
curl -X POST 'https://smmbilan.uz/api/v3/special/orders' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json' \
-H 'Idempotency-Key: 8f14e45fceea167a5a36dedd4bea2543' \
-H 'Content-Type: application/json' \
-d '{"kind":"stars","variant_id":31,"recipient":"mijoz_nomi"}'
{
"data": {
"id": 900123,
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"kind": "stars",
"variant": {
"id": 31,
"label": "50 Stars",
"country_code": null,
"dial_code": null,
"stars": 50,
"months": null
},
"recipient": "mijoz_nomi",
"quantity": 1,
"status": "pending",
"charge": "0.9900",
"currency": "USD",
"refunded": "0.0000",
"delivery": {
"phone_number": null,
"sms_code": null,
"two_fa_password": null,
"has_code": false
},
"code_available": false,
"code_attempts_left": 0,
"waiting_for_funds": false,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": null
}
}
GET
/api/v3/special/orders
orders:read
200
Специальные заказы, курсор идёт НАЗАД (`before=`). В СПИСКЕ SMS-код и пароль 2FA ВСЕГДА `null` — смотрите `has_code` и запрашивайте заказ по отдельности.
curl -X GET 'https://smmbilan.uz/api/v3/special/orders?limit=50' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": [
{
"id": 900123,
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"kind": "stars",
"variant": {
"id": 31,
"label": "50 Stars",
"country_code": null,
"dial_code": null,
"stars": 50,
"months": null
},
"recipient": "mijoz_nomi",
"quantity": 1,
"status": "pending",
"charge": "0.9900",
"currency": "USD",
"refunded": "0.0000",
"delivery": {
"phone_number": null,
"sms_code": null,
"two_fa_password": null,
"has_code": false
},
"code_available": false,
"code_attempts_left": 0,
"waiting_for_funds": false,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": null
}
],
"pagination": {
"limit": 50,
"has_more": false,
"next_cursor": null
}
}
GET
/api/v3/special/orders/{id}
orders:read
200
Один специальный заказ — С доступами. Принимается `number` (от 900000) или `public_id`.
curl -X GET 'https://smmbilan.uz/api/v3/special/orders/900123' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"id": 900123,
"public_id": "01K3XZQ8V4N7Y2M9P6R1T5W0AB",
"kind": "number",
"variant": {
"id": 12,
"label": "O'zbekiston",
"country_code": "UZ",
"dial_code": "+998",
"stars": null,
"months": null
},
"recipient": null,
"quantity": 1,
"status": "completed",
"charge": "1.2000",
"currency": "USD",
"refunded": "0.0000",
"delivery": {
"phone_number": "+998901234567",
"sms_code": "84921",
"two_fa_password": null,
"has_code": true
},
"code_available": true,
"code_attempts_left": 4,
"waiting_for_funds": false,
"created_at": "2026-08-31T09:14:02+00:00",
"completed_at": "2026-08-31T09:15:40+00:00"
}
}
POST
/api/v3/special/orders/{id}/code
orders:write
200
SMS-код для номера. Каждый вызов расходует попытку — даже неудачный. `Idempotency-Key` здесь НЕ принимается: в ответе есть данные доступа к аккаунту.
curl -X POST 'https://smmbilan.uz/api/v3/special/orders/900123/code' \
-H 'Authorization: Bearer <KALITINGIZ>' \
-H 'Accept: application/json'
{
"data": {
"phone_number": "+998901234567",
"sms_code": "84921",
"two_fa_password": null,
"attempts_left": 4
}
}
Спецификация OpenAPI 3.1: /api/v3/openapi.json — открывается без ключа. Импортируйте в Postman или Insomnia либо сгенерируйте клиентскую библиотеку генератором кода.
Статусы заказов
| v3 | v2 | Примечание |
|---|---|---|
| pending | Pending | Ожидает |
| awaiting | Pending | В очереди |
| in_progress | In progress | В работе |
| processing | Processing | Обрабатывается |
| completed | Completed | Выполнен |
| partial | Partial | Частично |
| canceled | Canceled | Отменён |
| refunded | Canceled | Возвращён |
| failed | Canceled | Ошибка |
Внимание: в v2 НЕТ отдельных статусов `refunded` и `failed` — оба отображаются как `Canceled`.
Типы услуг и обязательные поля
| v3 | v2 | Дополнительные поля | Количество |
|---|---|---|---|
| default | Default | — | вы отправляете |
| package | Package | — | фиксировано (мин. = макс.) |
| custom_comments | Custom Comments | comments | считается от входа |
| custom_comments_package | Custom Comments Package | comments | фиксировано (мин. = макс.) |
| mentions | Mentions | usernames | считается от входа |
| mentions_hashtags | Mentions with Hashtags | hashtags | вы отправляете |
| mentions_custom | Mentions Custom List | usernames | считается от входа |
| mentions_followers | Mentions User Followers | username | вы отправляете |
| mentions_likers | Mentions Likers | username | вы отправляете |
| mentions_media_likers | Mentions Media Likers | media_url | вы отправляете |
| subscriptions | Subscriptions | username | вы отправляете |
| poll | Poll | answer_number | вы отправляете |
| invites | Invites | groups | вы отправляете |
| comment_likes | Comment Likes | username | вы отправляете |
коды ошибок v3
| Код | HTTP | Что произошло |
|---|---|---|
| invalid_api_key | 401 | Ключ недействителен, истёк или отозван. |
| wrong_api_version | 401 | Обращение к v3 с ключом v2 (или наоборот). |
| account_blocked | 403 | Аккаунт приостановлен или заблокирован. |
| api_disabled_for_account | 403 | На этом аккаунте API отключён — напишите в поддержку. |
| insufficient_scope | 403 | У ключа нет нужного разрешения. Смотрите `details.required_scope`. |
| not_found | 404 | Запись не найдена или не принадлежит вам. |
| idempotency_key_required | 422 | Заголовок `Idempotency-Key` не отправлен. При оформлении заказа он ОБЯЗАТЕЛЕН. |
| idempotency_in_progress | 409 | Запрос с тем же ключом ещё обрабатывается. Повторите через 1-2 секунды. |
| idempotency_key_reused | 409 | Тот же ключ отправлен с другой операцией, параметром маршрута или телом запроса. Создавайте новый ключ для каждого действия. |
| validation_failed | 422 | Поля запроса некорректны. |
| order_rejected | 422 | Заказ отклонён. Причина указана в `details.reason`. |
| refill_rejected | 422 | Запрос по гарантии отклонён. Причина указана в `details.reason`. |
| insufficient_balance | 402 | Недостаточно средств. В `details` указаны требуемая и доступная суммы. |
| rate_limited | 429 | Лимит запросов превышен. Подождите время из заголовка `Retry-After`. |
| api_version_disabled | 503 | API временно отключён. Попробуйте ещё раз. |
| sandbox_read_only | 403 | Тестовый ключ не может изменять данные. |
Получите ключ сегодня
Регистрация бесплатна. После создания ключа в панели появится готовый пример с ВАШИМИ ID услуг и ценами.
smmbilan.uz