# TokenHarbor key-pool: формат, 429-диагностика, signup-статус Операционные заметки по пулу TH-ключей для шлюза api.[REDACTED-NAME].com (one-api, VPS [REDACTED-IP], БД /opt/grok-gateway/new-api/one-api.db). Основной реger: `th_tonline_claim.py` (login t-online акков → verify → $5 claim → key → пуш). Skill `th-autoreg` user-owned — этот файл живёт здесь. ## 1. Формат tokenharbor_keys.txt — парсить поле, не строку ``` email | thk_live_<64 символа> | timestamp email | thk_live_... | REVOKED | timestamp ``` - Bearer с ЦЕЛОЙ строкой вместо ключа → обманчивый `401 Invalid or revoked API key` (TH не различает «мусор» и «отозван»). - Перед любым тестом: сплит по `|`, взять поле с префиксом `thk_live_`, отфильтровать `REVOKED` и `#`-комментарии. - Ключ = `thk_live_` + 64 символа `[a-zA-Z0-9_-]`. ## 2. 429 «Hourly rate limit reached» — окно TH, не мёртвые ключи Когда шлюз (сотни TH-каналов) выбивает часовой лимит free-модели, ВСЕ валидные live-ключи начинают отдавать 429 на прямых запросах к tokenharbor.ai. Лимит на модель/пул, НЕ на IP — повторяется с Windows и VPS одновременно. **Диагностика (2 минуты, без SSH):** 1. Прямой запрос валидным ключом на `claude-haiku-5.5:free` → 429 hourly. 2. Тот же ключ на другой free-модели (`deepseek-v4-flash`) → если 200, ключи и роутинг ЖИВЫ, это модельное окно. 3. Через шлюз `https://api.[REDACTED-NAME].com/v1/chat/completions` (токен в ~/tmp/.testkey) проверить обе модели: 429 на haiku + 200 на другой TH-free модели = подтверждение. **НЕ делать при таком 429:** ротацию прокси (лимит не по IP), «починку» mapping в one-api.db, перезапуск реger'а. Ждать сброса часового окна. Free-модели TH (из /v1/models): claude-haiku-5.5, mimo-v2.6-flash, mimo-v2.5, deepseek-v4.1-flash, deepseek-v4-flash. Остальные ~60 — платные. Старые акки: `free allowance used, next period <дата>`. ## 3. Signup-путь сломан на стороне TH (не капча) - `/login?mode=signup`: НЕТ видимого Turnstile (`[data-sitekey]`, `.cf-turnstile`, `window.turnstile`, challenges.cloudflare — все пусты). - Форма сабмитится (React nativeSet + `input[type="password"]`), но сервер отвечает «We couldn't create your account right now» на ЛЮБЫЕ email — реальные из пула и фейковые gmx/t-online. - Вывод: капча-солверы (2captcha/sidecar) signup не чинят; блок серверный. Не тратить баланс солверов. - Рабочий путь пополнения пула: `th_tonline_claim.py N` — login уже существующих t-online аккаунтов (17k пул, письма доходят), claim $5, создание ключа, автопуш на шлюз. - Волна ~1 акк/мин; лог `th_run_*.log`; прогресс `[N/200]`. ## 4. Синхронизация ключей в шлюз - `th_sync_vps.py` — пуш ключей в one-api.db (channels tokenharbor). Прогон даёт +N свежих каналов; после синка `systemctl restart new-api`. - Роутинг haiku: budsin-каналы с высоким priority и mapping `claude-haiku-5.5→claude-haiku-4-5` подменяют модель — при жалобе «haiku отдаёт 4.5» первым делом проверить budsin в abilities/model_mapping и удалить его haiku-строки. - Проверка оригинальности ответа: `id` НЕ должен начинаться с `fw-` (fireworks-подмена), `model` в ответе = `claude-haiku-5.5`. ## 5. 2captcha для этого проекта (рабочий ключ в .env авторег-проекта, TWOCAPTCHA_KEY) - Баланс/задачи ТОЛЬКО `POST https://api.2captcha.com/res.php` с lowercase-параметрами; GET → ERROR_EMPTY_METHOD; домен `2captcha.com/res.php` → 400 (Cloudflare). - Баланс приходит в поле `request` как строка. - Ключ из旧 записей памяти может быть опечаткой (ERROR_KEY_DOES_NOT_EXIST) — всегда валидировать getbalance перед волной.