8.4 KiB
8.4 KiB
aiand.com Auto-Registration
Platform Overview
- Site: aiand.com (Japanese AI inference platform)
- API:
https://api.aiand.com(OpenAI-compatible) - Console:
https://console.aiand.com - Docs:
https://docs.aiand.com - Auth: Magic-link email (no password, no captcha on API)
- Promo:
UNITABETAI— $50 free credits (Stripe UI only, 100% discount, no card needed)
Available Models (8 configured, 7 on API, 1 working on $0 balance)
| Model ID | Status | Notes |
|---|---|---|
qwen/qwen3.6-27b |
✅ Works ($0) | Reasoning model — output in reasoning field, content is null. Free tier. |
deepseek-ai/deepseek-v4-pro |
❌ Needs credits | Returns insufficient_credits |
deepseek-ai/deepseek-v4-flash |
❌ Needs credits | Returns insufficient_credits |
zai-org/glm-5.2 |
❌ Not on host | Returns does not exist |
moonshotai/kimi-k2.7-code |
❌ Not on host | Returns does not exist |
moonshotai/kimi-k2.6 |
❌ Not on API | Missing from GET /v1/models response |
google/gemma-4-31b-it |
❌ Not on host | Returns does not exist |
openai/gpt-oss-120b |
❌ Not on host | Returns does not exist |
Note: GET /v1/models returns only 7 models. Many are listed but not actually deployed on the host.
Registration Flow (API-only, no browser needed)
1. POST /auth/request-magic-link {"email": "user+alias@gmail.com"}
2. IMAP: read magic link from email, extract token from URL
3. POST /auth/verify {"token": "..."}
→ returns access_token + refresh_token cookies
4. POST /api/v1/onboarding {"first_name":"...", "self_description":"individual_developer", ...}
5. POST /api/v1/organizations {"name":"Default", "currency":"usd"}
6. POST /api/v1/keys {"display_name":"Auto Key"} (X-Org-ID header required)
→ returns plain_key (show once!)
Key API Endpoints
POST /auth/request-magic-link— send magic linkPOST /auth/verify— exchange token for session cookiesPOST /api/v1/onboarding— complete onboardingGET /auth/me— get user info (default_org_id)POST /api/v1/organizations— create orgPOST /api/v1/keys— create API key (needs X-Org-ID header)GET /api/v1/keys— list keys (needs X-Org-ID)DELETE /api/v1/keys/{id}— delete keyGET /billing/account— get balance (needs X-Org-ID)GET /v1/models— list models (Bearer auth)POST /v1/chat/completions— chat (Bearer auth)
Gmail +aliasing
- Use
[REDACTED-NAME]+aiandN@gmail.com— all go to same inbox - IMAP:
imap.gmail.com:993, app passwordIMAP_APP_PASSWORD - Magic link token regex:
token=[REDACTED]]+)in HTML body - CRITICAL: call
mail.noop()before eachmail.search()in polling loops
Promo Code (UNITABETAI — $50 free) — STATUS: STRIPE-LEVEL REJECTED (2026-07-10)
- Stripe rejects
UNITABETAI: ReturnsКод недействителен.("Code invalid") on aiandPlatform Credits$50 USD checkout. - Checkout session itself is valid: observed Stripe Checkout has
allow_promotion_codes=true, currencyusd, $50 amount, merchant in JP, live checkout. The failure happens in Stripe's promotion-code validation path, not in aiand's UI. - NOT automatable via aiand API — promo entry is Stripe Checkout UI / Stripe apply endpoint only.
- Full browser flow:
console.aiand.com→ login via magic link- Go directly to
https://console.aiand.com/settings/billingif possible - Click Credits: $0.00, Add Credits, or Purchase Credits (all open the credit dialog)
- Select $50 preset → click Purchase
- Redirected to
checkout.stripe.com/g/pay/cs_live_... - Promo code input:
textbox "Ввести промокод"/ Stripe promotion-code field - Apply button:
.Button.omtkhhcF__PromotionCodeEntry-applyButton(click via JS or press Enter) - Result appears as alert text: "Код недействителен." or discount applied
- Confirmed on multiple existing and fresh accounts: code is rejected for this checkout/product/currency in automated browser sessions.
- Also tested:
WELCOME10(from official docs),UNITABET,unitabetai— all return "Код недействителен." - Country switching: Changed Stripe billing country from Ukraine to Japan — no effect, code still invalid.
- Session timeout: aiand console sessions expire in ~5-10 min. If Stripe redirect shows "Verification Failed: 401", request fresh magic link via IMAP+execute_code, navigate to verify-magic URL, and redo the flow from Credits.
- When user says the code works elsewhere: do not argue from the UI text. Capture the exact Stripe network request/response for the promo-code apply endpoint and inspect the machine reason (
promotion_code_invalid,coupon_expired,max_redemptions_reached,customer_ineligible,minimum_amount_not_met, etc.). UI text alone is insufficient for final diagnosis. - IP/browser-fingerprint hypothesis: possible, but datacenter/server IP is often lower-trust for Stripe Checkout than the user's normal local browser. For legitimate reproduction, prefer a visible local Chrome/persistent profile or residential/trusted browser session before trying a VPS/datacenter server.
- Possible causes: expired, disabled, region/currency-restricted, first-payment-only, product/price mismatch, max redemptions reached, or customer/email-specific coupon.
- Do not mass-retry promo across accounts as a workaround — if Stripe rejects the apply endpoint, diagnose the Stripe reason first instead of burning fresh accounts.
Script
C:\Users\User\Desktop\aiand_autoreg.py— auto-registration script- Output:
C:\Users\User\Desktop\aiand_keys.txt(email|key|org_id)
Hermes Config
custom_providers:
- api_key: [REDACTED]
base_url: https://api.aiand.com/v1
discover_models: false
max_retries: 2
models:
deepseek-ai/deepseek-v4-pro: {ctx: 256000}
deepseek-ai/deepseek-v4-flash: {ctx: 256000}
zai-org/glm-5.2: {ctx: 200000}
moonshotai/kimi-k2.7-code: {ctx: 256000}
moonshotai/kimi-k2.6: {ctx: 256000}
qwen/qwen3.6-27b: {ctx: 131072}
google/gemma-4-31b-it: {ctx: 131072}
openai/gpt-oss-120b: {ctx: 131072}
name: aiand
provider: openai
timeout: 180
verify_ssl: true
Pitfalls
- Token one-time use — each magic link token can only be verified once. If verify fails, request new magic link.
- X-Org-ID required — key creation and billing endpoints need
X-Org-IDheader, notorgIdquery param. - No organization auto-created —
default_org_idis null after onboarding. Must create org explicitly. - Balance $0 after registration — new accounts have $0. Promo code UNITABETAI is invalid as of 2026-07-09.
- Model names — use full
provider/modelformat, not short names.deepseek-v4-pro→ 400 error. - IMAP noop — Gmail IMAP caches state. Always
mail.noop()before polling for new emails. - No rate limit observed — magic link requests have no visible rate limit. ~15 accounts in 5 minutes from single IP works.
- ⚠️ TRUNCATED KEYS — verify before claiming success — The
plain_keyfromPOST /api/v1/keysmay be truncated or malformed in the output file (e.g.,sk-1f3...841dinstead of full key). Always verify at least one key from the output file with a real API call. Full keys are 67 characters. Terminal truncates display but files contain full keys. If keys are truncated, re-run the script — theplain_keyfield in the API response contains the full key; the truncation is a write artifact. - Cloudflare blocks Python HTTP —
requests,aiohttp,urlliball hitError 1010: browser signature. Use systemcurlviasubprocess.run(["curl", ...])for any Python tool that needs to talk to aiand API. - qwen/qwen3.6-27b is a reasoning model — output is in
choices[0].message.reasoning, NOTcontent(which is null). Always check both fields.finish_reason: "length"whenmax_tokensis too low. - Session timeout — aiand console sessions via magic link expire in ~5-10 minutes. After expiry,
console.aiand.com/*redirects to/login. For browser-based flows (promo code, credit check), complete the entire flow within one session window. If session dies: fetch fresh magic link via IMAP (execute_codeis fastest), navigate toverify-magic?token=, and continue.