TGauth API · v2

Ваш интерфейс. Наши возможности.

Файлы Telegram-аккаунтов, 2FA и получение кода — через запросы с вашего сервера. Создайте свой сайт или приложение с собственным оформлением.

Базовый адресhttps://tgauth.interzone.pro/api/v2JSON · Bearer · HTTPS

Быстрый старт

Получите персональный API-ключ у оператора сервиса. Возьмите секретный токен из ссылки своей покупки, импортируйте аккаунт и сохраните полученный account_id. Дальнейшие действия выполняются по этому идентификатору.

POST /accounts
curl -X POST 'https://tgauth.interzone.pro/api/v2/accounts' \
  -H "Authorization: Bearer $TGAUTH_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"token":"<source-token>","kind":"source"}'
HTTP 202 · application/json
{
  "account_id": "acc_0123456789abcdef01234567",
  "status": "verifying",
  "retry_after_seconds": 3
}

Ответ 202 означает проверку покупки. Опрашивайте GET /accounts/{account_id} примерно раз в 3 секунды. Статус active означает готовый доступ. Открытие и чтение аккаунта не запрашивают код входа.

Авторизация

HTTP
Authorization: Bearer <client-api-key>

Передавайте ключ в заголовке каждого запроса. Держите его на своём сервере или в приватной конфигурации программы: не помещайте в URL, публичный JavaScript, журналы и репозиторий. Сессии браузера и CSRF для этого API не нужны. Запросы непосредственно с чужих веб-страниц не поддерживаются.

GET /me возвращает разрешения и лимиты ключа. Права: accounts:import, accounts:read, files:read, secrets:read и code:request. Без secrets:read коды и пароли скрыты в JSON. Право files:read открывает весь исходный ZIP, включая файлы сессий и 2FA, если они есть; содержимое архива не очищается.

Импорт и список аккаунтов

Из https://dl-cloude.org/c/<token> или нашей /delivery/<token> передавайте только token и kind: source. Для нашей ссылки /a/<token> используйте kind: native. Полная ссылка, номер телефона и данные заказа в запросе не требуются.

Импорт требует владения секретной ссылкой покупки. Покупка должна быть доступна настроенному кабинету поставщика. Произвольные чужие покупки и поиск аккаунта только по номеру не поддерживаются. Повторный импорт того же токена одним владельцем возвращает прежний account_id.

GET /accounts/{account_id}
curl 'https://tgauth.interzone.pro/api/v2/accounts/<account_id>' \
  -H "Authorization: Bearer $TGAUTH_API_KEY"

Массовый импорт: POST /accounts/batch с массивом accounts, до 100 элементов {token, kind}. Ответ содержит items с index от 0 и result либо error для каждого элемента. Успешные элементы сохраняются независимо от ошибок других строк. Для списка используйте GET /accounts?limit=50, затем after=<next_cursor>. Удаление из списка не отзывает исходную покупательскую ссылку.

Файлы и пароль 2FA

GET /accounts/{account_id}/files отдаёт исходный ZIP как application/zip. Дождитесь files.status: ready. Архив возвращается через API, без перенаправления на поставщика. Для «скачать всё» последовательно скачайте выбранные файлы и соберите свой общий архив.

GET /accounts/{account_id}/files
curl --fail 'https://tgauth.interzone.pro/api/v2/accounts/<account_id>/files' \
  -H "Authorization: Bearer $TGAUTH_API_KEY" \
  --output telegram-account.zip

GET /accounts/{account_id}/two-factor возвращает two_factor.status и password, когда пароль найден в архиве или уже полученном результате входа. Возможные состояния: found, missing, unreadable, pending, disabled. Это чтение не запускает получение кода; missing не означает, что 2FA отключена.

Подготовка и получение кода

Только после явного действия пользователя отправьте POST /accounts/{account_id}/login-code. Опрашивайте одноимённый GET примерно раз в 3 секунды. После waiting предложите ввести номер в Telegram, затем ждите delivered. Сохранённый результат содержит login.code и, при наличии, login.password.

POST → GET /accounts/{account_id}/login-code
curl -X POST 'https://tgauth.interzone.pro/api/v2/accounts/<account_id>/login-code' \
  -H "Authorization: Bearer $TGAUTH_API_KEY"

curl 'https://tgauth.interzone.pro/api/v2/accounts/<account_id>/login-code' \
  -H "Authorization: Bearer $TGAUTH_API_KEY"

Повторный POST для того же аккаунта возвращает текущую операцию и не выдаёт новый код. Смена API-ключа не сбрасывает состояние аккаунта. Для blocked, already_used, expired, uncertain или error показывайте фактическое состояние; не запускайте альтернативную выдачу автоматически. QR через API не поддерживается.

