Changelog
Every change to the askTIAN API is documented here. Breaking changes are clearly marked.
GET /api/trpc/catalogue.changelogSubscribe via RSSv3.40.6Auth — Bearer token pattern (eliminates sign-in loop)Rewrote auth flow to use Privy JWT directly as Authorization: Bearer <token> on every tRPC request, matching the pattern used by wallet.asktian.com and chat.asktian.com. The old flow (getAccessToken → POST /api/auth/privy → session cookie) depended on the Privy embedded wallet iframe loading successfully. The iframe was blocked by X-Frame-Options: SAMEORIGIN from privy.asktian.com (Cloudflare proxy), causing getAccessToken() to hang indefinitely and the dashboard to show a permanent 'Completing sign-in…' spinner. New flow: (1) tRPC client calls getAccessToken() lazily in headers() on every request; (2) server/context.ts verifies non-API-key Bearer tokens via PrivyClient.verifyAuthToken() and upserts the user on first login; (3) useAuth.ts simplified — isAuthenticated = privyAuthenticated directly, no session sync needed; (4) SyncErrorBanner and retrySync removed from Dashboard, Playground, and ApiDocs.
v3.40.5Sign-in loop — switched to PrivyClient.verifyAuthToken()Replaced manual SPKI/jwtVerify approach in privyAuth.ts with the official @privy-io/server-auth PrivyClient.verifyAuthToken(). The manual approach required knowing the exact issuer, audience, and algorithm — any mismatch caused a 401 loop. PrivyClient handles all of this automatically including JWKS key rotation. PRIVY_APP_SECRET added to ENV. Vitest added: server/privy.auth.test.ts (4 tests).
CSP — explicit base-uri, form-action, script-src-attrAdded base-uri: 'self', form-action: 'self', and script-src-attr: 'none' explicitly to the helmet CSP config instead of relying on helmet defaults. Prevents base tag injection, form hijacking, and inline event handler injection.
v3.40.4Auth — Privy login modal console warningCapped loginMethodsAndOrder.primary to 4 methods (Privy enforces a maximum of 4). Telegram moved from primary to overflow. Primary is now: email, google, apple, twitter. Overflow: telegram, coinbase_wallet, okx_wallet, metamask, wallet_connect.
v3.40.3DependenciesUpgraded @privy-io/react-auth from 3.18.0 to 3.20.0. Changes: 3.19.1 — fixed invalid email submission in auth modal, fixed MoonPay back button bug; 3.20.0 — added defaultSolanaRpcsPlugin for Solana RPC support, added emailDomain config in PrivyProvider, updated @privy-io/js-sdk-core to 0.60.8.
v3.40.2Dashboard — Completing sign-in hang (new sign-ins)getAccessToken() in useAuth was gated on privyReady=true. When the Privy embedded wallet iframe fails to load (custom_api_url proxy not serving iframe HTML), privyReady stays false, so getAccessToken() was never called and syncSession() never ran. Fix: (1) removed privyReady gate from the sync useEffect — sync now starts as soon as privyAuthenticated=true; (2) added 10s timeout to getAccessToken() via Promise.race so it fails fast instead of hanging; (3) moved syncError display outside the loading block so it renders even after loading=false; (4) removed (!isAuthenticated && privyAuthenticated) from the spinner condition so users are not stuck in an infinite spinner if sync has already failed.
v3.40.1Dashboard — Completing sign-in hanguseAuth loading state no longer blocks on privyReady when a valid session cookie already exists. Previously, if the Privy embedded wallet iframe failed to load (e.g. custom_api_url proxy issue), privyReady stayed false forever, keeping loading=true and the dashboard stuck on 'Completing sign-in…'. Now loading only waits for privyReady when there is no session yet (i.e. a fresh first-time login). Users with existing session cookies see the dashboard immediately regardless of Privy iframe state.
v3.40.0api_usage table — creditsUsed columnAdded creditsUsed INT column to api_usage table (migration applied). All non-predict endpoints (tian.global, tian.eastern, tian.western, tian.eastwest, tian.african, tian.islamic, tian.indian, compatibility.*, almanac.daily, divination.draw, qimen.calculate, liuyao.calculate, meihua.calculate, nameAnalysis.analyze, auspicious.analyzeNumber, ifa.draw, vodun.calculate, hakata.calculate, rammal.calculate, khatt.calculate, jyotish.calculate, anka.calculate, horoscope.calculate, mahabote.calculate, twelvepalaces.calculate) now record their TIAN Points cost in api_usage.creditsUsed on every call. predict.* endpoints also pass their cost (100/150/batchTotal) to trackUsage().
GET /api/v1/stats/predict — totalPointsSpenttotalPointsSpent and pointsSpentLast30Days now include creditsUsed from api_usage in addition to predict_binary_usage, predict_multi_usage, and predict_batch_results. The daily volume time series also incorporates api_usage daily points. Two new unified alias fields added: totalPointsConsumed and pointsConsumedLast30Days.
mahabote.calculate + twelvepalaces.calculateBug fix: these two endpoints were passing statusCode=5 (the credit cost) as the HTTP status code argument to trackUsage(). Corrected to statusCode=200 with creditsUsed=5 in the correct position.
v3.39.0Homepage hero paragraphReplaced verbose copy with concise single-line: '29 divination systems across 5 traditions — plus 7 TIAN Blended synthesis endpoints. Structured JSON. Typed responses.'
Homepage status pillRemoved 'Base network' from the status pill and from the code block footer status bar.
Homepage hero code blockCode block auto-rotation now pauses when the user hovers over the block, resuming on mouse leave. almanac.daily response example filled with realistic fields: date, dayRating, luckyColor, luckyNumber, auspiciousHours, avoidHours.
GET /systemsHash-based scroll-to-tradition: navigating to /systems#Eastern (or any tradition) now smoothly scrolls to and briefly highlights the matching section on mount.
v3.38.0Homepage hero code blockCode block now rotates through 4 examples (predict.binaryBatch, tian.global, compatibility.birthday, almanac.daily) every 6 seconds with manual tab switcher. Each example shows correct endpoint, body, response, and latency. Amber dot indicators show current position.
Homepage tradition pillsTradition pills (Eastern/Western/Indian/African/Islamic) now link to /systems#Tradition anchors for direct discovery.
GET /systemsAdded id anchors (Eastern, Western, African, Indian, Islamic) to each tradition section for direct deep-linking from the homepage tradition pills.
v3.37.0Homepage banner badgeBanner version badge is now dynamic — reads CHANGELOG[0].version from trpc.catalogue.changelog instead of the hardcoded 'v3.30.0' string.
tian.global catalogue entryCatalogue description corrected from '29 divination systems' to '28 divination systems (Life Blueprint excluded)'. The tian.global fan-out has always excluded boneWeight; the description now reflects this accurately.
Homepage heroTradition tag row added between the hero paragraph and CTA buttons: five colour-coded pill tags (Eastern/amber, Western/blue, Indian/orange, African/green, Islamic/teal) give the hero section visual breathing room and immediately communicate the tradition breadth.
v3.36.0tian.global — all pagesCorrected tian.global credits from 140 to 145 TIAN Points across ApiDocs, Playground, EpistemicAgentGuide (3 occurrences), and Home.tsx TIAN Blended section. System count corrected from 26/35 to 28 across all occurrences.
Homepage hero statstian.global hero card now shows 28 systems · 145 $TIAN (was 26 systems · 130 $TIAN). Tags updated from all-26 to all-28.
Status pageGlobal TIAN note corrected from '37 traditions · 140 $TIAN' to '28 systems · 145 $TIAN'.
v3.35.0Homepage hero paragraphRewrote hero copy from the bloated 37-tradition/46-endpoint version to the accurate concise form: '29 divination systems across 5 traditions — Eastern, Western, Indian, African, and Islamic — plus 7 TIAN Blended synthesis endpoints and 5 Predict Oracle endpoints.'
Homepage hero statsEndpoint stat corrected from 46 to 49. Third stat replaced from 'TIAN Points / for Predict Oracle' to '5 traditions / 29 divination systems'.
Homepage SeoHeadSEO description and ogImageAlt updated to use 49 endpoints, 29 systems, 5 traditions. LD+JSON description also corrected.
v3.34.0Homepage bannerBanner 'See what's new' anchor is now dynamic — reads CHANGELOG[0].version from trpc.catalogue.changelog (staleTime 10 min, fallback v3.33.0). Will auto-update with every new version without code changes.
GET /guides/:slugIndividual guide pages now render a per-guide SeoHead using guide title, description, and tags from trpc.guides.list. Each guide has its own canonical URL and OG card.
GET /docsDocs sidebar now shows 'Developer Guides' (amber, links to /guides) and 'Agent Guide' (zinc, links to /docs/epistemic-agent) below the nav items, giving Docs-first developers a direct path to integration guides.
v3.33.0Homepage bannerBanner anchor fixed from #v3.31.0 to #v3.32.0 so 'See what's new' lands on the correct changelog entry.
SiteNavGuides badge count now driven from trpc.guides.list.useQuery() (staleTime 5 min, fallback 3). Auto-updates when new guides are added without touching SiteNav.tsx.
GET /guidesAdded SeoHead with title 'Integration Guides — askTIAN API', description, and keyword set for Telegram bot and app integration discoverability.
v3.32.0Homepage bannerBanner anchor fixed from #v3.30.0 to #v3.31.0 so 'See what's new' lands on the correct changelog entry.
SiteNavGuides nav link now shows a count badge (3) in both desktop and mobile nav, matching the Systems badge pattern.
EpistemicAgentGuideAdded 'More integration guides' callout above the Launch Checklist section, linking to /guides with a brief description of the 3 available guides.
v3.31.0Homepage bannerBanner bumped to v3.30.0 with copy referencing the new /guides section, EpistemicAgentGuide Sections 10.5–10.8, and SDK v2.0.0. Banner key updated so returning users see the new message.
SiteFooterAdded Guides link to footer nav pointing to /guides index page.
GET /guidesAdded tag-filter row above guide cards. Clicking a tag filters the list; clicking the active tag or 'All' resets. Tags on guide cards are also clickable to filter inline.
v3.30.0GET /guidesNew /guides index page listing all 3 developer integration guides with title, description, audience, version, date, and tags. Accessible from the top nav Guides link.
GET /guides/:slugIndividual guide pages rendering Markdown content via react-markdown + remark-gfm. Supports slugs: app-integration, telegram-bot, telegram-bot-api.
tRPC guides.listPublic tRPC procedure returning metadata for all 3 developer guides.
tRPC guides.getPublic tRPC procedure returning full Markdown content for a guide by slug.
SiteNav Guides linkGuides nav link now points to /guides index page instead of /docs/epistemic-agent directly.
Homepage banner anchorBanner 'See what's new' anchor updated from #v3.25.0 to #v3.29.0.
v3.29.0docs/telegram_bot_chatapi_wishlist_response.mdEngineering response to Telegram bot Chat API wishlist: resolves session token TTL discrepancy (privyToken=24h vs sessionToken=5min single-use), accepts conversations.list pagination and rate limit headers for v3.30.0, partially accepts conversation metadata (lastMessageAt + messageCount) for v3.31.0, declines bulk deduct (security model), resolves Telegram webhook retry policy (third-party docs + idempotency pattern), defers analytics endpoint.
v3.28.0EpistemicAgentGuide — Launch Checklist Sprint 4 (Telegram Bot)New Sprint 4 block added to the Launch Checklist with 11 items covering bot registration, wallet callback URL registration, DB schema, /start, wallet auth flow, message handler, /system two-level picker, /balance and /topup, /history and /new, webhook migration, and message splitting.
EpistemicAgentGuide — Wallet Callback Registration noteAmber note added below the checklist explaining how to register the /wallet-callback URL and obtain TIAN_WALLET_API_KEY: email [email protected] with bot username and callback URL; mailto link pre-fills subject and body for one-click submission.
v3.27.0Homepage banner textBanner copy updated from 'Sections 10.5 & 10.6' to 'Sections 10.5–10.8' and version badge bumped to v3.26.0 to reflect all new guide sections.
EpistemicAgentGuide — Launch Checklist Sprint 2Sprint 2 checklist updated: replaced apiFanout.ts and SSEStreamer items with native SSE stream reference (Section 10.7), added tradition-to-animation mapping item, updated quota enforcement to reference creditsUsed from done event.
EpistemicAgentGuide — Launch Checklist Sprint 3Sprint 3 checklist updated: Daily Anchor items now reference two-call composition (almanac.daily + horoscope.calculate, Section 10.8) with 90-day and 24-hour cache TTLs, and DailyAnchorData interface migration note.
docs/telegram_bot_integration_response.mdEngineering response to Telegram bot integration guide v1.0: 12 sections covering credentials, architecture, DB schema, session token lifecycle, system picker UX, TIAN Blend typing indicator pattern, complete error code reference, webhook setup, message splitting, /history implementation, and sprint plan.
v3.26.0Homepage banner anchorBanner 'See what's new' link corrected from /changelog#v3.24.0 to /changelog#v3.25.0 so it lands on the latest changelog entry.
EpistemicAgentGuide — Section 10.8 Daily Anchor PatternNew Section 10.8 documents the Daily Anchor card pattern: interim two-call composition (almanac.daily + horoscope.calculate) with field reference table and cache TTLs, future daily.anchor single-call preview with new luckyHours/dominantTheme fields, and a migration path table mapping interim fields to future API fields.
v3.25.0Homepage banner — bumped to v3.24.0Homepage What's New banner updated to v3.24.0 highlighting EpistemicAgentGuide Sections 10.5 & 10.6 and SDK v2.0.0 typed response interfaces.
Homepage SDK badge — bumped to v2.0.0Homepage npm install badge updated from [email protected] to [email protected] with updated npmjs.com link.
EpistemicAgentGuide — Section 10.7 SSE Contract AlignmentNew Section 10.7 documents the complete v3.24.0 SSE event contract: new synthesis_start event, tradition/iconUrl/systemSlug fields on system events, complete event sequence table, TypeScript consumer example, tradition-to-animation mapping, and app-side event type alignment table.
docs/app_asktian_integration_guide.md — app.asktian.com integration guideComprehensive 13-section developer integration guide for app.asktian.com covering authentication, core bug fixes, tian.global pattern profile, SSE v3.24.0 contract, decision guidance fan-out, daily anchor, compatibility features, SDK v2.0.0 reference, error handling, caching strategy, and roadmap.
v3.24.0EpistemicAgentGuide — Section 10.5 Western Sign Profile in Agent PromptsNew Section 10.5 covers horoscope.calculate signProfile in agent prompts: source comparison table (tian.global vs horoscope.calculate vs almanac.zodiacSign), wellness prompt builder, and Tarot spread context builder. Includes nav entry.
EpistemicAgentGuide — Section 10.6 Zodiac Compatibility DimensionsNew Section 10.6 covers compatibility.zodiac dimensions in agent prompts: dimension overview table, quick compatibility card builder, LLM prompt injection pattern, and upgrade path to compatibility.birthday for Western 4D. Includes nav entry.
SDK v2.0.0 — ZodiacCompatResponse, BirthdayCompatResponse, AlmanacZodiacResponse, HoroscopeResponseSDK v2.0.0 published to npm. Adds four response-shape interfaces for all 4 enriched endpoints so consumers can type their database storage and React props. Fully backwards-compatible with v1.x. Quick Reference table updated.
v3.23.0Homepage banner — bumped to v3.22.0Homepage What's New banner updated to v3.22.0 highlighting that all 4 enriched endpoints (compatibility.birthday, almanac.zodiacSign, horoscope.calculate, compatibility.zodiac) now have full Response Fields tables in ApiDocs.
ApiDocs — horoscope.calculate responseFields tablehoroscope.calculate endpoint now has a dedicated Response Fields table listing 16 fields: sunSign, moonSign, ascendant, elementProfile, placements, synthesis, signProfile.medical, signProfile.bodyParts, signProfile.herbalAllies, signProfile.symbolism, signProfile.houseRulership, signProfile.mantra, signProfile.majorArcana, signProfile.minorArcana, signProfile.famousPeople, and creditsUsed.
ApiDocs — compatibility.zodiac responseFields tablecompatibility.zodiac endpoint now has a dedicated Response Fields table listing 8 fields: score, level, description, and dimensions.love/career/wealth/health/marriage (each with label + text from YouApp ZodiacCompatibility dataset). All 4 enriched endpoints now have parity in ApiDocs documentation.
v3.22.0Playground — tian.global Copy as cURL uses SSE formatgetCurlCommand() now generates curl -N with Accept: text/event-stream for tian.global, matching the SSE streaming behaviour. Previously it generated a standard POST curl which would not receive the streamed response correctly.
ApiDocs — compatibility.birthday responseFields tablecompatibility.birthday endpoint now has a dedicated Response Fields table listing all 15 fields: score, romanceScore, friendshipScore, marriageScore, dimensions.* (5 Chinese zodiac 4D fields), and horoscopeDimensions.* (5 Western 4D fields).
ApiDocs — almanac.zodiacSign responseFields tablealmanac.zodiacSign endpoint now has a dedicated Response Fields table listing all 20 fields: western.*, chinese.*, chineseProfile.* (7 fields), and westernProfile.* (9 fields including mantra, majorArcana, minorArcana, famousPeople).
v3.21.0Homepage banner — bumped to v3.20.0Homepage What's New banner updated to v3.20.0 with a note about the new compatProfile collapsible panel in the Playground.
Playground — Copy as cURL buttonAll endpoints now have a 'Copy as cURL' button (slate-outlined, Terminal icon) below the Load Sample button. getCurlCommand() maps the current form state to a properly-formatted curl command with Authorization: Bearer at_live_YOUR_API_KEY_HERE header.
ApiDocs — tian.global responseFields tabletian.global endpoint now has a dedicated Response Fields table listing all 10 top-level fields including signProfile.westernSign, signProfile.mantra, signProfile.majorArcana, compatProfile.chineseAnimal, compatProfile.partnerAnimal, compatProfile.loveDimensionLabel, and creditsUsed.
v3.20.0Playground — compatProfile collapsible paneltian.global Playground sample response now renders a dedicated 'Chinese Zodiac Compat' collapsible panel showing chineseAnimal, partnerAnimal, and loveDimensionLabel (color-coded green/amber/red). Previously, compatProfile was only visible in the raw JSON dump.
EpistemicAgentGuide — Section 10.4 badge updatedSection 10.4 (tian.global Streaming Pattern) badge updated from 'v1.9.0' to 'v3.16.0 · SDK v1.9.0' to show both the API release version and the SDK version, consistent with Section 10.1–10.3 badge style.
v3.19.0Changelog — scroll-mt on section elementscroll-mt-20 moved from inner div to the <section> element (the hash target) so deep-links like /changelog#v3.13.0 land correctly below the sticky nav.
EpistemicAgentGuide — Section 10.3 badge addedSection 10.3 (Chinese Zodiac Profile — 60-Element Enrichment) now has a v3.9.0 amber badge matching the visual treatment of Sections 10.1 and 10.2.
RSS feed — v3.17.0 entry verifiedChangelog RSS feed at /api/changelog.rss verified to include v3.17.0 entry (3 changes). Feed renders correctly with correct <title> and <description> per release.
v3.18.0Changelog — v3.17.0 entry addedv3.17.0 entry added to the CHANGELOG data array (banner bump, SDK v1.9.1 Streaming README, EpistemicAgentGuide nav fix). The 'See what's new →' deep-link from the banner now lands on a real section.
SDK README — Quick Start install command cleanSDK README Quick Start install command confirmed clean: npm install asktian-sdk with no stale version pin. No @1.6.0 or earlier version reference in the install block.
EpistemicAgentGuide — Section 10 badge v3.9.0–v3.16.0Section 10 ('Rich Profiles & 4D Compatibility') badge updated from 'v3.9.0 — YouApp dataset' to 'v3.9.0–v3.16.0 — YouApp dataset' to signal that this section covers multiple releases.
v3.17.0Homepage banner: v3.12.0 → v3.16.0What's New banner updated to v3.16.0 with messaging about TianGlobalStreamChunk streaming type in SDK v1.9.0 — fully typed for-await loop with signProfile and compatProfile on the done event. BANNER_KEY bumped so returning visitors see the updated announcement.
SDK v1.9.1 (npm) — Streaming README sectionasktian-sdk v1.9.1 published to npm. Adds a dedicated 'Streaming — tian.global' section to the README with a full for-await loop example using TianGlobalStreamChunk, a type cast note, and v1.9.0/v1.9.1 changelog entries. Quick Reference table updated with TianGlobalDoneEvent and TianGlobalStreamChunk entries. Homepage badge updated to v1.9.1.
EpistemicAgentGuide nav order fixEpistemicAgentGuide sidebar nav reordered so '10. Rich Profiles & 4D Compat' and '10.4 Streaming Pattern' appear before 'Launch Checklist', matching the DOM render order for correct scroll-spy behaviour.
v3.13.0Homepage banner: v3.10.0 → v3.12.0 → v3.13.0What's New banner updated to v3.13.0 with messaging about tian.global signProfile/compatProfile fields and SDK v1.8.0. BANNER_KEY bumped so returning visitors see the updated announcement.
SDK v1.8.0 (npm)asktian-sdk v1.8.0 published to npm. Adds 2 new exported TypeScript interfaces: TianGlobalSignProfile (westernSign, mantra, majorArcana) and TianGlobalCompatProfile (chineseAnimal, partnerAnimal, loveDimensionLabel). These type the new signProfile and compatProfile fields returned directly by tian.global.
ApiDocs — tian.global response exampletian.global response example in ApiDocs now shows signProfile and compatProfile at the top level alongside eastern/western/african/islamic blocks, making the new fields immediately discoverable in the docs.
Playground — Load Sample button redesignThe 'View Sample Response' button across all Playground endpoints has been restyled to an amber-outlined 'Load Sample Response' button with FlaskConical icon, visually distinct from live-run actions. A 'Pre-built fixture — no TIAN Points consumed' note appears below each button. Blended TIAN endpoints (with Run Live SSE) are consistent.
tian.global — signProfile + compatProfile in returntian.global return object now includes signProfile {westernSign, mantra, majorArcana} and compatProfile {chineseAnimal, partnerAnimal, loveDimensionLabel} at the top level. These are derived from almanac.zodiacSign and compatibility.zodiac enrichment data, allowing API consumers to access rich profile anchors in a single tian.global call without a separate almanac.zodiacSign call.
v3.10.0compatibility.birthday — dimensions (Chinese 4D parity)compatibility.birthday now returns a dimensions object (same structure as compatibility.zodiac) with marriage, love, career, wealth, and health sub-fields sourced from the YouApp ZodiacCompatibility dataset, keyed to the two persons' Chinese zodiac animals derived from their birth dates. This gives compatibility.birthday full parity with compatibility.zodiac for Chinese 4D analysis. The endpoint now returns both dimensions (Chinese) and horoscopeDimensions (Western) simultaneously.
Playground fixtures — 4 enriched endpointsPlayground sample responses for almanac.zodiacSign, compatibility.zodiac, compatibility.birthday, and horoscope.calculate updated to include the new enrichment fields: chineseProfile, westernProfile, dimensions, horoscopeDimensions, and signProfile. Developers testing in the Playground now see realistic full responses.
EpistemicAgentGuide — Section 10: Rich Profiles & 4D CompatibilityNew Section 10 added to the Epistemic Agent Guide covering three agent use-cases: (10.1) Sign Profile — how to use mantra, majorArcana, minorArcana, medical, herbalAllies, and symbolism fields to build daily intention cards and LLM system prompts; (10.2) 4-Dimension Compatibility — how to use dimensions and horoscopeDimensions for relationship report generation; (10.3) Chinese Zodiac Profile — how to use chineseProfile for identity cards and onboarding flows. Includes code examples for all three patterns.
v3.9.0almanac.zodiacSign — chineseProfile + westernProfilealmanac.zodiacSign now returns two new enrichment objects. chineseProfile (ChineseZodiacProfile) contains the full 60-element Chinese zodiac profile (12 animals × 5 elements): general overview, personality, strengths, weakness, career, love, and compatibility prose sourced from YouApp dataset. westernProfile (HoroscopeSignProfile) contains the full Western horoscope sign profile: description, personality, strengths, weaknesses, career, love, medical astrology, body parts, herbal allies, symbolism, element, season, house rulership, mantra, major arcana (Tarot), minor arcana, and famous people. Both fields are null if no matching profile is found.
compatibility.zodiac — dimensions (4D)compatibility.zodiac now returns a dimensions object with 5 sub-fields: marriage, love, career, wealth, health. Each sub-field has a label (e.g. 'Positive', 'Neutral', 'Negative') and a text description sourced from YouApp ZodiacCompatibility dataset. Covers all 144 Chinese zodiac animal pairs. Existing fields (score, auspiciousness, description, chineseCompatibility) are unchanged.
compatibility.birthday — horoscopeDimensions (4D)compatibility.birthday now returns a horoscopeDimensions object with intro and 4 sub-fields: love, career, wealth, health. Each sub-field has a label and text sourced from YouApp HoroscopeCompatibility dataset. Covers all 144 Western zodiac sign pairs. Existing fields (romanceScore, friendshipScore, marriageScore, astroDescription) are unchanged.
horoscope.calculate — signProfilehoroscope.calculate now returns a signProfile object (HoroscopeSignProfile) keyed to the computed sun sign. Contains medical astrology, body parts, herbal allies, symbolism, house rulership, mantra, major arcana (Tarot card), minor arcana, and famous people for the sun sign. Field is null if no profile is found.
SDK v1.7.0 (npm)asktian-sdk v1.7.0 published to npm. Adds 5 new exported TypeScript interfaces: ChineseZodiacProfile, HoroscopeSignProfile, CompatDimension, ZodiacDimensions, HoroscopeDimensions. These type the new enrichment fields on almanac.zodiacSign, compatibility.zodiac, compatibility.birthday, and horoscope.calculate.
v3.8.0twelvepalaces.calculateTwelve Palaces (十二宮) — Classical Chinese lunar birth fortune system attributed to Guiguzi. Accepts zodiac year, lunar month, lunar day, and birth hour. Derives palace (1–14) and degree via the traditional scoring table. Returns classical poem (詩曰), marriage fortune (婚姻), wealth fortune (財運), fortune title, and LLM synthesis. FORTUNE_DB covers all 29 palace-degree combinations with authentic classical text sourced from the original Guiguzi transmission. Costs 5 TIAN Points per call.
tian.global — 28 → 29 systems, 140 → 145 TIAN PointsTwelve Palaces added to the tian.global fan-out. The procedure now runs 29 systems in parallel (was 28). Credit cost updated from 140 to 145 TIAN Points (29 × 5). LLM synthesis prompt updated to include Twelve Palaces palace name alongside Mahabote, Jyotish, and other Eastern traditions.
Homepage banner: v3.7.0 → v3.8.0What's New banner updated to v3.8.0 and now mentions both Mahabote (မဟာဘုတ်) and 十二宮 Twelve Palaces as new Eastern systems. BANNER_KEY bumped so returning visitors see the updated announcement.
ApiDocs: isPM Wednesday PM callout boxThe isPM parameter row in the mahabote.calculate parameter table now has a small amber callout box explaining that the example date 1990-03-14 was a real Wednesday, making the isPM: true example concrete rather than arbitrary.
ApiDocs: tian.eastern + tian.global mention MahaboteThe tian.eastern and tian.global endpoint descriptions in ApiDocs now explicitly mention mahabote.calculate as one of the 28/29 systems they fan out to, helping developers understand the coverage.
SystemPage: Mahabote planet icon CDN hashesAll 8 shiny planet icon URLs on the /systems/mahabote hero section were using placeholder CDN hashes. Fixed to use the correct production hashes. The hover shiny effect on all 8 planet icons now works correctly.
SDK v1.6.0 (npm)TwelvePalacesNamespace added to asktian-sdk. Exposes tian.twelvepalaces.calculate(input) with full TypeScript types for TwelvePalacesInput (zodiac, lunarMonth, lunarDay, birthHour, language, question). Published to npm as v1.6.0.
v3.7.0mahabote.calculateMahabote (မဟာဘုတ်) — Burmese planetary house system. Accepts birthDate (YYYY-MM-DD), optional isPM flag for Wednesday PM births (Rahu), and optional queryDate for year-chart analysis. Returns natal house chart (7 houses), birth planet, current major and minor periods from the 108-year cycle, Grand Trine and Minor Trine quality, year chart, planetary relationships, fortune score, and LLM synthesis. Costs 5 TIAN Points per call.
tian.global — 27 → 28 systems, 135 → 140 TIAN PointsMahabote added to the tian.global fan-out. The procedure now runs 28 systems in parallel (was 27). Credit cost updated from 135 to 140 TIAN Points (28 × 5). LLM synthesis prompt updated to reference Burmese tradition alongside Chinese, Vedic, Western, African, and Islamic.
Sitewide count: 47 → 48 endpoints, 35 → 36 traditionsSiteNav Systems badge, homepage hero, Dashboard welcome card, Status page endpoint list, ApiDocs hero, SystemsIndex header, and all JSON-LD structured data updated from 47 to 48 endpoints and from 35 to 36 traditions to reflect the addition of Mahabote.
v3.6.0GET /api/v1/systems — REST catalogue endpointNew versioned REST endpoint at /api/v1/systems returns the full 35-entry system catalogue as plain JSON (no tRPC envelope). No authentication required. Response is CDN-cached for 5 minutes (Cache-Control: public, s-maxage=300). The legacy /systems path is preserved as a backwards-compatible alias. Documented in the System Catalogue section of the API Reference.
horoscope and boneWeight missing from /systems REST endpointThe /systems REST endpoint had 33 entries — horoscope and boneWeight were never added when they were introduced in v3.5.0. Both entries are now included with correct dedicated icon URLs, tradition fields, and systemUrl links.
Sitewide count: 46 →47 endpoints, 34 →35 traditionsSiteNav Systems badge, homepage hero, Dashboard welcome card, Playground tian.global label, Status page endpoint list, ApiDocs hero, and all JSON-LD structured data updated from 46 to 47 endpoints and from 34 to 35 traditions to reflect the addition of horoscope and boneWeight.
v3.5.0SDK v1.4.0: 9 wrong procedure names correctedDaliuNamespace, XiaoliuNamespace, TaiyiNamespace were calling daliu.calculate / xiaoliu.calculate / taiyi.calculate — all wrong. Correct router names are daLiuRen.calculate, xiaoLiuRen.calculate, taiYi.calculate. CompatibilityNamespace was calling compatibility.calculate (does not exist); split into three methods: compatibility.zodiac, compatibility.birthday, compatibility.bloodType. AuspiciousNamespace was calling auspicious.analyze; corrected to auspicious.analyzeNumber. AlmanacNamespace was calling almanac.get; split into almanac.daily and almanac.zodiacSign. IfaNamespace was calling ifa.calculate; corrected to ifa.draw. All namespace classes and the README method table updated.
ApiDocs PATH_TO_SLUG: life-boneWeight key corrected to boneWeightPATH_TO_SLUG in ApiDocs.tsx mapped /api/trpc/life.boneWeight to "life-boneWeight" but SAMPLE_RESPONSES keys the entry as "boneWeight". The mismatch caused the full sample response panel to show nothing for the Life Blueprint endpoint. Fixed by aligning the slug to "boneWeight".
systemContent.ts: horoscope and boneWeight system entriesWestern Horoscope (slug: horoscope, tradition: Western) and Life Blueprint / 稱骨算命 (slug: boneWeight, tradition: Eastern) were missing from SYSTEM_CONTENT. Both entries added with full overview, origin, history, howItWorks, goodFor, useCases, famousExamples, keyTerms, apiHighlight, and relatedSystems fields. They now appear in the Systems Index under their respective tradition sections.
codeSnippets.ts: 9 wrong SDK method names and 2 missing entriesgetSdkMethod() was returning stale method names for compatibility (was compatibility.calculate), auspicious (was auspicious.analyze), almanac (was almanac.get), ifa (was ifa.calculate). Updated to compatibility.zodiac, auspicious.analyzeNumber, almanac.daily, ifa.draw. Added horoscope and boneWeight entries. Added getExampleInput() cases for horoscope and boneWeight so SDK code snippets on system detail pages render correct inputs.
systemContent.ts: compatibility and khatt endpoint pathscompatibility endpoint was stored as /compatibility/zodiac (slash-separated) and khatt as /khatt/calculate — both using the wrong path separator. Corrected to dot-notation: compatibility.zodiac and khatt.calculate to match the tRPC router.
Homepage SDK badge: v1.3.0 → v1.4.0npm install snippet and npmjs.com link on the homepage updated from [email protected] to [email protected].
v3.4.08 new standalone divination endpointsIfá (ifa.draw), Fa/Vodun (vodun.calculate), Hakata (hakata.calculate), Rammal (rammal.calculate), Khatt al-Raml (khatt.calculate), Jyotish (jyotish.calculate), Anka Shastra (anka.calculate), and Western Horoscope (horoscope.calculate) are now callable as independent endpoints. Previously these systems were only accessible via the tian.african, tian.islamic, tian.indian, and tian.western blended endpoints. Each costs 1 $TIAN per call and accepts birthDate + optional question. Total public endpoint count: 46.
Playground: 8 new endpoint formsAll 8 new standalone endpoints now have dedicated form sections in the Playground with birth date input, optional question field, and realistic sample fixture responses. Horoscope additionally accepts a birth hour for improved Ascendant accuracy.
ApiDocs: horoscope.calculate endpoint documentationWestern Horoscope endpoint added to ApiDocs with full request schema, sample response, and TIAN Point cost. All 46 public endpoints are now fully documented.
Privy sign-in 401 loop — wrong JWT issuer in privyAuth.tsprivyAuth.ts was verifying Privy JWTs with issuer "privy.asktian.com" and "auth.privy.io" — both wrong. Privy always issues tokens with iss="privy.io" regardless of custom domain. Rewrote privyAuth.ts to use the official @privy-io/server-auth PrivyClient.verifyAuthToken() which handles issuer, JWKS, and SPKI key automatically. The /api/auth/privy 401 loop is resolved.
Systems page: 9 new system cards across 6 sectionsSystems page fully rewritten with 6 sections (Chinese, Western, African, Islamic, Indian, Life & Oracle). 9 new cards added: Horoscope, Ifá, Vodun, Hakata, Rammal, Khatt, Jyotish, Anka Shastra, Bone Weight Reading, and Predict Oracle. Header updated to "46 Divination Endpoints · 34 traditions".
Sitewide endpoint count: 38 → 46SiteNav badge, homepage hero, status pill, metrics card, SEO meta, and JSON-LD all updated from 38 to 46 endpoints and from 26 to 34 traditions.
v3.3.0TIAN Points billing via wallet.asktian.compredict.binary, predict.multi, and predict.binaryBatch now deduct TIAN Points from wallet.asktian.com on every call. Non-Enterprise callers must pass privyToken (Privy access token from getAccessToken()) in the request body. The server calls wallet.asktian.com POST /api/v1/auth/verify to validate the token and check balance, then POST /api/v1/points/deduct to atomically deduct. Enterprise subscribers bypass deduction entirely. Insufficient balance returns HTTP 402 PAYMENT_REQUIRED with the user's current balance, required amount, and a pre-filled top-up URL.
Idempotency keys on all predict deductionsEach verifyAndDeduct call now passes a deterministic idempotencyKey (userId:endpoint:requestTimestamp) to wallet.asktian.com, preventing double-charges on client retries. The key is scoped per user, per endpoint, and per request start time.
Fetch timeout + 5xx retry on wallet API callsAll wallet.asktian.com fetch calls now abort after 5 seconds via AbortController. 5xx responses are retried once with a 500ms backoff before propagating the error. This prevents predict endpoints from hanging indefinitely if the wallet service is slow.
predict.binaryBatch: Premium plan now allowedpredict.binaryBatch and predict.batchResult previously required Enterprise subscription. Both endpoints now accept Premium subscribers as well, with TIAN Points deduction applied (80 TIAN Points × N questions). Enterprise users continue to bypass deduction.
ApiDocs: privyToken param added to predict endpointspredict.binary, predict.multi, and predict.binaryBatch parameter tables in ApiDocs now document the privyToken field with type string? and a full description of when it is required. predict.binaryBatch and predict.batchResult plan requirement updated from Enterprise to Premium or Enterprise.
Pricing page: Predict Oracle TIAN Points cost tableNew section on the Pricing page lists all 5 predict.* endpoints with their TIAN Points cost, required plan, and notes. Includes a link to wallet.asktian.com for top-ups.
SDK snippets: privyToken in predict examplesgetSnippets() in codeSnippets.ts now injects privyToken: '<privy_access_token>' into the SDK example input for predict.binary, predict.multi, and predict.binaryBatch, with a comment explaining when it is required vs optional.
Get API Key button: Privy login race conditionThe Get API Key button on the homepage and the Sign In button in SiteNav called privyLogin() before the auth.me tRPC query resolved, causing Privy to throw 'Attempted to log in, but user is already logged in'. Fixed by guarding all login() calls with authLoading check — if auth state is still loading, the click is a no-op. SiteNav Sign In button also gains disabled={authLoading} to prevent double-clicks.
v3.2.0PWA manifest.jsonAdded manifest.json to client/public with name, short_name, icons (192×192, 512×512), theme_color (#09090b), and display: standalone. The site is now installable as a PWA on iOS and Android, and mobile browser chrome matches the dark theme.
Changelog RSS feed (/api/changelog.rss)New Express endpoint at /api/changelog.rss serves the full CHANGELOG as a valid RSS 2.0 feed with atom:link self-reference, XML-escaped content, per-release <item> blocks, and Cache-Control: public, max-age=3600. Developers can subscribe to release notes directly in their feed reader.
Subscribe via RSS button on Changelog pageOrange RSS icon button added to the Changelog page hero section next to the endpoint code block. Links directly to /api/changelog.rss and opens in a new tab, surfacing the feed to visitors who don't inspect <head>.
Critical JS modulepreloadVite build plugin now injects <link rel="modulepreload"> for the entry chunk (assets/index-*.js, ~113 KB) into the built index.html. Browsers that support modulepreload (Chrome, Edge, Firefox 115+) fetch this script in parallel with HTML parsing, reducing LCP on cold visits by ~100–200 ms.
React Query staleTime / gcTimeGlobal QueryClient default staleTime raised from 30 s to 5 min; gcTime set to 10 min. Navigating back to any previously visited page is now instant with no re-fetch spinner. Per-query overrides (staleTime: 0 on Status, staleTime: Infinity on Changelog) still take precedence.
DB composite indexes on predict tablesAdded composite (userId, createdAt) indexes on predict_binary_usage, predict_multi_usage, and predict_batch_results. Dashboard history queries (WHERE userId = ? ORDER BY createdAt DESC) now hit a single index instead of scanning the userId index then sorting.
v3.1.0SDK v1.2.2 (npm)SDK README fully rewritten to document all 5 predict.* methods with typed input/output examples, a pricing table, error handling reference, and a changelog. SDK v1.2.0 and v1.2.1 deprecated on npm with migration message pointing to v1.2.2.
ApiDocs: Predict Oracle Quick-Start sectionNew sidebar section with a 3-step walkthrough (get key → call predict.binary → read confidence). Includes a curl/SDK tab block, annotated response, confidence threshold table, and a Try it live button that deep-links to the Playground pre-filled with predict.binary.
Homepage hero code exampleHero code block replaced from divination.draw to a 2-question predict.binaryBatch call with matching response tab (two results, totalCreditsUsed, batchId). Homepage View Docs CTA updated to deep-link to /docs#predict-quickstart.
Playground: ConfidenceGauge componentNew ConfidenceGauge component renders a horizontal 0–100 bar with four colour-banded threshold zones (red <50, orange 50–64, amber 65–74, emerald ≥75). Full gauge appears in predict.binary and predict.multi result panels; compact variant appears in each predict.binaryBatch question card and in Dashboard Batch History expanded rows.
Playground: Copy-as-SDK buttonCopy-as-SDK button appears below the run buttons for all predict.* endpoints. Copies the ready-to-run TypeScript SDK snippet to the clipboard. Snippet reflects live form values (question text, options, resolution date) — not hardcoded defaults.
Playground: Reset defaults linkReset defaults link added to predict.binary, predict.multi, and predict.binaryBatch forms. One click restores the canonical example values without a page refresh.
Playground: predict.batchResult endpointpredict.batchResult added to the Playground endpoint selector with a batchId input field and a 3-question sample fixture (2 succeeded, 1 timed out).
ApiDocs: predict.multi SDK tab in calloutThe predict.multi next-steps callout now has a curl/SDK toggle, matching the step 2 pattern. The SDK tab shows client.predict.multi() with a 3-option example.
codeSnippets.ts: AskTianClient → AskTianFixed class name in all SDK snippets in the endpoint reference from AskTianClient to AskTian (matching the published v1.2.2 API). Also corrected predict field names: targetDate → resolutionDate, added optionA/optionB.
Dashboard: stale system count fixedDashboard new-user welcome card and onboarding step 2 updated from '33 divination systems' to '38 endpoints (26 traditions, 7 TIAN Blended, 5 Predict Oracle)'. Changelog SEO description updated from '26 divination systems' to '38 endpoints'.
v3.0.0Blank page on load (Privy TDZ crash)Removed @privy-io and wagmi/viem from Vite manualChunks. Privy imports wagmi/viem internally; splitting them into separate chunks caused Rollup to linearise the circular dependency graph in the wrong order, producing a 'Cannot access Vn/Nz before initialization' TDZ crash that prevented the app from mounting. Removing the split lets Rollup keep the full dependency graph intact in the vendor chunk.
Auto-redirect from / to /dashboardRemoved the post-login redirect in useAuth.ts that fired window.location.href = '/dashboard' on every page load for authenticated users. Visitors can now browse the homepage, docs, systems, and pricing while logged in without being redirected.
LLM Service degraded on /statusThe health check was probing GET /models which does not exist on the Manus built-in API (returning 404 in ~20ms). Now probes POST /v1/chat/completions with max_tokens:1, accepting HTTP 200 or 400 as healthy.
predict.binaryBinary oracle for Yes/No prediction market questions. Consults 10 metaphysical systems in parallel with automatic resolutionDate proximity weighting. Returns confidence 0-100, predicted option, per-system votes, and an LLM-synthesised thesis. Costs 100 TIAN Points per call.
predict.multiMulti-option oracle for prediction markets with 3–500 choices. Consults 7 systems in parallel with proximity weighting. Returns per-option probability distribution, top pick, and an LLM-synthesised thesis. Costs 150 TIAN Points per call.
predict.binaryBatchBatch binary oracle for up to 20 questions in a single call. Questions are processed in 5-concurrent rounds (4 rounds max for 20 questions), with a typical response time of 8–15 seconds. Each successful question costs 80 TIAN Points (20% discount vs predict.binary); failed questions are not charged. Requires Premium or Enterprise subscription. Fires predict.batch.completed webhook on completion.
predict.completed webhook eventpredict.binary and predict.multi now fire a predict.completed webhook event after each successful prediction. Payload includes question, resolutionDate, predictedOption, confidence, type (binary/multi), and timestamp. Enables integrators to receive push updates instead of polling.
resolutionDate proximity weightingpredict.binary and predict.multi now apply automatic proximity weighting based on days until resolution. Near-term markets (≤7 days) weight time-sensitive systems (Qimen, Da Liu Ren, Tarot, Runes) up to 1.4×. Long-horizon markets (≥90 days) weight long-cycle systems (Tai Yi, Jyotish, Meihua) up to 1.4×.
Dashboard empty-state for new usersNew users with no API keys or usage now see a guided 'Welcome to askTIAN API' panel with three actionable steps: create an API key, make a first call, and explore the Playground.
Dashboard rate-limit warning bannersAmber banner when monthly remaining quota drops below 20% and a red banner when quota is fully exhausted (monthlyRemaining === 0). The red banner explains that all API calls are returning 429 and shows the reset date.
Dashboard ← Home breadcrumbA subtle '← Home / Dashboard' breadcrumb in the dashboard sub-header lets users navigate back to the homepage without using the browser back button.
predict.batchResultRe-fetch a completed binaryBatch result by its batchId. Results are persisted server-side before the predict.batch.completed webhook fires, so callers can always recover a lost response. Returns the full per-question results array, totalCreditsUsed, successCount, and createdAt. Free — no TIAN Points cost.
predict.batchHistoryReturns the last 100 binaryBatch results for the authenticated user, ordered by creation time descending. Used by the Dashboard Batch History card for self-serve audit trail. Free — no TIAN Points cost.
predict.batch.completed webhook eventpredict.binaryBatch now fires a predict.batch.completed webhook event after the batch completes. Payload includes batchId, successCount, failureCount, totalCreditsUsed, and timestamp. Enables integrators to trigger recovery via predict.batchResult without polling.
Endpoint count: 33 → 38Five Predict Oracle endpoints (predict.binary, predict.multi, predict.binaryBatch, predict.batchResult, predict.batchHistory) bring the total public endpoint count to 38 (23 core divination + 7 TIAN blended + 5 Predict Oracle + 3 catalogue/status).
v2.9.0Payment replay attack fixsubmitTxHash now verifies that the ERC-20 Transfer log topics[1] (FROM address) matches the submitting user's registered wallet address. A second check in recordTianPayment rejects any txHash that already belongs to a different user, preventing cross-user payment replay attacks.
Error message sanitisationtRPC errorFormatter now strips raw database and internal error messages from INTERNAL_SERVER_ERROR (HTTP 500) responses in production, replacing them with a generic message and removing stack traces to prevent information leakage.
Request body limitGlobal Express body parser limit reduced from 50 MB to 1 MB to prevent request body bombing attacks. File upload routes retain their own per-route limits.
Trust proxy & real IP rate limitingapp.set('trust proxy', 1) added so the IP-based rate limiter (apiLimiter 300/15 min, authLimiter 20/15 min) sees the real client IP behind the reverse proxy instead of the proxy's IP.
Content-Security-PolicyHelmet CSP enabled in production with an allowlist covering CDN assets, Privy, Base RPC, and Vite dev server. CSP remains disabled in development to preserve Vite HMR.
X-RateLimit-* response headersEvery /api/trpc response now includes X-RateLimit-Limit (monthly quota), X-RateLimit-Remaining (calls left this month, clamped to 0), and X-RateLimit-Reset (Unix timestamp of the first second of next month UTC). Unauthenticated requests receive no headers. Plans with no monthly cap return 'unlimited'.
Retry-After on 429 responsesBoth the monthly quota exhaustion (TOO_MANY_REQUESTS from requireQuota) and the IP-based rate limiters (apiLimiter, authLimiter) now set a Retry-After header on 429 responses, giving clients the exact number of seconds to wait before retrying.
Error Reference in ApiDocsNew 'Error Reference' section in ApiDocs listing all 7 tRPC error codes (UNAUTHORIZED, FORBIDDEN, TOO_MANY_REQUESTS, BAD_REQUEST, NOT_FOUND, CONFLICT, INTERNAL_SERVER_ERROR) with HTTP status mappings, error envelope shape, and a Python error-handling code example.
Rate Limits section in ApiDocsNew 'Rate Limits' section in ApiDocs documenting the three X-RateLimit-* headers, the monthly reset cycle, the two IP-based rate limit tiers, a comparison table, and a Python backoff code example with Retry-After support.
Webhook delivery receiptswebhook_logs now stores the first 2 KB of each HTTP response body. A collapsible delivery log appears in the Dashboard webhook card showing status code, event name, duration, timestamp, and expandable response body. A Retry button on failed entries calls the new webhook.retry procedure to re-trigger deliveries without leaving the Dashboard.
API key environment tagsAPI keys can now be tagged with an environment label (production / staging / dev) via a colour-coded dropdown on each key row in the Dashboard. Tags are stored in the api_keys table and included in all key list responses.
Per-key usage sparklineEach API key row in the Dashboard now shows a 7-day bar sparkline of daily call volume when usage data is present, backed by the new apiKeys.dailyUsage procedure and getKeyDailyUsage db helper.
Per-key monthly / all-time call countsEach API key row shows a violet badge with 'this-month / all-time' call counts, backed by the extended getUsagePerApiKey helper using parallel DB queries.
Admin DB Pool Health widgetAdminPanel Overview tab now includes a live DB Pool Health card showing active connections, free connections, queue depth, a colour-coded status badge, and a connection utilisation bar. Auto-refreshes every 10 seconds via the new admin.dbHealth procedure.
DB connection pool hardeningmysql2 pool now configured with queueLimit: 50 (was unlimited) to fail fast under extreme load. A pool enqueue event listener warns at queue depth ≥40/50 with an actionable log message.
Playground deep-links from system pagesEvery /systems/[slug] SEO page's 'Try in Playground' button now passes ?endpoint= so the Playground pre-selects the matching endpoint on arrival.
Treasury wallet Basescan linkThe treasury wallet address in the Dashboard payment card is now a clickable link to https://basescan.org/address/{wallet} with an ExternalLink icon.
Vite build optimisationmanualChunks added to Vite config splitting Privy, Radix UI, syntax highlighters, and recharts/d3 into separate async chunks. Build target set to es2022 to reduce polyfill overhead.
DB indexes on api_usageAdded apiKeyId_idx and apiKeyId_date_idx compound indexes on the api_usage table to eliminate full table scans on per-key usage queries (sparkline, breakdown, monthly count).
v2.8.0Systems nav badgeThe "Systems" link in the top navigation bar now displays a violet "33" pill badge on both desktop and mobile, signalling the full 33-system catalogue depth at a glance.
tian.eastwest Playground formThe tian.eastwest Playground form now shows clearly labelled section dividers — "Eastern inputs (14 systems)" and "Western inputs (5 systems)" — between the shared fields and the tradition-specific inputs, making it clear which parameters feed which sub-systems.
Homepage hero statsHero stat counter updated from "26 Systems / 14+2+5+3+2" to "33 Systems / 26+7 (Core + TIAN Blended)". SEO meta description and hero body copy updated to reference all 33 systems and 7 TIAN Blended synthesis endpoints.
Playground tian.african formtian.african Playground form now includes Ancestral Lineage/Clan input, Offering Preference selector (Ifá/Fa-Vodun/Hakata/No preference), and an explanatory callout describing the three-system synthesis.
Playground tian.islamic formtian.islamic Playground form now includes Geomantic Method selector (Both/Rammal only/Khatt al-Raml only), Niyyah/Intention field, and an explanatory callout describing the two-system synthesis.
Playground tian.indian formtian.indian Playground form now includes Birth Time (HH:MM), Birth Place, and Full Name (for Anka Shastra) inputs, plus an explanatory callout describing the Jyotish + Anka Shastra synthesis.
Enterprise plan call limitEnterprise plan monthly call limit changed from Unlimited to 500,000 calls/mth across Pricing page, Dashboard, Home, and the subscription_plans database record.
Icon Pack white-variant previewThe Icon Pack table in ApiDocs now shows the white-variant icon (white monochrome PNG) on a dark grey container, and the transparent-variant icon (colored PNG) on a white container. Previously the backgrounds were swapped, making the white icon invisible.
33 SEO system pagesAll 7 TIAN Blended systems (tian-eastern, tian-western, tian-eastwest, tian-african, tian-islamic, tian-indian, tian-global) now have individual SEO-optimised pages at /systems/[slug] with full article content, JSON-LD structured data, and a "Blended Systems" section in the /systems index. Total: 33 system pages.
v2.7.0Credit multiplier 5×All 7 TIAN blended endpoints updated from 2× to 5× per-system credit cost: tian.eastern 70 TIAN Points (14×5), tian.western 25 TIAN Points (5×5), tian.eastwest 95 TIAN Points (19×5), tian.african 15 TIAN Points (3×5), tian.islamic 10 TIAN Points (2×5), tian.indian 10 TIAN Points (2×5), tian.global 130 TIAN Points (26×5). Reflects the premium synthesis value of multi-system LLM readings.
7 individual system endpoints in ApiDocsIfá, Fa/Vodun, Hakata, Rammal, Khatt al-Raml, Jyotish, and Anka Shastra are now individually documented in ApiDocs with full parameter specs, curl examples, and sample responses. Total documented endpoints: 39.
khatt entry in catalogue.listKhatt al-Raml is now a standalone entry in catalogue.list (id: "khatt") with all 4 icon colour variants.
catalogue.list iconVariants fieldEvery entry in catalogue.list now includes an iconVariants object with original, transparent, white, and black CDN URLs for programmatic icon access.
ApiDocs hero endpoint countApiDocs hero updated to 39 endpoints. Changelog link added to ApiDocs hero section. Changelog link removed from top navigation bar.
Pricing page $TIAN labelPricing page plan prices now correctly display "$TIAN" (was "TIAN") next to the token amount. FAQ updated to match.
tian.eastwest callout on /systemstian.eastwest hero callout added to the /systems page between the Western tradition table and the tian.global callout.
v2.6.0predict.binaryNew Prediction Market Oracle endpoint for binary (Yes/No) questions. Consults 10 metaphysical systems (Qimen Dunjia, Da Liu Ren, Tai Yi, Liuyao, Meihua Yi Shu, Jyotish Prashna, Rammal, Western Horary, Tarot, Runes). Returns predicted option, per-system confidence-weighted aggregate score, system breakdown, and LLM-synthesised analyst thesis. Costs 100 TIAN Points per call. Requires Premium or Enterprise subscription.
predict.multiNew Prediction Market Oracle endpoint for multi-option questions (3–20 candidates). Consults 7 systems best suited for multi-candidate ranking (Da Liu Ren, Jyotish Prashna, Western Horary, Tarot, Runes, Meihua Yi Shu, Qimen Dunjia). Returns predicted winner, per-option composite scores, confidence score (margin-based), and LLM-synthesised analyst thesis. Costs 150 TIAN Points per call.
Playground predict UIPlayground now includes Binary Oracle and Multi-Option Oracle endpoints with dedicated input forms (question, options, resolution date) and a rich result display showing the confidence gauge, system breakdown, and per-option score bars.
ApiDocs Predict Oracle sectionNew Predict Oracle category added to ApiDocs with full parameter documentation and curl examples for both predict.binary and predict.multi.
Hero and Status endpoint countsHero status pill, feature card, and Status page endpoint availability table updated from 33 to 35 endpoints to reflect the two new predict endpoints.
Icon borders sitewideAll system icon containers across SystemsIndex, Home, SystemPage, and ApiDocs updated to rounded-xl with white/20 border and white/50 hover border, replacing the previous zinc-800 dark border style.
Pricing page Enterprise rowsRemoved SLA guarantee, Dedicated account manager, and White-label options from the Enterprise tier feature comparison table.
ApiDocs catalogue.list sampleSample response fixture updated from "22 entries total" to "33 entries total" to match the current endpoint count.
v2.5.0$TIAN language sitewideAll user-facing "credits" labels replaced with "$TIAN" across Home, ApiDocs, SystemsIndex, Playground, Status, SystemPage, and AdminPanel pages to reinforce the 1 $TIAN = 1 TIAN credit equivalence.
tian.global display creditsHome and Playground now correctly show 52 TIAN Points for tian.global (was 50). The "4 traditions" label in Playground corrected to "5 traditions".
Status page endpoint tableEndpoint availability table expanded from 3 to 8 entries, now listing all 7 TIAN blended endpoints (Eastern, Western, East-West, African, Islamic, Indian, Global) with correct TIAN Points costs.
Home hero SEO descriptionSEO meta description updated to reference 26 systems and 5 traditions (Indian added alongside Eastern, Western, African, Islamic).
v2.4.0Changelog pagePublic /changelog page now live at api.asktian.com/changelog — shows all release notes in a structured table with colour-coded type badges (Added/Fixed/Updated/Renamed/Breaking). Powered by the catalogue.changelog tRPC endpoint. Linked from SiteNav and SiteFooter.
tian.eastwest descriptionApiDocs description now explicitly states 14 Eastern + 5 Western = 19 systems, and clarifies that Indian systems (Jyotish, Anka Shastra) are covered by tian.indian, not this endpoint.
tian.global credit trackingrouters.ts ALL_GLOBAL_SYSTEMS now includes khatt (26 systems total). creditsUsed updated from 50 to 52 TIAN credits. Comment updated to reflect 26 systems × 2 = 52 TIAN credits.
TIAN blend descriptionsAll TIAN blend endpoint descriptions in ApiDocs now say "TIAN credits" instead of "credits" to reinforce the $TIAN token utility.
Changelog type coloursChangelog page now renders Renamed entries in violet and Updated entries in cyan, in addition to the existing Added/Fixed/Changed/Breaking/Deprecated colour scheme.
v2.3.0tian.global descriptionUpdated tian.global description across ApiDocs and SystemsIndex from "all 25 systems" to "all 26 systems", and from 4 traditions to 5 traditions (Eastern, Indian, Western, African, Islamic). Credit cost updated to 52 (26 systems × 2).
SystemsIndex descriptionThe /systems page description now correctly lists 14 Eastern, 2 Indian, 5 Western, 3 African, and 2 Islamic systems (5 distinct traditions).
tian.global response sampleThe ApiDocs sample response for tian.global now includes the indian tradition score and reflects 5 traditions in the globalSynthesis field.
v2.2.0tian.indianIndian TIAN — runs Jyotish (Vedic Astrology) and Anka Shastra (Indian Numerology) in parallel and synthesises a unified Indian metaphysical reading via LLM. Costs 2 credits. Requires Premium or Enterprise subscription.
tian.indian (Playground)tian.indian is now available in the interactive Playground with sample fixtures for birthDate and question inputs.
tian.indian (ApiDocs)tian.indian is now fully documented in the ApiDocs TIAN Blended section with parameters, example curl, and sample response.
tian.indian (SystemsIndex)The /systems page now features a dedicated tian.indian hero callout (rose border) between the Islamic and Global callouts, with Jyotish and Anka Shastra tradition badges.
Khatt al-Raml (Homepage)Khatt al-Raml (system 26) is now listed in the homepage SYSTEMS table with its CDN icon and Islamic tradition tag.
Homepage metric labelThe tradition breakdown label updated from "16+6+3" to "16+6+2+2" (14 Eastern + 2 Indian, 5 Western, 3 African, 2 Islamic) to reflect distinct Indian and Islamic traditions.
Homepage TIAN gridThe TIAN Blended section on the homepage is now a 7-column grid (Eastern, Western, African, East-West, Islamic, Indian, Global) reflecting all 7 blend endpoints.
GET /systemsNow returns 33 entries (26 core + 7 TIAN Blended) including tian.indian.
SystemsIndex titleThe /systems page title and description updated to "All 26 Divination Systems" with the correct tradition breakdown.
v2.1.0Homepage stat badgeThe "Systems" stat badge on the homepage now correctly reads 26 (was 25). Hero description updated to include Khatt al-Raml.
tian.islamic hero calloutThe /systems page now features a dedicated tian.islamic hero section between the Islamic tradition table and the tian.global callout, with tradition badges for Rammal and Khatt al-Raml, and direct links to the Playground and Docs.
Islamic tradition tableKhatt al-Raml (tradition: Islamic) now automatically appears in the Islamic tradition table on the /systems page alongside Rammal.
v2.0.0khatt.calculateKhatt al-Raml (North African Geomancy) — the Maghrebi and Saharan variant of Islamic geomancy, using sand-line figures (Ashkal) and the Qadi verdict system. Covers Morocco, Algeria, Tunisia, Libya, and the wider Saharan tradition.
tian.islamicIslamic TIAN — runs Rammal and Khatt al-Raml in parallel and synthesises a unified Islamic geomantic reading via LLM. Costs 2 credits. Requires Premium or Enterprise subscription.
tian.islamic (Playground)tian.islamic is now available in the interactive Playground with sample fixtures for birthDate and question inputs.
tian.islamic (ApiDocs)tian.islamic is now fully documented in the ApiDocs TIAN Blended section with parameters, example curl, and sample response.
Homepage TIAN gridThe TIAN Blended section on the homepage is now a 6-column grid (Eastern, Western, African, East-West, Islamic, Global) reflecting all 6 blend endpoints.
GET /systemsNow returns 32 entries (26 core + 6 TIAN Blended) including khatt and tian.islamic.
Homepage countersHero badge updated from 21 to 30 endpoints. ApiDocs Icon Pack count updated to 30 icons. TIAN global description updated to 26 systems.
v1.9.0tian.harmonized → tian.eastwesttian.harmonized has been renamed to tian.eastwest across all endpoints, documentation, and the Playground. The endpoint path is now /tian/eastwest. The procedure synthesises all 19 Eastern and Western systems into a unified East-West reading.
tian.global iconDedicated tian.global icon (globe with Bagua, Odu, Sri Yantra, and crescent-star at the four cardinal points) added to the Icon Pack in 4 variants: original, transparent, white, black.
Islamic tradition tableThe /systems page now shows a dedicated Islamic tradition table listing Rammal (and future Islamic systems) separately from Eastern, Western, and African traditions.
tian.global hero calloutThe /systems page now features a dedicated tian.global hero section at the bottom with tradition badges, description, and direct links to the Playground and Docs.
v1.8.0tian.globalGlobal TIAN — runs all 25 divination systems across Eastern, Western, African, and Islamic traditions in parallel and synthesises a fully cross-civilisational reading via LLM. Costs 50 credits (25 systems × 2). Requires Enterprise subscription.
tian.african (Playground)tian.african is now available in the interactive Playground with sample fixtures for birthDate and question inputs.
tian.global (Playground)tian.global is now available in the interactive Playground with full 10-parameter form and sample fixtures.
System detail pagesFull dedicated detail pages now live at /systems/vodun, /systems/hakata, /systems/rammal, /systems/anka — completing the SEO footprint for all 25 systems.
GET /systemsNow returns 30 entries (25 core + 5 TIAN Blended) including tian.global.
v1.7.0vodun.calculateFa/Vodun (West African Divination) — 256 Du signs from the Fon and Ewe corpus, with Hwe myths, Ebo prescriptions, and Legba guidance. Covers the Beninese and Togolese Vodun tradition.
hakata.calculateHakata (Southern African Bone Throwing) — 16 configurations from the Shona oracle, with ancestral guidance and Nganga prescriptions. Covers Zimbabwe, Zambia, and Mozambique traditions.
rammal.calculateRammal (Islamic Geomancy) — full Darb al-Raml shield chart with 16 geomantic figures, Judge interpretation, and domain-specific guidance. Covers the Arabic, Persian, and Ottoman geomantic traditions.
anka.calculateAnka Shastra (Indian Numerology) — Moolank (root number), Bhagyank (destiny number), Namank (name number), and Lo Shu grid analysis with Navagraha planetary ruler interpretations.
tian.africanAfrican TIAN — blends Ifá, Fa/Vodun, and Hakata in parallel and synthesises a unified African divination reading via LLM. Costs 3 credits. Requires Premium or Enterprise plan.
GET /systemsNow returns 29 systems (25 core + 4 TIAN Blended) including the 4 new African and Islamic systems and tian.african blend.
v1.6.0GET /systemsNew REST-style endpoint returning all 29 systems (25 core + 4 TIAN Blended) with id, name, zh, tradition, endpoint, credits, iconUrl, description, and systemUrl. Mirrors catalogue.list at a cleaner path for developers who prefer REST over tRPC.
jyotish.calculateJyotish (Vedic Astrology) — sidereal birth chart with Navagraha, 27 Nakshatras, and Vimshottari Dasha planetary period timing. India's ancient science of light, one of the six Vedangas.
ifa.drawIfá (Yoruba Divination) — 256 Odù chapters with ese verses, Ebo prescriptions, and Orisha guidance. UNESCO Intangible Cultural Heritage of Humanity.
v1.5.0catalogue.listPublic endpoint returning all 22 divination systems with metadata, tradition tag, credit cost, and CDN icon URL.
catalogue.changelogPublic endpoint returning the full API changelog (this response).
status.checkPublic health-check endpoint returning DB, Base RPC, and LLM Service latency and status.
admin.webhookLogsAdmin endpoint returning webhook delivery log with timestamp, user, event, URL, HTTP status, and duration.
admin.retryWebhookAdmin endpoint to re-fire a failed webhook delivery to the user's current webhook URL.
v1.4.0tian.easternBlended Eastern TIAN reading — fans out to all 14 Eastern systems, synthesises via LLM. Costs 28 credits (14 × 2). Requires Premium or Enterprise plan.
tian.westernBlended Western TIAN reading — fans out to all 5 Western systems, synthesises via LLM. Costs 10 credits (5 × 2). Requires Premium or Enterprise plan.
tian.eastwestEast-West TIAN reading — fans out to all 19 systems across both traditions, synthesises via LLM with cross-tradition commentary. Costs 38 credits (19 × 2). Requires Premium or Enterprise plan.
v1.3.0All divination endpointsEvery divination response now includes a deterministic `score` field (0–100) computed from the reading's fortune level, element relationships, and spread composition. No additional credits consumed.
admin.getTianStatsAdmin endpoint returning per-endpoint usage counts for tian.eastern, tian.western, and tian.eastwest.
admin.getAllUsersResponse now includes `walletAddress` from the users table (set on Privy wallet login) in addition to `latestWallet` from payment history.
v1.2.0divination.draw591+ divination lots across 10 temple systems. Each lot includes a fortune level, poem, interpretation, and advice.
daLiuRen.calculateDa Liu Ren (大六壬) — Four Courses and Three Transmissions classical divination.
xiaoLiuRen.calculateXiao Liu Ren (小六壬) — Six Gods cycle folk divination.
taiYi.calculateTai Yi Shen Shu (太乙神數) — 72-year Grand Cycle cosmic forecasting.
compatibility.bloodTypeBlood type personality compatibility — A, B, O, AB compatibility matrix.
v1.1.0qimen.calculateQimen Dunjia (奇門遁甲) — 9 palaces, 8 gates, 9 stars, 8 deities.
liuyao.calculateLiuyao (六爻) — Six Lines I Ching with 64 hexagrams and changing lines.
meihua.calculateMeihua Yishu (梅花易數) — Plum Blossom divination.
nameAnalysis.analyzeName Analysis (姓名學) — Five formations numerology with stroke analysis.
compatibility.zodiacZodiac compatibility — Chinese zodiac animal harmony scores.
compatibility.birthdayBirthday compatibility — Chinese calendar element theory.
auspicious.analyzeNumberAuspiciousness analysis for phone numbers, license plates, and ID numbers.
almanac.dailyDaily almanac (黃曆) — twelve values, deities, and auspicious activities.
v1.0.0tarot.drawTarot — 78-card Rider-Waite deck, single card, 3-card, and Celtic Cross spreads.
coinFlip.flipCoin Flip Oracle — yes/no oracle with 7 domain-specific interpretations.
runes.castRunes — Elder Futhark 24-rune casting, single, three-rune, and five-rune spreads.
numerology.calculateNumerology — Pythagorean Life Path, Expression, Soul Urge, Personality, Birthday numbers.
astrology.calculateWestern Astrology — Sun, Moon, Rising sign analysis with decanates and ruling planets.
auth.meInitial platform launch — Manus OAuth, API key management, subscription plans, and usage tracking.