Быстрый старт
Получите персональный API-ключ у оператора сервиса. Возьмите секретный токен из ссылки своей покупки, импортируйте аккаунт и сохраните полученный account_id. Дальнейшие действия выполняются по этому идентификатору.
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"}'{
"account_id": "acc_0123456789abcdef01234567",
"status": "verifying",
"retry_after_seconds": 3
}Ответ 202 означает проверку покупки. Опрашивайте GET /accounts/{account_id} примерно раз в 3 секунды. Статус active означает готовый доступ. Открытие и чтение аккаунта не запрашивают код входа.
Авторизация
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.
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, без перенаправления на поставщика. Для «скачать всё» последовательно скачайте выбранные файлы и соберите свой общий архив.
curl --fail 'https://tgauth.interzone.pro/api/v2/accounts/<account_id>/files' \
-H "Authorization: Bearer $TGAUTH_API_KEY" \
--output telegram-account.zipGET /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.
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 для обращения в поддержку. При блокировке ключа запросы к аккаунтам запрещены, в том числе чтение уже импортированных данных.
{
"error": {
"code": "license_unpaid",
"message": "Лицензия не оплачена",
"request_id": "f73e8d6a0c124132aab9f5d8c321ab45"
}
}| HTTP | error.code | Что делать |
|---|---|---|
| 401 | invalid_api_key / key_revoked | Проверьте ключ. Отозванный ключ больше не работает. |
| 403 | license_unpaid | Лицензия не оплачена. Покажите пользователю необходимость продления. |
| 403 | key_suspended / scope_missing / ip_not_allowed | Ключ приостановлен, не имеет права на метод или запрос пришёл с другого IP. |
| 404 | account_not_found / delivery_not_found | Аккаунт не импортирован этим владельцем либо покупка не найдена. |
| 409 | account_verifying / file_not_ready / account_limit_reached | Дождитесь подготовки или освободите место в своём списке. |
| 410 | delivery_expired / delivery_revoked / code_expired | Срок доступа закончился или доступ отозван. |
| 409 | code_unavailable | Покупка не поддерживает получение кода; используйте доступные файлы. |
| 422 | invalid_input | Проверьте поля и формат JSON; содержимое запроса не возвращается в ошибке. |
| 429 | rate_limited / code_limit_reached | Подождите указанное в Retry-After число секунд. |
| 503 | temporarily_unavailable / provider_temporarily_unavailable | Временная недоступность. Учитывайте Retry-After. |
По умолчанию: 120 запросов/мин, 20 скачиваний/мин, 1000 новых запросов кода за 24-часовое окно и 500 импортированных аккаунтов на владельца. Настройки вашего ключа читайте в GET /me. Лимит аккаунтов общий для ключей одного владельца; счётчики запросов сохраняются при замене ключа. Действуют также общие ограничения поставщика и сервиса. Размер JSON — до 16 КиБ. Повторяйте ограниченные запросы с учётом Retry-After.
Примеры интеграции
Храните связь своего заказа с account_id у себя. Показывайте клиенту свой интерфейс и передавайте файлы через свой сервер. API не требует отображения нашей страницы.
// 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 · 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 и не обходите ограничения выдачи кодов.