Все методы

HTTPПуть после /api/v2Назначение
GET/meПрава и лимиты текущего ключа
POST/accountsИмпорт аккаунта по секретному токену
POST/accounts/batchИмпорт до 100 аккаунтов с результатом каждой строки
GET/accountsСписок своих аккаунтов; limit и after
GET/accounts/{account_id}Состояние аккаунта и разрешённые данные
GET/accounts/{account_id}/filesИсходный ZIP
GET/accounts/{account_id}/two-factorПароль 2FA без нового запроса кода
POST/accounts/{account_id}/login-codeЯвная подготовка получения кода
GET/accounts/{account_id}/login-codeЧтение текущего состояния и сохранённого результата
DELETE/accounts/{account_id}Убрать из своего списка без отзыва исходной ссылки

Ошибки и ограничения

Сравнивайте error.code, а не текст сообщения. Сохраняйте request_id для обращения в поддержку. При блокировке ключа запросы к аккаунтам запрещены, в том числе чтение уже импортированных данных.

HTTP 403
{
  "error": {
    "code": "license_unpaid",
    "message": "Лицензия не оплачена",
    "request_id": "f73e8d6a0c124132aab9f5d8c321ab45"
  }
}
HTTPerror.codeЧто делать
401invalid_api_key / key_revokedПроверьте ключ. Отозванный ключ больше не работает.
403license_unpaidЛицензия не оплачена. Покажите пользователю необходимость продления.
403key_suspended / scope_missing / ip_not_allowedКлюч приостановлен, не имеет права на метод или запрос пришёл с другого IP.
404account_not_found / delivery_not_foundАккаунт не импортирован этим владельцем либо покупка не найдена.
409account_verifying / file_not_ready / account_limit_reachedДождитесь подготовки или освободите место в своём списке.
410delivery_expired / delivery_revoked / code_expiredСрок доступа закончился или доступ отозван.
409code_unavailableПокупка не поддерживает получение кода; используйте доступные файлы.
422invalid_inputПроверьте поля и формат JSON; содержимое запроса не возвращается в ошибке.
429rate_limited / code_limit_reachedПодождите указанное в Retry-After число секунд.
503temporarily_unavailable / provider_temporarily_unavailableВременная недоступность. Учитывайте Retry-After.

По умолчанию: 120 запросов/мин, 20 скачиваний/мин, 1000 новых запросов кода за 24-часовое окно и 500 импортированных аккаунтов на владельца. Настройки вашего ключа читайте в GET /me. Лимит аккаунтов общий для ключей одного владельца; счётчики запросов сохраняются при замене ключа. Действуют также общие ограничения поставщика и сервиса. Размер JSON — до 16 КиБ. Повторяйте ограниченные запросы с учётом Retry-After.

Примеры интеграции

Храните связь своего заказа с account_id у себя. Показывайте клиенту свой интерфейс и передавайте файлы через свой сервер. API не требует отображения нашей страницы.

Node.js · fetch
// Node.js · server
const base = "https://tgauth.interzone.pro/api/v2";
const headers = {
  Authorization: `Bearer ${process.env.TGAUTH_API_KEY}`,
  "Content-Type": "application/json"
};
const response = await fetch(`${base}/accounts`, {
  method: "POST",
  headers,
  body: JSON.stringify({ token: sourceToken, kind: "source" })
});
const data = await response.json();
if (!response.ok) {
  throw new Error(data.error?.message ?? data.error?.code);
}
// Store data.account_id with your order.
// Poll GET /accounts/{account_id} while status is "verifying".
Python 3 · urllib
# Python 3 · server · standard library
import json, os
from urllib.request import Request, urlopen
from urllib.error import HTTPError

request = Request(
    "https://tgauth.interzone.pro/api/v2/accounts",
    data=json.dumps({"token": source_token, "kind": "source"}).encode(),
    headers={
        "Authorization": "Bearer " + os.environ["TGAUTH_API_KEY"],
        "Content-Type": "application/json",
        "User-Agent": "MyStore-TGauth/1.0",
    },
    method="POST",
)
try:
    with urlopen(request, timeout=30) as response:
        account = json.load(response)
except HTTPError as error:
    details = json.load(error)
    raise RuntimeError(details["error"]["code"]) from None

Не сохраняйте секретные токены, архивы, коды и пароли в публичных журналах. Отдавайте данные только владельцу заказа. Используйте таймауты, обрабатывайте JSON-ошибки перед сохранением ZIP и не обходите ограничения выдачи кодов.