Chinese Astrology MCP Server by RoxyAPI
What this MCP does
Calculates Chinese astrology readings including BaZi charts, compatibility, zodiac profiles, almanac dates, lunar calendar conversions, and luck pillars.
Tools
Input schema
{'type': 'object', 'examples': [{'date': '1990-06-15'}], 'required': ['date'], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Gregorian date in YYYY-MM-DD format, evaluated at the reference meridian. Years 1900 to 2100.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}}}
Output schema
{'type': 'object', 'required': ['date', 'lunar', 'yearPillar', 'monthPillar', 'dayPillar', 'dayOfficer', 'mansion', 'clashAnimal', 'favours', 'avoids'], 'properties': {'date': {'type': 'string'}, 'lunar': {'type': 'object', 'required': ['year', 'month', 'day', 'isLeapMonth', 'monthLength', 'date'], 'properties': {'day': {'type': 'number'}, 'date': {'type': 'string'}, 'year': {'type': 'number'}, 'month': {'type': 'number'}, 'isLeapMonth': {'type': 'boolean'}, 'monthLength': {'type': 'number'}}}, 'avoids': {'type': 'array', 'items': {'type': 'string'}}, 'favours': {'type': 'array', 'items': {'type': 'string'}}, 'mansion': {'type': 'object', 'required': ['number', 'name', 'chinese', 'pinyin', 'palace', 'planet', 'animal'], 'properties': {'name': {'type': 'string'}, 'animal': {'type': 'string'}, 'number': {'type': 'number'}, 'palace': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'planet': {'type': 'string'}, 'chinese': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'animalLocalized': {'type': 'string'}}}, 'dayPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'dayOfficer': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'quality', 'meaning'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'meaning': {'type': 'string'}, 'quality': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'yearPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'clashAnimal': {'type': 'string'}, 'monthPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'clashAnimalLocalized': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{}], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'year': {'type': 'integer', 'example': 1990, 'maximum': 2100, 'minimum': 1900, 'description': 'Gregorian year, 1900 to 2100. Defaults to the current UTC year when omitted, together with month.'}, 'month': {'type': 'integer', 'example': 6, 'maximum': 12, 'minimum': 1, 'description': 'Gregorian month, 1 to 12. Defaults to the current UTC month when omitted, together with year.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}}}
Output schema
{'type': 'object', 'required': ['year', 'month', 'total', 'solarTerms', 'days'], 'properties': {'days': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'lunar', 'yearPillar', 'monthPillar', 'dayPillar', 'dayOfficer', 'mansion', 'clashAnimal', 'favours', 'avoids'], 'properties': {'date': {'type': 'string'}, 'lunar': {'type': 'object', 'required': ['year', 'month', 'day', 'isLeapMonth', 'monthLength', 'date'], 'properties': {'day': {'type': 'number'}, 'date': {'type': 'string'}, 'year': {'type': 'number'}, 'month': {'type': 'number'}, 'isLeapMonth': {'type': 'boolean'}, 'monthLength': {'type': 'number'}}}, 'avoids': {'type': 'array', 'items': {'type': 'string'}}, 'favours': {'type': 'array', 'items': {'type': 'string'}}, 'mansion': {'type': 'object', 'required': ['number', 'name', 'chinese', 'pinyin', 'palace', 'planet', 'animal'], 'properties': {'name': {'type': 'string'}, 'animal': {'type': 'string'}, 'number': {'type': 'number'}, 'palace': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'planet': {'type': 'string'}, 'chinese': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'animalLocalized': {'type': 'string'}}}, 'dayPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'dayOfficer': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'quality', 'meaning'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'meaning': {'type': 'string'}, 'quality': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'yearPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'clashAnimal': {'type': 'string'}, 'monthPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'clashAnimalLocalized': {'type': 'string'}}}}, 'year': {'type': 'number'}, 'month': {'type': 'number'}, 'total': {'type': 'number'}, 'solarTerms': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'type', 'date', 'instantUtc'], 'properties': {'id': {'type': 'string'}, 'date': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'type': 'string'}, 'instantUtc': {'type': 'string'}}}}}}
Input schema
{'type': 'object', 'examples': [{'year': 2026}], 'required': ['year'], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'year': {'type': 'integer', 'example': 2026, 'maximum': 2100, 'minimum': 1900, 'description': 'Solar year, 1900 to 2100. The year opens at Li Chun rather than on 1 January, so its last two terms fall in the following January.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}}}
Output schema
{'type': 'object', 'required': ['year', 'referenceOffset', 'total', 'terms'], 'properties': {'year': {'type': 'number'}, 'terms': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'longitude', 'type', 'instantUtc', 'localDate', 'localTime'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'localDate': {'type': 'string'}, 'localTime': {'type': 'string'}, 'longitude': {'type': 'number'}, 'instantUtc': {'type': 'string'}}}}, 'total': {'type': 'number'}, 'referenceOffset': {'type': 'number'}}}
Input schema
{'type': 'object', 'examples': [{}], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'limit': {'type': 'integer', 'default': 5, 'example': 5, 'maximum': 5, 'minimum': 1, 'description': 'Maximum items to return per page. Range: 1-5, default 5.'}, 'offset': {'type': 'integer', 'default': 0, 'example': 0, 'minimum': 0, 'description': 'Number of items to skip for pagination. Default 0.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}}}
Output schema
{'type': 'object', 'required': ['total', 'limit', 'offset', 'generatingCycle', 'controllingCycle', 'elements'], 'properties': {'limit': {'type': 'number'}, 'total': {'type': 'number'}, 'offset': {'type': 'number'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'season', 'direction', 'generates', 'generatedBy', 'controls', 'controlledBy', 'stems', 'branches', 'meaning'], 'properties': {'id': {'type': 'string'}, 'stems': {'type': 'array', 'items': {'type': 'string'}}, 'pinyin': {'type': 'string'}, 'season': {'type': 'string'}, 'chinese': {'type': 'string'}, 'meaning': {'type': 'string'}, 'branches': {'type': 'array', 'items': {'type': 'string'}}, 'controls': {'type': 'string'}, 'direction': {'type': 'string'}, 'generates': {'type': 'string'}, 'generatedBy': {'type': 'string'}, 'controlledBy': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}}, 'generatingCycle': {'type': 'array', 'items': {'type': 'string'}}, 'controllingCycle': {'type': 'array', 'items': {'type': 'string'}}}}
Input schema
{'type': 'object', 'examples': [{}], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'limit': {'type': 'integer', 'default': 12, 'example': 12, 'maximum': 12, 'minimum': 1, 'description': 'Maximum items to return per page. Range: 1-12, default 12.'}, 'offset': {'type': 'integer', 'default': 0, 'example': 0, 'minimum': 0, 'description': 'Number of items to skip for pagination. Default 0.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}}}
Output schema
{'type': 'object', 'required': ['total', 'limit', 'offset', 'animals'], 'properties': {'limit': {'type': 'number'}, 'total': {'type': 'number'}, 'offset': {'type': 'number'}, 'animals': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'branch', 'element', 'polarity', 'traits'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'branch': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'traits': {'type': 'array', 'items': {'type': 'string'}}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}}}}
Input schema
{'type': 'object', 'examples': [{'id': 'rat'}], 'required': ['id'], 'properties': {'id': {'enum': ['rat', 'ox', 'tiger', 'rabbit', 'dragon', 'snake', 'horse', 'goat', 'monkey', 'rooster', 'dog', 'pig'], 'type': 'string', 'example': 'rat', 'description': 'Animal id, case-insensitive and punctuation-insensitive. One of rat, ox, tiger, rabbit, dragon, snake, horse, goat, monkey, rooster, dog, pig. The sheep and the ram are the same animal as the goat and resolve to goat.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}}}
Output schema
{'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'branch', 'element', 'polarity', 'traits', 'summary', 'strengths', 'weaknesses', 'compatibilitySummary', 'hours', 'trine', 'secretFriend', 'clashPartner', 'harmPartner', 'elementVariants'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'hours': {'type': 'object', 'required': ['start', 'end'], 'properties': {'end': {'type': 'number'}, 'start': {'type': 'number'}}}, 'trine': {'type': 'object', 'required': ['id', 'number', 'element', 'chinese', 'pinyin', 'members', 'theme'], 'properties': {'id': {'type': 'string'}, 'theme': {'type': 'string'}, 'number': {'type': 'number'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'members': {'type': 'array', 'items': {'type': 'string'}}, 'elementLocalized': {'type': 'string'}}}, 'branch': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'traits': {'type': 'array', 'items': {'type': 'string'}}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'summary': {'type': 'string'}, 'polarity': {'type': 'string'}, 'strengths': {'type': 'array', 'items': {'type': 'string'}}, 'weaknesses': {'type': 'array', 'items': {'type': 'string'}}, 'harmPartner': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'clashPartner': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'secretFriend': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'element'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'nameLocalized': {'type': 'string'}, 'elementVariants': {'type': 'array', 'items': {'type': 'object', 'required': ['element', 'polarity', 'stem', 'pillar', 'years'], 'properties': {'stem': {'type': 'string'}, 'years': {'type': 'array', 'items': {'type': 'number'}}, 'pillar': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}}, 'elementLocalized': {'type': 'string'}, 'compatibilitySummary': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{'sign1': 'rat', 'sign2': 'dragon'}], 'required': ['sign1', 'sign2'], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'sign1': {'enum': ['rat', 'ox', 'tiger', 'rabbit', 'dragon', 'snake', 'horse', 'goat', 'monkey', 'rooster', 'dog', 'pig'], 'type': 'string', 'example': 'rat', 'description': 'First animal id, case-insensitive. One of rat, ox, tiger, rabbit, dragon, snake, horse, goat, monkey, rooster, dog, pig.'}, 'sign2': {'enum': ['rat', 'ox', 'tiger', 'rabbit', 'dragon', 'snake', 'horse', 'goat', 'monkey', 'rooster', 'dog', 'pig'], 'type': 'string', 'example': 'dragon', 'description': 'Second animal id, case-insensitive. The relation is symmetric, so swapping the two returns the same relationship and the same score, with the reading written from the first sign point of view.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}}}
Output schema
{'type': 'object', 'required': ['signs', 'relationship', 'relationshipName', 'relationshipChinese', 'relationshipPinyin', 'score', 'verdict', 'summary', 'strengths', 'frictions', 'advice'], 'properties': {'score': {'type': 'number'}, 'signs': {'type': 'object', 'required': ['first', 'second'], 'properties': {'first': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'branch', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'branch': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'second': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'branch', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'branch': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}}}, 'advice': {'type': 'string'}, 'summary': {'type': 'string'}, 'verdict': {'type': 'string'}, 'frictions': {'type': 'array', 'items': {'type': 'string'}}, 'strengths': {'type': 'array', 'items': {'type': 'string'}}, 'relationship': {'type': 'string'}, 'sharedElement': {'type': 'string'}, 'relationshipName': {'type': 'string'}, 'relationshipPinyin': {'type': 'string'}, 'relationshipChinese': {'type': 'string'}, 'sharedElementLocalized': {'type': 'string'}, 'relationshipNameLocalized': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{'id': 'rat'}], 'required': ['id'], 'properties': {'id': {'enum': ['rat', 'ox', 'tiger', 'rabbit', 'dragon', 'snake', 'horse', 'goat', 'monkey', 'rooster', 'dog', 'pig'], 'type': 'string', 'example': 'rat', 'description': 'Animal id, case-insensitive. One of rat, ox, tiger, rabbit, dragon, snake, horse, goat, monkey, rooster, dog, pig.'}, 'date': {'type': 'string', 'format': 'date', 'example': '2026-04-03', 'description': 'Reading date in YYYY-MM-DD format. Past and future dates are both supported, for editorial scheduling and backfill. Defaults to the current day in the timezone parameter.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'timezone': {'type': 'string', 'example': 'America/New_York', 'description': 'Selects which day counts as current when date is omitted. Defaults to UTC, so the reading rolls over at 00:00 UTC each day. Pass the timezone of the end user to roll over on their local clock instead. Ignored when date is set. Accepts an IANA name (e.g. "America/New_York"), decimal hours (e.g. 5.5 for IST), or a fixed UTC offset (e.g. "-05:00").'}}}
Output schema
{'type': 'object', 'required': ['animal', 'date', 'dayPillar', 'relationship', 'energyRating', 'overview', 'love', 'career', 'advice', 'year', 'benMingNian'], 'properties': {'date': {'type': 'string'}, 'love': {'type': 'string'}, 'year': {'type': 'object', 'required': ['pillar', 'animal', 'relationship', 'note'], 'properties': {'note': {'type': 'string'}, 'animal': {'type': 'string'}, 'pillar': {'type': 'string'}, 'relationship': {'type': 'string'}, 'animalLocalized': {'type': 'string'}}}, 'advice': {'type': 'string'}, 'animal': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'branch', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'branch': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'career': {'type': 'string'}, 'overview': {'type': 'string'}, 'dayPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'animal', 'element'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'animal': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'element': {'type': 'string'}}}, 'benMingNian': {'type': 'boolean'}, 'energyRating': {'type': 'number', 'maximum': 10, 'minimum': 1}, 'relationship': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{'date': '1990-06-15', 'time': '14:30:00', 'year': 2026, 'timezone': 'America/New_York'}], 'required': ['date', 'time', 'timezone', 'year'], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Birth date in YYYY-MM-DD format. Sets the year, month and day pillars. The year pillar turns at Beginning of Spring rather than on 1 January, and the month pillar turns at each of the twelve minor solar terms rather than at a calendar month boundary.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'time': {'type': 'string', 'format': 'time', 'example': '14:30:00', 'description': 'Birth time in 24-hour HH:MM:SS format. Sets the hour pillar, which is one of the four and carries the whole picture of later life and offspring. Each Earthly Branch covers two hours, so a birth within a few minutes of an odd hour can land in either. All four pillars are read in the local clock of the birth, and the day boundary is applied in that same clock; only the lunisolar calendar date itself is a world constant, fixed at UTC plus 8 so one instant has one Chinese date everywhere.'}, 'year': {'type': 'integer', 'example': 2026, 'maximum': 2649, 'minimum': 1551, 'description': 'Gregorian year to read against the natal chart. The annual pillar for that year is resolved under the same year boundary the request selected, so a li-chun reading and a lunar-new-year reading of the same calendar year can differ.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'latitude': {'type': 'number', 'default': 0, 'example': 0, 'maximum': 90, 'minimum': -90, 'description': 'Birth latitude in decimal degrees. Accepted for consistency with the other birth-data endpoints and does not affect any part of a BaZi chart. Defaults to 0.'}, 'timezone': {'anyOf': [{'type': 'number', 'maximum': 14, 'minimum': -14}, {'type': 'string'}], 'example': 'America/New_York', 'description': 'IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error.'}, 'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string', 'default': 'clock', 'example': 'clock', 'description': 'Which clock the day boundary and the hour branch are read from, so a correction that carries a birth across midnight moves the day pillar with the hour. "clock" is civil time exactly as a birth certificate records it, which is what most calculators use and the default here. "local-mean" shifts to the mean sun over the birth longitude, a correction of up to 59 minutes at the edge of a wide time zone. "solar" adds the equation of time on top of that, up to a further 16 minutes. Both non-civil options need "longitude" in the request and return 400 without it.'}, 'longitude': {'type': 'number', 'example': 116.4, 'maximum': 180, 'minimum': -180, 'description': 'Birth longitude in decimal degrees. Positive is East, negative is West. Required when hourClock is "local-mean" or "solar", which shift the hour branch to the sun over the birth place; omitting it in either case returns 400. Ignored when hourClock is "clock".'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string', 'default': 'split-zi', 'example': 'split-zi', 'description': 'Which instant starts the sexagenary DAY, which only matters for a birth between 23:00 and 23:59. "midnight" is the classical position of the Ming compendium San Ming Tong Hui: the day turns at 00:00 and 23:00 to 23:59 is the late zi hour of the day that is ending, so the hour stem is taken from that day. "early-zi" turns the whole day at 23:00, the practice in Hong Kong, Taiwan and much of South East Asia. "split-zi" is the compromise most software implements and the default here: the day still turns at 00:00, but the hour stem is taken from the next day. The three give three different answers for a late-evening birth and identical answers for every other birth.'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string', 'default': 'li-chun', 'example': 'li-chun', 'description': 'Which instant starts the sexagenary YEAR. "li-chun" is Beginning of Spring, around 4 February, and is the classical rule every BaZi text uses, so it is the default on this endpoint. "lunar-new-year" is the folk rule people mean when they say which animal they are, and it falls between late January and late February. The two disagree for any birth in the weeks between them: 14 February 2026 is a Wood Snake year under lunar-new-year and a Fire Horse year under li-chun.'}}}
Output schema
{'type': 'object', 'required': ['birthData', 'conventions', 'year', 'annualPillar', 'animal', 'tenGod', 'branchTenGod', 'yearBranchRelation', 'benMingNian', 'yearBranchRelationMeaning', 'interactions', 'summary'], 'properties': {'year': {'type': 'number'}, 'animal': {'type': 'string'}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'summary': {'type': 'string'}, 'birthData': {'type': 'object', 'required': ['date', 'time', 'timezone'], 'properties': {'date': {'type': 'string', 'format': 'date'}, 'time': {'type': 'string', 'format': 'time'}, 'latitude': {'type': 'number', 'default': 0, 'maximum': 90, 'minimum': -90}, 'timezone': {'type': 'number'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180}}}, 'benMingNian': {'type': 'boolean'}, 'conventions': {'type': 'object', 'required': ['dayBoundary', 'yearBoundary', 'hourClock'], 'properties': {'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string'}}}, 'annualPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'naYin', 'naYinChinese'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'naYin': {'type': 'string'}, 'branch': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'animal', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'animal': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'animalLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'number': {'type': 'number'}, 'naYinChinese': {'type': 'string'}}}, 'branchTenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'interactions': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'id', 'chinese', 'pinyin', 'quality', 'positions', 'members', 'meaning'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'meaning': {'type': 'string'}, 'members': {'type': 'array', 'items': {'type': 'string'}}, 'quality': {'type': 'string'}, 'variety': {'type': 'string'}, 'complete': {'type': 'boolean'}, 'positions': {'type': 'array', 'items': {'type': 'string'}}, 'transformsTo': {'type': 'string'}}}}, 'animalLocalized': {'type': 'string'}, 'yearBranchRelation': {'type': 'string'}, 'yearBranchRelationMeaning': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{'date': '1990-06-15', 'time': '14:30:00', 'timezone': 'America/New_York'}], 'required': ['date', 'time', 'timezone'], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Birth date in YYYY-MM-DD format. Sets the year, month and day pillars. The year pillar turns at Beginning of Spring rather than on 1 January, and the month pillar turns at each of the twelve minor solar terms rather than at a calendar month boundary.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'time': {'type': 'string', 'format': 'time', 'example': '14:30:00', 'description': 'Birth time in 24-hour HH:MM:SS format. Sets the hour pillar, which is one of the four and carries the whole picture of later life and offspring. Each Earthly Branch covers two hours, so a birth within a few minutes of an odd hour can land in either. All four pillars are read in the local clock of the birth, and the day boundary is applied in that same clock; only the lunisolar calendar date itself is a world constant, fixed at UTC plus 8 so one instant has one Chinese date everywhere.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'latitude': {'type': 'number', 'default': 0, 'example': 0, 'maximum': 90, 'minimum': -90, 'description': 'Birth latitude in decimal degrees. Accepted for consistency with the other birth-data endpoints and does not affect any part of a BaZi chart. Defaults to 0.'}, 'timezone': {'anyOf': [{'type': 'number', 'maximum': 14, 'minimum': -14}, {'type': 'string'}], 'example': 'America/New_York', 'description': 'IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error.'}, 'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string', 'default': 'clock', 'example': 'clock', 'description': 'Which clock the day boundary and the hour branch are read from, so a correction that carries a birth across midnight moves the day pillar with the hour. "clock" is civil time exactly as a birth certificate records it, which is what most calculators use and the default here. "local-mean" shifts to the mean sun over the birth longitude, a correction of up to 59 minutes at the edge of a wide time zone. "solar" adds the equation of time on top of that, up to a further 16 minutes. Both non-civil options need "longitude" in the request and return 400 without it.'}, 'longitude': {'type': 'number', 'example': 116.4, 'maximum': 180, 'minimum': -180, 'description': 'Birth longitude in decimal degrees. Positive is East, negative is West. Required when hourClock is "local-mean" or "solar", which shift the hour branch to the sun over the birth place; omitting it in either case returns 400. Ignored when hourClock is "clock".'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string', 'default': 'split-zi', 'example': 'split-zi', 'description': 'Which instant starts the sexagenary DAY, which only matters for a birth between 23:00 and 23:59. "midnight" is the classical position of the Ming compendium San Ming Tong Hui: the day turns at 00:00 and 23:00 to 23:59 is the late zi hour of the day that is ending, so the hour stem is taken from that day. "early-zi" turns the whole day at 23:00, the practice in Hong Kong, Taiwan and much of South East Asia. "split-zi" is the compromise most software implements and the default here: the day still turns at 00:00, but the hour stem is taken from the next day. The three give three different answers for a late-evening birth and identical answers for every other birth.'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string', 'default': 'li-chun', 'example': 'li-chun', 'description': 'Which instant starts the sexagenary YEAR. "li-chun" is Beginning of Spring, around 4 February, and is the classical rule every BaZi text uses, so it is the default on this endpoint. "lunar-new-year" is the folk rule people mean when they say which animal they are, and it falls between late January and late February. The two disagree for any birth in the weeks between them: 14 February 2026 is a Wood Snake year under lunar-new-year and a Fire Horse year under li-chun.'}}}
Output schema
{'type': 'object', 'required': ['birthData', 'conventions', 'pillars', 'dayMaster', 'zodiacAnimal', 'fiveElements', 'interactions', 'summary'], 'properties': {'pillars': {'type': 'array', 'items': {'type': 'object', 'required': ['position', 'id', 'number', 'stem', 'branch', 'tenGod', 'hiddenStems', 'naYin', 'naYinChinese', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'naYin': {'type': 'string'}, 'branch': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'animal', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'animal': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'animalLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'number': {'type': 'number'}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'position': {'type': 'string'}, 'hiddenStems': {'type': 'array', 'items': {'type': 'object', 'required': ['stem', 'role', 'tenGod'], 'properties': {'role': {'type': 'string'}, 'stem': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}}}}, 'naYinChinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}, 'naYinElementLocalized': {'type': 'string'}}}}, 'summary': {'type': 'string'}, 'birthData': {'type': 'object', 'required': ['date', 'time', 'timezone'], 'properties': {'date': {'type': 'string', 'format': 'date'}, 'time': {'type': 'string', 'format': 'time'}, 'latitude': {'type': 'number', 'default': 0, 'maximum': 90, 'minimum': -90}, 'timezone': {'type': 'number'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180}}}, 'dayMaster': {'type': 'object', 'required': ['stem', 'chinese', 'pinyin', 'element', 'polarity', 'nature'], 'properties': {'stem': {'type': 'string'}, 'nature': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'conventions': {'type': 'object', 'required': ['dayBoundary', 'yearBoundary', 'hourClock'], 'properties': {'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string'}}}, 'fiveElements': {'type': 'array', 'items': {'type': 'object', 'required': ['element', 'count', 'level', 'reading'], 'properties': {'count': {'type': 'number'}, 'level': {'type': 'string'}, 'element': {'type': 'string'}, 'reading': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}}, 'interactions': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'id', 'chinese', 'pinyin', 'quality', 'positions', 'members', 'meaning'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'meaning': {'type': 'string'}, 'members': {'type': 'array', 'items': {'type': 'string'}}, 'quality': {'type': 'string'}, 'variety': {'type': 'string'}, 'complete': {'type': 'boolean'}, 'positions': {'type': 'array', 'items': {'type': 'string'}}, 'transformsTo': {'type': 'string'}}}}, 'zodiacAnimal': {'type': 'string'}, 'zodiacAnimalLocalized': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{'personA': {'date': '1990-06-15', 'time': '14:30:00', 'timezone': 'America/New_York'}, 'personB': {'date': '1990-06-15', 'time': '14:30:00', 'timezone': 'America/New_York'}}], 'required': ['personA', 'personB'], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'personA': {'type': 'object', 'required': ['date', 'time', 'timezone'], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Birth date in YYYY-MM-DD format. Sets the year, month and day pillars. The year pillar turns at Beginning of Spring rather than on 1 January, and the month pillar turns at each of the twelve minor solar terms rather than at a calendar month boundary.'}, 'time': {'type': 'string', 'format': 'time', 'example': '14:30:00', 'description': 'Birth time in 24-hour HH:MM:SS format. Sets the hour pillar, which is one of the four and carries the whole picture of later life and offspring. Each Earthly Branch covers two hours, so a birth within a few minutes of an odd hour can land in either. All four pillars are read in the local clock of the birth, and the day boundary is applied in that same clock; only the lunisolar calendar date itself is a world constant, fixed at UTC plus 8 so one instant has one Chinese date everywhere.'}, 'latitude': {'type': 'number', 'default': 0, 'example': 0, 'maximum': 90, 'minimum': -90, 'description': 'Birth latitude in decimal degrees. Accepted for consistency with the other birth-data endpoints and does not affect any part of a BaZi chart. Defaults to 0.'}, 'timezone': {'anyOf': [{'type': 'number', 'maximum': 14, 'minimum': -14}, {'type': 'string'}], 'example': 'America/New_York', 'description': 'IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error.'}, 'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string', 'default': 'clock', 'example': 'clock', 'description': 'Which clock the day boundary and the hour branch are read from, so a correction that carries a birth across midnight moves the day pillar with the hour. "clock" is civil time exactly as a birth certificate records it, which is what most calculators use and the default here. "local-mean" shifts to the mean sun over the birth longitude, a correction of up to 59 minutes at the edge of a wide time zone. "solar" adds the equation of time on top of that, up to a further 16 minutes. Both non-civil options need "longitude" in the request and return 400 without it.'}, 'longitude': {'type': 'number', 'example': 116.4, 'maximum': 180, 'minimum': -180, 'description': 'Birth longitude in decimal degrees. Positive is East, negative is West. Required when hourClock is "local-mean" or "solar", which shift the hour branch to the sun over the birth place; omitting it in either case returns 400. Ignored when hourClock is "clock".'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string', 'default': 'split-zi', 'example': 'split-zi', 'description': 'Which instant starts the sexagenary DAY, which only matters for a birth between 23:00 and 23:59. "midnight" is the classical position of the Ming compendium San Ming Tong Hui: the day turns at 00:00 and 23:00 to 23:59 is the late zi hour of the day that is ending, so the hour stem is taken from that day. "early-zi" turns the whole day at 23:00, the practice in Hong Kong, Taiwan and much of South East Asia. "split-zi" is the compromise most software implements and the default here: the day still turns at 00:00, but the hour stem is taken from the next day. The three give three different answers for a late-evening birth and identical answers for every other birth.'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string', 'default': 'li-chun', 'example': 'li-chun', 'description': 'Which instant starts the sexagenary YEAR. "li-chun" is Beginning of Spring, around 4 February, and is the classical rule every BaZi text uses, so it is the default on this endpoint. "lunar-new-year" is the folk rule people mean when they say which animal they are, and it falls between late January and late February. The two disagree for any birth in the weeks between them: 14 February 2026 is a Wood Snake year under lunar-new-year and a Fire Horse year under li-chun.'}}, 'description': 'Birth moment of the first person. Each subject carries its own school switches, so two charts built under different conventions can still be compared.'}, 'personB': {'type': 'object', 'required': ['date', 'time', 'timezone'], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Birth date in YYYY-MM-DD format. Sets the year, month and day pillars. The year pillar turns at Beginning of Spring rather than on 1 January, and the month pillar turns at each of the twelve minor solar terms rather than at a calendar month boundary.'}, 'time': {'type': 'string', 'format': 'time', 'example': '14:30:00', 'description': 'Birth time in 24-hour HH:MM:SS format. Sets the hour pillar, which is one of the four and carries the whole picture of later life and offspring. Each Earthly Branch covers two hours, so a birth within a few minutes of an odd hour can land in either. All four pillars are read in the local clock of the birth, and the day boundary is applied in that same clock; only the lunisolar calendar date itself is a world constant, fixed at UTC plus 8 so one instant has one Chinese date everywhere.'}, 'latitude': {'type': 'number', 'default': 0, 'example': 0, 'maximum': 90, 'minimum': -90, 'description': 'Birth latitude in decimal degrees. Accepted for consistency with the other birth-data endpoints and does not affect any part of a BaZi chart. Defaults to 0.'}, 'timezone': {'anyOf': [{'type': 'number', 'maximum': 14, 'minimum': -14}, {'type': 'string'}], 'example': 'America/New_York', 'description': 'IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error.'}, 'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string', 'default': 'clock', 'example': 'clock', 'description': 'Which clock the day boundary and the hour branch are read from, so a correction that carries a birth across midnight moves the day pillar with the hour. "clock" is civil time exactly as a birth certificate records it, which is what most calculators use and the default here. "local-mean" shifts to the mean sun over the birth longitude, a correction of up to 59 minutes at the edge of a wide time zone. "solar" adds the equation of time on top of that, up to a further 16 minutes. Both non-civil options need "longitude" in the request and return 400 without it.'}, 'longitude': {'type': 'number', 'example': 116.4, 'maximum': 180, 'minimum': -180, 'description': 'Birth longitude in decimal degrees. Positive is East, negative is West. Required when hourClock is "local-mean" or "solar", which shift the hour branch to the sun over the birth place; omitting it in either case returns 400. Ignored when hourClock is "clock".'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string', 'default': 'split-zi', 'example': 'split-zi', 'description': 'Which instant starts the sexagenary DAY, which only matters for a birth between 23:00 and 23:59. "midnight" is the classical position of the Ming compendium San Ming Tong Hui: the day turns at 00:00 and 23:00 to 23:59 is the late zi hour of the day that is ending, so the hour stem is taken from that day. "early-zi" turns the whole day at 23:00, the practice in Hong Kong, Taiwan and much of South East Asia. "split-zi" is the compromise most software implements and the default here: the day still turns at 00:00, but the hour stem is taken from the next day. The three give three different answers for a late-evening birth and identical answers for every other birth.'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string', 'default': 'li-chun', 'example': 'li-chun', 'description': 'Which instant starts the sexagenary YEAR. "li-chun" is Beginning of Spring, around 4 February, and is the classical rule every BaZi text uses, so it is the default on this endpoint. "lunar-new-year" is the folk rule people mean when they say which animal they are, and it falls between late January and late February. The two disagree for any birth in the weeks between them: 14 February 2026 is a Wood Snake year under lunar-new-year and a Fire Horse year under li-chun.'}}, 'description': 'Birth moment of the second person.'}}}
Output schema
{'type': 'object', 'required': ['personA', 'personB', 'dayMasterRelation', 'interactions', 'score', 'harmoniousCount', 'challengingCount', 'summary'], 'properties': {'score': {'type': 'number'}, 'personA': {'type': 'object', 'required': ['pillars', 'dayMaster', 'strength', 'conventions'], 'properties': {'pillars': {'type': 'array', 'items': {'type': 'object', 'required': ['position', 'id', 'number', 'stem', 'branch', 'tenGod', 'hiddenStems', 'naYin', 'naYinChinese', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'naYin': {'type': 'string'}, 'branch': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'animal', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'animal': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'animalLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'number': {'type': 'number'}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'position': {'type': 'string'}, 'hiddenStems': {'type': 'array', 'items': {'type': 'object', 'required': ['stem', 'role', 'tenGod'], 'properties': {'role': {'type': 'string'}, 'stem': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}}}}, 'naYinChinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}, 'naYinElementLocalized': {'type': 'string'}}}}, 'strength': {'type': 'string'}, 'dayMaster': {'type': 'object', 'required': ['stem', 'chinese', 'pinyin', 'element', 'polarity', 'nature'], 'properties': {'stem': {'type': 'string'}, 'nature': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'conventions': {'type': 'object', 'required': ['dayBoundary', 'yearBoundary', 'hourClock'], 'properties': {'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string'}}}}}, 'personB': {'type': 'object', 'required': ['pillars', 'dayMaster', 'strength', 'conventions'], 'properties': {'pillars': {'type': 'array', 'items': {'type': 'object', 'required': ['position', 'id', 'number', 'stem', 'branch', 'tenGod', 'hiddenStems', 'naYin', 'naYinChinese', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'naYin': {'type': 'string'}, 'branch': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'animal', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'animal': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'animalLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'number': {'type': 'number'}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'position': {'type': 'string'}, 'hiddenStems': {'type': 'array', 'items': {'type': 'object', 'required': ['stem', 'role', 'tenGod'], 'properties': {'role': {'type': 'string'}, 'stem': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}}}}, 'naYinChinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}, 'naYinElementLocalized': {'type': 'string'}}}}, 'strength': {'type': 'string'}, 'dayMaster': {'type': 'object', 'required': ['stem', 'chinese', 'pinyin', 'element', 'polarity', 'nature'], 'properties': {'stem': {'type': 'string'}, 'nature': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'conventions': {'type': 'object', 'required': ['dayBoundary', 'yearBoundary', 'hourClock'], 'properties': {'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string'}}}}}, 'summary': {'type': 'string'}, 'interactions': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'id', 'chinese', 'pinyin', 'quality', 'positions', 'members', 'meaning'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'meaning': {'type': 'string'}, 'members': {'type': 'array', 'items': {'type': 'string'}}, 'quality': {'type': 'string'}, 'variety': {'type': 'string'}, 'complete': {'type': 'boolean'}, 'positions': {'type': 'array', 'items': {'type': 'string'}}, 'transformsTo': {'type': 'string'}}}}, 'harmoniousCount': {'type': 'number'}, 'challengingCount': {'type': 'number'}, 'dayMasterRelation': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{'date': '1990-06-15', 'time': '14:30:00', 'timezone': 'America/New_York'}], 'required': ['date', 'time', 'timezone'], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Birth date in YYYY-MM-DD format. Sets the year, month and day pillars. The year pillar turns at Beginning of Spring rather than on 1 January, and the month pillar turns at each of the twelve minor solar terms rather than at a calendar month boundary.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'time': {'type': 'string', 'format': 'time', 'example': '14:30:00', 'description': 'Birth time in 24-hour HH:MM:SS format. Sets the hour pillar, which is one of the four and carries the whole picture of later life and offspring. Each Earthly Branch covers two hours, so a birth within a few minutes of an odd hour can land in either. All four pillars are read in the local clock of the birth, and the day boundary is applied in that same clock; only the lunisolar calendar date itself is a world constant, fixed at UTC plus 8 so one instant has one Chinese date everywhere.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'latitude': {'type': 'number', 'default': 0, 'example': 0, 'maximum': 90, 'minimum': -90, 'description': 'Birth latitude in decimal degrees. Accepted for consistency with the other birth-data endpoints and does not affect any part of a BaZi chart. Defaults to 0.'}, 'timezone': {'anyOf': [{'type': 'number', 'maximum': 14, 'minimum': -14}, {'type': 'string'}], 'example': 'America/New_York', 'description': 'IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error.'}, 'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string', 'default': 'clock', 'example': 'clock', 'description': 'Which clock the day boundary and the hour branch are read from, so a correction that carries a birth across midnight moves the day pillar with the hour. "clock" is civil time exactly as a birth certificate records it, which is what most calculators use and the default here. "local-mean" shifts to the mean sun over the birth longitude, a correction of up to 59 minutes at the edge of a wide time zone. "solar" adds the equation of time on top of that, up to a further 16 minutes. Both non-civil options need "longitude" in the request and return 400 without it.'}, 'longitude': {'type': 'number', 'example': 116.4, 'maximum': 180, 'minimum': -180, 'description': 'Birth longitude in decimal degrees. Positive is East, negative is West. Required when hourClock is "local-mean" or "solar", which shift the hour branch to the sun over the birth place; omitting it in either case returns 400. Ignored when hourClock is "clock".'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string', 'default': 'split-zi', 'example': 'split-zi', 'description': 'Which instant starts the sexagenary DAY, which only matters for a birth between 23:00 and 23:59. "midnight" is the classical position of the Ming compendium San Ming Tong Hui: the day turns at 00:00 and 23:00 to 23:59 is the late zi hour of the day that is ending, so the hour stem is taken from that day. "early-zi" turns the whole day at 23:00, the practice in Hong Kong, Taiwan and much of South East Asia. "split-zi" is the compromise most software implements and the default here: the day still turns at 00:00, but the hour stem is taken from the next day. The three give three different answers for a late-evening birth and identical answers for every other birth.'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string', 'default': 'li-chun', 'example': 'li-chun', 'description': 'Which instant starts the sexagenary YEAR. "li-chun" is Beginning of Spring, around 4 February, and is the classical rule every BaZi text uses, so it is the default on this endpoint. "lunar-new-year" is the folk rule people mean when they say which animal they are, and it falls between late January and late February. The two disagree for any birth in the weeks between them: 14 February 2026 is a Wood Snake year under lunar-new-year and a Fire Horse year under li-chun.'}}}
Output schema
{'type': 'object', 'required': ['birthData', 'conventions', 'dayMaster', 'verdict', 'score', 'seasonalState', 'seasonalStateChinese', 'seasonalStateMeaning', 'rootCount', 'factors', 'favorableElements', 'unfavorableElements', 'fiveElements', 'summary'], 'properties': {'score': {'type': 'number'}, 'factors': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'contribution', 'detail'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'detail': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'contribution': {'type': 'number'}}}}, 'summary': {'type': 'string'}, 'verdict': {'type': 'string'}, 'birthData': {'type': 'object', 'required': ['date', 'time', 'timezone'], 'properties': {'date': {'type': 'string', 'format': 'date'}, 'time': {'type': 'string', 'format': 'time'}, 'latitude': {'type': 'number', 'default': 0, 'maximum': 90, 'minimum': -90}, 'timezone': {'type': 'number'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180}}}, 'dayMaster': {'type': 'object', 'required': ['stem', 'chinese', 'pinyin', 'element', 'polarity', 'nature'], 'properties': {'stem': {'type': 'string'}, 'nature': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'rootCount': {'type': 'number'}, 'conventions': {'type': 'object', 'required': ['dayBoundary', 'yearBoundary', 'hourClock'], 'properties': {'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string'}}}, 'fiveElements': {'type': 'array', 'items': {'type': 'object', 'required': ['element', 'count', 'level', 'reading'], 'properties': {'count': {'type': 'number'}, 'level': {'type': 'string'}, 'element': {'type': 'string'}, 'reading': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}}, 'seasonalState': {'type': 'string'}, 'favorableElements': {'type': 'array', 'items': {'type': 'string'}}, 'unfavorableElements': {'type': 'array', 'items': {'type': 'string'}}, 'seasonalStateChinese': {'type': 'string'}, 'seasonalStateMeaning': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{'date': '1990-06-15', 'time': '14:30:00', 'gender': 'male', 'timezone': 'America/New_York'}], 'required': ['date', 'time', 'timezone', 'gender'], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Birth date in YYYY-MM-DD format. Sets the year, month and day pillars. The year pillar turns at Beginning of Spring rather than on 1 January, and the month pillar turns at each of the twelve minor solar terms rather than at a calendar month boundary.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'time': {'type': 'string', 'format': 'time', 'example': '14:30:00', 'description': 'Birth time in 24-hour HH:MM:SS format. Sets the hour pillar, which is one of the four and carries the whole picture of later life and offspring. Each Earthly Branch covers two hours, so a birth within a few minutes of an odd hour can land in either. All four pillars are read in the local clock of the birth, and the day boundary is applied in that same clock; only the lunisolar calendar date itself is a world constant, fixed at UTC plus 8 so one instant has one Chinese date everywhere.'}, 'count': {'type': 'integer', 'default': 8, 'example': 8, 'maximum': 12, 'minimum': 1, 'description': 'How many ten-year luck pillars to return, 1 to 12. Eight covers eighty years from the start age, which reaches past a normal lifetime for most start ages.'}, 'gender': {'enum': ['male', 'female'], 'type': 'string', 'example': 'male', 'description': 'Subject sex, used only to pick the luck-pillar direction: a male born in a yang-stem year and a female born in a yin-stem year run forward through the sexagenary cycle, and the other two combinations run backward. It affects nothing else in the response.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'latitude': {'type': 'number', 'default': 0, 'example': 0, 'maximum': 90, 'minimum': -90, 'description': 'Birth latitude in decimal degrees. Accepted for consistency with the other birth-data endpoints and does not affect any part of a BaZi chart. Defaults to 0.'}, 'timezone': {'anyOf': [{'type': 'number', 'maximum': 14, 'minimum': -14}, {'type': 'string'}], 'example': 'America/New_York', 'description': 'IANA name (e.g. "America/New_York", "Europe/London", "UTC"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00", "+01:00"). Prefer the IANA name: it is resolved to the offset in force at the birth date and time, historical daylight-saving rules included, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state at that moment. On a transition day a time in the repeated hour is read as its first occurrence and a time in the skipped hour is moved forward past the gap. Invalid timezones return 400 with a validation error.'}, 'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string', 'default': 'clock', 'example': 'clock', 'description': 'Which clock the day boundary and the hour branch are read from, so a correction that carries a birth across midnight moves the day pillar with the hour. "clock" is civil time exactly as a birth certificate records it, which is what most calculators use and the default here. "local-mean" shifts to the mean sun over the birth longitude, a correction of up to 59 minutes at the edge of a wide time zone. "solar" adds the equation of time on top of that, up to a further 16 minutes. Both non-civil options need "longitude" in the request and return 400 without it.'}, 'longitude': {'type': 'number', 'example': 116.4, 'maximum': 180, 'minimum': -180, 'description': 'Birth longitude in decimal degrees. Positive is East, negative is West. Required when hourClock is "local-mean" or "solar", which shift the hour branch to the sun over the birth place; omitting it in either case returns 400. Ignored when hourClock is "clock".'}, 'annualYears': {'type': 'integer', 'default': 10, 'example': 10, 'maximum': 20, 'minimum': 1, 'description': 'How many consecutive years the annual overlay covers, 1 to 20. Ignored unless annualFromYear is present.'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string', 'default': 'split-zi', 'example': 'split-zi', 'description': 'Which instant starts the sexagenary DAY, which only matters for a birth between 23:00 and 23:59. "midnight" is the classical position of the Ming compendium San Ming Tong Hui: the day turns at 00:00 and 23:00 to 23:59 is the late zi hour of the day that is ending, so the hour stem is taken from that day. "early-zi" turns the whole day at 23:00, the practice in Hong Kong, Taiwan and much of South East Asia. "split-zi" is the compromise most software implements and the default here: the day still turns at 00:00, but the hour stem is taken from the next day. The three give three different answers for a late-evening birth and identical answers for every other birth.'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string', 'default': 'li-chun', 'example': 'li-chun', 'description': 'Which instant starts the sexagenary YEAR. "li-chun" is Beginning of Spring, around 4 February, and is the classical rule every BaZi text uses, so it is the default on this endpoint. "lunar-new-year" is the folk rule people mean when they say which animal they are, and it falls between late January and late February. The two disagree for any birth in the weeks between them: 14 February 2026 is a Wood Snake year under lunar-new-year and a Fire Horse year under li-chun.'}, 'annualFromYear': {'type': 'integer', 'example': 2026, 'maximum': 2649, 'minimum': 1551, 'description': 'First Gregorian year of the annual pillar overlay. Omit it to leave annualPillars out of the response entirely. The annual pillar is the year the chart is currently walking through, read against the ten-year luck pillar underneath it.'}}}
Output schema
{'type': 'object', 'required': ['birthData', 'conventions', 'gender', 'direction', 'startAge', 'startAgeMonths', 'daysToTerm', 'boundaryTerm', 'boundaryTermName', 'luckPillars', 'summary'], 'properties': {'gender': {'type': 'string'}, 'summary': {'type': 'string'}, 'startAge': {'type': 'number'}, 'birthData': {'type': 'object', 'required': ['date', 'time', 'timezone'], 'properties': {'date': {'type': 'string', 'format': 'date'}, 'time': {'type': 'string', 'format': 'time'}, 'latitude': {'type': 'number', 'default': 0, 'maximum': 90, 'minimum': -90}, 'timezone': {'type': 'number'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180}}}, 'direction': {'type': 'string'}, 'daysToTerm': {'type': 'number'}, 'conventions': {'type': 'object', 'required': ['dayBoundary', 'yearBoundary', 'hourClock'], 'properties': {'hourClock': {'enum': ['clock', 'local-mean', 'solar'], 'type': 'string'}, 'dayBoundary': {'enum': ['split-zi', 'midnight', 'early-zi'], 'type': 'string'}, 'yearBoundary': {'enum': ['li-chun', 'lunar-new-year'], 'type': 'string'}}}, 'luckPillars': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'id', 'number', 'stem', 'branch', 'tenGod', 'startAge', 'endAge', 'startYear', 'endYear'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'index': {'type': 'number'}, 'branch': {'type': 'object', 'required': ['id', 'chinese', 'pinyin', 'animal', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'animal': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'animalLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'endAge': {'type': 'number'}, 'number': {'type': 'number'}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'endYear': {'type': 'number'}, 'startAge': {'type': 'number'}, 'startYear': {'type': 'number'}}}}, 'boundaryTerm': {'type': 'string'}, 'annualPillars': {'type': 'array', 'items': {'type': 'object', 'required': ['year', 'id', 'number', 'tenGod', 'luckPillarIndex'], 'properties': {'id': {'type': 'string'}, 'year': {'type': 'number'}, 'number': {'type': 'number'}, 'tenGod': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'category', 'keynote'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'keynote': {'type': 'string'}, 'category': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'luckPillarIndex': {'type': 'number'}}}}, 'startAgeMonths': {'type': 'number'}, 'boundaryTermName': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{'endDate': '2026-04-30', 'activity': 'wedding', 'startDate': '2026-03-01'}], 'required': ['activity', 'startDate', 'endDate'], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'endDate': {'type': 'string', 'format': 'date', 'example': '2026-04-30', 'description': 'Last date of the range to search, inclusive. The range may not exceed 93 days.'}, 'activity': {'enum': ['wedding', 'travel', 'moving-house', 'opening-business', 'signing-contracts', 'construction', 'groundbreaking', 'burial', 'medical-treatment', 'praying'], 'type': 'string', 'example': 'wedding', 'description': 'Activity to choose a date for. One of wedding, travel, moving-house, opening-business, signing-contracts, construction, groundbreaking, burial, medical-treatment, praying. Matching folds case and punctuation, so moving-house and MOVING_HOUSE both resolve.'}, 'startDate': {'type': 'string', 'format': 'date', 'example': '2026-03-01', 'description': 'First date of the range to search, inclusive.'}, 'avoidAnimal': {'enum': ['rat', 'ox', 'tiger', 'rabbit', 'dragon', 'snake', 'horse', 'goat', 'monkey', 'rooster', 'dog', 'pig'], 'type': 'string', 'example': 'rat', 'description': 'Zodiac animal to protect. Days that clash with this animal are dropped from the results, which is how a date is chosen around the people attending rather than in the abstract. One of rat, ox, tiger, rabbit, dragon, snake, horse, goat, monkey, rooster, dog, pig.'}}}
Output schema
{'type': 'object', 'required': ['activity', 'activityLabel', 'startDate', 'endDate', 'daysSearched', 'total', 'days'], 'properties': {'days': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'lunar', 'yearPillar', 'monthPillar', 'dayPillar', 'dayOfficer', 'mansion', 'clashAnimal', 'favours', 'avoids'], 'properties': {'date': {'type': 'string'}, 'lunar': {'type': 'object', 'required': ['year', 'month', 'day', 'isLeapMonth', 'monthLength', 'date'], 'properties': {'day': {'type': 'number'}, 'date': {'type': 'string'}, 'year': {'type': 'number'}, 'month': {'type': 'number'}, 'isLeapMonth': {'type': 'boolean'}, 'monthLength': {'type': 'number'}}}, 'avoids': {'type': 'array', 'items': {'type': 'string'}}, 'favours': {'type': 'array', 'items': {'type': 'string'}}, 'mansion': {'type': 'object', 'required': ['number', 'name', 'chinese', 'pinyin', 'palace', 'planet', 'animal'], 'properties': {'name': {'type': 'string'}, 'animal': {'type': 'string'}, 'number': {'type': 'number'}, 'palace': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'planet': {'type': 'string'}, 'chinese': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'animalLocalized': {'type': 'string'}}}, 'dayPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'dayOfficer': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'quality', 'meaning'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'meaning': {'type': 'string'}, 'quality': {'type': 'string'}, 'nameLocalized': {'type': 'string'}}}, 'yearPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'clashAnimal': {'type': 'string'}, 'monthPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch', 'chinese', 'naYin', 'naYinElement'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'naYin': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}, 'chinese': {'type': 'string'}, 'naYinElement': {'type': 'string'}}}, 'clashAnimalLocalized': {'type': 'string'}}}}, 'total': {'type': 'number'}, 'endDate': {'type': 'string'}, 'activity': {'type': 'string'}, 'startDate': {'type': 'string'}, 'avoidAnimal': {'type': 'string'}, 'daysSearched': {'type': 'number'}, 'activityLabel': {'type': 'string'}, 'avoidAnimalLocalized': {'type': 'string'}}}
Input schema
{'type': 'object', 'examples': [{}], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Gregorian date to convert to the lunisolar calendar. Send this OR the lunar fields, never both. Converts from the first day of lunar year 1551 to the last day of lunar year 2648, a little inside the supported date span, because numbering a lunar month needs the winter solstice on each side of it and placing a leap month needs the year before; a date outside that answers 400 date_out_of_range.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'lunarDay': {'type': 'integer', 'example': 23, 'maximum': 30, 'minimum': 1, 'description': 'Day of the lunar month, 1 to 30. Requires lunarYear and lunarMonth.'}, 'lunarYear': {'type': 'integer', 'example': 1990, 'maximum': 2100, 'minimum': 1900, 'description': 'Lunisolar year to convert back to a Gregorian date. Requires lunarMonth and lunarDay.'}, 'lunarMonth': {'type': 'integer', 'example': 5, 'maximum': 12, 'minimum': 1, 'description': 'Lunar month, 1 to 12. Requires lunarYear and lunarDay.'}, 'isLeapMonth': {'type': 'boolean', 'default': False, 'example': False, 'description': 'Set true to address the leap repetition of lunarMonth rather than the first pass. Requesting a leap month a year does not have returns 400.'}}}
Output schema
{'type': 'object', 'required': ['gregorianDate', 'lunar', 'referenceOffset'], 'properties': {'lunar': {'type': 'object', 'required': ['year', 'month', 'day', 'isLeapMonth', 'monthLength', 'date'], 'properties': {'day': {'type': 'number'}, 'date': {'type': 'string'}, 'year': {'type': 'number'}, 'month': {'type': 'number'}, 'isLeapMonth': {'type': 'boolean'}, 'monthLength': {'type': 'number'}}}, 'gregorianDate': {'type': 'string'}, 'leapMonthOfYear': {'type': 'number'}, 'referenceOffset': {'type': 'number'}}}
Input schema
{'type': 'object', 'examples': [{'date': '1990-06-15'}], 'required': ['date'], 'properties': {'date': {'type': 'string', 'format': 'date', 'example': '1990-06-15', 'description': 'Birth date in YYYY-MM-DD format. Only the date is needed: the zodiac animal is a property of the year, so no time, timezone or place changes the answer.'}, 'lang': {'enum': ['en', 'tr', 'de', 'es', 'hi', 'pt', 'fr', 'ru', 'zh-Hans', 'zh-Hant'], 'type': 'string', 'default': 'en', 'example': 'en', 'description': 'Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.'}, 'yearBoundary': {'enum': ['lunar-new-year', 'li-chun'], 'type': 'string', 'default': 'lunar-new-year', 'example': 'lunar-new-year', 'description': 'Which instant starts the zodiac year. lunar-new-year is the folk rule and the default on this route, because it is the rule people mean when they say what animal they are: the sign turns on Chinese New Year, between late January and late February. li-chun is the classical rule every Four Pillars text uses, turning the year at the solar term Beginning of Spring around 4 February. The two agree for roughly eleven months of every year and disagree for the weeks between them, so a 14 February 2026 birth is a Snake under lunar-new-year and a Horse under li-chun. The BaZi routes default to li-chun instead, because a chart and a folk sign are answering different questions.'}}}
Output schema
{'type': 'object', 'required': ['date', 'animal', 'yearPillar', 'element', 'polarity', 'interpretation', 'conventions'], 'properties': {'date': {'type': 'string'}, 'animal': {'type': 'object', 'required': ['id', 'name', 'chinese', 'pinyin', 'branch', 'element', 'polarity'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'branch': {'type': 'string'}, 'pinyin': {'type': 'string'}, 'chinese': {'type': 'string'}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'nameLocalized': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}, 'element': {'type': 'string'}, 'polarity': {'type': 'string'}, 'yearPillar': {'type': 'object', 'required': ['id', 'number', 'stem', 'branch'], 'properties': {'id': {'type': 'string'}, 'stem': {'type': 'string'}, 'branch': {'type': 'string'}, 'number': {'type': 'number'}}}, 'conventions': {'type': 'object', 'required': ['yearBoundary'], 'properties': {'yearBoundary': {'type': 'string'}}}, 'interpretation': {'type': 'string'}, 'elementLocalized': {'type': 'string'}}}
Recent tool changes
Similar MCP servers
Asterwise
Provides Vedic and Western astrology, numerology, tarot, dream-symbol, crystal, compatibility, and related esoteric calculations …
Vedic Astrology and Kundli MCP Server by RoxyAPI
Calculates and explains Vedic astrology charts, planetary positions, dashas, nakshatras, yogas, doshas, aspects, compatibility, a…
Sahadeva
Calculates and analyzes Vedic astrology charts, compatibility, dashas, transits, yogas, remedies, and evidence or readiness check…
tollbooth-sample
Provides current, forecast, and historical weather data alongside Lightning-based usage credits, pricing, coupons, balances, and …
Thesportsdb
Provides sports catalog and match data, including teams, players, leagues, schedules, standings, lineups, timelines, scores, and …
Rescuegroups
Searches adoptable animals, breeds, rescues, shelters, and organization details from RescueGroups.org.
Recipes
Provides meal and recipe discovery by ingredient, random selection, and detailed cooking instructions.
F1
Provides Formula 1 schedules, race results, driver profiles, and current championship standings.