MukhaTG
Sign in

Документация API

Всё, что нужно для интеграции покупки Telegram-аккаунтов.

Введение

REST API для покупки Telegram-аккаунтов по странам — поштучно и оптом. Списание идёт с баланса, пополняемого криптовалютой. Все ответы в формате JSON. Базовый URL:

https://mukhatg.com/api/v1

Авторизация

Каждый запрос должен содержать ваш API-ключ в заголовке x-api-key. Создать ключ можно в кабинете разработчика.

curl https://mukhatg.com/api/v1/profile \
  -H "x-api-key: sk_live_ваш_ключ"

Цены и скидки

Цена каждой страны рассчитывается автоматически с наценкой. Чем больше вы потратили за всё время, тем выше уровень и постоянная скидка от цены:

УровеньПорог тратСкидка
Bronze$502.5%
Silver$2005%
Gold$5007.5%
Platinum$200010%

Скидка применяется к финальной цене автоматически. Актуальные цены всегда возвращает эндпоинт каталога.

Ошибки

При ошибке возвращается соответствующий HTTP-код и тело с полями error и message.

{
  "error": "insufficient_balance",
  "message": "Not enough balance."
}
КодЗначение
202Не ошибка: код ещё готовится, повторите через retry_after сек
401Неверный или отсутствующий API-ключ
402Недостаточно средств на балансе
404Ресурс не найден
409Нет в наличии / некорректный статус
429Слишком много запросов
502Ошибка вышестоящего провайдера

GET /health

Проверка доступности сервиса и серверного времени. Не требует ключа.

{
  "ok": true,
  "time": "2026-07-19T12:00:00.000Z"
}

GET /catalog

Список доступных стран с вашими персональными ценами (с учётом скидки уровня) и наличием.

curl https://mukhatg.com/api/v1/catalog \
  -H "x-api-key: sk_live_ваш_ключ"
{
  "countries": [
    {
      "code": "US",
      "name": "United States",
      "price": 1.39,
      "available": true
    }
  ]
}

GET /profile

Баланс, уровень скидки и суммарная статистика.

{
  "balance": 42.5,
  "tier": { "id": "silver", "name": "Silver", "discountPercent": 5 },
  "totalSpent": 210.0
}

POST /purchases

Создаёт покупку одного аккаунта. Стоимость сразу списывается с баланса, статус — PENDING. Далее запросите код.

curl -X POST https://mukhatg.com/api/v1/purchases \
  -H "x-api-key: sk_live_ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{ "country_code": "US" }'
{
  "purchase": {
    "id": "pur_a1b2c3",
    "mode": "single",
    "country": "United States",
    "country_code": "US",
    "phone": "+1201555....",
    "price": 1.39,
    "quantity": 1,
    "status": "PENDING",
    "code": null,
    "password": null,
    "created_at": "2026-07-19T12:00:00.000Z"
  }
}

POST /purchases/:id/request-code

Запрашивает код входа для аккаунта. Эндпоинт асинхронный: код приходит от провайдера в течение 5–30 секунд, поэтому с первого раза он почти никогда не готов. В этом случае возвращается HTTP 202 со статусом code_pending. Это не ошибка — повторяйте запрос, пока не получите код.

Важно: статус 202 = «код ещё в пути». Дождитесь retry_after секунд и повторите тот же запрос (polling). Запросы идемпотентны — новый код не создаётся.

Статусы ответа

HTTPСтатусЧто делать
200SUCCESSКод получен — забрать из ответа
202code_pendingПодождать retry_after сек и повторить
409Код уже выдан — забрать через GET /purchases/:id
402insufficient_balanceПополнить баланс

Запрос

curl -X POST https://mukhatg.com/api/v1/purchases/prc_a1b2c3/request-code \
  -H "x-api-key: sk_live_ваш_ключ"

Ответ 202 — код ещё не пришёл (повторите запрос)

{
  "status": "code_pending",
  "message": "Code has not arrived yet. Please retry.",
  "retry_after": 5
}

Ответ 200 — код получен

{
  "id": "prc_a1b2c3",
  "status": "SUCCESS",
  "code": "41 * * 1",
  "two_fa_password": "..."
}

Правильный вызов (polling)

Повторяйте запрос, пока не получите 200, уважая retry_after:

async function getCode(purchaseId, apiKey) {
  const base = "https://mukhatg.com/api/v1"

  for (let attempt = 0; attempt < 20; attempt++) {
    const res = await fetch(
      `${base}/purchases/${purchaseId}/request-code`,
      { method: "POST", headers: { "x-api-key": apiKey } },
    )

    // Код готов
    if (res.status === 200) {
      return await res.json() // { code, two_fa_password, ... }
    }

    // Код ещё не пришёл — ждём retry_after и повторяем
    if (res.status === 202) {
      const { retry_after } = await res.json()
      await new Promise((r) => setTimeout(r, (retry_after ?? 5) * 1000))
      continue
    }

    // Код уже выдавался ранее — забираем через GET
    if (res.status === 409) {
      const r = await fetch(`${base}/purchases/${purchaseId}`, {
        headers: { "x-api-key": apiKey },
      })
      return await r.json()
    }

    throw new Error(`Unexpected status: ${res.status}`)
  }

  throw new Error("Код не пришёл за отведённое время")
}

Альтернатива — вебхук (без polling)

Передайте callback_url — сервер ответит сразу, а код доставит на ваш вебхук, как только он появится. Ваш эндпоинт должен вернуть 200 в течение 5 секунд.

curl -X POST https://mukhatg.com/api/v1/purchases/prc_a1b2c3/request-code \
  -H "x-api-key: sk_live_ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{ "callback_url": "https://ваш-сайт/webhook" }'

POST /purchases/:id/refund

Возврат средств, если код не был получен в течение 20 минут после покупки. Сумма возвращается на баланс.

{
  "id": "prc_a1b2c3",
  "status": "REFUNDED",
  "refunded_at": "2026-07-19T12:05:00.000Z"
}

Оптовые заказы

Заказ нескольких аккаунтов одной страны. Результат — ссылка на ZIP-архив. Оптовые заказы не подлежат возврату.

# Создать оптовый заказ
curl -X POST https://mukhatg.com/api/v1/bulk \
  -H "x-api-key: sk_live_ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{ "country": "US", "quantity": 10 }'

# Проверить статус
curl https://mukhatg.com/api/v1/bulk/blk_xxx -H "x-api-key: sk_live_ваш_ключ"

# Скачать архив
curl -L https://mukhatg.com/api/v1/bulk/blk_xxx/download \
  -H "x-api-key: sk_live_ваш_ключ" -o accounts.zip

Вебхуки

Добавьте URL вебхука в кабинете, чтобы получать события в реальном времени. Мы отправляем POST с JSON и ждём ответ 200 в течение 5 секунд. При ошибке — до 3 повторов.

{
  "event": "code.received",
  "data": {
    "id": "prc_a1b2c3",
    "status": "SUCCESS",
    "code": "41 * * 1"
  }
}

События: purchase.created, code.received, purchase.refunded, bulk.created.