Files
autoreg-skills-max/skills/ai-provider-autoreg/references/treg-to-autoreg-and-reverse.md

11 KiB

treg.to autoreg + reverse

treg.to = "OpenRouter for agent tools": 3955 endpoints / 111 providers / 143 catalog YAML, Apache 2.0 (github.com/superdesigndev/treg, ~5K stars), hosted on Render (503 saturation common — retry with backoff; every 503 body has treg_saturated:true).

Signup protocol (email OTP + Turnstile on start)

  1. POST /auth/email/start headers Content-Type: application/json + X-Treg-Key-Protocol: 1 + browser headers (Origin: https://treg.to, Referer: https://treg.to/app, Chrome UA), body {"email": ..., "captcha_token": <turnstile token>} → {"sent":true}.
    • Turnstile is REQUIRED on start (added Oct 2026). Without captcha_token → 400 "Email codes need a browser check". Sitekey 0x4AAAAAAFVJ1qUhtZ_qG-N7, action email_start.
    • /auth/email/verify does NOT take a captcha token — one token per registration, minted at start only.
  2. OTP: 6-digit code in email Subject, sender treg.to. IMAP: MUST m.noop() before search (Gmail stale results), and filter Date >= since_ts-30 (re-issued start invalidates old code).
  3. POST /auth/email/verify {"email", "code"} → {"token", "email"} + Set-Cookie session.
  4. POST /orgs {"name": org} with header X-Treg-Token: <identity> — org names containing treg are RESERVED/rejected.
  5. Resolve the REAL slug: GET /orgs with identity token. On name collision (another account already took it) the server silently appends -N to the slug (myorg → myorg-2).
  6. PIN (critical): GET /auth/cli-token with header X-Treg-Org: <REAL slug> and the SESSION COOKIE but NO X-Treg-Token header — bootstrap token in header → 403 "a bootstrap token cannot mint a Default key" (server rejects BOOTSTRAP-scope claims). Cookie alone authenticates. Returns {"token": <org_key>} = the usable API key.
    • Pinning with a WRONG/nonexistent slug does not error: it returns a temporary login token and leaves the org active:false → every team resource then 403s with "finish team setup first — this temporary login token cannot access team resources". Symptom triad = slug collision; fix = re-login (fresh OTP) and pin with the real slug.
  7. Balance: GET /orgs/{org_id}/balance?limit=3 with org key → balance_micro (the live config's grant amount is echoed in the promo_grant_micro field of the same response — check it before assuming a grant is dead). Signup grant conditions (from src: domain/identity/promotions.py + application/signup.py):
    • Once per INBOX, not per user: SignupPromoClaim is UNIQUE on promo_inbox(email) — +tag stripped on ALL domains, dots stripped on gmail/googlemail. All aliases/dot-variants of one mailbox share ONE gift forever. A consumed claim is permanent: a second POST /orgs on the same user grants $0 again — never retry.
    • Gated by promo_eligible at user creation: the email door sets promo_eligible = (turnstile_outcome == PASS); cloakbrowser-factory tokens pass siteverify but are not classified PASS → user created with $0. The GitHub OAuth door calls find_or_create_user without the flag (default True) → $1 works.
    • Ledger proof of a grant: balance entries has kind=grant, source=signup; entries=[] = claim never fired.

GitHub OAuth door (the working grant path)

  • GET /auth/github → 302 with client_id Ov23lievb8du + state; cookie treg_oauth_state. Log into GitHub (password+TOTP via GHSession), open the authorize URL IN FULL (redirect_uri mandatory; already-authorized accounts return a meta-refresh page with code in the body). GET /auth/github/callback?code&state with the state cookie → treg_session cookie → POST /orgs {name} → response contains org_id, slug AND a per-org token — save the full JSON: old cli-tokens 403 on another org's balance ("this key belongs to another team"). Then GET /auth/cli-token (cookie + X-Treg-Org) for the durable key.
  • Flagged GitHub accounts: authorize redirects to /dashboard WITHOUT a code → skip the account.
  • Script: tmp/treg_test/gh_grant_test.py N (pool hoplite-gateway/data/gh_accounts.json, state gh_grant_state.json, bank treg_gh_accounts.jsonl). Hit rate ~50% on recycled pools ($0 = inbox already claimed); fresh never-touched mailboxes should approach 100%.
  • API auth header: X-Treg-Token + X-Treg-Key-Protocol: 1. Authorization: Bearer = 401.
  • Scopes gate (deployed Oct 2026): cli-tokens minted before the deploy carry BOOTSTRAP scope → 403 "finish team setup first" on ALL team resources including balance, while the money stays intact in the ledger. Distinguish from the wrong-slug triad (step 6): a token that WORKED before and 403s now = scope gate, not slug collision. Unlock = re-login wave (email OTP + Turnstile factory) → fresh team-scoped cli-token. Audit tools must classify bootstrap-403 separately from banned-401/403.

Turnstile token factory (WORKING bypass)

The site is an SPA: /login 302-redirects to /app; the login form (incl. input#em-input with data-captcha="email_start") is hidden until the nav "Sign in" link is clicked. The widget is invisible — the page's own window.tregCaptcha.token(action) helper renders it and resolves a fresh single-use token (prefetched on input focus, ~0s; FRESH_MS 240s).

Working recipe (cloakbrowser headless, Python311):

  1. cloakbrowser.launch(headless=True) → goto https://treg.to/app (domcontentloaded) → sleep 3-4s.
  2. Click //nav//a[normalize-space()='Sign in'] (fallback text=Sign in).
  3. page.fill('#em-input', <any email>) — focus arms the widget.
  4. Per registration: tok = page.evaluate("()=>window.tregCaptcha.token('email_start')") — returns ~750-char token instantly. One page mints unlimited tokens sequentially; reuse across accounts.
  5. On captcha_failed from start: evaluate window.tregCaptcha.reset() (if present), sleep 3, re-mint once.
  6. On browser death/bad token: [REDACTED] + re-navigate + re-click Sign in.

Why sidecar solvers fail here (both modes): intercept-mode tokens get rejected by server-side siteverify because Turnstile binds the token to the hostname where the widget rendered (solve page ≠ treg.to). Real-page sidecar mode times out because the widget is invisible and only armed by the SPA's own focus handler + tregCaptcha object — filling #em-input via raw Playwright pre_actions did not produce a solvable checkbox. Generalizable rule: when a site exposes its own JS captcha helper (window.<x>Captcha.token(action)), drive a real browser on the target origin and call the helper — native tokens pass siteverify; externally-solved tokens bound to another hostname do not.

Scaling model (what mints new $1 users)

  • GENERALIZABLE RULE: when a signup grant stops paying on one door, do not declare the promo dead — read the reversed grant code for per-door eligibility gates. Captcha-outcome classification (promo_eligible) and per-inbox claim tables gate payout silently while registration still succeeds E2E; OAuth/social doors commonly default to promo-eligible because no captcha scoring is involved. Probe each door with 1 account and read the ledger, not the registration status.
  • Email door grants are DEAD for factory-captcha tokens (outcome ≠ PASS → $0; verified 3 consecutive probes). Registration still works — accounts are free-endpoint-only.
  • Gmail +aliases canonicalized → $0 (one gift per inbox). t-online = distinct inboxes, fine for claims — but the email door's PASS gate blocks the grant anyway.
  • The live $1 path is the GitHub OAuth door (section above), limited by GH accounts with never-touched mailboxes.
  • Email-domain blocklist is env-only (TREG_BLOCKED_EMAIL_DOMAINS); unset blocks nothing — major-ISP freemail passes.
  • Use 5-digit random org names to avoid cross-wave slug collisions; keep one shared used_orgs set across all farm processes on the same host.
  • IP budget: 30 OTP starts / 15min / IP; pace 40s ≈ 22/15min stays under. On 429 cool 900s. If minting tokens through a proxy browser, the /auth/email/start HTTP call must exit from the SAME IP (siteverify checks remote_ip).
  • IMAP hosts by domain: gmail.com→imap.gmail.com, t-online.de→secureimap.t-online.de (993), web.de→imap.web.de, gmx.de→imap.gmx.net, outlook/hotmail→outlook.office365.com. Pool script auto-maps; unknown domain → imap.<domain>.

Limits (from repo src/treg)

  • OTP start: 30 / 15min / IP, 5 / email; verify: MAX_OTP_ATTEMPTS per code.
  • Routed endpoints (treg.*) need JSON --data identity, not just --query.

Pricing (live-verified)

  • treg.x.user.posts $0.0005, treg.web.search $0.0001 (19 free providers), tikhub.tiktok.user.profile $0.001. 0% platform margin; BYOK keys unmetered; verified public upstreams = free routes.
  • Referral $5+$5 (referee must top up $10). 402 on zero balance returns JSON {balance, cost, topup_url}.

Farm scripts

  • PUBLIC repo (config-based, secret-free): github.com/gbonnet65923/treg-autoreg — treg_farm.py + verify_bank.py + config.example.json (IMAP creds via config.json/env TREG_IMAP_USER/PASS). NOTE: public repo predates Turnstile — its start call lacks captcha_token; sync the token-factory pattern before reuse.
  • Internal working copy C:/Users/User/tmp/treg_test/:
    • treg_farm_v3.py — CURRENT farm (Turnstile-aware): cloakbrowser TokenFactory class (launch/click Sign in/fill/tregCaptcha.token(), auto-relaunch, remint on captcha_failed) + t-online pool reg flow (IMAP Subject+body code, org create, slug resolve, cookie-pin cli-token, balance). Usage: treg_farm_v3.py <pool_file> <count> [--start N] [--pace 40]. Banks: treg_pool_accounts.jsonl + treg_pool_state.json (shared with old pool script).
    • v3_loop.sh — infinite wave wrapper (waves of 30, sleep 60, logs farm_v3.log + farm_v3_summary.log). Must export HOME=/c/Users/User, USERPROFILE='C:\Users\User', PROCESSOR_ARCHITECTURE=AMD64 inside the script — Hermes background bash sessions lack them and cloakbrowser dies with "Could not determine home directory" / "Unsupported platform: Windows ." (exports inside a wrapper .sh DO propagate, unlike chained exports before a background launch).
    • treg_farm.py — Gmail-alias waves (DEAD for grants: aliases canonicalized; also predates Turnstile — start stage now 400s without captcha_token).
    • treg_farm_pool.py — pre-Turnstile pool farm (same flow minus captcha; superseded by v3).
    • tok_factory_test.py — minimal E2E proof of the token factory + start call.
  • Before relaunching a loop, check for zombie loops (two loops race the same state file): psutil probe by cmdline substring, taskkill /F /PID each, then start exactly one.
  • Run: cd tmp/treg_test && PYTHONPATH="" Python311/python.exe treg_farm_v3.py POOL COUNT (Python311 has requests + cloakbrowser).
  • CLI: treg.exe login --token <org_token>, treg call <tool> --data '{}'. Install: pip install tools-registry[proxy] (uv venv breaks on MSYS TMP paths).

MCP

  • https://treg.to/mcp/v2/ (Claude connector), llms.txt at treg.to/llms.txt for agents.